mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-10-26 10:57:38 +08:00
This is essentially a port of commit 550ccb178d ("Make 'cc-option'
work correctly for the -Wno-xyzzy pattern") to scripts/Kconfig.include,
which simplifies the definition of many of the newly added CC_OPT_WNO_
symbols in scripts/Kconfig.toolchain and matches cc-option's behavior in
Kbuild.
Reviewed-by: Nicolas Schier <nsc@kernel.org>
Reviewed-by: Kees Cook <kees@kernel.org>
Link: https://patch.msgid.link/20261007-scripts-kconfig-toolchain-improvements-v1-2-1e524178da11@kernel.org
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
273 lines
8.4 KiB
Plaintext
273 lines
8.4 KiB
Plaintext
# SPDX-License-Identifier: GPL-2.0-only
|
|
config CC_VERSION_TEXT
|
|
string
|
|
default "$(CC_VERSION_TEXT)"
|
|
help
|
|
This is used in unclear ways:
|
|
|
|
- Re-run Kconfig when the compiler is updated
|
|
The 'default' property references the environment variable,
|
|
CC_VERSION_TEXT so it is recorded in include/config/auto.conf.cmd.
|
|
When the compiler is updated, Kconfig will be invoked.
|
|
|
|
- Ensure full rebuild when the compiler is updated
|
|
include/linux/compiler-version.h contains this option in the comment
|
|
line so fixdep adds include/config/CC_VERSION_TEXT into the
|
|
auto-generated dependency. When the compiler is updated, syncconfig
|
|
will touch it and then every file will be rebuilt.
|
|
|
|
config CC_IS_GCC
|
|
def_bool $(success,test "$(cc-name)" = GCC)
|
|
|
|
config GCC_VERSION
|
|
int
|
|
default $(cc-version) if CC_IS_GCC
|
|
default 0
|
|
|
|
config CC_IS_CLANG
|
|
def_bool $(success,test "$(cc-name)" = Clang)
|
|
|
|
config CLANG_VERSION
|
|
int
|
|
default $(cc-version) if CC_IS_CLANG
|
|
default 0
|
|
|
|
config AS_IS_GNU
|
|
def_bool $(success,test "$(as-name)" = GNU)
|
|
|
|
config AS_IS_LLVM
|
|
def_bool $(success,test "$(as-name)" = LLVM)
|
|
|
|
config AS_VERSION
|
|
int
|
|
# Use clang version if this is the integrated assembler
|
|
default CLANG_VERSION if AS_IS_LLVM
|
|
default $(as-version)
|
|
|
|
config LD_IS_BFD
|
|
def_bool $(success,test "$(ld-name)" = BFD)
|
|
|
|
config LD_VERSION
|
|
int
|
|
default $(ld-version) if LD_IS_BFD
|
|
default 0
|
|
|
|
config LD_IS_LLD
|
|
def_bool $(success,test "$(ld-name)" = LLD)
|
|
|
|
config LLD_VERSION
|
|
int
|
|
default $(ld-version) if LD_IS_LLD
|
|
default 0
|
|
|
|
config RUSTC_VERSION
|
|
int
|
|
default $(rustc-version)
|
|
help
|
|
It does not depend on `RUST` since that one may need to use the version
|
|
in a `depends on`.
|
|
|
|
config RUST_IS_AVAILABLE
|
|
def_bool $(success,$(srctree)/scripts/rust_is_available.sh)
|
|
help
|
|
This shows whether a suitable Rust toolchain is available (found).
|
|
|
|
Please see Documentation/rust/quick-start.rst for instructions on how
|
|
to satisfy the build requirements of Rust support.
|
|
|
|
In particular, the Makefile target 'rustavailable' is useful to check
|
|
why the Rust toolchain is not being detected.
|
|
|
|
config RUSTC_LLVM_VERSION
|
|
int
|
|
default $(rustc-llvm-version)
|
|
|
|
config RUSTC_LLVM_MAJOR_VERSION
|
|
int
|
|
default $(shell,expr $(rustc-llvm-version) / 10000)
|
|
|
|
config RUSTC_CLANG_LLVM_COMPATIBLE
|
|
bool
|
|
default y if CC_IS_CLANG && RUSTC_LLVM_MAJOR_VERSION = $(shell,expr $(cc-version) / 10000)
|
|
help
|
|
This indicates whether Rust and Clang use LLVM of the same major
|
|
version.
|
|
|
|
Operations involving handling LLVM IR or bitcode (e.g. cross-language
|
|
LTO) require the same LLVM major version to work properly. For best
|
|
compatibility it is recommended that the exact same LLVM is used.
|
|
|
|
config ARCH_HAS_CC_CAN_LINK
|
|
bool
|
|
|
|
config CC_CAN_LINK
|
|
bool
|
|
default ARCH_CC_CAN_LINK if ARCH_HAS_CC_CAN_LINK
|
|
default $(cc_can_link_user,$(m64-flag)) if 64BIT
|
|
default $(cc_can_link_user,$(m32-flag))
|
|
|
|
# Fixed in GCC 14, 13.3, 12.4 and 11.5
|
|
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113921
|
|
config GCC_ASM_GOTO_OUTPUT_BROKEN
|
|
bool
|
|
depends on CC_IS_GCC
|
|
default y if GCC_VERSION < 110500
|
|
default y if GCC_VERSION >= 120000 && GCC_VERSION < 120400
|
|
default y if GCC_VERSION >= 130000 && GCC_VERSION < 130300
|
|
|
|
config CC_HAS_ASM_GOTO_OUTPUT
|
|
def_bool y
|
|
depends on !GCC_ASM_GOTO_OUTPUT_BROKEN
|
|
depends on $(success,echo 'int foo(int x) { asm goto ("": "=r"(x) ::: bar); return x; bar: return 0; }' | $(CC) -x c - -c -o /dev/null)
|
|
|
|
config CC_HAS_ASM_GOTO_TIED_OUTPUT
|
|
depends on CC_HAS_ASM_GOTO_OUTPUT
|
|
# Detect buggy gcc and clang, fixed in gcc-11 clang-14.
|
|
def_bool $(success,echo 'int foo(int *x) { asm goto (".long (%l[bar]) - .": "+m"(*x) ::: bar); return *x; bar: return 0; }' | $CC -x c - -c -o /dev/null)
|
|
|
|
config TOOLS_SUPPORT_RELR
|
|
def_bool $(success,env "CC=$(CC)" "LD=$(LD)" "NM=$(NM)" "OBJCOPY=$(OBJCOPY)" $(srctree)/scripts/tools-support-relr.sh)
|
|
|
|
config CC_HAS_ASM_INLINE
|
|
def_bool $(success,echo 'void foo(void) { asm inline (""); }' | $(CC) -x c - -c -o /dev/null)
|
|
|
|
config CC_HAS_ASSUME
|
|
bool
|
|
# clang needs to be at least 19.1.0 since the meaning of the assume
|
|
# attribute changed:
|
|
# https://github.com/llvm/llvm-project/commit/c44fa3e8a9a44c2e9a575768a3c185354b9f6c17
|
|
default y if CC_IS_CLANG && CLANG_VERSION >= 190100
|
|
# supported since gcc 13.1.0
|
|
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106654
|
|
default y if CC_IS_GCC && GCC_VERSION >= 130100
|
|
|
|
config CC_HAS_NO_PROFILE_FN_ATTR
|
|
def_bool $(success,echo '__attribute__((no_profile_instrument_function)) int x();' | $(CC) -x c - -c -o /dev/null -Werror)
|
|
|
|
config CC_OPT_ZERO_INIT_PADDING_BITS
|
|
def_string "$(cc-option-str,-fzero-init-padding-bits=all)"
|
|
|
|
config CC_OPT_NO_ADDRSIG
|
|
def_string "$(cc-option-str,-fno-addrsig)"
|
|
|
|
config CC_OPT_DIAGNOSTICS_SHOW_CONTEXT
|
|
def_string "$(cc-option-str,-fdiagnostics-show-context=2)"
|
|
|
|
config CC_OPT_DIAGNOSTICS_SHOW_INLINING_CHAIN
|
|
def_string "$(cc-option-str,-fdiagnostics-show-inlining-chain)"
|
|
|
|
config CC_OPT_STRICT_FLEX_ARRAYS
|
|
def_string "$(cc-option-str,-fstrict-flex-arrays=3)"
|
|
|
|
# gcc-10 renamed --param=allow-store-data-races=0 to -fno-allow-store-data-races
|
|
config CC_OPT_ALLOW_STORE_DATA_RACES_PARAM
|
|
def_string "$(cc-option-str,--param=allow-store-data-races=0)"
|
|
|
|
config CC_OPT_NO_ALLOW_STORE_DATA_RACES
|
|
def_string "$(cc-option-str,-fno-allow-store-data-races)"
|
|
|
|
config CC_HAS_MNOP_MCOUNT
|
|
def_bool $(cc-option,-mnop-mcount)
|
|
|
|
# s390-linux-gnu-gcc did not support -mfentry until gcc-9.
|
|
config CC_HAS_MFENTRY
|
|
def_bool $(cc-option,-mfentry)
|
|
|
|
config LD_OPT_FORCE_GROUP_ALLOCATION
|
|
def_string "$(ld-option-str,--force-group-allocation)"
|
|
|
|
config LD_OPT_NO_WARN_RWX_SEGMENTS
|
|
def_string "$(ld-option-str,--no-warn-rwx-segments)"
|
|
|
|
config CC_OPT_WNO_ADDRESS_OF_PACKED_MEMBER
|
|
def_string "$(cc-option-str,-Wno-address-of-packed-member)"
|
|
|
|
config CC_OPT_WNO_FORMAT_OVERFLOW_NON_KPRINTF
|
|
def_string "$(cc-option-str,-Wno-format-overflow-non-kprintf)"
|
|
|
|
config CC_OPT_WNO_FORMAT_TRUNCATION_NON_KPRINTF
|
|
def_string "$(cc-option-str,-Wno-format-truncation-non-kprintf)"
|
|
|
|
config CC_OPT_WNO_DEFAULT_CONST_INIT_UNSAFE
|
|
def_string "$(cc-option-str,-Wno-default-const-init-unsafe)"
|
|
|
|
config CC_OPT_WNO_DANGLING_POINTER
|
|
def_string "$(cc-option-str,-Wno-dangling-pointer)"
|
|
|
|
config CC_OPT_WVLA_LARGER_THAN
|
|
def_string "$(cc-option-str,-Wvla-larger-than=1)"
|
|
|
|
config CC_HAS_WSTRINGOP_OVERFLOW
|
|
def_bool $(cc-option,-Wstringop-overflow)
|
|
|
|
config CC_OPT_WNO_UNTERMINATED_STRING_INITIALIZATION
|
|
def_string "$(cc-option-str,-Wno-unterminated-string-initialization)"
|
|
|
|
config CC_OPT_WERROR_DESIGNATED_INIT
|
|
def_string "$(cc-option-str,-Werror=designated-init)"
|
|
|
|
config CC_OPT_WENUM_CONVERSION
|
|
def_string "$(cc-option-str,-Wenum-conversion)"
|
|
|
|
config CC_OPT_WNO_PACKED_NOT_ALIGNED
|
|
def_string "$(cc-option-str,-Wno-packed-not-aligned)"
|
|
|
|
config CC_OPT_WNO_FORMAT_OVERFLOW
|
|
def_string "$(cc-option-str,-Wno-format-overflow)"
|
|
|
|
config CC_OPT_WNO_STRINGOP_TRUNCATION
|
|
def_string "$(cc-option-str,-Wno-stringop-truncation)"
|
|
|
|
config CC_HAS_COUNTED_BY
|
|
bool
|
|
# clang needs to be at least 20.1.0 to avoid potential crashes
|
|
# when building structures that contain __counted_by
|
|
# https://github.com/ClangBuiltLinux/linux/issues/2114
|
|
# https://github.com/llvm/llvm-project/commit/160fb1121cdf703c3ef5e61fb26c5659eb581489
|
|
default y if CC_IS_CLANG && CLANG_VERSION >= 200100
|
|
# supported since gcc 15.1.0
|
|
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108896
|
|
default y if CC_IS_GCC && GCC_VERSION >= 150100
|
|
|
|
config CC_HAS_COUNTED_BY_PTR
|
|
bool
|
|
# supported since clang 22
|
|
default y if CC_IS_CLANG && CLANG_VERSION >= 220100
|
|
# supported since gcc 16.0.0
|
|
default y if CC_IS_GCC && GCC_VERSION >= 160000
|
|
|
|
config CC_HAS_BROKEN_COUNTED_BY_REF
|
|
bool
|
|
# https://github.com/llvm/llvm-project/issues/182575
|
|
default y if CC_IS_CLANG && CLANG_VERSION < 220100
|
|
|
|
config CC_HAS_ALLOC_TOKEN
|
|
def_bool $(cc-option,-falloc-token-max=123)
|
|
|
|
config CC_HAS_MULTIDIMENSIONAL_NONSTRING
|
|
def_bool $(success,echo 'char tag[][4] __attribute__((__nonstring__)) = { };' | $(CC) $(CLANG_FLAGS) -x c - -c -o /dev/null -Werror)
|
|
|
|
config LD_CAN_USE_KEEP_IN_OVERLAY
|
|
# ld.lld prior to 21.0.0 did not support KEEP within an overlay description
|
|
# https://github.com/llvm/llvm-project/pull/130661
|
|
def_bool LD_IS_BFD || LLD_VERSION >= 210000
|
|
|
|
config RUSTC_HAS_SPAN_FILE
|
|
def_bool RUSTC_VERSION >= 108800
|
|
|
|
config RUSTC_HAS_UNNECESSARY_TRANSMUTES
|
|
def_bool RUSTC_VERSION >= 108800
|
|
|
|
config RUSTC_HAS_FILE_WITH_NUL
|
|
def_bool RUSTC_VERSION >= 108900
|
|
|
|
config RUSTC_HAS_FILE_AS_C_STR
|
|
def_bool RUSTC_VERSION >= 109100
|
|
|
|
config RUSTC_HAS_SUSPICIOUS_RUNTIME_SYMBOL_DEFINITIONS
|
|
def_bool RUSTC_VERSION >= 109800
|
|
|
|
config PAHOLE_VERSION
|
|
int
|
|
default "$(PAHOLE_VERSION)"
|