From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 64F0B43A99; Tue, 6 Feb 2024 05:11:05 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 0AB644026B; Tue, 6 Feb 2024 05:11:05 +0100 (CET) Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-he1eur04on2089.outbound.protection.outlook.com [40.107.7.89]) by mails.dpdk.org (Postfix) with ESMTP id D5D304003C for ; Tue, 6 Feb 2024 05:11:02 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=m/nYVOdcyuKQQi8V7+7rZ9dbxXI64t7MFBx/PyymbKJeLcRKpuBOqLKOJuwrFWWqVvzTAU/LLi8TD+/mAN3Vq1DBaiwoig8GdyGyc9gaRE9hRblLBfNoCPkdqk82LVwVUckRTMecAdMtnxS+hYsmGTUNc7AJ0f3P3ffBU6KQOSBgFh25Qx8tvv9uILFyMSc+9ax90HQPQ8CBGwyp47tAJyYDHBGxRdn3T0adP4LcXlsqj7b2W6qEa5R0SADvFxBEcHffiB7db0poZh52Ukd0NWtGcSdhfnH7qPfWRov/8EeUleWA+TgaqE0UdxYLGjtvcI7FmktUAoJpsQfuh5j9KA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=gkqCUOWLnQgXISREKUbomC77FjulCd5bu26qyqtSddY=; b=k47ciYgdytNlvWOrb61NcVavHvfUFr2xD+QNNf0CD8EhE0gy9BKO74rSHVUofZjcbCQqtb+ikihxJw+xVXni/T3Wyl1jqcG7boT+1laQ1dk+AbG0I5faPGkGV4K9E/jXrybvOEVTJPHC7VCIi2UdAdX2dc8BPAtGhcY2a1u6hXnNZb47+VVSHsjz3vXwQx0uxIATL2KFB4vZNJFyghq699C35QldAwaZC/wH5Bf89dWi4o2cgQfPk8mRThDYswRiDcNWk5gUmG19c3cdbTneNlSeA9uAZb1LWWC7++gQdN0ZYfViudYTCstcD52Z36KSr5UuUwuy42xXezlTWQIZng== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=gkqCUOWLnQgXISREKUbomC77FjulCd5bu26qyqtSddY=; b=x6FnVVs9F/HBovapNCWlumH7fatED1DgBTSz/mAhhNmR2X6Mam7IoGQnTUZAh1Z0QkRTMnrpgFaRv+zWRsYqX5DC0k15WNA0tz0GlujN4BHW5hc9mSImUc1R9f7tGoWmiX6TKZ5TOM1hnX72DR3wQxJMMHjnXUSNZotIyPk0BGw= Received: from DB8PR08MB5082.eurprd08.prod.outlook.com (2603:10a6:10:ec::16) by PAWPR08MB10136.eurprd08.prod.outlook.com (2603:10a6:102:34f::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7249.36; Tue, 6 Feb 2024 04:10:59 +0000 Received: from DB8PR08MB5082.eurprd08.prod.outlook.com ([fe80::5a4b:b469:9b31:7a82]) by DB8PR08MB5082.eurprd08.prod.outlook.com ([fe80::5a4b:b469:9b31:7a82%4]) with mapi id 15.20.7249.032; Tue, 6 Feb 2024 04:10:59 +0000 From: Wathsala Wathawana Vithanage To: "pbhagavatula@marvell.com" , "jerinj@marvell.com" , "juraj.linkes@pantheon.tech" , Ruifeng Wang , Bruce Richardson CC: "dev@dpdk.org" , Honnappa Nagarahalli , nd , nd Subject: RE: [PATCH v3 1/3] config/arm: avoid mcpu and march conflicts Thread-Topic: [PATCH v3 1/3] config/arm: avoid mcpu and march conflicts Thread-Index: AQHaVbd8p21DhRcUhUGajxc/tjoY67D8q7dg Date: Tue, 6 Feb 2024 04:10:56 +0000 Message-ID: References: <20240201215731.4543-1-pbhagavatula@marvell.com> <20240202085031.10237-1-pbhagavatula@marvell.com> In-Reply-To: <20240202085031.10237-1-pbhagavatula@marvell.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ts-tracking-id: FC4A75ED2825B44B9EA9F2C4C5CC6A0F.0 x-checkrecipientchecked: true authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DB8PR08MB5082:EE_|PAWPR08MB10136:EE_ x-ms-office365-filtering-correlation-id: e631b5e8-27c4-4406-015c-08dc26c99e88 x-ld-processed: f34e5979-57d9-4aaa-ad4d-b122a662184d,ExtAddr nodisclaimer: true x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: PBuHHNM1le3aVT0zK19e57Bc0iNTd8FjRanCgUs50wjV2597yGIpLZ5jzQoAu95F8VnaemZbGWbqpA24+T+0E38J/F/X1xm/Rnz9r8OHMMicEEfz8F83akkkTvfxrxnpJGOI7VIdNaJT0LGo9vHXjMOXrPQRiM1PQJeG5BO+q1N7CD5PN5Id6cDOwvYS+XbQbDhoVZhKdDbehBE/oAcA/nkv1l/fsqL6Vcr2GO26e16CWndMLrtc6auH4ImVKzn+nJDHcjO212ax3M6jipHzJ22HQQLSFeuRjX+p/canYRRjI0pNW0JZ/ujoAFvdmI9W/lgvbCTLbbz/pu1A4h58yGacjGBHK0nqOn1zr3cbqlPFq+X5BdqDkjll9Vd/QAJmAK9woAHk9wikQiSgzvIK7/C4gFG9u/wE7H6cjQ0E18m0F4yz79TqLtUeWfo28Ty5Suu398YHBN+dc0pQ5No7s43WWxEGVDO5lYJr4/wZjQ16PLMgUCymgE9PNBt/qn2xeTbSJSYHOQ2Yssd8Uk4R8/+hg2np00LiHP/aQiuSqcIBNXkim7uqVb6J6gz52FOr2X/PTVI49rs/f6ig1/Og2LBMphoWro3PgWs/cGv4/h9f4fRGRlnine3YC01oqBE5 x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DB8PR08MB5082.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(376002)(346002)(39860400002)(366004)(396003)(136003)(230273577357003)(230922051799003)(1800799012)(64100799003)(186009)(451199024)(5660300002)(52536014)(2906002)(55016003)(41300700001)(83380400001)(38100700002)(26005)(122000001)(86362001)(33656002)(6506007)(7696005)(9686003)(54906003)(64756008)(110136005)(8676002)(8936002)(71200400001)(6666004)(478600001)(66446008)(66476007)(66556008)(66946007)(76116006)(38070700009)(4326008)(316002); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?A7EyHLXH4mhiWRWeOvFDcYyxaj0g3rJLqbzF0qqE2aKRi1Y6iy9k5/8Whp03?= =?us-ascii?Q?DurbCesy5xsEffPe0B+RFW3Nu0O/GhKsVIFpOKmSnZZ3OlCm8RBj9kgcHQvT?= =?us-ascii?Q?ALK3V84XYDlnKYaF5v17BicmDJCMayq0uipNYo1bRZhjx9WQUeNPChIhbSx+?= =?us-ascii?Q?6UMdSL5IgRVDkfxP+WbSCl6uCcfJowQG63LgpfCoMX/KrMKLOSnThqG0SIHL?= =?us-ascii?Q?Y+qg+V1ynQViF7Xagu2bsmyT4OAQe0k7qtwKUEpRpm3wbOX4m9rlZnOMuJBC?= =?us-ascii?Q?kJXsha8n1cxEWHAv168+YUQE+gRLoyZlHVVXNyoGY6Ynay3rmYVqd1sI7u1Q?= =?us-ascii?Q?6mwVWanXRAGKXxb6TzrIK2/YlEmfNCaHbd7d1/xznOj7hXxxmDr6EjQt2qke?= =?us-ascii?Q?lAU8IHmPDExmLi/Xk3y1TIJCGNYZJPsOMDCDvv79uSEVnLL8LiSzfqfDjVbV?= =?us-ascii?Q?viefG9/mdCN9h3AvG5mApj/yxbxbBxY4d6gumKZnt6DcbGw/uiU8kKtdz+dA?= =?us-ascii?Q?m5ibreq/JSAU/J+aG9NqIGNz5CsbXLum+yH0VsNLxrwf26WMWnUPh5Z7dbcM?= =?us-ascii?Q?72GO/L6J25ZNQbfKDPoAs4VgI03Fz13ST4uNlYXvfLI/5urJfRPYlp1CH7nq?= =?us-ascii?Q?zZeoXDqGYDAbz2JvIbTi9FxyytE3dfFM1PuIzNqUJQOKl7yCX2ESyyd/l0LA?= =?us-ascii?Q?CXRUWY8E9fk7sZ9EhSiR6REJvzZazMkLktJqRs+FMJ5Oak8bt0iIN9e1gs8E?= =?us-ascii?Q?XKO/EtfCf13BAcjKv6NVISJLL5QHLW6sMBDGCDrvC0127LhmYnbCn9r4Azh/?= =?us-ascii?Q?TgyufryqhNvqCCXX/Hnl4/wT9zQheNTiPnM3+WKQEM7MlassDVyVq1RA2CH9?= =?us-ascii?Q?qnp1BgwAWW1I7LXTnVF8J58gBsTV9WYfjhc77/8MzAMy6xOz0+/HxESOrdqj?= =?us-ascii?Q?6ImiHXXLuRW4NSwYbSFENf4fx6ie3Z6YN6zi0V3LpK04TlCY7Ht6RahlR2VT?= =?us-ascii?Q?HoT5N2VYsDynDo7Gs+qB2OsJTTi//sit7qAoWFmFd7AmpPtJgWfJxcoWWZFV?= =?us-ascii?Q?kwj0kNVp0Ic4bqK6jn9Sic3bbWkndlgnPdhJEAS9AwEiELKhdIgwnARO31QB?= =?us-ascii?Q?yWo1N4rbKslQ++8/UUm+92PgwpYytncEi/UYFHtXfgtuNRKbCFpGN5DqSMKj?= =?us-ascii?Q?8I6SA1Pu86kmmOJtjHpWaV8BlVUaZR7z70WMLS5Qm8FTwrYcWabiA1ruu8aH?= =?us-ascii?Q?9RBAF9wYxO+vm/lWdJV+QCGkLY4GwNqx5o52J5urfCTcTrSUD9Skqfz6Dlsz?= =?us-ascii?Q?1I8GWVRQKaB4Ecq9Y5qQNbJtiNjaGf6Y9R2Hq/QL2ofEfYibMWrjmy8ZYfey?= =?us-ascii?Q?ICQ6E5Jm+sOFW4j1tFQ7Q55K7b+CGF/HFyrfioEOjLOJWt97MOz3XT7F1p6x?= =?us-ascii?Q?gfDjBG2ytQwPPkKRHAZLG3/kVckhTqFK9GVelNQbofkjtYSZOh2X8eQdPDwV?= =?us-ascii?Q?BY17kwMPC0dkKoO9xIjb5MI/qWvi4MH2TBC+0U+d0ELLhx52+717LYPv0G7w?= =?us-ascii?Q?XV/E8qrkuNSbbetaAgsdeJXM9T/5zmmjvNwVdemL?= Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DB8PR08MB5082.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e631b5e8-27c4-4406-015c-08dc26c99e88 X-MS-Exchange-CrossTenant-originalarrivaltime: 06 Feb 2024 04:10:56.9705 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Py86n0UklzF+76vCmqeViyC4mAEbDpWuK2Ac1VtGa2kD63NpRnM9M0XxWZ7S0Y38EuN4M30JLmK8h3bEOk6HqodD4D4sFSzkVmopQtvBs2w= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAWPR08MB10136 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Hi Pavan, > The compiler options march and mtune are a subset of mcpu and will lead t= o > conflicts if improper march is chosen for a given mcpu. > To avoid conflicts, force part number march when mcpu is available and is > supported by the compiler. Why would one force the march specified in the part number when mcpu for that part number is also available and supported by the compiler? >=20 > Example: > march =3D armv9-a > mcpu =3D neoverse-n2 >=20 > mcpu supported, march supported > machine_args =3D ['-mcpu=3Dneoverse-n2', '-march=3Darmv9-a'] -march restricts the compiler to baseline architecture of the -mcpu. For instance, Neoverse-n1's baseline architecture is armv8.2-a,=20 but it has some extensions from armv8.3-a, armv8.4-a, and armv8.5-a.=20 By setting -march to armv8.2-a the compiler will strictly omit extensions from 8.3, 8.4 and 8.5 resulting in a suboptimal outcome. >=20 > mcpu supported, march not supported > machine_args =3D ['-mcpu=3Dneoverse-n2'] This will result in the best outcome. >=20 > mcpu not supported, march supported > machine_args =3D ['-march=3Darmv9-a'] This too may result in a suboptimal outcome as optimization space is limited to the given march (not using extensions from later=20 architectures when available). >=20 > mcpu not supported, march not supported > machine_args =3D ['-march=3Darmv8.6-a'] Compiler knows nothing about the target CPU or the architecture. I think it's better to exit the build process with an error.=20 >=20 > Signed-off-by: Pavan Nikhilesh > --- > v2 Changes: > - Cleanup march inconsistencies. (Juraj Linkes) > - Unify fallback march selection. (Juraj Linkes) > - Tag along ARM WFE patch. > v3 Changes: > - Fix missing 'fallback_march' key check. >=20 > config/arm/meson.build | 108 +++++++++++++++++++++++++--------------- > - > 1 file changed, 66 insertions(+), 42 deletions(-) >=20 > diff --git a/config/arm/meson.build b/config/arm/meson.build index > 36f21d22599a..ba859bd060b5 100644 > --- a/config/arm/meson.build > +++ b/config/arm/meson.build > @@ -58,18 +58,18 @@ implementer_generic =3D { } >=20 > part_number_config_arm =3D { > - '0xd03': {'compiler_options': ['-mcpu=3Dcortex-a53']}, > - '0xd04': {'compiler_options': ['-mcpu=3Dcortex-a35']}, > - '0xd05': {'compiler_options': ['-mcpu=3Dcortex-a55']}, > - '0xd07': {'compiler_options': ['-mcpu=3Dcortex-a57']}, > - '0xd08': {'compiler_options': ['-mcpu=3Dcortex-a72']}, > - '0xd09': {'compiler_options': ['-mcpu=3Dcortex-a73']}, > - '0xd0a': {'compiler_options': ['-mcpu=3Dcortex-a75']}, > - '0xd0b': {'compiler_options': ['-mcpu=3Dcortex-a76']}, > + '0xd03': {'mcpu': 'cortex-a53'}, > + '0xd04': {'mcpu': 'cortex-a35'}, > + '0xd05': {'mcpu': 'cortex-a55'}, > + '0xd07': {'mcpu': 'cortex-a57'}, > + '0xd08': {'mcpu': 'cortex-a72'}, > + '0xd09': {'mcpu': 'cortex-a73'}, > + '0xd0a': {'mcpu': 'cortex-a75'}, > + '0xd0b': {'mcpu': 'cortex-a76'}, > '0xd0c': { > 'march': 'armv8.2-a', > 'march_features': ['crypto', 'rcpc'], > - 'compiler_options': ['-mcpu=3Dneoverse-n1'], > + 'mcpu': 'neoverse-n1', > 'flags': [ > ['RTE_MACHINE', '"neoverse-n1"'], > ['RTE_ARM_FEATURE_ATOMICS', true], @@ -81,7 +81,7 @@ > part_number_config_arm =3D { > '0xd40': { > 'march': 'armv8.4-a', > 'march_features': ['sve'], > - 'compiler_options': ['-mcpu=3Dneoverse-v1'], > + 'mcpu': 'neoverse-v1', > 'flags': [ > ['RTE_MACHINE', '"neoverse-v1"'], > ['RTE_ARM_FEATURE_ATOMICS', true], @@ -92,8 +92,9 @@ > part_number_config_arm =3D { > 'march': 'armv8.4-a', > }, > '0xd49': { > + 'march': 'armv9-a', > 'march_features': ['sve2'], > - 'compiler_options': ['-mcpu=3Dneoverse-n2'], > + 'mcpu': 'neoverse-n2', > 'flags': [ > ['RTE_MACHINE', '"neoverse-n2"'], > ['RTE_ARM_FEATURE_ATOMICS', true], @@ -127,21 +128,23 @@ > implementer_cavium =3D { > ], > 'part_number_config': { > '0xa1': { > - 'compiler_options': ['-mcpu=3Dthunderxt88'], > + 'mcpu': 'thunderxt88', > 'flags': flags_part_number_thunderx > }, > '0xa2': { > - 'compiler_options': ['-mcpu=3Dthunderxt81'], > + 'mcpu': 'thunderxt81', > 'flags': flags_part_number_thunderx > }, > '0xa3': { > - 'compiler_options': ['-march=3Darmv8-a+crc', '-mcpu=3Dthunde= rxt83'], > + 'march': 'armv8-a', > + 'march_features': ['crc'], > + 'mcpu': 'thunderxt83', > 'flags': flags_part_number_thunderx > }, > '0xaf': { > 'march': 'armv8.1-a', > 'march_features': ['crc', 'crypto'], > - 'compiler_options': ['-mcpu=3Dthunderx2t99'], > + 'mcpu': 'thunderx2t99', > 'flags': [ > ['RTE_MACHINE', '"thunderx2"'], > ['RTE_ARM_FEATURE_ATOMICS', true], @@ -153,7 +156,7 @@ > implementer_cavium =3D { > '0xb2': { > 'march': 'armv8.2-a', > 'march_features': ['crc', 'crypto', 'lse'], > - 'compiler_options': ['-mcpu=3Docteontx2'], > + 'mcpu': 'octeontx2', > 'flags': [ > ['RTE_MACHINE', '"cn9k"'], > ['RTE_ARM_FEATURE_ATOMICS', true], @@ -176,7 +179,7 @@ > implementer_ampere =3D { > '0x0': { > 'march': 'armv8-a', > 'march_features': ['crc', 'crypto'], > - 'compiler_options': ['-mtune=3Demag'], > + 'mcpu': 'emag', > 'flags': [ > ['RTE_MACHINE', '"eMAG"'], > ['RTE_MAX_LCORE', 32], > @@ -186,7 +189,7 @@ implementer_ampere =3D { > '0xac3': { > 'march': 'armv8.6-a', > 'march_features': ['crc', 'crypto'], > - 'compiler_options': ['-mcpu=3Dampere1'], > + 'mcpu': 'ampere1', > 'flags': [ > ['RTE_MACHINE', '"AmpereOne"'], > ['RTE_MAX_LCORE', 320], @@ -206,7 +209,7 @@ > implementer_hisilicon =3D { > '0xd01': { > 'march': 'armv8.2-a', > 'march_features': ['crypto'], > - 'compiler_options': ['-mtune=3Dtsv110'], > + 'mcpu': 'tsv110', > 'flags': [ > ['RTE_MACHINE', '"Kunpeng 920"'], > ['RTE_ARM_FEATURE_ATOMICS', true], @@ -695,11 +698,21 @@= if > update_flags >=20 > machine_args =3D [] # Clear previous machine args >=20 > + candidate_mcpu =3D '' > + if part_number_config.has_key('mcpu') > + mcpu =3D part_number_config['mcpu'] > + if (cc.has_argument('-mcpu=3D' + mcpu)) > + candidate_mcpu =3D mcpu > + endif > + endif > + > # probe supported archs and their features > candidate_march =3D '' > if part_number_config.has_key('march') > - if part_number_config.get('force_march', false) > - candidate_march =3D part_number_config['march'] > + if part_number_config.get('force_march', false) or candidate_mcp= u !=3D '' > + if cc.has_argument('-march=3D' + part_number_config['march'= ]) > + candidate_march =3D part_number_config['march'] > + endif > else > supported_marchs =3D ['armv8.6-a', 'armv8.5-a', 'armv8.4-a',= 'armv8.3- > a', > 'armv8.2-a', 'armv8.1-a', 'armv8-a'] @@ = -717,32 +730,43 > @@ if update_flags > endif > endforeach > endif > - if candidate_march =3D=3D '' > - error('No suitable armv8 march version found.') > - endif > + > if candidate_march !=3D part_number_config['march'] > - warning('Configuration march version is ' + > - '@0@, but the compiler supports only @1@.' > - .format(part_number_config['march'], candidate_march= )) > + warning('Configuration march version is @0@, not supported.' > + .format(part_number_config['march'])) > + if candidate_march !=3D '' > + warning('Using march version @0@.'.format(candidate_marc= h)) > + endif > endif > - candidate_march =3D '-march=3D' + candidate_march >=20 > - march_features =3D [] > - if part_number_config.has_key('march_features') > - march_features +=3D part_number_config['march_features'] > - endif > - if soc_config.has_key('extra_march_features') > - march_features +=3D soc_config['extra_march_features'] > + if candidate_march =3D=3D '' and candidate_mcpu =3D=3D '' > + error('No suitable ARM march/mcpu version found.') > endif > - foreach feature: march_features > - if cc.has_argument('+'.join([candidate_march, feature])) > - candidate_march =3D '+'.join([candidate_march, feature]) > - else > - warning('The compiler does not support feature @0@' > - .format(feature)) > + > + if candidate_march !=3D '' > + candidate_march =3D '-march=3D' + candidate_march > + march_features =3D [] > + if part_number_config.has_key('march_features') > + march_features +=3D part_number_config['march_features'] > endif > - endforeach > - machine_args +=3D candidate_march > + if soc_config.has_key('extra_march_features') > + march_features +=3D soc_config['extra_march_features'] > + endif > + foreach feature: march_features > + if cc.has_argument('+'.join([candidate_march, feature])) > + candidate_march =3D '+'.join([candidate_march, featu= re]) > + else > + warning('The compiler does not support feature @0@' > + .format(feature)) > + endif > + endforeach > + machine_args +=3D candidate_march > + endif > + endif > + > + if candidate_mcpu !=3D '' > + candidate_mcpu =3D '-mcpu=3D' + candidate_mcpu > + machine_args +=3D candidate_mcpu > endif >=20 > # apply supported compiler options > -- > 2.43.0