diff mbox series

Makefile: fix empty MK_ARCH when using ccache

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

Commit Message

Quentin Schulz Nov. 11, 2024, 1:20 p.m. UTC
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(-)


---
base-commit: 9c25cd563179cf32cf3b119d5ae78ef8348d0335
change-id: 20241111-mk_arch-ccache-7150482cfde8

Best regards,

Comments

Heinrich Schuchardt Nov. 11, 2024, 2:27 p.m. UTC | #1
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,
Quentin Schulz Nov. 11, 2024, 2:43 p.m. UTC | #2
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
Tom Rini Nov. 11, 2024, 3:43 p.m. UTC | #3
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.
Tom Rini Nov. 15, 2024, 4:27 a.m. UTC | #4
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 mbox series

Patch

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))