GCC has the ability to pass extensions to the march parameter, which
expand the funcationality of the march.  For example
"-march=armv7ve+simd" adds SIMD to ARMv7.  Currently, there is no way to
expand the march setting without modifying each instance, as you can't
guarantee the ordering when using the existing TUNE_CCARGS.  By
introducing two new variables, TUNE_CCARGS_MARCH and
TUNE_CCARGS_MARCH_OPT, we can enforce that these two go together.

Also, expand existing and create new feature files that use these
variables to expand the functionality.

Signed-off-by: Jon Mason <[email protected]>
---
 meta/conf/machine/include/arm/arch-arm.inc         |  4 ++++
 meta/conf/machine/include/arm/arch-armv4.inc       |  2 +-
 meta/conf/machine/include/arm/arch-armv5.inc       |  2 +-
 meta/conf/machine/include/arm/arch-armv6.inc       |  2 +-
 meta/conf/machine/include/arm/arch-armv6m.inc      |  2 +-
 meta/conf/machine/include/arm/arch-armv7a.inc      |  2 +-
 meta/conf/machine/include/arm/arch-armv7em.inc     |  2 +-
 meta/conf/machine/include/arm/arch-armv7m.inc      |  2 +-
 meta/conf/machine/include/arm/arch-armv7ve.inc     |  2 +-
 .../machine/include/arm/arch-armv8-1m-main.inc     |  2 +-
 meta/conf/machine/include/arm/arch-armv8-2a.inc    |  2 +-
 meta/conf/machine/include/arm/arch-armv8a.inc      |  8 +++-----
 meta/conf/machine/include/arm/arch-armv8m-base.inc |  2 +-
 meta/conf/machine/include/arm/arch-armv8m-main.inc | 14 +++-----------
 meta/conf/machine/include/arm/feature-arm-crc.inc  |  4 ++++
 .../machine/include/arm/feature-arm-crypto.inc     |  5 +++++
 meta/conf/machine/include/arm/feature-arm-dsp.inc  |  2 ++
 meta/conf/machine/include/arm/feature-arm-neon.inc |  5 +++++
 18 files changed, 37 insertions(+), 27 deletions(-)
 create mode 100644 meta/conf/machine/include/arm/feature-arm-crc.inc
 create mode 100644 meta/conf/machine/include/arm/feature-arm-crypto.inc
 create mode 100644 meta/conf/machine/include/arm/feature-arm-dsp.inc

diff --git a/meta/conf/machine/include/arm/arch-arm.inc 
b/meta/conf/machine/include/arm/arch-arm.inc
index 869089051cb1..f1e92e19c615 100644
--- a/meta/conf/machine/include/arm/arch-arm.inc
+++ b/meta/conf/machine/include/arm/arch-arm.inc
@@ -14,3 +14,7 @@ TUNE_PKGARCH = 
"${ARMPKGARCH}${ARMPKGSFX_THUMB}${ARMPKGSFX_DSP}${ARMPKGSFX_EABI}
 ABIEXTENSION = "eabi"
 
 TARGET_FPU = "${@d.getVar('TUNE_CCARGS_MFLOAT') or 'soft'}"
+
+# Some -march settings need a +X option passed in.  Since we cannot guarantee 
that any specified TUNE_CCARGS option is set in any order, we must hard code 
the order here to allow for it.
+TUNE_CCARGS_MARCH_OPTS ??= ""
+TUNE_CCARGS .= "${TUNE_CCARGS_MARCH}${TUNE_CCARGS_MARCH_OPTS}"
diff --git a/meta/conf/machine/include/arm/arch-armv4.inc 
b/meta/conf/machine/include/arm/arch-armv4.inc
index 4f4a63b28746..be5761fb20b6 100644
--- a/meta/conf/machine/include/arm/arch-armv4.inc
+++ b/meta/conf/machine/include/arm/arch-armv4.inc
@@ -2,7 +2,7 @@ DEFAULTTUNE ?= "armv4"
 
 TUNEVALID[arm] = "Enable ARM instruction set"
 TUNEVALID[armv4] = "Enable instructions for ARMv4"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'armv4', ' 
-march=armv4${ARMPKGSFX_THUMB}', '', d)}"
+TUNE_CCARGS_MARCH .= "${@bb.utils.contains('TUNE_FEATURES', 'armv4', ' 
-march=armv4${ARMPKGSFX_THUMB}', '', d)}"
 # enable --fix-v4bx when we have armv4 in TUNE_FEATURES, but then disable it 
