Hi, Willy
On Sun, Aug 06, 2023 at 02:46:03AM +0800, Zhangjin Wu wrote:
Some cross compilers may not just be prefixed with ARCH, customize them by architecture may simplify the test a lot, especially, when iterate with ARCH.
After customizing this for every architecture, the minimal test argument will be architecture itself, no CROSS_COMPILE required to be passed.
If the prefix of installed cross compiler is not the same as the one customized, we can also pass CROSS_COMPILE as before or even pass CROSS_COMPILE_<ARCH>.
Signed-off-by: Zhangjin Wu falcon@tinylab.org
tools/testing/selftests/nolibc/Makefile | 6 ++++++ 1 file changed, 6 insertions(+)
diff --git a/tools/testing/selftests/nolibc/Makefile b/tools/testing/selftests/nolibc/Makefile index 452d8e424d28..45d231b9c5c2 100644 --- a/tools/testing/selftests/nolibc/Makefile +++ b/tools/testing/selftests/nolibc/Makefile @@ -55,6 +55,12 @@ IMAGE_loongarch = arch/loongarch/boot/vmlinuz.efi IMAGE = $(IMAGE_$(XARCH)) IMAGE_NAME = $(notdir $(IMAGE)) +# CROSS_COMPILE: cross toolchain prefix by architecture +CROSS_COMPILE ?= $(CROSS_COMPILE_$(XARCH))
+# make sure CC is prefixed with CROSS_COMPILE +$(call allow-override,CC,$(CROSS_COMPILE)gcc)
Note that I feared that it would break my "CC=gcc-5.5.0" and so on but fortunately it did not. However I don't understand what it tries to do nor the problem it tries to solve (even the commit message is quite unclear to me). I'm leaving it aside anyway but I wanted to let you know.
Thanks you for this note, will add it as a test case in our v2.
These places require the '$(CC)' prefixed with $(CROSS_COMPILE):
$ grep ")$(CC)" tools/testing/selftests/nolibc/Makefile $(QUIET_CC)$(CC) $(CFLAGS) $(LDFLAGS) -o $@ \ $(QUIET_CC)$(CC) $(CFLAGS) $(LDFLAGS) -o $@ \ $(QUIET_CC)$(CC) -o $@ $<
When CROSS_COMPILE come from command line, the first lines we included have the CROSS_COMPILE knowledge and will add right prefix for CC:
# Makefile for nolibc tests include ../../../scripts/Makefile.include
But the customized $(CROSS_COMPILE) must be added from the XARCH lines, then, differs from the ones passed from command line, the above lines (before XARCH) will have no CROSS_COMPILE knowledge, the CC therefore will have no prefix.
CROSS_COMPILE=xxx <= before, from command line
include ../../../scripts/Makefile.include <= CC get the right CROSS_COMPILE prefix
XARCH = $(or $(XARCH_$(ARCH)),$(ARCH)) <= XARCH here
CROSS_COMPILE ?= $(CROSS_COMPILE_$(XARCH)) <= after, customize ourselves (call allow-override,CC,$(CROSS_COMPILE)gcc) <= CC have no right prefix here
$(QUIET_CC)$(CC) $(CFLAGS) $(LDFLAGS) -o $@ \
So, we must add the prefix to CC ourselves after the CROSS_COMPILE lines we customized, the 'allow-override' helper is also from ../../../scripts/Makefile.include.
But you did find a bug above, we should include it again here to avoid not break the possibility of using llvm (still require to check if there are some other regressions):
include ../../../scripts/Makefile.include
And I have further found there is another cc-cross-prefix helper from:
$ grep cc-cross-prefix -ur scripts/ scripts/Makefile.compiler:# cc-cross-prefix scripts/Makefile.compiler:# Usage: CROSS_COMPILE := $(call cc-cross-prefix, m68k-linux-gnu- m68k-linux-) scripts/Makefile.compiler:cc-cross-prefix = $(firstword $(foreach c, $(1), \
So, we are able to search the toolchains from Arnd's, local toolchains and ..., may not need to force users to use which one, I will do more tests on it.
Please don't merge this patch too, to avoid break anything, let's tune it carefully in our v2 and delay the whole stuff to v6.7.
Thanks, Zhangjin
Willy