162306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0-only 262306a36Sopenharmony_ci 362306a36Sopenharmony_ci# cc-cross-prefix 462306a36Sopenharmony_ci# Usage: CROSS_COMPILE := $(call cc-cross-prefix, m68k-linux-gnu- m68k-linux-) 562306a36Sopenharmony_ci# Return first <prefix> where a <prefix>gcc is found in PATH. 662306a36Sopenharmony_ci# If no gcc found in PATH with listed prefixes return nothing 762306a36Sopenharmony_ci# 862306a36Sopenharmony_ci# Note: '2>/dev/null' is here to force Make to invoke a shell. Otherwise, it 962306a36Sopenharmony_ci# would try to directly execute the shell builtin 'command'. This workaround 1062306a36Sopenharmony_ci# should be kept for a long time since this issue was fixed only after the 1162306a36Sopenharmony_ci# GNU Make 4.2.1 release. 1262306a36Sopenharmony_cicc-cross-prefix = $(firstword $(foreach c, $(1), \ 1362306a36Sopenharmony_ci $(if $(shell command -v -- $(c)gcc 2>/dev/null), $(c)))) 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci# output directory for tests below 1662306a36Sopenharmony_ciTMPOUT = $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/).tmp_$$$$ 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci# try-run 1962306a36Sopenharmony_ci# Usage: option = $(call try-run, $(CC)...-o "$$TMP",option-ok,otherwise) 2062306a36Sopenharmony_ci# Exit code chooses option. "$$TMP" serves as a temporary file and is 2162306a36Sopenharmony_ci# automatically cleaned up. 2262306a36Sopenharmony_citry-run = $(shell set -e; \ 2362306a36Sopenharmony_ci TMP=$(TMPOUT)/tmp; \ 2462306a36Sopenharmony_ci trap "rm -rf $(TMPOUT)" EXIT; \ 2562306a36Sopenharmony_ci mkdir -p $(TMPOUT); \ 2662306a36Sopenharmony_ci if ($(1)) >/dev/null 2>&1; \ 2762306a36Sopenharmony_ci then echo "$(2)"; \ 2862306a36Sopenharmony_ci else echo "$(3)"; \ 2962306a36Sopenharmony_ci fi) 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci# as-option 3262306a36Sopenharmony_ci# Usage: aflags-y += $(call as-option,-Wa$(comma)-isa=foo,) 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_cias-option = $(call try-run,\ 3562306a36Sopenharmony_ci $(CC) -Werror $(KBUILD_CPPFLAGS) $(KBUILD_AFLAGS) $(1) -c -x assembler-with-cpp /dev/null -o "$$TMP",$(1),$(2)) 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci# as-instr 3862306a36Sopenharmony_ci# Usage: aflags-y += $(call as-instr,instr,option1,option2) 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_cias-instr = $(call try-run,\ 4162306a36Sopenharmony_ci printf "%b\n" "$(1)" | $(CC) -Werror $(CLANG_FLAGS) $(KBUILD_AFLAGS) -Wa$(comma)--fatal-warnings -c -x assembler-with-cpp -o "$$TMP" -,$(2),$(3)) 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ci# __cc-option 4462306a36Sopenharmony_ci# Usage: MY_CFLAGS += $(call __cc-option,$(CC),$(MY_CFLAGS),-march=winchip-c6,-march=i586) 4562306a36Sopenharmony_ci__cc-option = $(call try-run,\ 4662306a36Sopenharmony_ci $(1) -Werror $(2) $(3) -c -x c /dev/null -o "$$TMP",$(3),$(4)) 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ci# cc-option 4962306a36Sopenharmony_ci# Usage: cflags-y += $(call cc-option,-march=winchip-c6,-march=i586) 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_cicc-option = $(call __cc-option, $(CC),\ 5262306a36Sopenharmony_ci $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS),$(1),$(2)) 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ci# cc-option-yn 5562306a36Sopenharmony_ci# Usage: flag := $(call cc-option-yn,-march=winchip-c6) 5662306a36Sopenharmony_cicc-option-yn = $(call try-run,\ 5762306a36Sopenharmony_ci $(CC) -Werror $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) $(1) -c -x c /dev/null -o "$$TMP",y,n) 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ci# cc-disable-warning 6062306a36Sopenharmony_ci# Usage: cflags-y += $(call cc-disable-warning,unused-but-set-variable) 6162306a36Sopenharmony_cicc-disable-warning = $(call try-run,\ 6262306a36Sopenharmony_ci $(CC) -Werror $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) -W$(strip $(1)) -c -x c /dev/null -o "$$TMP",-Wno-$(strip $(1))) 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ci# gcc-min-version 6562306a36Sopenharmony_ci# Usage: cflags-$(call gcc-min-version, 70100) += -foo 6662306a36Sopenharmony_cigcc-min-version = $(call test-ge, $(CONFIG_GCC_VERSION), $1) 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ci# clang-min-version 6962306a36Sopenharmony_ci# Usage: cflags-$(call clang-min-version, 110000) += -foo 7062306a36Sopenharmony_ciclang-min-version = $(call test-ge, $(CONFIG_CLANG_VERSION), $1) 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_ci# ld-option 7362306a36Sopenharmony_ci# Usage: KBUILD_LDFLAGS += $(call ld-option, -X, -Y) 7462306a36Sopenharmony_cild-option = $(call try-run, $(LD) $(KBUILD_LDFLAGS) $(1) -v,$(1),$(2),$(3)) 75