when we have also armv5 or thumb
 # maybe we should extend bb.utils.contains to support check for any 
checkvalues in value, now it does 
 # checkvalues.issubset(val) which cannot be used for negative test of foo 
neither bar in value
diff --git a/meta/conf/machine/include/arm/arch-armv5.inc 
b/meta/conf/machine/include/arm/arch-armv5.inc
index 5f46992098e3..6bb465e7b627 100644
--- a/meta/conf/machine/include/arm/arch-armv5.inc
+++ b/meta/conf/machine/include/arm/arch-armv5.inc
@@ -2,7 +2,7 @@ DEFAULTTUNE ?= "armv5"
 
 TUNEVALID[armv5] = "Enable instructions for ARMv5"
 TUNECONFLICTS[armv5] = "armv4"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'armv5', ' 
-march=armv5t${ARMPKGSFX_DSP}', '', d)}"
+TUNE_CCARGS_MARCH .= "${@bb.utils.contains('TUNE_FEATURES', 'armv5', ' 
-march=armv5t${ARMPKGSFX_DSP}', '', d)}"
 MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'armv5', 'armv5:', 
'', d)}"
 
 require conf/machine/include/arm/arch-armv4.inc
diff --git a/meta/conf/machine/include/arm/arch-armv6.inc 
b/meta/conf/machine/include/arm/arch-armv6.inc
index 9d2e112b7154..ef8d288ea736 100644
--- a/meta/conf/machine/include/arm/arch-armv6.inc
+++ b/meta/conf/machine/include/arm/arch-armv6.inc
@@ -2,7 +2,7 @@ DEFAULTTUNE ?= "armv6hf"
 
 TUNEVALID[armv6] = "Enable instructions for ARMv6"
 TUNECONFLICTS[armv6] = "armv4 armv5"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'armv6', ' 
-march=armv6', '', d)}"
+TUNE_CCARGS_MARCH .= "${@bb.utils.contains('TUNE_FEATURES', 'armv6', ' 
-march=armv6', '', d)}"
 MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'armv6', 'armv6:', 
'', d)}"
 
 require conf/machine/include/arm/arch-armv5-dsp.inc
diff --git a/meta/conf/machine/include/arm/arch-armv6m.inc 
b/meta/conf/machine/include/arm/arch-armv6m.inc
index e7ca665a029f..d6d6c7ed2dec 100644
--- a/meta/conf/machine/include/arm/arch-armv6m.inc
+++ b/meta/conf/machine/include/arm/arch-armv6m.inc
@@ -7,7 +7,7 @@ TUNECONFLICTS[armv6m] = "armv4 armv5 armv6 armv7a"
 
 # Use armv6s-m instead of armv6-m to avoid gcc bug "SVC is not permitted on 
this architecture".
 # SVC is a valid instruction.
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'armv6m', ' 
-march=armv6s-m', '', d)}"
+TUNE_CCARGS_MARCH .= "${@bb.utils.contains('TUNE_FEATURES', 'armv6m', ' 
-march=armv6s-m', '', d)}"
 MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'armv6m', 
'armv6m:', '', d)}"
 
 require conf/machine/include/arm/arch-armv5.inc
diff --git a/meta/conf/machine/include/arm/arch-armv7a.inc 
b/meta/conf/machine/include/arm/arch-armv7a.inc
index 0f83cee37c49..0a805b3be26a 100644
--- a/meta/conf/machine/include/arm/arch-armv7a.inc
+++ b/meta/conf/machine/include/arm/arch-armv7a.inc
@@ -3,7 +3,7 @@ ARM_INSTRUCTION_SET ?= "thumb"
 
 TUNEVALID[armv7a] = "Enable instructions for ARMv7-a"
 TUNECONFLICTS[armv7a] = "armv4 armv5 armv6 armv7"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'armv7a', ' 
-march=armv7-a', '', d)}"
+TUNE_CCARGS_MARCH .= "${@bb.utils.contains('TUNE_FEATURES', 'armv7a', ' 
-march=armv7-a', '', d)}"
 MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'armv7a', 
'armv7a:', '', d)}"
 
 require conf/machine/include/arm/arch-armv6.inc
diff --git a/meta/conf/machine/include/arm/arch-armv7em.inc 
b/meta/conf/machine/include/arm/arch-armv7em.inc
index adcab272edab..f7608ea2ee40 100644
--- a/meta/conf/machine/include/arm/arch-armv7em.inc
+++ b/meta/conf/machine/include/arm/arch-armv7em.inc
@@ -4,7 +4,7 @@
 DEFAULTTUNE ?= "armv7em"
 
 TUNEVALID[armv7em] = "Enable instructions for ARMv7e-m"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'armv7em', ' 
