# Individual arch/{arch}/Makefiles should use -EL/-EB to set intended
# endianness and -m32/-m64 to set word size based on Kconfigs instead of
# relying on the target triple.
CLANG_TARGET_FLAGS_arm		:= arm-linux-gnueabi
CLANG_TARGET_FLAGS_arm64	:= aarch64-linux-gnu
CLANG_TARGET_FLAGS_hexagon	:= hexagon-linux-musl
CLANG_TARGET_FLAGS_m68k		:= m68k-linux-gnu
CLANG_TARGET_FLAGS_mips		:= mipsel-linux-gnu
CLANG_TARGET_FLAGS_powerpc	:= powerpc64le-linux-gnu
CLANG_TARGET_FLAGS_riscv	:= riscv64-linux-gnu
CLANG_TARGET_FLAGS_s390		:= s390x-linux-gnu
CLANG_TARGET_FLAGS_x86		:= x86_64-linux-gnu
CLANG_TARGET_FLAGS		:= $(CLANG_TARGET_FLAGS_$(SRCARCH))

ifeq ($(CROSS_COMPILE),)
ifeq ($(CLANG_TARGET_FLAGS),)
$(error Specify CROSS_COMPILE or add '--target=' option to scripts/Makefile.clang)
else
CLANG_FLAGS	+= --target=$(CLANG_TARGET_FLAGS)
endif # CLANG_TARGET_FLAGS
else
CLANG_FLAGS	+= --target=$(notdir $(CROSS_COMPILE:%-=%))
endif # CROSS_COMPILE

ifeq ($(LLVM_IAS),0)
CLANG_FLAGS	+= -fno-integrated-as
GCC_TOOLCHAIN_DIR := $(dir $(shell which $(CROSS_COMPILE)elfedit))
CLANG_FLAGS	+= --prefix=$(GCC_TOOLCHAIN_DIR)$(notdir $(CROSS_COMPILE))
else
CLANG_FLAGS	+= -fintegrated-as
endif
# By default, clang only warns when it encounters an unknown warning flag or
# certain optimization flags it knows it has not implemented.
# Make it behave more like gcc by erroring when these flags are encountered
# so they can be implemented or wrapped in cc-option.
CLANG_FLAGS	+= -Werror=unknown-warning-option
CLANG_FLAGS	+= -Werror=ignored-optimization-argument
KBUILD_CFLAGS	+= $(CLANG_FLAGS)
KBUILD_AFLAGS	+= $(CLANG_FLAGS)
export CLANG_FLAGS
