Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

tools: Fix unavoidable GCC call in Clang builds

In ChromeOS and Gentoo we catch any unwanted mixed Clang/LLVM
and GCC/binutils usage via toolchain wrappers which fail builds.
This has revealed that GCC is called unconditionally in Clang
configured builds to populate GCC_TOOLCHAIN_DIR.

Allow the user to override CLANG_CROSS_FLAGS to avoid the GCC
call - in our case we set the var directly in the ebuild recipe.

In theory Clang could be able to autodetect these settings so
this logic could be removed entirely, but in practice as the
commit cebdb7374577 ("tools: Help cross-building with clang")
mentions, this does not always work, so giving distributions
more control to specify their flags & sysroot is beneficial.

Suggested-by: Manoj Gupta <manojgupta@chromium.com>
Suggested-by: Nathan Chancellor <nathan@kernel.org>
Signed-off-by: Adrian Ratiu <adrian.ratiu@collabora.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Nathan Chancellor <nathan@kernel.org>
Cc: Nick Desaulniers <ndesaulniers@google.com>
Link: https://lore.kernel.org/lkml/87czjk4osi.fsf@ryzen9.i-did-not-set--mail-host-address--so-tickle-me
Link: https://lore.kernel.org/bpf/20220308121428.81735-1-adrian.ratiu@collabora.com

authored by

Adrian Ratiu and committed by
Daniel Borkmann
7fd9fd46 d23a8720

+4
+4
tools/scripts/Makefile.include
··· 89 89 EXTRA_WARNINGS += -Wstrict-aliasing=3 90 90 91 91 else ifneq ($(CROSS_COMPILE),) 92 + # Allow userspace to override CLANG_CROSS_FLAGS to specify their own 93 + # sysroots and flags or to avoid the GCC call in pure Clang builds. 94 + ifeq ($(CLANG_CROSS_FLAGS),) 92 95 CLANG_CROSS_FLAGS := --target=$(notdir $(CROSS_COMPILE:%-=%)) 93 96 GCC_TOOLCHAIN_DIR := $(dir $(shell which $(CROSS_COMPILE)gcc 2>/dev/null)) 94 97 ifneq ($(GCC_TOOLCHAIN_DIR),) ··· 99 96 CLANG_CROSS_FLAGS += --sysroot=$(shell $(CROSS_COMPILE)gcc -print-sysroot) 100 97 CLANG_CROSS_FLAGS += --gcc-toolchain=$(realpath $(GCC_TOOLCHAIN_DIR)/..) 101 98 endif # GCC_TOOLCHAIN_DIR 99 + endif # CLANG_CROSS_FLAGS 102 100 CFLAGS += $(CLANG_CROSS_FLAGS) 103 101 AFLAGS += $(CLANG_CROSS_FLAGS) 104 102 endif # CROSS_COMPILE