-march=armv7e-m', '', d)}"
+TUNE_CCARGS_MARCH .= "${@bb.utils.contains('TUNE_FEATURES', 'armv7em', ' 
-march=armv7e-m', '', d)}"
 MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'armv7em', 
'armv7em:', '', d)}"
 
 TUNECONFLICTS[armv7em] = "armv4 armv5 armv6 armv7a"
diff --git a/meta/conf/machine/include/arm/arch-armv7m.inc 
b/meta/conf/machine/include/arm/arch-armv7m.inc
index a36c265bc123..2b69a3dfd142 100644
--- a/meta/conf/machine/include/arm/arch-armv7m.inc
+++ b/meta/conf/machine/include/arm/arch-armv7m.inc
@@ -4,7 +4,7 @@
 DEFAULTTUNE ?= "armv7m"
 
 TUNEVALID[armv7m] = "Enable instructions for ARMv7-m"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'armv7m', ' 
-march=armv7-m', '', d)}"
+TUNE_CCARGS_MARCH .= "${@bb.utils.contains('TUNE_FEATURES', 'armv7m', ' 
-march=armv7-m', '', d)}"
 MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'armv7m', 
'armv7m:', '', d)}"
 
 TUNECONFLICTS[armv7m] = "armv4 armv5 armv6 armv7a"
diff --git a/meta/conf/machine/include/arm/arch-armv7ve.inc 
b/meta/conf/machine/include/arm/arch-armv7ve.inc
index b40c2ca8adb1..8102ae608594 100644
--- a/meta/conf/machine/include/arm/arch-armv7ve.inc
+++ b/meta/conf/machine/include/arm/arch-armv7ve.inc
@@ -2,7 +2,7 @@ DEFAULTTUNE ?= "armv7vethf"
 
 TUNEVALID[armv7ve] = "Enable instructions for ARMv7ve"
 TUNECONFLICTS[armv7ve] = "armv4 armv5 armv6 armv7 armv7a"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'armv7ve', ' 
-march=armv7ve', '', d)}"
+TUNE_CCARGS_MARCH .= "${@bb.utils.contains('TUNE_FEATURES', 'armv7ve', ' 
-march=armv7ve', '', d)}"
 MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'armv7ve', 
'armv7ve:', '', d)}"
 
 require conf/machine/include/arm/arch-armv7a.inc
diff --git a/meta/conf/machine/include/arm/arch-armv8-1m-main.inc 
b/meta/conf/machine/include/arm/arch-armv8-1m-main.inc
index 9171b31c9001..5b1bcb8f4662 100644
--- a/meta/conf/machine/include/arm/arch-armv8-1m-main.inc
+++ b/meta/conf/machine/include/arm/arch-armv8-1m-main.inc
@@ -5,7 +5,7 @@
 DEFAULTTUNE ?= "armv8-1m-main"
 
 TUNEVALID[armv8-1m-main] = "Enable instructions for ARMv8.1-m.main"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'armv8-1m-main', ' 
-march=armv8.1-m.main', '', d)}"
+TUNE_CCARGS_MARCH .= "${@bb.utils.contains('TUNE_FEATURES', 'armv8-1m-main', ' 
-march=armv8.1-m.main', '', d)}"
 MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'armv8-1m-main', 
'armv8-1m-main:', '', d)}"
 
 TUNECONFLICTS[armv8-1m-main] = "armv4 armv5 armv6 armv7a"
diff --git a/meta/conf/machine/include/arm/arch-armv8-2a.inc 
b/meta/conf/machine/include/arm/arch-armv8-2a.inc
index c84b1ecf2460..30f2870811ed 100644
--- a/meta/conf/machine/include/arm/arch-armv8-2a.inc
+++ b/meta/conf/machine/include/arm/arch-armv8-2a.inc
@@ -1,7 +1,7 @@
 DEFAULTTUNE ?= "armv8-2a"
 
 TUNEVALID[armv8-2a] = "Enable instructions for ARMv8-a"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'armv8-2a', ' 
-march=armv8.2-a', '', d)}"
+TUNE_CCARGS_MARCH .= "${@bb.utils.contains('TUNE_FEATURES', 'armv8-2a', ' 
-march=armv8.2-a', '', d)}"
 # TUNE crypto will be handled by arch-armv8a.inc below
 MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'armv8-2a', 
