|
@@ -474,6 +474,38 @@ ifneq ($(KBUILD_SRC),)
|
|
|
$(srctree) $(objtree) $(VERSION) $(PATCHLEVEL)
|
|
|
endif
|
|
|
|
|
|
+ifeq ($(cc-name),clang)
|
|
|
+ifneq ($(CROSS_COMPILE),)
|
|
|
+CLANG_TARGET := --target=$(notdir $(CROSS_COMPILE:%-=%))
|
|
|
+GCC_TOOLCHAIN := $(realpath $(dir $(shell which $(LD)))/..)
|
|
|
+endif
|
|
|
+ifneq ($(GCC_TOOLCHAIN),)
|
|
|
+CLANG_GCC_TC := --gcc-toolchain=$(GCC_TOOLCHAIN)
|
|
|
+endif
|
|
|
+KBUILD_CFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC)
|
|
|
+KBUILD_AFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC)
|
|
|
+KBUILD_CPPFLAGS += $(call cc-option,-Qunused-arguments,)
|
|
|
+KBUILD_CFLAGS += $(call cc-disable-warning, unused-variable)
|
|
|
+KBUILD_CFLAGS += $(call cc-disable-warning, format-invalid-specifier)
|
|
|
+KBUILD_CFLAGS += $(call cc-disable-warning, gnu)
|
|
|
+KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member)
|
|
|
+# Quiet clang warning: comparison of unsigned expression < 0 is always false
|
|
|
+KBUILD_CFLAGS += $(call cc-disable-warning, tautological-compare)
|
|
|
+# CLANG uses a _MergedGlobals as optimization, but this breaks modpost, as the
|
|
|
+# source of a reference will be _MergedGlobals and not on of the whitelisted names.
|
|
|
+# See modpost pattern 2
|
|
|
+KBUILD_CFLAGS += $(call cc-option, -mno-global-merge,)
|
|
|
+KBUILD_CFLAGS += $(call cc-option, -fcatch-undefined-behavior)
|
|
|
+KBUILD_CFLAGS += $(call cc-option, -no-integrated-as)
|
|
|
+KBUILD_AFLAGS += $(call cc-option, -no-integrated-as)
|
|
|
+else
|
|
|
+
|
|
|
+# These warnings generated too much noise in a regular build.
|
|
|
+# Use make W=1 to enable them (see scripts/Makefile.extrawarn)
|
|
|
+KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable)
|
|
|
+KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable)
|
|
|
+endif
|
|
|
+
|
|
|
ifeq ($(config-targets),1)
|
|
|
# ===========================================================================
|
|
|
# *config targets only - make sure prerequisites are updated, and descend
|
|
@@ -684,38 +716,6 @@ ifdef CONFIG_CC_STACKPROTECTOR
|
|
|
endif
|
|
|
KBUILD_CFLAGS += $(stackp-flag)
|
|
|
|
|
|
-ifeq ($(cc-name),clang)
|
|
|
-ifneq ($(CROSS_COMPILE),)
|
|
|
-CLANG_TARGET := --target=$(notdir $(CROSS_COMPILE:%-=%))
|
|
|
-GCC_TOOLCHAIN := $(realpath $(dir $(shell which $(LD)))/..)
|
|
|
-endif
|
|
|
-ifneq ($(GCC_TOOLCHAIN),)
|
|
|
-CLANG_GCC_TC := --gcc-toolchain=$(GCC_TOOLCHAIN)
|
|
|
-endif
|
|
|
-KBUILD_CFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC)
|
|
|
-KBUILD_AFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC)
|
|
|
-KBUILD_CPPFLAGS += $(call cc-option,-Qunused-arguments,)
|
|
|
-KBUILD_CFLAGS += $(call cc-disable-warning, unused-variable)
|
|
|
-KBUILD_CFLAGS += $(call cc-disable-warning, format-invalid-specifier)
|
|
|
-KBUILD_CFLAGS += $(call cc-disable-warning, gnu)
|
|
|
-KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member)
|
|
|
-# Quiet clang warning: comparison of unsigned expression < 0 is always false
|
|
|
-KBUILD_CFLAGS += $(call cc-disable-warning, tautological-compare)
|
|
|
-# CLANG uses a _MergedGlobals as optimization, but this breaks modpost, as the
|
|
|
-# source of a reference will be _MergedGlobals and not on of the whitelisted names.
|
|
|
-# See modpost pattern 2
|
|
|
-KBUILD_CFLAGS += $(call cc-option, -mno-global-merge,)
|
|
|
-KBUILD_CFLAGS += $(call cc-option, -fcatch-undefined-behavior)
|
|
|
-KBUILD_CFLAGS += $(call cc-option, -no-integrated-as)
|
|
|
-KBUILD_AFLAGS += $(call cc-option, -no-integrated-as)
|
|
|
-else
|
|
|
-
|
|
|
-# These warnings generated too much noise in a regular build.
|
|
|
-# Use make W=1 to enable them (see scripts/Makefile.extrawarn)
|
|
|
-KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable)
|
|
|
-KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable)
|
|
|
-endif
|
|
|
-
|
|
|
ifdef CONFIG_FRAME_POINTER
|
|
|
KBUILD_CFLAGS += -fno-omit-frame-pointer -fno-optimize-sibling-calls
|
|
|
else
|