Re: [OE-core] [PATCH] armv8/armv9: Avoid using -march when -mcpu is chosen

2024-01-27 Thread Jon Mason
On Fri, Jan 26, 2024 at 03:31:41PM -0800, Khem Raj wrote:
> Current include logic goes into generic arm v8/v9 architecture tunes and
> adds corresponding -march option after synthesizing it from various tune
> fragments, this is fine for a machine which is using armv8/armv9 based
> tunes but cortex tunes are intentionally using -mcpu option based on
> selected tune value. So when cortex based default tune is selected for a
> machine, it will add both -mcpu and -march to the compiler commandline
> which can result in invalid combinations for this pair in gcc's own
> logic. This can then result in compiler warnings/errors reporting this
> 
> e.g.
> 
> aarch64-yoe-linux-gcc  -mcpu=cortex-a72.cortex-a53 -march=armv8-a+crc+crypto 
> -mbranch-protection=standard
> ...
> cc1: error: switch '-mcpu=cortex-a72.cortex-a53' conflicts with 
> '-march=armv8-a+crc+crypto' switch and resulted in options '+crc+crypto' 
> being added [-Werror]
> 
> This is seen in lot of configure test results in glibc 2.39 and the
> warning is promoted to errors by gcc in some of these checks especially
> with gcc-14, the logs also show it as warning in other places in
> configure checks.
> 
> mcpu option will compute relevant march implicitly as it specifies a cpu
> implementation and this will be the right value to use, therefore do not
> specify -march when -mcpu is already describing the cpu.
> 
> Signed-off-by: Khem Raj 
> Cc: Ross Burton 
> Cc: Jon Mason 

Looks good to me.

Reviewed-by: Jon Mason 

I have some coming that I'll need to tweak to match these.  So, expect
those soon.

Thanks,
Jon


> ---
>  meta/conf/machine/include/arm/armv8-1m/tune-cortexm55.inc  | 3 ++-
>  meta/conf/machine/include/arm/armv8-2a/tune-cortexa55.inc  | 3 ++-
>  meta/conf/machine/include/arm/armv8-2a/tune-cortexa65.inc  | 3 ++-
>  meta/conf/machine/include/arm/armv8-2a/tune-cortexa65ae.inc| 3 ++-
>  .../machine/include/arm/armv8-2a/tune-cortexa75-cortexa55.inc  | 3 ++-
>  meta/conf/machine/include/arm/armv8-2a/tune-cortexa75.inc  | 3 ++-
>  .../machine/include/arm/armv8-2a/tune-cortexa76-cortexa55.inc  | 3 ++-
>  meta/conf/machine/include/arm/armv8-2a/tune-cortexa76.inc  | 3 ++-
>  meta/conf/machine/include/arm/armv8-2a/tune-cortexa76ae.inc| 3 ++-
>  meta/conf/machine/include/arm/armv8-2a/tune-cortexa77.inc  | 3 ++-
>  meta/conf/machine/include/arm/armv8-2a/tune-neoversee1.inc | 3 ++-
>  meta/conf/machine/include/arm/armv8-2a/tune-octeontx2.inc  | 3 ++-
>  meta/conf/machine/include/arm/armv8-m/tune-cortexm23.inc   | 3 ++-
>  meta/conf/machine/include/arm/armv8-m/tune-cortexm33.inc   | 3 ++-
>  meta/conf/machine/include/arm/armv8-m/tune-cortexm35p.inc  | 3 ++-
>  meta/conf/machine/include/arm/armv8a/tune-cortexa32.inc| 3 ++-
>  meta/conf/machine/include/arm/armv8a/tune-cortexa34.inc| 3 ++-
>  meta/conf/machine/include/arm/armv8a/tune-cortexa35.inc| 3 ++-
>  meta/conf/machine/include/arm/armv8a/tune-cortexa53.inc| 3 ++-
>  .../machine/include/arm/armv8a/tune-cortexa57-cortexa53.inc| 3 ++-
>  meta/conf/machine/include/arm/armv8a/tune-cortexa57.inc| 3 ++-
>  .../machine/include/arm/armv8a/tune-cortexa72-cortexa53.inc| 3 ++-
>  meta/conf/machine/include/arm/armv8a/tune-cortexa72.inc| 3 ++-
>  .../machine/include/arm/armv8a/tune-cortexa73-cortexa35.inc| 3 ++-
>  .../machine/include/arm/armv8a/tune-cortexa73-cortexa53.inc| 3 ++-
>  meta/conf/machine/include/arm/armv8a/tune-cortexa73.inc| 3 ++-
>  meta/conf/machine/include/arm/armv8r/tune-cortexr52.inc| 3 ++-
>  meta/conf/machine/include/arm/armv9a/tune-neoversen2.inc   | 3 ++-
>  28 files changed, 56 insertions(+), 28 deletions(-)
> 
> diff --git a/meta/conf/machine/include/arm/armv8-1m/tune-cortexm55.inc 
> b/meta/conf/machine/include/arm/armv8-1m/tune-cortexm55.inc
> index 493ad67b21d..0a115be8a47 100644
> --- a/meta/conf/machine/include/arm/armv8-1m/tune-cortexm55.inc
> +++ b/meta/conf/machine/include/arm/armv8-1m/tune-cortexm55.inc
> @@ -10,5 +10,6 @@ require conf/machine/include/arm/arch-armv8-1m-main.inc
>  
>  AVAILTUNES+= "cortexm55"
>  ARMPKGARCH:tune-cortexm55  = "cortexm55"
> -TUNE_FEATURES:tune-cortexm55   = 
> "${TUNE_FEATURES:tune-armv8-1m-main} cortexm55"
> +# We do not want -march since -mcpu is added above to cover for it
> +TUNE_FEATURES:tune-cortexm55   = "cortexm55"
>  PACKAGE_EXTRA_ARCHS:tune-cortexm55 = 
> "${PACKAGE_EXTRA_ARCHS:tune-armv8-1m-main} cortexm55"
> diff --git a/meta/conf/machine/include/arm/armv8-2a/tune-cortexa55.inc 
> b/meta/conf/machine/include/arm/armv8-2a/tune-cortexa55.inc
> index d130b4b90ad..5e63b45ae0e 100644
> --- a/meta/conf/machine/include/arm/armv8-2a/tune-cortexa55.inc
> +++ b/meta/conf/machine/include/arm/armv8-2a/tune-cortexa55.inc
> @@ -8,6 +8,7 @@ require conf/machine/include/arm/arch-armv8-2a.inc
>  # Little Endian base configs
>  AVAILTUNES += "cortexa55"
>  

