|
@@ -248,6 +248,11 @@ HOSTCXX = g++
|
|
|
HOSTCFLAGS = -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer
|
|
|
HOSTCXXFLAGS = -O2
|
|
|
|
|
|
+ifeq ($(shell $(HOSTCC) -v 2>&1 | grep -c "clang version"), 1)
|
|
|
+HOSTCFLAGS += -Wno-unused-value -Wno-unused-parameter \
|
|
|
+ -Wno-missing-field-initializers -fno-delete-null-pointer-checks
|
|
|
+endif
|
|
|
+
|
|
|
# Decide whether to build built-in, modular, or both.
|
|
|
# Normally, just do built-in.
|
|
|
|
|
@@ -324,6 +329,14 @@ endif
|
|
|
|
|
|
export quiet Q KBUILD_VERBOSE
|
|
|
|
|
|
+ifneq ($(CC),)
|
|
|
+ifeq ($(shell $(CC) -v 2>&1 | grep -c "clang version"), 1)
|
|
|
+COMPILER := clang
|
|
|
+else
|
|
|
+COMPILER := gcc
|
|
|
+endif
|
|
|
+export COMPILER
|
|
|
+endif
|
|
|
|
|
|
# Look for make include files relative to root of kernel src
|
|
|
MAKEFLAGS += --include-dir=$(srctree)
|
|
@@ -383,7 +396,7 @@ KBUILD_CFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
|
|
|
-fno-strict-aliasing -fno-common \
|
|
|
-Werror-implicit-function-declaration \
|
|
|
-Wno-format-security \
|
|
|
- -fno-delete-null-pointer-checks
|
|
|
+ $(call cc-option,-fno-delete-null-pointer-checks,)
|
|
|
KBUILD_AFLAGS_KERNEL :=
|
|
|
KBUILD_CFLAGS_KERNEL :=
|
|
|
KBUILD_AFLAGS := -D__ASSEMBLY__
|
|
@@ -623,9 +636,24 @@ endif
|
|
|
endif
|
|
|
KBUILD_CFLAGS += $(stackp-flag)
|
|
|
|
|
|
+ifeq ($(COMPILER),clang)
|
|
|
+KBUILD_CPPFLAGS += $(call cc-option,-Qunused-arguments,)
|
|
|
+KBUILD_CPPFLAGS += $(call cc-option,-Wno-unknown-warning-option,)
|
|
|
+KBUILD_CFLAGS += $(call cc-disable-warning, unused-variable)
|
|
|
+KBUILD_CFLAGS += $(call cc-disable-warning, format-invalid-specifier)
|
|
|
+KBUILD_CFLAGS += $(call cc-disable-warning, gnu)
|
|
|
+# 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,)
|
|
|
+else
|
|
|
+
|
|
|
# This warning generated too much noise in a regular build.
|
|
|
# Use make W=1 to enable this warning (see scripts/Makefile.build)
|
|
|
KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable)
|
|
|
+endif
|
|
|
|
|
|
ifdef CONFIG_FRAME_POINTER
|
|
|
KBUILD_CFLAGS += -fno-omit-frame-pointer -fno-optimize-sibling-calls
|