xref: /optee_os/mk/clang.mk (revision 98d863a5c0b27d79c76dbe9fdda73a35b7cf7405)
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