[PATCH] Makefile: fix empty MK_ARCH when using ccache

Heinrich Schuchardt xypron.glpk at gmx.de
Mon Nov 11 15:27:16 CET 2024


Am 11. November 2024 14:20:49 MEZ schrieb Quentin Schulz <foss+uboot at 0leil.net>:
>From: Quentin Schulz <quentin.schulz at cherry.de>
>
>One can use ccache by prefixing the typical CROSS_COMPILE value with
>"ccache " (e.g. "ccache aarch64-gnu-linux-" for Aarch64). This however
>makes the MK_ARCH empty because sed won't find a match anymore since it
>expects the CROSS_COMPILE value to start with the actual toolchain (with
>an unlimited number of white spaces before).
>
>This is failing builds since commit 7506c1566998 ("sandbox: Report host
>default-filename in native mode").
>
>Add "ccache" prefix to ignore but participate in the matching regex used
>by sed to identify the target architecture.
>
>Signed-off-by: Quentin Schulz <quentin.schulz at cherry.de>
>---
>One can use ccache by prefixing the typical CROSS_COMPILE value with
>"ccache " (e.g. "ccache aarch64-gnu-linux-" for Aarch64). This however
>makes the MK_ARCH empty because sed won't find a match anymore since it
>expects the CROSS_COMPILE value to start with the actual toolchain (with
>an unlimited number of white spaces before).
>
>This is failing builds since commit 7506c1566998 ("sandbox: Report host
>default-filename in native mode").
>
>Add "ccache" prefix to ignore but participate in the matching regex used
>by sed to identify the target architecture.
>---
> Makefile | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
>diff --git a/Makefile b/Makefile
>index 7275a02f24ca64ebd46c5dc6e769dcdee9917dca..71743db16fca930567edd67eb77f1c94e9b7b4e9 100644
>--- a/Makefile
>+++ b/Makefile
>@@ -21,7 +21,7 @@ include include/host_arch.h
> ifeq ("", "$(CROSS_COMPILE)")
>   MK_ARCH="${shell uname -m}"
> else
>-  MK_ARCH="${shell echo $(CROSS_COMPILE) | sed -n 's/^[[:space:]]*\([^\/]*\/\)*\([^-]*\)-[^[:space:]]*/\2/p'}"
>+  MK_ARCH="${shell echo $(CROSS_COMPILE) | sed -n 's/^\(ccache\)\?[[:space:]]*\([^\/]*\/\)*\([^-]*\)-[^[:space:]]*/\3/p'}"

The target architecture cannot be determined in this way.

You could use the riscv64 compiler to compile riscv32 when providing a gcc flag.

You should not make any assumptions about the naming scheme of vendor toolchains.

The correct way is to cross-compile a binary. Then use readelf to retrieve the target architecture.

Best regards

Heinrich

> endif
> unexport HOST_ARCH
> ifeq ("x86_64", $(MK_ARCH))
>
>---
>base-commit: 9c25cd563179cf32cf3b119d5ae78ef8348d0335
>change-id: 20241111-mk_arch-ccache-7150482cfde8
>
>Best regards,



More information about the U-Boot mailing list