[OE-core] [PATCH] armv8/armv9: Avoid using -march when -mcpu is chosen

2024-01-26 Thread Khem Raj
Current include logic goes into generic arm v8/v9 architecture tunes and
adds corresponding -march option after synthesizing it from various tune
fragments, this is fine for a machine which is using armv8/armv9 based
tunes but cortex tunes are intentionally using -mcpu option based on
selected tune value. So when cortex based default tune is selected for a
machine, it will add both -mcpu and -march to the compiler commandline
which can result in invalid combinations for this pair in gcc's own
logic. This can then result in compiler warnings/errors reporting this

e.g.

aarch64-yoe-linux-gcc  -mcpu=cortex-a72.cortex-a53 -march=armv8-a+crc+crypto 
-mbranch-protection=standard
...
cc1: error: switch '-mcpu=cortex-a72.cortex-a53' conflicts with 
'-march=armv8-a+crc+crypto' switch and resulted in options '+crc+crypto' being 
added [-Werror]

This is seen in lot of configure test results in glibc 2.39 and the
warning is promoted to errors by gcc in some of these checks especially
with gcc-14, the logs also show it as warning in other places in
configure checks.

mcpu option will compute relevant march implicitly as it specifies a cpu
implementation and this will be the right value to use, therefore do not
specify -march when -mcpu is already describing the cpu.