'armv8-2a:', '', d)}"
 
diff --git a/meta/conf/machine/include/arm/arch-armv8a.inc 
b/meta/conf/machine/include/arm/arch-armv8a.inc
index 819dffbeba6d..97c944dfa5b1 100644
--- a/meta/conf/machine/include/arm/arch-armv8a.inc
+++ b/meta/conf/machine/include/arm/arch-armv8a.inc
@@ -1,14 +1,12 @@
 DEFAULTTUNE ?= "armv8a-crc"
 
 TUNEVALID[armv8a] = "Enable instructions for ARMv8-a"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'armv8a', ' 
-march=armv8-a', '', d)}"
-TUNEVALID[crc] = "Enable instructions for ARMv8-a Cyclic Redundancy Check 
(CRC)"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'crc', '+crc', '', d)}"
-TUNEVALID[crypto] = "Enable instructions for ARMv8-a cryptographic"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'crypto', '+crypto', '', 
d)}"
+TUNE_CCARGS_MARCH .= "${@bb.utils.contains('TUNE_FEATURES', 'armv8a', ' 
-march=armv8-a', '', d)}"
 MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'armv8a', 
'armv8a:', '', d)}"
 
 require conf/machine/include/arm/arch-arm64.inc
+require conf/machine/include/arm/feature-arm-crc.inc
+require conf/machine/include/arm/feature-arm-crypto.inc
 
 # Little Endian base configs
 AVAILTUNES += "armv8a armv8a-crc armv8a-crc-crypto armv8a-crypto"
diff --git a/meta/conf/machine/include/arm/arch-armv8m-base.inc 
b/meta/conf/machine/include/arm/arch-armv8m-base.inc
index d9a341c66e13..ffee8cea8007 100644
--- a/meta/conf/machine/include/arm/arch-armv8m-base.inc
+++ b/meta/conf/machine/include/arm/arch-armv8m-base.inc
@@ -4,7 +4,7 @@
 DEFAULTTUNE ?= "armv8m-base"
 
 TUNEVALID[armv8m-base] = "Enable instructions for ARMv8-m.base"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'armv8m-base', ' 
-march=armv8-m.base', '', d)}"
+TUNE_CCARGS_MARCH .= "${@bb.utils.contains('TUNE_FEATURES', 'armv8m-base', ' 
-march=armv8-m.base', '', d)}"
 MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'armv8m-base', 
'armv8m-base:', '', d)}"
 
 TUNECONFLICTS[armv8m-base] = "armv4 armv5 armv6 armv7a"
diff --git a/meta/conf/machine/include/arm/arch-armv8m-main.inc 
b/meta/conf/machine/include/arm/arch-armv8m-main.inc
index 4dbe401c1929..01bef3542894 100644
--- a/meta/conf/machine/include/arm/arch-armv8m-main.inc
+++ b/meta/conf/machine/include/arm/arch-armv8m-main.inc
@@ -4,23 +4,15 @@
 DEFAULTTUNE ?= "armv8m-main"
 
 require conf/machine/include/arm/arch-armv8m-base.inc
+require conf/machine/include/arm/feature-arm-dsp.inc
+require conf/machine/include/arm/feature-arm-neon.inc
 
 TUNEVALID[armv8m-main] = "Enable instructions for ARMv8-m.main"
-TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'armv8m-main', ' 
-march=armv8-m.main${MARCH_DSP}${MARCH_FPU}', '', d)}"
+TUNE_CCARGS_MARCH .= "${@bb.utils.contains('TUNE_FEATURES', 'armv8m-main', ' 
-march=armv8-m.main', '', d)}"
 MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'armv8m-main', 
'armv8m-main:', '', d)}"
 
 TUNECONFLICTS[armv8m-main] = "armv4 armv5 armv6 armv7a"
 
-# FIXME - below taken from meta/conf/machine/include/arm/arch-armv5-dsp.inc 
and should be put into something more generic
-TUNEVALID[dsp] = "ARM DSP functionality"
-ARMPKGSFX_DSP = "${@bb.utils.contains('TUNE_FEATURES', [ 'dsp' ], 'e', '', d)}"
-MARCH_DSP = "${@bb.utils.contains('TUNE_FEATURES', [ 'dsp' ], '+dsp', 
'+nodsp', d)}"
-
-# FIXME - Below belongs in meta/conf/machine/include/arm/feature-arm-neon.inc
-TUNEVALID[vfpv5spd16] = "Enable Vector Floating Point Version 5, Single 
Precision. with 16 registers (fpv5-sp-d16) unit."
-TUNE_CCARGS_MFPU .= "${@bb.utils.contains('TUNE_FEATURES', 'vfpv5spd16', 
'fpv5-sp-d16', '', d)}"
-MARCH_FPU = "${@bb.utils.contains('TUNE_FEATURES', [ 'vfpv5spd16' ], '+fp', 
'+nofp', d)}"
-
 AVAILTUNES                                      += "armv8m-main armv8m-maine 
