| From foo@baz Wed Nov 21 18:50:25 CET 2018 |
| From: Matthias Kaehlcke <mka@chromium.org> |
| Date: Wed, 21 Jun 2017 16:28:03 -0700 |
| Subject: kbuild: Add __cc-option macro |
| |
| From: Matthias Kaehlcke <mka@chromium.org> |
| |
| commit 9f3f1fd299768782465cb32cdf0dd4528d11f26b upstream. |
| |
| cc-option uses KBUILD_CFLAGS and KBUILD_CPPFLAGS when it determines |
| whether an option is supported or not. This is fine for options used to |
| build the kernel itself, however some components like the x86 boot code |
| use a different set of flags. |
| |
| Add the new macro __cc-option which is a more generic version of |
| cc-option with additional parameters. One parameter is the compiler |
| with which the check should be performed, the other the compiler options |
| to be used instead KBUILD_C*FLAGS. |
| |
| Refactor cc-option and hostcc-option to use __cc-option and move |
| hostcc-option to scripts/Kbuild.include. |
| |
| Suggested-by: Arnd Bergmann <arnd@arndb.de> |
| Suggested-by: Masahiro Yamada <yamada.masahiro@socionext.com> |
| Signed-off-by: Matthias Kaehlcke <mka@chromium.org> |
| Acked-by: Arnd Bergmann <arnd@arndb.de> |
| Acked-by: Michal Marek <mmarek@suse.com> |
| Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> |
| Signed-off-by: Nick Desaulniers <ndesaulniers@google.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| Makefile | 2 +- |
| scripts/Kbuild.include | 14 ++++++++++++-- |
| scripts/Makefile.host | 6 ------ |
| 3 files changed, 13 insertions(+), 9 deletions(-) |
| |
| --- a/Makefile |
| +++ b/Makefile |
| @@ -303,7 +303,7 @@ CONFIG_SHELL := $(shell if [ -x "$$BASH" |
| |
| HOSTCC = gcc |
| HOSTCXX = g++ |
| -HOSTCFLAGS = -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu89 |
| +HOSTCFLAGS := -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu89 |
| HOSTCXXFLAGS = -O2 |
| |
| ifeq ($(shell $(HOSTCC) -v 2>&1 | grep -c "clang version"), 1) |
| --- a/scripts/Kbuild.include |
| +++ b/scripts/Kbuild.include |
| @@ -109,6 +109,11 @@ as-option = $(call try-run,\ |
| as-instr = $(call try-run,\ |
| printf "%b\n" "$(1)" | $(CC) $(KBUILD_AFLAGS) -c -x assembler -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) -c -x c /dev/null -o "$$TMP",$(3),$(4)) |
| + |
| # Do not attempt to build with gcc plugins during cc-option tests. |
| # (And this uses delayed resolution so the flags will be up to date.) |
| CC_OPTION_CFLAGS = $(filter-out $(GCC_PLUGINS_CFLAGS),$(KBUILD_CFLAGS)) |
| @@ -116,8 +121,13 @@ CC_OPTION_CFLAGS = $(filter-out $(GCC_PL |
| # cc-option |
| # Usage: cflags-y += $(call cc-option,-march=winchip-c6,-march=i586) |
| |
| -cc-option = $(call try-run,\ |
| - $(CC) -Werror $(KBUILD_CPPFLAGS) $(CC_OPTION_CFLAGS) $(1) -c -x c /dev/null -o "$$TMP",$(1),$(2)) |
| +cc-option = $(call __cc-option, $(CC),\ |
| + $(KBUILD_CPPFLAGS) $(CC_OPTION_CFLAGS),$(1),$(2)) |
| + |
| +# hostcc-option |
| +# Usage: cflags-y += $(call hostcc-option,-march=winchip-c6,-march=i586) |
| +hostcc-option = $(call __cc-option, $(HOSTCC),\ |
| + $(HOSTCFLAGS) $(HOST_EXTRACFLAGS),$(1),$(2)) |
| |
| # cc-option-yn |
| # Usage: flag := $(call cc-option-yn,-march=winchip-c6) |
| --- a/scripts/Makefile.host |
| +++ b/scripts/Makefile.host |
| @@ -20,12 +20,6 @@ |
| # Will compile qconf as a C++ program, and menu as a C program. |
| # They are linked as C++ code to the executable qconf |
| |
| -# hostcc-option |
| -# Usage: cflags-y += $(call hostcc-option,-march=winchip-c6,-march=i586) |
| - |
| -hostcc-option = $(call try-run,\ |
| - $(HOSTCC) $(HOSTCFLAGS) $(HOST_EXTRACFLAGS) $(1) -c -x c /dev/null -o "$$TMP",$(1),$(2)) |
| - |
| __hostprogs := $(sort $(hostprogs-y) $(hostprogs-m)) |
| host-cshlib := $(sort $(hostlibs-y) $(hostlibs-m)) |
| host-cxxshlib := $(sort $(hostcxxlibs-y) $(hostcxxlibs-m)) |