Message ID | 20241111-mk_arch-ccache-v1-1-e27f5f605bc4@cherry.de |
---|---|
State | Accepted |
Commit | 04b1d84221d58a9fdce811b585061abac0b50700 |
Delegated to: | Tom Rini |
Headers | show |
Series | Makefile: fix empty MK_ARCH when using ccache | expand |
Am 11. November 2024 14:20:49 MEZ schrieb Quentin Schulz <foss+uboot@0leil.net>: >From: Quentin Schulz <quentin.schulz@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@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,
Hi Heinrich, On 11/11/24 3:27 PM, Heinrich Schuchardt wrote: > Am 11. November 2024 14:20:49 MEZ schrieb Quentin Schulz <foss+uboot@0leil.net>: >> From: Quentin Schulz <quentin.schulz@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@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. > I am assuming nothing more than what we are already assuming for the last three and half years, c.f. f7691a6d736bec7915c227ac14076f9993a27367. Cheers, Quentin
On Mon, Nov 11, 2024 at 03:43:27PM +0100, Quentin Schulz wrote: > Hi Heinrich, > > On 11/11/24 3:27 PM, Heinrich Schuchardt wrote: > > Am 11. November 2024 14:20:49 MEZ schrieb Quentin Schulz <foss+uboot@0leil.net>: > > > From: Quentin Schulz <quentin.schulz@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@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. > > > > I am assuming nothing more than what we are already assuming for the last > three and half years, c.f. f7691a6d736bec7915c227ac14076f9993a27367. Yes and also, ugh, I wonder if that works right for using clang, too. It does for how I use it, which involves setting CROSS_COMPILE anyhow but I don't know if the LLVM-only option would work. Of course I also don't know if that works today. The original logic is fragile, this makes it no more or less fragile, and I'm not 100% sure I like that everyone know has to set and test against HOST_ARCH, which we weren't before 7506c1566998 ("sandbox: Report host default-filename in native mode"). This should probably come in just after I tag -rc2 as it's a fix at least.
On Mon, 11 Nov 2024 14:20:49 +0100, Quentin Schulz wrote: > 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"). > > [...] Applied to u-boot/master, thanks!
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'}" endif unexport HOST_ARCH ifeq ("x86_64", $(MK_ARCH))