armv8m-main-vfpv5spd16 armv8m-maine-vfpv5spd16"
 ARMPKGARCH:tune-armv8m-main                      = "armv8m-main"
 ARMPKGARCH:tune-armv8m-maine                     = "armv8m-main"
diff --git a/meta/conf/machine/include/arm/feature-arm-crc.inc 
b/meta/conf/machine/include/arm/feature-arm-crc.inc
new file mode 100644
index 000000000000..8a69d2e2faab
--- /dev/null
+++ b/meta/conf/machine/include/arm/feature-arm-crc.inc
@@ -0,0 +1,4 @@
+# Cyclic Redundancy Check (CRC) instructions for armv8-a and armv8-r
+
+TUNEVALID[crc] = "Enable instructions for ARMv8 Cyclic Redundancy Check (CRC)"
+TUNE_CCARGS_MARCH_OPTS .= "${@bb.utils.contains('TUNE_FEATURES', 'crc', 
'+crc', '', d)}"
diff --git a/meta/conf/machine/include/arm/feature-arm-crypto.inc 
b/meta/conf/machine/include/arm/feature-arm-crypto.inc
new file mode 100644
index 000000000000..aade6ce08d5e
--- /dev/null
+++ b/meta/conf/machine/include/arm/feature-arm-crypto.inc
@@ -0,0 +1,5 @@
+# Cryptographic instructions for:
+# armv8-a, armv8.1-a, armv8.3-a, armv8.4-a, armv8.5-a, armv8.6-a, and armv8-r
+
+TUNEVALID[crypto] = "Enable cryptographic instructions for ARMv8"
+TUNE_CCARGS_MARCH_OPTS .= "${@bb.utils.contains('TUNE_FEATURES', 'crypto', 
'+crypto', '', d)}"
diff --git a/meta/conf/machine/include/arm/feature-arm-dsp.inc 
b/meta/conf/machine/include/arm/feature-arm-dsp.inc
new file mode 100644
index 000000000000..ec5007a8ca75
--- /dev/null
+++ b/meta/conf/machine/include/arm/feature-arm-dsp.inc
@@ -0,0 +1,2 @@
+# Note: TUNEVALID set in conf/machine/include/arm/arch-armv5-dsp.inc
+TUNE_CCARGS_MARCH_OPTS .= "${@bb.utils.contains('TUNE_FEATURES', [ 'dsp' ], 
'+dsp', '', d)}"
diff --git a/meta/conf/machine/include/arm/feature-arm-neon.inc 
b/meta/conf/machine/include/arm/feature-arm-neon.inc
index eaddd054cec6..174b9b9f2a13 100644
--- a/meta/conf/machine/include/arm/feature-arm-neon.inc
+++ b/meta/conf/machine/include/arm/feature-arm-neon.inc
@@ -19,3 +19,8 @@ TUNE_CCARGS_MFPU .= "${@bb.utils.contains('TUNE_FEATURES', [ 
'vfpv4', 'neon' ],
 
 TUNEVALID[vfpv4d16] = "Enable Vector Floating Point Version 4 with 16 
registers (vfpv4-d16) unit."
 TUNE_CCARGS_MFPU .= "${@bb.utils.contains('TUNE_FEATURES', 'vfpv4d16', ' 
vfpv4-d16', '', d)}"
+
+TUNEVALID[vfpv5spd16] = "Enable Vector Floating Point Version 5, Single 
Precision. with 16 registers (fpv5-sp-d16) unit."
+TUNE_CCARGS_MFPU .= "${@bb.utils.contains('TUNE_FEATURES', 'vfpv5spd16', 
'fpv5-sp-d16', '', d)}"
+
+TUNE_CCARGS_MARCH_OPTS .= "${@bb.utils.contains('TUNE_FEATURES', [ 'vfpv3d16', 
'vfpv5spd16' ], '+fp', '', d)}"
-- 
2.20.1

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#154955): 
https://lists.openembedded.org/g/openembedded-core/message/154955
Mute This Topic: https://lists.openembedded.org/mt/84988554/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to