mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-08-15 21:56:21 +00:00

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. -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEo6/YBQwIrVS28WGKmmx57+YAGNkFAmg6vNMACgkQmmx57+YA GNkOmg/+LtR9B2P27GPBeG8HnLTZ8hKELiyYeSk6ZFgQv5hevE37HV35Yru7e7gu wcF6CgYr8ff4CVcHM7y0790oGew1thkqq5CklFIH0EwCDJx/mWfZR1SS2jfZIEWM HSDOlQQd1S8oWia14tSnQos3nW3CB9/ABVTHH+Wvl3xn48WMRvgK2LJgGLuxJrt8 5DD9auHiLjchWB5tB4DU98IgWWgFUGMTsI6IayZ4dkF4CdWqd89h0Y3pjJYeBgHS mPxzR2q8WjEmG9hp7QuZQgn/pAYleJAwHvvkoLrkQ2ieqx3FjWiwFbQp4CG1Sc8L eBR1lnkqS2z/e7xJLfe86fOoKWWu4I0tZKhRan/0+UOGm5nXrGpqSxKS8ZDsRuAp 3fvyhIp1cYSa7Xkok8BFhLEFR0tguXJXnXBc3tWE5VXIfFNd0Ohh1GUYhXDAqWKh i0jN9dSNhokM3AqBi6qZl5kmBnRA3UsIaOg3QRrqN8IlBPp+u7i5xsrJIUWvD95o TO06admmLcCJT8n6ZfNVfRjBgzu8+t54UVaDx9YYwxoNGOSFwqOb8CSPTWPxLmDr RKDUOvO8DBlP7uFz9neP+LxluA3DjurRZvb0z0AmCZ8/RXEmTMCyfP5a6esxquXt 0Bqo6hM9q+TeXTHNS1CNvqLSWWikw+AzS/ZPPvriYFn5lxtbq6c= =pdDC -----END PGP SIGNATURE----- Merge tag 'gcc-minimum-version-6.16' of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/asm-generic 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)
|