diff options
author | Michal Marek <mmarek@suse.com> | 2015-08-19 11:36:41 -0400 |
---|---|---|
committer | Michal Marek <mmarek@suse.com> | 2015-09-04 07:14:10 -0400 |
commit | 5631d9c429857194bd55d7bcd8fa5bdd1a9899a3 (patch) | |
tree | f0424c4fe42eb83bf35a0cda4204aff097a8b192 | |
parent | d179e22762fd38414c4108acedd5feca4cf7e0d8 (diff) |
kbuild: Fix clang detection
We cannot detect clang before including the arch Makefile, because that
can set the default cross compiler. We also cannot detect clang after
including the arch Makefile, because powerpc wants to know about clang.
Solve this by using an deferred variable. This costs us a few shell
invocations, but this is only a constant number.
Reported-by: Behan Webster <behanw@converseincode.com>
Reported-by: Anton Blanchard <anton@samba.org>
Signed-off-by: Michal Marek <mmarek@suse.com>
-rw-r--r-- | Makefile | 9 | ||||
-rw-r--r-- | arch/powerpc/Makefile | 8 | ||||
-rw-r--r-- | scripts/Kbuild.include | 4 | ||||
-rw-r--r-- | scripts/Makefile.extrawarn | 2 |
4 files changed, 10 insertions, 13 deletions
@@ -661,14 +661,7 @@ endif | |||
661 | endif | 661 | endif |
662 | KBUILD_CFLAGS += $(stackp-flag) | 662 | KBUILD_CFLAGS += $(stackp-flag) |
663 | 663 | ||
664 | ifeq ($(shell $(CC) -v 2>&1 | grep -c "clang version"), 1) | 664 | ifeq ($(cc-name),clang) |
665 | COMPILER := clang | ||
666 | else | ||
667 | COMPILER := gcc | ||
668 | endif | ||
669 | export COMPILER | ||
670 | |||
671 | ifeq ($(COMPILER),clang) | ||
672 | KBUILD_CPPFLAGS += $(call cc-option,-Qunused-arguments,) | 665 | KBUILD_CPPFLAGS += $(call cc-option,-Qunused-arguments,) |
673 | KBUILD_CPPFLAGS += $(call cc-option,-Wno-unknown-warning-option,) | 666 | KBUILD_CPPFLAGS += $(call cc-option,-Wno-unknown-warning-option,) |
674 | KBUILD_CFLAGS += $(call cc-disable-warning, unused-variable) | 667 | KBUILD_CFLAGS += $(call cc-disable-warning, unused-variable) |
diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile index 05f464eb6952..dfe88896b06c 100644 --- a/arch/powerpc/Makefile +++ b/arch/powerpc/Makefile | |||
@@ -67,7 +67,7 @@ UTS_MACHINE := $(OLDARCH) | |||
67 | 67 | ||
68 | ifeq ($(CONFIG_CPU_LITTLE_ENDIAN),y) | 68 | ifeq ($(CONFIG_CPU_LITTLE_ENDIAN),y) |
69 | override CC += -mlittle-endian | 69 | override CC += -mlittle-endian |
70 | ifneq ($(COMPILER),clang) | 70 | ifneq ($(cc-name),clang) |
71 | override CC += -mno-strict-align | 71 | override CC += -mno-strict-align |
72 | endif | 72 | endif |
73 | override AS += -mlittle-endian | 73 | override AS += -mlittle-endian |
@@ -333,7 +333,7 @@ TOUT := .tmp_gas_check | |||
333 | # - Require gcc 4.0 or above on 64-bit | 333 | # - Require gcc 4.0 or above on 64-bit |
334 | # - gcc-4.2.0 has issues compiling modules on 64-bit | 334 | # - gcc-4.2.0 has issues compiling modules on 64-bit |
335 | checkbin: | 335 | checkbin: |
336 | @if test "${COMPILER}" != "clang" \ | 336 | @if test "$(cc-name)" != "clang" \ |
337 | && test "$(cc-version)" = "0304" ; then \ | 337 | && test "$(cc-version)" = "0304" ; then \ |
338 | if ! /bin/echo mftb 5 | $(AS) -v -mppc -many -o $(TOUT) >/dev/null 2>&1 ; then \ | 338 | if ! /bin/echo mftb 5 | $(AS) -v -mppc -many -o $(TOUT) >/dev/null 2>&1 ; then \ |
339 | echo -n '*** ${VERSION}.${PATCHLEVEL} kernels no longer build '; \ | 339 | echo -n '*** ${VERSION}.${PATCHLEVEL} kernels no longer build '; \ |
@@ -342,14 +342,14 @@ checkbin: | |||
342 | false; \ | 342 | false; \ |
343 | fi ; \ | 343 | fi ; \ |
344 | fi | 344 | fi |
345 | @if test "${COMPILER}" != "clang" \ | 345 | @if test "$(cc-name)" != "clang" \ |
346 | && test "$(cc-version)" -lt "0400" \ | 346 | && test "$(cc-version)" -lt "0400" \ |
347 | && test "x${CONFIG_PPC64}" = "xy" ; then \ | 347 | && test "x${CONFIG_PPC64}" = "xy" ; then \ |
348 | echo -n "Sorry, GCC v4.0 or above is required to build " ; \ | 348 | echo -n "Sorry, GCC v4.0 or above is required to build " ; \ |
349 | echo "the 64-bit powerpc kernel." ; \ | 349 | echo "the 64-bit powerpc kernel." ; \ |
350 | false ; \ | 350 | false ; \ |
351 | fi | 351 | fi |
352 | @if test "${COMPILER}" != "clang" \ | 352 | @if test "$(cc-name)" != "clang" \ |
353 | && test "$(cc-fullversion)" = "040200" \ | 353 | && test "$(cc-fullversion)" = "040200" \ |
354 | && test "x${CONFIG_MODULES}${CONFIG_PPC64}" = "xyy" ; then \ | 354 | && test "x${CONFIG_MODULES}${CONFIG_PPC64}" = "xyy" ; then \ |
355 | echo -n '*** GCC-4.2.0 cannot compile the 64-bit powerpc ' ; \ | 355 | echo -n '*** GCC-4.2.0 cannot compile the 64-bit powerpc ' ; \ |
diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include index d3437b82ac25..3523df613391 100644 --- a/scripts/Kbuild.include +++ b/scripts/Kbuild.include | |||
@@ -128,6 +128,10 @@ cc-option-align = $(subst -functions=0,,\ | |||
128 | cc-disable-warning = $(call try-run,\ | 128 | cc-disable-warning = $(call try-run,\ |
129 | $(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) -W$(strip $(1)) -c -x c /dev/null -o "$$TMP",-Wno-$(strip $(1))) | 129 | $(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) -W$(strip $(1)) -c -x c /dev/null -o "$$TMP",-Wno-$(strip $(1))) |
130 | 130 | ||
131 | # cc-name | ||
132 | # Expands to either gcc or clang | ||
133 | cc-name = $(shell $(CC) -v 2>&1 | grep -q "clang version" && echo clang || echo gcc) | ||
134 | |||
131 | # cc-version | 135 | # cc-version |
132 | cc-version = $(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-version.sh $(CC)) | 136 | cc-version = $(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-version.sh $(CC)) |
133 | 137 | ||
diff --git a/scripts/Makefile.extrawarn b/scripts/Makefile.extrawarn index f734033af219..4efedcbe4165 100644 --- a/scripts/Makefile.extrawarn +++ b/scripts/Makefile.extrawarn | |||
@@ -56,7 +56,7 @@ endif | |||
56 | KBUILD_CFLAGS += $(warning) | 56 | KBUILD_CFLAGS += $(warning) |
57 | else | 57 | else |
58 | 58 | ||
59 | ifeq ($(COMPILER),clang) | 59 | ifeq ($(cc-name),clang) |
60 | KBUILD_CFLAGS += $(call cc-disable-warning, initializer-overrides) | 60 | KBUILD_CFLAGS += $(call cc-disable-warning, initializer-overrides) |
61 | KBUILD_CFLAGS += $(call cc-disable-warning, unused-value) | 61 | KBUILD_CFLAGS += $(call cc-disable-warning, unused-value) |
62 | KBUILD_CFLAGS += $(call cc-disable-warning, format) | 62 | KBUILD_CFLAGS += $(call cc-disable-warning, format) |