-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
UPSTREAM: kbuild: split cc-option and friends to scripts/Makefile.com…
…piler scripts/Kbuild.include is included everywhere, but macros such as cc-option are needed by build targets only. For example, when 'make clean' traverses the tree, it does not need to evaluate $(call cc-option,). Split cc-option, ld-option, etc. to scripts/Makefile.compiler, which is only included from the top Makefile and scripts/Makefile.build. Signed-off-by: Masahiro Yamada <[email protected]> Bug: 209655537 (cherry picked from commit 57fd251c789647552d32d2fc51bedd4f90d70f9f) Signed-off-by: Nick Desaulniers <[email protected]> Change-Id: I7cef781922a192a9bcd21152a74ff2cec0527ab0
- Loading branch information
Showing
4 changed files
with
80 additions
and
80 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
# SPDX-License-Identifier: GPL-2.0-only | ||
|
||
# cc-cross-prefix | ||
# Usage: CROSS_COMPILE := $(call cc-cross-prefix, m68k-linux-gnu- m68k-linux-) | ||
# Return first <prefix> where a <prefix>gcc is found in PATH. | ||
# If no gcc found in PATH with listed prefixes return nothing | ||
# | ||
# Note: '2>/dev/null' is here to force Make to invoke a shell. Otherwise, it | ||
# would try to directly execute the shell builtin 'command'. This workaround | ||
# should be kept for a long time since this issue was fixed only after the | ||
# GNU Make 4.2.1 release. | ||
cc-cross-prefix = $(firstword $(foreach c, $(1), \ | ||
$(if $(shell command -v -- $(c)gcc 2>/dev/null), $(c)))) | ||
|
||
# output directory for tests below | ||
TMPOUT = $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/).tmp_$$$$ | ||
|
||
# try-run | ||
# Usage: option = $(call try-run, $(CC)...-o "$$TMP",option-ok,otherwise) | ||
# Exit code chooses option. "$$TMP" serves as a temporary file and is | ||
# automatically cleaned up. | ||
try-run = $(shell set -e; \ | ||
TMP=$(TMPOUT)/tmp; \ | ||
TMPO=$(TMPOUT)/tmp.o; \ | ||
mkdir -p $(TMPOUT); \ | ||
trap "rm -rf $(TMPOUT)" EXIT; \ | ||
if ($(1)) >/dev/null 2>&1; \ | ||
then echo "$(2)"; \ | ||
else echo "$(3)"; \ | ||
fi) | ||
|
||
# as-option | ||
# Usage: cflags-y += $(call as-option,-Wa$(comma)-isa=foo,) | ||
|
||
as-option = $(call try-run,\ | ||
$(CC) $(KBUILD_CFLAGS) $(1) -c -x assembler /dev/null -o "$$TMP",$(1),$(2)) | ||
|
||
# as-instr | ||
# Usage: cflags-y += $(call as-instr,instr,option1,option2) | ||
|
||
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)) | ||
|
||
# cc-option | ||
# Usage: cflags-y += $(call cc-option,-march=winchip-c6,-march=i586) | ||
|
||
cc-option = $(call __cc-option, $(CC),\ | ||
$(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS),$(1),$(2)) | ||
|
||
# cc-option-yn | ||
# Usage: flag := $(call cc-option-yn,-march=winchip-c6) | ||
cc-option-yn = $(call try-run,\ | ||
$(CC) -Werror $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) $(1) -c -x c /dev/null -o "$$TMP",y,n) | ||
|
||
# cc-disable-warning | ||
# Usage: cflags-y += $(call cc-disable-warning,unused-but-set-variable) | ||
cc-disable-warning = $(call try-run,\ | ||
$(CC) -Werror $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) -W$(strip $(1)) -c -x c /dev/null -o "$$TMP",-Wno-$(strip $(1))) | ||
|
||
# cc-ifversion | ||
# Usage: EXTRA_CFLAGS += $(call cc-ifversion, -lt, 0402, -O1) | ||
cc-ifversion = $(shell [ $(CONFIG_GCC_VERSION)0 $(1) $(2)000 ] && echo $(3) || echo $(4)) | ||
|
||
# ld-option | ||
# Usage: KBUILD_LDFLAGS += $(call ld-option, -X, -Y) | ||
ld-option = $(call try-run, $(LD) $(KBUILD_LDFLAGS) $(1) -v,$(1),$(2),$(3)) | ||
|
||
# ld-ifversion | ||
# Usage: $(call ld-ifversion, -ge, 22252, y) | ||
ld-ifversion = $(shell [ $(CONFIG_LD_VERSION)0 $(1) $(2)0 ] && echo $(3) || echo $(4)) |