Signed-off-by: Khem Raj 
Cc: Ross Burton 
Cc: Jon Mason 
---
 meta/conf/machine/include/arm/armv8-1m/tune-cortexm55.inc  | 3 ++-
 meta/conf/machine/include/arm/armv8-2a/tune-cortexa55.inc  | 3 ++-
 meta/conf/machine/include/arm/armv8-2a/tune-cortexa65.inc  | 3 ++-
 meta/conf/machine/include/arm/armv8-2a/tune-cortexa65ae.inc| 3 ++-
 .../machine/include/arm/armv8-2a/tune-cortexa75-cortexa55.inc  | 3 ++-
 meta/conf/machine/include/arm/armv8-2a/tune-cortexa75.inc  | 3 ++-
 .../machine/include/arm/armv8-2a/tune-cortexa76-cortexa55.inc  | 3 ++-
 meta/conf/machine/include/arm/armv8-2a/tune-cortexa76.inc  | 3 ++-
 meta/conf/machine/include/arm/armv8-2a/tune-cortexa76ae.inc| 3 ++-
 meta/conf/machine/include/arm/armv8-2a/tune-cortexa77.inc  | 3 ++-
 meta/conf/machine/include/arm/armv8-2a/tune-neoversee1.inc | 3 ++-
 meta/conf/machine/include/arm/armv8-2a/tune-octeontx2.inc  | 3 ++-
 meta/conf/machine/include/arm/armv8-m/tune-cortexm23.inc   | 3 ++-
 meta/conf/machine/include/arm/armv8-m/tune-cortexm33.inc   | 3 ++-
 meta/conf/machine/include/arm/armv8-m/tune-cortexm35p.inc  | 3 ++-
 meta/conf/machine/include/arm/armv8a/tune-cortexa32.inc| 3 ++-
 meta/conf/machine/include/arm/armv8a/tune-cortexa34.inc| 3 ++-
 meta/conf/machine/include/arm/armv8a/tune-cortexa35.inc| 3 ++-
 meta/conf/machine/include/arm/armv8a/tune-cortexa53.inc| 3 ++-
 .../machine/include/arm/armv8a/tune-cortexa57-cortexa53.inc| 3 ++-
 meta/conf/machine/include/arm/armv8a/tune-cortexa57.inc| 3 ++-
 .../machine/include/arm/armv8a/tune-cortexa72-cortexa53.inc| 3 ++-
 meta/conf/machine/include/arm/armv8a/tune-cortexa72.inc| 3 ++-
 .../machine/include/arm/armv8a/tune-cortexa73-cortexa35.inc| 3 ++-
 .../machine/include/arm/armv8a/tune-cortexa73-cortexa53.inc| 3 ++-
 meta/conf/machine/include/arm/armv8a/tune-cortexa73.inc| 3 ++-
 meta/conf/machine/include/arm/armv8r/tune-cortexr52.inc| 3 ++-
 meta/conf/machine/include/arm/armv9a/tune-neoversen2.inc   | 3 ++-
 28 files changed, 56 insertions(+), 28 deletions(-)

diff --git a/meta/conf/machine/include/arm/armv8-1m/tune-cortexm55.inc 
b/meta/conf/machine/include/arm/armv8-1m/tune-cortexm55.inc
index 493ad67b21d..0a115be8a47 100644
--- a/meta/conf/machine/include/arm/armv8-1m/tune-cortexm55.inc
+++ b/meta/conf/machine/include/arm/armv8-1m/tune-cortexm55.inc
@@ -10,5 +10,6 @@ require conf/machine/include/arm/arch-armv8-1m-main.inc
 
 AVAILTUNES+= "cortexm55"
 ARMPKGARCH:tune-cortexm55  = "cortexm55"
-TUNE_FEATURES:tune-cortexm55   = "${TUNE_FEATURES:tune-armv8-1m-main} 
cortexm55"
+# We do not want -march since -mcpu is added above to cover for it
+TUNE_FEATURES:tune-cortexm55   = "cortexm55"
 PACKAGE_EXTRA_ARCHS:tune-cortexm55 = 
"${PACKAGE_EXTRA_ARCHS:tune-armv8-1m-main} cortexm55"
diff --git a/meta/conf/machine/include/arm/armv8-2a/tune-cortexa55.inc 
b/meta/conf/machine/include/arm/armv8-2a/tune-cortexa55.inc
index d130b4b90ad..5e63b45ae0e 100644
--- a/meta/conf/machine/include/arm/armv8-2a/tune-cortexa55.inc
+++ b/meta/conf/machine/include/arm/armv8-2a/tune-cortexa55.inc
@@ -8,6 +8,7 @@ require conf/machine/include/arm/arch-armv8-2a.inc
 # Little Endian base configs
 AVAILTUNES += "cortexa55"
 ARMPKGARCH:tune-cortexa55 = "cortexa55"
-TUNE_FEATURES:tune-cortexa55  = "${TUNE_FEATURES:tune-armv8-2a-crypto} 
cortexa55"
+# We do not want -march since -mcpu is added above to cover for it
+TUNE_FEATURES:tune-cortexa55  = "aarch64 crypto cortexa55"
 PACKAGE_EXTRA_ARCHS:tune-cortexa55= 
"${PACKAGE_EXTRA_ARCHS:tune-armv8-2a-crypto}