1*98d863a5SJerome Forissier# CROSS_COMPILE_$(sm) is derived from CROSS_COMPILE/CROSS_COMPILE32/ 2*98d863a5SJerome Forissier# CROSS_COMPILE64 and indicates the target that should be passed to clang. Path 3*98d863a5SJerome Forissier# components are ignored, as well as any command before the compiler name (for 4*98d863a5SJerome Forissier# instance "/some/path/ccache /other/path/arm-linux-gnueabihf-"). 5*98d863a5SJerome Forissier# We try to extract any ccache command if present. 6*98d863a5SJerome Forissierclang-target := $(patsubst %-,%,$(notdir $(lastword $(CROSS_COMPILE_$(sm))))) 7*98d863a5SJerome Forissierccache-cmd := $(if $(findstring ccache,$(CROSS_COMPILE_$(sm))),$(firstword $(CROSS_COMPILE_$(sm))) ,) 8*98d863a5SJerome Forissier 9*98d863a5SJerome ForissierCC$(sm) := $(ccache-cmd)clang --target=$(clang-target) 10*98d863a5SJerome ForissierCPP$(sm) := $(ccache-cmd)clang-cpp --target=$(clang-target) 11*98d863a5SJerome ForissierLD$(sm) := $(ccache-cmd)ld.lld 12*98d863a5SJerome Forissier 13*98d863a5SJerome Forissierifeq ($(sm)-$(CFG_WITH_PAGER),core-y) 14*98d863a5SJerome Forissier# Workaround an issue with all_objs.o and unpaged.o when CFG_WITH_PAGER=y: 15*98d863a5SJerome Forissier# ld.ldd merges .text.* sections into .text, even though the linker script does 16*98d863a5SJerome Forissier# not tell to do so. --relocatable would avoid that, but is not compatible with 17*98d863a5SJerome Forissier# --gc-sections. A trivial patch to ld.lld can fix the issue (in 18*98d863a5SJerome Forissier# lld/ELF/Writer.cpp, change elf::getOutputSectionName() to always return 19*98d863a5SJerome Forissier# s->name) so perhaps a new command line option could be proposed upstream? 20*98d863a5SJerome Forissier# Anyway, use GNU.ld for the moment. 21*98d863a5SJerome ForissierLDcore := $(CROSS_COMPILE_$(sm))ld 22*98d863a5SJerome Forissierendif 23*98d863a5SJerome Forissier 24*98d863a5SJerome ForissierAR$(sm) := $(ccache-cmd)llvm-ar 25*98d863a5SJerome ForissierNM$(sm) := llvm-nm 26*98d863a5SJerome ForissierOBJCOPY$(sm) := ./scripts/llvm-objcopy-wrapper 27*98d863a5SJerome Forissier 28*98d863a5SJerome Forissier# llvm-objdump: 29*98d863a5SJerome Forissier# - Does not support mixed 32-bit ARM and Thumb instructions 30*98d863a5SJerome Forissier# - Has a poorer output than the binutils version (static functions not shown, 31*98d863a5SJerome Forissier# for instance). 32*98d863a5SJerome Forissier# Rely on the GNU binutils version instead (if available). 33*98d863a5SJerome Forissierbinutils-objdump = $(CROSS_COMPILE_$(sm))objdump 34*98d863a5SJerome Forissierifneq (,$(filter GNU,$(shell $(binutils-objdump) -v 2>&1))) 35*98d863a5SJerome ForissierOBJDUMP$(sm) := $(binutils-objdump) 36*98d863a5SJerome Forissierelse 37*98d863a5SJerome ForissierOBJDUMP$(sm) := echo "Warning: binutils objdump not found, file will be empty" >&2; true 38*98d863a5SJerome Forissierendif 39*98d863a5SJerome Forissier 40*98d863a5SJerome ForissierREADELF$(sm) := llvm-readelf 41*98d863a5SJerome Forissier 42*98d863a5SJerome Forissiernostdinc$(sm) := -nostdinc -isystem $(shell $(CC$(sm)) \ 43*98d863a5SJerome Forissier -print-file-name=include 2> /dev/null) 44*98d863a5SJerome Forissier 45*98d863a5SJerome Forissiercomp-cflags-warns-clang := -Wno-language-extension-token \ 46*98d863a5SJerome Forissier -Wno-gnu-zero-variadic-macro-arguments 47*98d863a5SJerome Forissier 48*98d863a5SJerome Forissierlibgcc$(sm) := 49*98d863a5SJerome Forissier 50*98d863a5SJerome Forissier# Define these to something to discover accidental use 51*98d863a5SJerome ForissierCC := false 52*98d863a5SJerome ForissierCPP := false 53*98d863a5SJerome ForissierLD := false 54*98d863a5SJerome ForissierAR := false 55*98d863a5SJerome ForissierNM := false 56*98d863a5SJerome ForissierOBJCOPY := false 57*98d863a5SJerome ForissierOBJDUMP := false 58*98d863a5SJerome ForissierREADELF := false 59*98d863a5SJerome Forissiernostdinc := --bad-nostdinc-variable 60*98d863a5SJerome Forissierlibgcc := --bad-libgcc-variable 61*98d863a5SJerome Forissier 62