From eb0ad3ae07f9b74c3ee49eefb1506a44704690ad Mon Sep 17 00:00:00 2001 From: Sami Tolvanen Date: Fri, 17 Nov 2017 15:37:42 -0800 Subject: BACKPORT: kbuild: add __cc-ifversion and compiler-specific variants This change adds macros for testing both compiler name and version. Current cc-version, cc-ifversion etc. macros that test gcc version are left unchanged to prevent compatibility issues with existing tests. Bug: 62093296 Bug: 67506682 Change-Id: I14965fcc21dae8dfe31881b172214bf6f8a9f440 (am from https://patchwork.kernel.org/patch/10085767/) Signed-off-by: Sami Tolvanen Signed-off-by: Dan Aloni Signed-off-by: Davide Garberi --- scripts/Kbuild.include | 37 ++++++++++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) (limited to 'scripts/Kbuild.include') diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include index 1112dd94b440..f955e3556942 100644 --- a/scripts/Kbuild.include +++ b/scripts/Kbuild.include @@ -148,6 +148,37 @@ cc-disable-warning = $(call try-run,\ # Expands to either gcc or clang cc-name = $(shell $(CC) -v 2>&1 | grep -q "clang version" && echo clang || echo gcc) +# __cc-version +# Returns compiler version +__cc-version = $(shell $(CONFIG_SHELL) $(srctree)/scripts/$(cc-name)-version.sh $(CC)) + +# __cc-fullversion +# Returns full compiler version +__cc-fullversion = $(shell $(CONFIG_SHELL) \ + $(srctree)/scripts/$(cc-name)-version.sh -p $(CC)) + +# __cc-ifversion +# Matches compiler name and version +# Usage: EXTRA_CFLAGS += $(call cc-if-name-version, gcc, -lt, 0402, -O1) +__cc-ifversion = $(shell [ $(cc-name) = $(1) ] && [ $(__cc-version) $(2) $(3) ] && echo $(4) || echo $(5)) + +# __cc-if-fullversion +# Matches compiler name and full version +# Usage: EXTRA_CFLAGS += $(call cc-if-name-fullversion, gcc, -lt, 040502, -O1) +__cc-if-fullversion = $(shell [ $(cc-name) = $(1) ] && [ $(__cc-fullversion) $(2) $(3) ] && echo $(4) || echo $(5)) + +# gcc-ifversion +gcc-ifversion = $(call __cc-ifversion, gcc, $(1), $(2), $(3), $(4)) + +# gcc-if-fullversion +gcc-if-fullversion = (call __cc-if-fullversion, gcc, $(1), $(2), $(3), $(4)) + +# clang-ifversion +clang-ifversion = $(call __cc-ifversion, clang, $(1), $(2), $(3), $(4)) + +# clang-if-fullversion +clang-if-fullversion = (call __cc-if-fullversion, clang, $(1), $(2), $(3), $(4)) + # cc-version cc-version = $(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-version.sh $(CC)) @@ -155,9 +186,9 @@ cc-version = $(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-version.sh $(CC)) cc-fullversion = $(shell $(CONFIG_SHELL) \ $(srctree)/scripts/gcc-version.sh -p $(CC)) -# cc-ifversion -# Usage: EXTRA_CFLAGS += $(call cc-ifversion, -lt, 0402, -O1) -cc-ifversion = $(shell [ $(cc-version) $(1) $(2) ] && echo $(3) || echo $(4)) +# backward compatibility +cc-ifversion = $(gcc-ifversion) +cc-if-fullversion = $(gcc-if-fullversion) # cc-ldoption # Usage: ldflags += $(call cc-ldoption, -Wl$(comma)--hash-style=both) -- cgit v1.2.3 From 2d471de60bb497d8b3f9021ea255dcf1b8a07dc0 Mon Sep 17 00:00:00 2001 From: Sami Tolvanen Date: Wed, 25 Oct 2017 12:33:58 -0700 Subject: BACKPORT: kbuild: add ld-name macro GNU gold may require different flags than GNU ld. Add a macro for detecting the linker. Bug: 62093296 Bug: 67506682 Change-Id: I777f14bf4fd902de1f8dc73d7ecc3c0403eae5f5 (am from https://patchwork.kernel.org/patch/10085775/) Reviewed-by: Nick Desaulniers Signed-off-by: Sami Tolvanen (cherry picked from commit 552777bdc1d775bee1ffde43c23ab0b2c4501f35) Signed-off-by: Dan Aloni Signed-off-by: Davide Garberi --- scripts/Kbuild.include | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'scripts/Kbuild.include') diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include index f955e3556942..5ad934a46ec9 100644 --- a/scripts/Kbuild.include +++ b/scripts/Kbuild.include @@ -204,6 +204,10 @@ ld-option = $(call try-run, $(LD) $(LDFLAGS) $(1) -v,$(1),$(2)) # Important: no spaces around options ar-option = $(call try-run, $(AR) rc$(1) "$$TMP",$(1),$(2)) +# ld-name +# Expands to either bfd or gold +ld-name = $(shell $(LD) -v 2>&1 | grep -q "GNU gold" && echo gold || echo bfd) + # ld-version # Note this is mainly for HJ Lu's 3 number binutil versions ld-version = $(shell $(LD) --version | $(srctree)/scripts/ld-version.sh) -- cgit v1.2.3 From d2787c21f2b565c18395c6d84fa3604759d3b5a9 Mon Sep 17 00:00:00 2001 From: Sami Tolvanen Date: Fri, 17 Nov 2017 15:55:54 -0800 Subject: BACKPORT: kbuild: add __ld-ifversion and linker-specific macros Add macros for testing both linker name and version. Bug: 62093296 Bug: 67506682 Change-Id: Icbb13e9bb889017cd4a7457a62dea7e0335c53b5 (am from https://patchwork.kernel.org/patch/10085789/) Signed-off-by: Sami Tolvanen (cherry picked from commit 9403b68067aaa4941facfd260e14bb2b892073f5) Signed-off-by: Dan Aloni Signed-off-by: Davide Garberi --- scripts/Kbuild.include | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'scripts/Kbuild.include') diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include index 5ad934a46ec9..fcf10806de4d 100644 --- a/scripts/Kbuild.include +++ b/scripts/Kbuild.include @@ -216,6 +216,18 @@ ld-version = $(shell $(LD) --version | $(srctree)/scripts/ld-version.sh) # Usage: $(call ld-ifversion, -ge, 22252, y) ld-ifversion = $(shell [ $(ld-version) $(1) $(2) ] && echo $(3) || echo $(4)) +# __ld-ifversion +# Usage: $(call __ld-ifversion, gold, -ge, 112000000, y) +__ld-ifversion = $(shell [ $(ld-name) = $(1) ] && [ $(ld-version) $(2) $(3) ] && echo $(4) || echo $(5)) + +# bfd-ifversion +# Usage: $(call bfd-ifversion, -ge, 227000000, y) +bfd-ifversion = $(call __ld-ifversion, bfd, $(1), $(2), $(3), $(4)) + +# gold-ifversion +# Usage: $(call gold-ifversion, -ge, 112000000, y) +gold-ifversion = $(call __ld-ifversion, gold, $(1), $(2), $(3), $(4)) + ###### ### -- cgit v1.2.3 From a54bbb725ccb3663f7fc7a2bf8b9ef1c34263bdb Mon Sep 17 00:00:00 2001 From: Olof Johansson Date: Fri, 13 Jul 2018 08:30:33 -0700 Subject: arm64: build with baremetal linker target instead of Linux when available Not all toolchains have the baremetal elf targets, RedHat/Fedora ones in particular. So, probe for whether it's available and use the previous (linux) targets if it isn't. Reported-by: Laura Abbott Tested-by: Laura Abbott Acked-by: Masahiro Yamada Cc: Paul Kocialkowski Signed-off-by: Olof Johansson Signed-off-by: Will Deacon Change-Id: Icf5462a8318b347cf11559c1654886c48c7a62b5 --- scripts/Kbuild.include | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'scripts/Kbuild.include') diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include index fcf10806de4d..8a491e6b542c 100644 --- a/scripts/Kbuild.include +++ b/scripts/Kbuild.include @@ -196,8 +196,8 @@ cc-ldoption = $(call try-run,\ $(CC) $(1) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) -nostdlib -x c /dev/null -o "$$TMP",$(1),$(2)) # ld-option -# Usage: LDFLAGS += $(call ld-option, -X) -ld-option = $(call try-run, $(LD) $(LDFLAGS) $(1) -v,$(1),$(2)) +# Usage: LDFLAGS += $(call ld-option, -X, -Y) +ld-option = $(call try-run, $(LD) $(LDFLAGS) $(1) -v,$(1),$(2),$(3)) # ar-option # Usage: KBUILD_ARFLAGS := $(call ar-option,D) -- cgit v1.2.3