mirror of
https://github.com/torvalds/linux.git
synced 2025-12-01 07:26:02 +07:00
Pull compiler version requirement update from Arnd Bergmann: "Require gcc-8 and binutils-2.30 x86 already uses gcc-8 as the minimum version, this changes all other architectures to the same version. gcc-8 is used is Debian 10 and Red Hat Enterprise Linux 8, both of which are still supported, and binutils 2.30 is the oldest corresponding version on those. Ubuntu Pro 18.04 and SUSE Linux Enterprise Server 15 both use gcc-7 as the system compiler but additionally include toolchains that remain supported. With the new minimum toolchain versions, a number of workarounds for older versions can be dropped, in particular on x86_64 and arm64. Importantly, the updated compiler version allows removing two of the five remaining gcc plugins, as support for sancov and structeak features is already included in modern compiler versions. I tried collecting the known changes that are possible based on the new toolchain version, but expect that more cleanups will be possible. Since this touches multiple architectures, I merged the patches through the asm-generic tree." * tag 'gcc-minimum-version-6.16' of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/asm-generic: Makefile.kcov: apply needed compiler option unconditionally in CFLAGS_KCOV Documentation: update binutils-2.30 version reference gcc-plugins: remove SANCOV gcc plugin Kbuild: remove structleak gcc plugin arm64: drop binutils version checks raid6: skip avx512 checks kbuild: require gcc-8 and binutils-2.30
94 lines
3.5 KiB
Makefile
94 lines
3.5 KiB
Makefile
# SPDX-License-Identifier: GPL-2.0-only
|
|
|
|
# cc-cross-prefix
|
|
# Usage: CROSS_COMPILE := $(call cc-cross-prefix, m68k-linux-gnu- m68k-linux-)
|
|
# Return first <prefix> where a <prefix>gcc is found in PATH.
|
|
# If no gcc found in PATH with listed prefixes return nothing
|
|
#
|
|
# Note: '2>/dev/null' is here to force Make to invoke a shell. Otherwise, it
|
|
# would try to directly execute the shell builtin 'command'. This workaround
|
|
# should be kept for a long time since this issue was fixed only after the
|
|
# GNU Make 4.2.1 release.
|
|
cc-cross-prefix = $(firstword $(foreach c, $(1), \
|
|
$(if $(shell command -v -- $(c)gcc 2>/dev/null), $(c))))
|
|
|
|
# output directory for tests below
|
|
TMPOUT = .tmp_$$$$
|
|
|
|
# try-run
|
|
# Usage: option = $(call try-run, $(CC)...-o "$$TMP",option-ok,otherwise)
|
|
# Exit code chooses option. "$$TMP" serves as a temporary file and is
|
|
# automatically cleaned up.
|
|
try-run = $(shell set -e; \
|
|
TMP=$(TMPOUT)/tmp; \
|
|
trap "rm -rf $(TMPOUT)" EXIT; \
|
|
mkdir -p $(TMPOUT); \
|
|
if ($(1)) >/dev/null 2>&1; \
|
|
then echo "$(2)"; \
|
|
else echo "$(3)"; \
|
|
fi)
|
|
|
|
# as-option
|
|
# Usage: aflags-y += $(call as-option,-Wa$(comma)-isa=foo,)
|
|
|
|
as-option = $(call try-run,\
|
|
$(CC) -Werror $(KBUILD_CPPFLAGS) $(KBUILD_AFLAGS) $(1) -c -x assembler-with-cpp /dev/null -o "$$TMP",$(1),$(2))
|
|
|
|
# as-instr
|
|
# Usage: aflags-y += $(call as-instr,instr,option1,option2)
|
|
|
|
as-instr = $(call try-run,\
|
|
printf "%b\n" "$(1)" | $(CC) -Werror $(CLANG_FLAGS) $(KBUILD_AFLAGS) -Wa$(comma)--fatal-warnings -c -x assembler-with-cpp -o "$$TMP" -,$(2),$(3))
|
|
|
|
# __cc-option
|
|
# Usage: MY_CFLAGS += $(call __cc-option,$(CC),$(MY_CFLAGS),-march=winchip-c6,-march=i586)
|
|
__cc-option = $(call try-run,\
|
|
$(1) -Werror $(2) $(3:-Wno-%=-W%) -c -x c /dev/null -o "$$TMP",$(3),$(4))
|
|
|
|
# cc-option
|
|
# Usage: cflags-y += $(call cc-option,-march=winchip-c6,-march=i586)
|
|
|
|
cc-option = $(call __cc-option, $(CC),\
|
|
$(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS),$(1),$(2))
|
|
|
|
# cc-option-yn
|
|
# Usage: flag := $(call cc-option-yn,-march=winchip-c6)
|
|
cc-option-yn = $(if $(call cc-option,$1),y,n)
|
|
|
|
# cc-disable-warning
|
|
# Usage: cflags-y += $(call cc-disable-warning,unused-but-set-variable)
|
|
cc-disable-warning = $(call cc-option,-Wno-$(strip $1))
|
|
|
|
# gcc-min-version
|
|
# Usage: cflags-$(call gcc-min-version, 110100) += -foo
|
|
gcc-min-version = $(call test-ge, $(CONFIG_GCC_VERSION), $1)
|
|
|
|
# clang-min-version
|
|
# Usage: cflags-$(call clang-min-version, 110000) += -foo
|
|
clang-min-version = $(call test-ge, $(CONFIG_CLANG_VERSION), $1)
|
|
|
|
# rustc-min-version
|
|
# Usage: rustc-$(call rustc-min-version, 108500) += -Cfoo
|
|
rustc-min-version = $(call test-ge, $(CONFIG_RUSTC_VERSION), $1)
|
|
|
|
# ld-option
|
|
# Usage: KBUILD_LDFLAGS += $(call ld-option, -X, -Y)
|
|
ld-option = $(call try-run, $(LD) $(KBUILD_LDFLAGS) $(1) -v,$(1),$(2),$(3))
|
|
|
|
# __rustc-option
|
|
# Usage: MY_RUSTFLAGS += $(call __rustc-option,$(RUSTC),$(MY_RUSTFLAGS),-Cinstrument-coverage,-Zinstrument-coverage)
|
|
# TODO: remove RUSTC_BOOTSTRAP=1 when we raise the minimum GNU Make version to 4.4
|
|
__rustc-option = $(call try-run,\
|
|
echo '$(pound)![allow(missing_docs)]$(pound)![feature(no_core)]$(pound)![no_core]' | RUSTC_BOOTSTRAP=1\
|
|
$(1) --sysroot=/dev/null $(filter-out --sysroot=/dev/null --target=%,$(2)) $(3)\
|
|
--crate-type=rlib --out-dir=$(TMPOUT) --emit=obj=- - >/dev/null,$(3),$(4))
|
|
|
|
# rustc-option
|
|
# Usage: rustflags-y += $(call rustc-option,-Cinstrument-coverage,-Zinstrument-coverage)
|
|
rustc-option = $(call __rustc-option, $(RUSTC),\
|
|
$(KBUILD_RUSTFLAGS),$(1),$(2))
|
|
|
|
# rustc-option-yn
|
|
# Usage: flag := $(call rustc-option-yn,-Cinstrument-coverage)
|
|
rustc-option-yn = $(if $(call rustc-option,$1),y,n)
|