Thread (13 messages) 13 messages, 6 authors, 2021-08-17

Re: [PATCH] Makefile: remove stale cc-option checks

From: Masahiro Yamada <masahiroy@kernel.org>
Date: 2021-08-14 01:43:30
Also in: lkml

On Wed, Aug 11, 2021 at 5:42 AM Nick Desaulniers
[off-list ref] wrote:
quoted hunk ↗ jump to hunk
cc-option, cc-option-yn, and cc-disable-warning all invoke the compiler
during build time, and can slow down the build when these checks become
stale for our supported compilers, whose minimally supported versions
increases over time. See Documentation/process/changes.rst for the
current supported minimal versions (GCC 4.9+, clang 10.0.1+). Compiler
version support for these flags may be verified on godbolt.org.

The following flags are GCC only and supported since at least GCC 4.9.
Remove cc-option and cc-disable-warning tests.
* -fno-tree-loop-im
* -Wno-maybe-uninitialized
* -fno-reorder-blocks
* -fno-ipa-cp-clone
* -fno-partial-inlining
* -femit-struct-debug-baseonly
* -fno-inline-functions-called-once
* -fconserve-stack

The following flags are supported by all supported versions of GCC and
Clang. Remove their cc-option, cc-option-yn, and cc-disable-warning tests.
* -fno-delete-null-pointer-checks
* -fno-var-tracking
* -mfentry
* -Wno-array-bounds

The following configs are made dependent on GCC, since they use GCC
specific flags.
* READABLE_ASM
* DEBUG_SECTION_MISMATCH

--param=allow-store-data-races=0 was renamed to --allow-store-data-races
in the GCC 10 release.

Also, base RETPOLINE_CFLAGS and RETPOLINE_VDSO_CFLAGS on CONFIC_CC_IS_*
then remove cc-option tests for Clang.

Link: https://github.com/ClangBuiltLinux/linux/issues/1436
Signed-off-by: Nick Desaulniers <redacted>
---
Note: It may be preferred to move the test for
-fno-inline-functions-called-once for DEBUG_SECTION_MISMATCH into
Kconfig. That one does seem relatively more reasonable to implement in
Clang.

 Makefile          | 55 ++++++++++++++++++++++++++---------------------
 lib/Kconfig.debug |  2 ++
 2 files changed, 33 insertions(+), 24 deletions(-)
diff --git a/Makefile b/Makefile
index 027fdf2a14fe..3e3fb4affba1 100644
--- a/Makefile
+++ b/Makefile
@@ -730,9 +730,10 @@ endif # KBUILD_EXTMOD
 # Defaults to vmlinux, but the arch makefile usually adds further targets
 all: vmlinux

-CFLAGS_GCOV    := -fprofile-arcs -ftest-coverage \
-       $(call cc-option,-fno-tree-loop-im) \
-       $(call cc-disable-warning,maybe-uninitialized,)
+CFLAGS_GCOV    := -fprofile-arcs -ftest-coverage
+ifdef CONFIG_CC_IS_GCC
+CFLAGS_GCOV    += -fno-tree-loop-im
+endif
 export CFLAGS_GCOV

 # The arch Makefiles can override CC_FLAGS_FTRACE. We may also append it later.
@@ -740,12 +741,14 @@ ifdef CONFIG_FUNCTION_TRACER
   CC_FLAGS_FTRACE := -pg
 endif

-RETPOLINE_CFLAGS_GCC := -mindirect-branch=thunk-extern -mindirect-branch-register
-RETPOLINE_VDSO_CFLAGS_GCC := -mindirect-branch=thunk-inline -mindirect-branch-register
-RETPOLINE_CFLAGS_CLANG := -mretpoline-external-thunk
-RETPOLINE_VDSO_CFLAGS_CLANG := -mretpoline
-RETPOLINE_CFLAGS := $(call cc-option,$(RETPOLINE_CFLAGS_GCC),$(call cc-option,$(RETPOLINE_CFLAGS_CLANG)))
-RETPOLINE_VDSO_CFLAGS := $(call cc-option,$(RETPOLINE_VDSO_CFLAGS_GCC),$(call cc-option,$(RETPOLINE_VDSO_CFLAGS_CLANG)))
+ifdef CONFIG_CC_IS_GCC
+RETPOLINE_CFLAGS       := $(call cc-option,-mindirect-branch=thunk-extern -mindirect-branch-register)
+RETPOLINE_VDSO_CFLAGS  := $(call cc-option,-mindirect-branch=thunk-inline -mindirect-branch-register)
+endif
+ifdef CONFIG_CC_IS_CLANG
+RETPOLINE_CFLAGS       := -mretpoline-external-thunk
+RETPOLINE_VDSO_CFLAGS  := -mretpoline
+endif
 export RETPOLINE_CFLAGS
 export RETPOLINE_VDSO_CFLAGS
@@ -798,7 +801,7 @@ include/config/auto.conf:
 endif # may-sync-config
 endif # need-config

-KBUILD_CFLAGS  += $(call cc-option,-fno-delete-null-pointer-checks,)
+KBUILD_CFLAGS  += -fno-delete-null-pointer-checks
 KBUILD_CFLAGS  += $(call cc-disable-warning,frame-address,)
 KBUILD_CFLAGS  += $(call cc-disable-warning, format-truncation)
 KBUILD_CFLAGS  += $(call cc-disable-warning, format-overflow)
@@ -844,17 +847,17 @@ KBUILD_RUSTFLAGS += -Copt-level=z
 endif

 # Tell gcc to never replace conditional load with a non-conditional one
-KBUILD_CFLAGS  += $(call cc-option,--param=allow-store-data-races=0)
+ifdef CONFIG_CC_IS_GCC

Can you insert a comment here?

# GCC 10 renamed --param=allow-store-data-races=0 to --allow-store-data-races


It will remind us of dropping this conditional
in the (long long distant) future.



+KBUILD_CFLAGS  += $(call cc-option,--allow-store-data-races,--param=allow-store-data-races=0)
 KBUILD_CFLAGS  += $(call cc-option,-fno-allow-store-data-races)
+endif
-- 
Best Regards
Masahiro Yamada
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help