blob: 28367e738c9a252448640a21fd48384035db61dd [file] [log] [blame]
# CROSS_COMPILE_$(sm) is derived from CROSS_COMPILE/CROSS_COMPILE32/
# CROSS_COMPILE64 and indicates the target that should be passed to clang. Path
# components are ignored, as well as any command before the compiler name (for
# instance "/some/path/ccache /other/path/arm-linux-gnueabihf-").
# We try to extract any ccache command if present.
clang-target := $(patsubst %-,%,$(notdir $(lastword $(CROSS_COMPILE_$(sm)))))
ccache-cmd := $(if $(findstring ccache,$(CROSS_COMPILE_$(sm))),$(firstword $(CROSS_COMPILE_$(sm))) ,)
CC$(sm) := $(ccache-cmd)clang --target=$(clang-target)
CPP$(sm) := $(ccache-cmd)clang-cpp --target=$(clang-target)
LD$(sm) := $(ccache-cmd)ld.lld
ifeq ($(sm)-$(CFG_WITH_PAGER),core-y)
# Workaround an issue with all_objs.o and unpaged.o when CFG_WITH_PAGER=y:
# ld.ldd merges .text.* sections into .text, even though the linker script does
# not tell to do so. --relocatable would avoid that, but is not compatible with
# --gc-sections. A trivial patch to ld.lld can fix the issue (in
# lld/ELF/Writer.cpp, change elf::getOutputSectionName() to always return
# s->name) so perhaps a new command line option could be proposed upstream?
# Anyway, use GNU.ld for the moment.
LDcore := $(CROSS_COMPILE_$(sm))ld
endif
AR$(sm) := $(ccache-cmd)llvm-ar
NM$(sm) := llvm-nm
OBJCOPY$(sm) := llvm-objcopy
# llvm-objdump:
# - Does not support mixed 32-bit ARM and Thumb instructions
# - Has a poorer output than the binutils version (static functions not shown,
# for instance).
# Rely on the GNU binutils version instead (if available).
binutils-objdump = $(CROSS_COMPILE_$(sm))objdump
ifneq (,$(filter GNU,$(shell $(binutils-objdump) -v 2>&1)))
OBJDUMP$(sm) := $(binutils-objdump)
else
OBJDUMP$(sm) := echo "Warning: binutils objdump not found, file will be empty" >&2; true
endif
READELF$(sm) := llvm-readelf
nostdinc$(sm) := -nostdinc -isystem $(shell $(CC$(sm)) \
-print-file-name=include 2> /dev/null)
comp-cflags-warns-clang := -Wno-language-extension-token \
-Wno-gnu-zero-variadic-macro-arguments
libgcc$(sm) :=
# Define these to something to discover accidental use
CC := false
CPP := false
LD := false
AR := false
NM := false
OBJCOPY := false
OBJDUMP := false
READELF := false
nostdinc := --bad-nostdinc-variable
libgcc := --bad-libgcc-variable