From: "Juraj Linkeš" <juraj.linkes@pantheon.tech>
To: thomas@monjalon.net, david.marchand@redhat.com,
bruce.richardson@intel.com, Honnappa.Nagarahalli@arm.com,
Ruifeng.Wang@arm.com, fengchengwen@huawei.com,
ferruh.yigit@intel.com, jerinjacobk@gmail.com
Cc: dev@dpdk.org, "Juraj Linkeš" <juraj.linkes@pantheon.tech>
Subject: [dpdk-dev] [PATCH v1] config/arm: split march cfg into arch and features
Date: Tue, 29 Jun 2021 11:39:52 +0200 [thread overview]
Message-ID: <1624959593-6240-1-git-send-email-juraj.linkes@pantheon.tech> (raw)
Older compilers may not support all arch versions and all features that
the target SoC supports, in which case it's better figure out the
highest arch version and features that the compiler supports. Implement
a way to achieve this:
1. Find the highest arch version that the compiler supports, keeping in
mind the SoC arch version we're building. For example, if the SoC arch
version is arm8.2-a, but the compiler only supports arm8.1-a, use
arm8.1-a. On the other hand, if the compiler supports arm8.3-a (or
higher), use armv8.2-a.
2. With the architecture version locked, iterate over SoC features and
use all that are supported.
In all cases, emit a warning if there's something unsupported by the
compiler.
Signed-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech>
---
config/arm/meson.build | 122 +++++++++++++++++++++++++++++++++--------
1 file changed, 98 insertions(+), 24 deletions(-)
diff --git a/config/arm/meson.build b/config/arm/meson.build
index 9b147c0b93..9114d8a59c 100644
--- a/config/arm/meson.build
+++ b/config/arm/meson.build
@@ -37,20 +37,26 @@ implementer_generic = {
['RTE_MAX_NUMA_NODES', 4]
],
'part_number_config': {
- 'generic': {'machine_args': ['-march=armv8-a+crc', '-moutline-atomics']}
+ 'generic': {
+ 'march': 'armv8-a',
+ 'march_features': ['crc'],
+ 'compiler_options': ['-moutline-atomics']
+ }
}
}
part_number_config_arm = {
- '0xd03': {'machine_args': ['-mcpu=cortex-a53']},
- '0xd04': {'machine_args': ['-mcpu=cortex-a35']},
- '0xd07': {'machine_args': ['-mcpu=cortex-a57']},
- '0xd08': {'machine_args': ['-mcpu=cortex-a72']},
- '0xd09': {'machine_args': ['-mcpu=cortex-a73']},
- '0xd0a': {'machine_args': ['-mcpu=cortex-a75']},
- '0xd0b': {'machine_args': ['-mcpu=cortex-a76']},
+ '0xd03': {'compiler_options': ['-mcpu=cortex-a53']},
+ '0xd04': {'compiler_options': ['-mcpu=cortex-a35']},
+ '0xd07': {'compiler_options': ['-mcpu=cortex-a57']},
+ '0xd08': {'compiler_options': ['-mcpu=cortex-a72']},
+ '0xd09': {'compiler_options': ['-mcpu=cortex-a73']},
+ '0xd0a': {'compiler_options': ['-mcpu=cortex-a75']},
+ '0xd0b': {'compiler_options': ['-mcpu=cortex-a76']},
'0xd0c': {
- 'machine_args': ['-march=armv8.2-a+crypto', '-mcpu=neoverse-n1'],
+ 'march': 'armv8.2-a',
+ 'march_features': ['crypto'],
+ 'compiler_options': ['-mcpu=neoverse-n1'],
'flags': [
['RTE_MACHINE', '"neoverse-n1"'],
['RTE_ARM_FEATURE_ATOMICS', true],
@@ -60,7 +66,8 @@ part_number_config_arm = {
]
},
'0xd49': {
- 'machine_args': ['-march=armv8.5-a+crypto+sve2'],
+ 'march': 'armv8.5-a',
+ 'march_features': ['crypto', 'sve2'],
'flags': [
['RTE_MACHINE', '"neoverse-n2"'],
['RTE_ARM_FEATURE_ATOMICS', true],
@@ -94,19 +101,21 @@ implementer_cavium = {
],
'part_number_config': {
'0xa1': {
- 'machine_args': ['-mcpu=thunderxt88'],
+ 'compiler_options': ['-mcpu=thunderxt88'],
'flags': flags_part_number_thunderx
},
'0xa2': {
- 'machine_args': ['-mcpu=thunderxt81'],
+ 'compiler_options': ['-mcpu=thunderxt81'],
'flags': flags_part_number_thunderx
},
'0xa3': {
- 'machine_args': ['-mcpu=thunderxt83'],
+ 'compiler_options': ['-mcpu=thunderxt83'],
'flags': flags_part_number_thunderx
},
'0xaf': {
- 'machine_args': ['-march=armv8.1-a+crc+crypto', '-mcpu=thunderx2t99'],
+ 'march': 'armv8.1-a',
+ 'march_features': ['crc', 'crypto'],
+ 'compiler_options': ['-mcpu=thunderx2t99'],
'flags': [
['RTE_MACHINE', '"thunderx2"'],
['RTE_ARM_FEATURE_ATOMICS', true],
@@ -116,7 +125,9 @@ implementer_cavium = {
]
},
'0xb2': {
- 'machine_args': ['-march=armv8.2-a+crc+crypto+lse', '-mcpu=octeontx2'],
+ 'march': 'armv8.2-a',
+ 'march_features': ['crc', 'crypto', 'lse'],
+ 'compiler_options': ['-mcpu=octeontx2'],
'flags': [
['RTE_MACHINE', '"octeontx2"'],
['RTE_ARM_FEATURE_ATOMICS', true],
@@ -137,7 +148,11 @@ implementer_ampere = {
['RTE_MAX_NUMA_NODES', 1]
],
'part_number_config': {
- '0x0': {'machine_args': ['-march=armv8-a+crc+crypto', '-mtune=emag']}
+ '0x0': {
+ 'march': 'armv8-a',
+ 'march_features': ['crc', 'crypto'],
+ 'compiler_options': ['-mtune=emag']
+ }
}
}
@@ -149,7 +164,9 @@ implementer_hisilicon = {
],
'part_number_config': {
'0xd01': {
- 'machine_args': ['-march=armv8.2-a+crypto', '-mtune=tsv110'],
+ 'march': 'armv8.2-a',
+ 'march_features': ['crypto'],
+ 'compiler_options': ['-mtune=tsv110'],
'flags': [
['RTE_MACHINE', '"Kunpeng 920"'],
['RTE_ARM_FEATURE_ATOMICS', true],
@@ -158,7 +175,8 @@ implementer_hisilicon = {
]
},
'0xd02': {
- 'machine_args': ['-march=armv8.2-a+crypto+sve'],
+ 'march': 'armv8.2-a',
+ 'march_features': ['crypto', 'sve'],
'flags': [
['RTE_MACHINE', '"Kunpeng 930"'],
['RTE_ARM_FEATURE_ATOMICS', true],
@@ -179,7 +197,10 @@ implementer_qualcomm = {
['RTE_MAX_NUMA_NODES', 1]
],
'part_number_config': {
- '0xc00': {'machine_args': ['-march=armv8-a+crc']}
+ '0xc00': {
+ 'march': 'armv8-a',
+ 'march_features': ['crc']
+ }
}
}
@@ -458,13 +479,66 @@ else
# add/overwrite flags in the proper order
dpdk_flags = flags_common + implementer_config['flags'] + part_number_config.get('flags', []) + soc_flags
- # apply supported machine args
machine_args = [] # Clear previous machine args
- foreach flag: part_number_config['machine_args']
- if cc.has_argument(flag)
- machine_args += flag
+
+ # probe supported marchs and their features
+ candidate_march = ''
+ if part_number_config.has_key('march')
+ supported_marchs = ['armv8.6-a', 'armv8.5-a', 'armv8.4-a', 'armv8.3-a',
+ 'armv8.2-a', 'armv8.1-a', 'armv8-a']
+ check_compiler_support = false
+ foreach supported_march: supported_marchs
+ if supported_march == part_number_config['march']
+ # start checking from this version downwards
+ check_compiler_support = true
+ endif
+ if check_compiler_support and
+ cc.has_argument('-march=' + supported_march)
+ candidate_march = supported_march
+ # highest supported march version found
+ break
+ endif
+ endforeach
+ if candidate_march == ''
+ error('No suitable armv8 march version found.')
+ else
+ if candidate_march != part_number_config['march']
+ warning('Configuration march version is ' +
+ '@0@, but the compiler supports only @1@.'
+ .format(part_number_config['march'], candidate_march))
+ endif
+ candidate_march = '-march=' + candidate_march
endif
- endforeach
+ if part_number_config.has_key('march_features')
+ feature_unsupported = false
+ foreach feature: part_number_config['march_features']
+ if cc.has_argument('+'.join([candidate_march, feature]))
+ candidate_march = '+'.join([candidate_march, feature])
+ else
+ feature_unsupported = true
+ endif
+ endforeach
+ if feature_unsupported
+ warning('Configuration march features are ' +
+ '@0@, but the compiler supports only @1@.'
+ .format(part_number_config['march_features'],
+ candidate_march))
+ endif
+ endif
+ machine_args += candidate_march
+ endif
+
+ # apply supported compiler options
+ if part_number_config.has_key('compiler_options')
+ foreach flag: part_number_config['compiler_options']
+ if cc.has_argument(flag)
+ machine_args += flag
+ else
+ warning('Configuration compiler option ' +
+ '@0@ isn\'t supported.'.format(flag))
+ endif
+ endforeach
+ endif
# apply flags
foreach flag: dpdk_flags
--
2.20.1
next reply other threads:[~2021-06-29 9:40 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-29 9:39 Juraj Linkeš [this message]
2021-06-29 9:39 ` [dpdk-dev] [PATCH v1] config/arm: split march cfg to " Juraj Linkeš
2021-07-06 8:21 ` [dpdk-dev] [PATCH v2] config/arm: split march cfg into " Juraj Linkeš
2021-07-12 13:02 ` [dpdk-dev] [PATCH v3] " Juraj Linkeš
2021-07-14 9:24 ` Ruifeng Wang
2021-07-16 3:42 ` fengchengwen
2021-07-16 12:22 ` Juraj Linkeš
2021-07-20 7:25 ` [dpdk-dev] [EXT] " Pavan Nikhilesh Bhagavatula
2021-07-20 11:58 ` Juraj Linkeš
2021-07-20 12:33 ` [dpdk-dev] [PATCH v3 1/2] " Juraj Linkeš
2021-07-20 12:33 ` [dpdk-dev] [PATCH v3 2/2] config/arm: make n2 'crypto' an optional feature Juraj Linkeš
2021-08-17 10:56 ` [dpdk-dev] [PATCH v4 1/2] config/arm: split march cfg into arch and features Juraj Linkeš
2021-08-17 10:56 ` [dpdk-dev] [PATCH v4 2/2] config/arm: make n2 'crypto' an optional feature Juraj Linkeš
2021-09-06 8:38 ` Ruifeng Wang
2021-08-17 10:59 ` [dpdk-dev] [PATCH v4 1/2] config/arm: split march cfg into arch and features Juraj Linkeš
2021-09-06 8:26 ` Ruifeng Wang
2021-09-16 16:17 ` Thomas Monjalon
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1624959593-6240-1-git-send-email-juraj.linkes@pantheon.tech \
--to=juraj.linkes@pantheon.tech \
--cc=Honnappa.Nagarahalli@arm.com \
--cc=Ruifeng.Wang@arm.com \
--cc=bruce.richardson@intel.com \
--cc=david.marchand@redhat.com \
--cc=dev@dpdk.org \
--cc=fengchengwen@huawei.com \
--cc=ferruh.yigit@intel.com \
--cc=jerinjacobk@gmail.com \
--cc=thomas@monjalon.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).