[v7,07/14] build: isolate configuration for generic build

Message ID 1604584762-25321-8-git-send-email-juraj.linkes@pantheon.tech (mailing list archive)
State Superseded, archived
Delegated to: Thomas Monjalon
Headers
Series Arm build options rework |

Checks

Context Check Description
ci/checkpatch success coding style OK

Commit Message

Juraj Linkeš Nov. 5, 2020, 1:59 p.m. UTC
  Use generic configuration for the only build where it makes sense - the
generic build. For other builds, if we don't know either of implementer
ID or part number, the build is not supported.
Add part numbers to cross files where fallback to generic configuration
is assumed.

Signed-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech>
---
 config/arm/arm64_armv8_linux_gcc              | 11 ++---
 config/arm/arm64_emag_linux_gcc               |  1 +
 ..._linux_gcc => arm64_thunderxt88_linux_gcc} |  1 +
 config/arm/meson.build                        | 45 +++++++++----------
 4 files changed, 30 insertions(+), 28 deletions(-)
 rename config/arm/{arm64_thunderx_linux_gcc => arm64_thunderxt88_linux_gcc} (93%)
  

Comments

Juraj Linkeš Nov. 5, 2020, 2:09 p.m. UTC | #1
> -----Original Message-----
> From: Juraj Linkeš <juraj.linkes@pantheon.tech>
> Sent: Thursday, November 5, 2020 2:59 PM
> To: bruce.richardson@intel.com; Ruifeng.Wang@arm.com;
> Honnappa.Nagarahalli@arm.com; Phil.Yang@arm.com;
> vcchunga@amazon.com; Dharmik.Thakkar@arm.com; jerinjacobk@gmail.com;
> hemant.agrawal@nxp.com; ajit.khaparde@broadcom.com;
> ferruh.yigit@intel.com; aconole@redhat.com
> Cc: dev@dpdk.org; Juraj Linkeš <juraj.linkes@pantheon.tech>
> Subject: [PATCH v7 07/14] build: isolate configuration for generic build
> 
> Use generic configuration for the only build where it makes sense - the generic
> build. For other builds, if we don't know either of implementer ID or part
> number, the build is not supported.
> Add part numbers to cross files where fallback to generic configuration is
> assumed.
> 
> Signed-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech>
> ---
>  config/arm/arm64_armv8_linux_gcc              | 11 ++---
>  config/arm/arm64_emag_linux_gcc               |  1 +
>  ..._linux_gcc => arm64_thunderxt88_linux_gcc} |  1 +
>  config/arm/meson.build                        | 45 +++++++++----------
>  4 files changed, 30 insertions(+), 28 deletions(-)  rename
> config/arm/{arm64_thunderx_linux_gcc => arm64_thunderxt88_linux_gcc}
> (93%)
> 
> diff --git a/config/arm/arm64_armv8_linux_gcc
> b/config/arm/arm64_armv8_linux_gcc
> index 04cd82ba9..818953e0f 100644
> --- a/config/arm/arm64_armv8_linux_gcc
> +++ b/config/arm/arm64_armv8_linux_gcc
> @@ -22,8 +22,11 @@ endian = 'little'
>  # 'dpaa':    NXP DPAA
>  implementer_id = 'generic'
> 
> -# Supported part_numbers for generic, 0x41, 0x56, dpaa:
> -# 'generic': valid for all armv8-a architectures (default value)
> +# Supported part_numbers for generic:
> +# 'generic': valid for all armv8-a architectures (unoptimized portable
> +build) part_number = 'generic'
> +
> +# Supported part_numbers for 0x41, 0x56, dpaa:
>  # '0xd03':   cortex-a53
>  # '0xd04':   cortex-a35
>  # '0xd05':   cortex-a55
> @@ -33,10 +36,8 @@ implementer_id = 'generic'
>  # '0xd0a':   cortex-a75
>  # '0xd0b':   cortex-a76
>  # '0xd0c':   neoverse-n1
> -part_number = 'generic'
> 
>  # Supported part_numbers for 0x43:
> -# 'generic': valid for all Cavium builds
>  # '0xa1':    thunderxt88
>  # '0xa2':    thunderxt81
>  # '0xa3':    thunderxt83
> @@ -44,4 +45,4 @@ part_number = 'generic'
>  # '0xb2':    octeontx2
> 
>  # Supported part_numbers for 0x50:
> -# 'generic': valid for all Ampere builds
> +# '0x0':     emag
> diff --git a/config/arm/arm64_emag_linux_gcc
> b/config/arm/arm64_emag_linux_gcc index 24f3d533e..c675954fc 100644
> --- a/config/arm/arm64_emag_linux_gcc
> +++ b/config/arm/arm64_emag_linux_gcc
> @@ -14,3 +14,4 @@ endian = 'little'
> 
>  [properties]
>  implementer_id = '0x50'
> +part_number = '0x0'
> diff --git a/config/arm/arm64_thunderx_linux_gcc
> b/config/arm/arm64_thunderxt88_linux_gcc
> similarity index 93%
> rename from config/arm/arm64_thunderx_linux_gcc
> rename to config/arm/arm64_thunderxt88_linux_gcc
> index 670764437..758966262 100644
> --- a/config/arm/arm64_thunderx_linux_gcc
> +++ b/config/arm/arm64_thunderxt88_linux_gcc
> @@ -14,3 +14,4 @@ endian = 'little'
> 
>  [properties]
>  implementer_id = '0x43'
> +part_number = '0xa1'
> diff --git a/config/arm/meson.build b/config/arm/meson.build index
> 3e692057a..92572f670 100644
> --- a/config/arm/meson.build
> +++ b/config/arm/meson.build
> @@ -34,7 +34,6 @@ flags_part_number_thunderx = [
>  	['RTE_USE_C11_MEM_MODEL', false]
>  ]
>  part_number_config_arm = {
> -	'generic': {'machine_args':  ['-march=armv8-a+crc', '-moutline-
> atomics']},
>  	'native': {'machine_args':  ['-march=native']},
>  	'0xd03': {'machine_args':  ['-mcpu=cortex-a53']},
>  	'0xd04': {'machine_args':  ['-mcpu=cortex-a35']}, @@ -74,7 +73,9 @@
> implementers = {
>  			['RTE_CACHE_LINE_SIZE', 128],
>  			['RTE_MAX_LCORE', 256]
>  		],
> -		'part_number_config': part_number_config_arm
> +		'part_number_config': {
> +			'generic': {'machine_args':  ['-march=armv8-a+crc', '-
> moutline-atomics']}
> +		}
>  	},
>  	'0x41': {
>  		'description': 'Arm',
> @@ -95,7 +96,6 @@ implementers = {
>  			['RTE_MAX_NUMA_NODES', 2]
>  		],
>  		'part_number_config': {
> -			'generic': {'machine_args': ['-march=armv8-
> a+crc+crypto', '-mcpu=thunderx']},
>  			'native': {'machine_args': ['-march=native']},
>  			'0xa1': {
>  				'machine_args': ['-mcpu=thunderxt88'], @@ -
> 142,7 +142,7 @@ implementers = {
>  			['RTE_MAX_NUMA_NODES', 1]
>  		],
>  		'part_number_config': {
> -			'generic': {'machine_args':  ['-march=armv8-
> a+crc+crypto', '-mtune=emag']},
> +			'0x0': {'machine_args':  ['-march=armv8-a+crc+crypto',
> +'-mtune=emag']},

I removed generic from emag and instead used 0x0. Ruifeng, can you confirm that this is the right part number for emag?

>  			'native': {'machine_args':  ['-march=native']}
>  		}
>  	},
> @@ -181,10 +181,9 @@ if dpdk_conf.get('RTE_ARCH_32')
>  	machine_args += '-mfpu=neon'
>  else
>  	# aarch64 build
> -	implementer_id = 'generic'
>  	if machine == 'generic' and not meson.is_cross_build()
>  		# generic build
> -		implementer_config = implementer['generic']
> +		implementer_id = 'generic'
>  		part_number = 'generic'
>  	elif not meson.is_cross_build()
>  		# native build
> @@ -197,21 +196,24 @@ else
>  			cmd_output = cmd.stdout().to_lower().strip().split(' ')
>  			implementer_id = cmd_output[0]
>  			part_number = cmd_output[3]
> -		endif
> -		# Set to generic if variable is not found
> -		implementer_config = implementers.get(implementer_id,
> ['generic'])
> -		if implementer_config[0] == 'generic'
> -			implementer_config = implementer['generic']
> -			part_number = 'generic'
> +		else
> +			error('Error when getting Arm Implementer ID and part
> number.')
>  		endif
>  		if arm_force_native_march == true
>  			part_number = 'native'
>  		endif
>  	else
>  		# cross build
> -		implementer_id = meson.get_cross_property('implementer_id',
> 'generic')
> -		part_number = meson.get_cross_property('part_number',
> 'generic')
> -		implementer_config = implementers.get(implementer_id)
> +		implementer_id = meson.get_cross_property('implementer_id')
> +		part_number = meson.get_cross_property('part_number')
> +	endif
> +
> +	if implementers.has_key(implementer_id)
> +		implementer_config = implementers[implementer_id]
> +	else
> +		error('Unsupported Arm implementer: @0@.
> '.format(implementer_id) +
> +		      'Please add support for it or use the generic ' +
> +		      '(-Dmachine=generic) build.')
>  	endif
> 
>  	message('Arm implementer: ' + implementer_config['description'])
> @@ -221,15 +223,12 @@ else
>  	if part_number_config.has_key(part_number)
>  		# use the specified part_number machine args if found
>  		part_number_config = part_number_config[part_number]
> -	elif not meson.is_cross_build()
> -		# default to generic machine args if part_number is not found
> -		# and not forcing native machine args
> -		# but don't default in cross-builds; if part_number is specified
> -		# incorrectly in a cross-file, it needs to be fixed there
> -		part_number_config = part_number_config['generic']
>  	else
> -		# doing cross build and part number is not in
> part_number_config
> -		error('Cross build part number 0@0 not
> found.'.format(part_number))
> +		# unknown part number
> +		error('Unsupported part number @0@ of implementer @1@. '
> +		      .format(part_number, implementer_id) +
> +		      'Please add support for it or use the generic ' +
> +		      '(-Dmachine=generic) build.')
>  	endif
> 
>  	# use default flags with implementer flags
> --
> 2.20.1
  

Patch

diff --git a/config/arm/arm64_armv8_linux_gcc b/config/arm/arm64_armv8_linux_gcc
index 04cd82ba9..818953e0f 100644
--- a/config/arm/arm64_armv8_linux_gcc
+++ b/config/arm/arm64_armv8_linux_gcc
@@ -22,8 +22,11 @@  endian = 'little'
 # 'dpaa':    NXP DPAA
 implementer_id = 'generic'
 
-# Supported part_numbers for generic, 0x41, 0x56, dpaa:
-# 'generic': valid for all armv8-a architectures (default value)
+# Supported part_numbers for generic:
+# 'generic': valid for all armv8-a architectures (unoptimized portable build)
+part_number = 'generic'
+
+# Supported part_numbers for 0x41, 0x56, dpaa:
 # '0xd03':   cortex-a53
 # '0xd04':   cortex-a35
 # '0xd05':   cortex-a55
@@ -33,10 +36,8 @@  implementer_id = 'generic'
 # '0xd0a':   cortex-a75
 # '0xd0b':   cortex-a76
 # '0xd0c':   neoverse-n1
-part_number = 'generic'
 
 # Supported part_numbers for 0x43:
-# 'generic': valid for all Cavium builds
 # '0xa1':    thunderxt88
 # '0xa2':    thunderxt81
 # '0xa3':    thunderxt83
@@ -44,4 +45,4 @@  part_number = 'generic'
 # '0xb2':    octeontx2
 
 # Supported part_numbers for 0x50:
-# 'generic': valid for all Ampere builds
+# '0x0':     emag
diff --git a/config/arm/arm64_emag_linux_gcc b/config/arm/arm64_emag_linux_gcc
index 24f3d533e..c675954fc 100644
--- a/config/arm/arm64_emag_linux_gcc
+++ b/config/arm/arm64_emag_linux_gcc
@@ -14,3 +14,4 @@  endian = 'little'
 
 [properties]
 implementer_id = '0x50'
+part_number = '0x0'
diff --git a/config/arm/arm64_thunderx_linux_gcc b/config/arm/arm64_thunderxt88_linux_gcc
similarity index 93%
rename from config/arm/arm64_thunderx_linux_gcc
rename to config/arm/arm64_thunderxt88_linux_gcc
index 670764437..758966262 100644
--- a/config/arm/arm64_thunderx_linux_gcc
+++ b/config/arm/arm64_thunderxt88_linux_gcc
@@ -14,3 +14,4 @@  endian = 'little'
 
 [properties]
 implementer_id = '0x43'
+part_number = '0xa1'
diff --git a/config/arm/meson.build b/config/arm/meson.build
index 3e692057a..92572f670 100644
--- a/config/arm/meson.build
+++ b/config/arm/meson.build
@@ -34,7 +34,6 @@  flags_part_number_thunderx = [
 	['RTE_USE_C11_MEM_MODEL', false]
 ]
 part_number_config_arm = {
-	'generic': {'machine_args':  ['-march=armv8-a+crc', '-moutline-atomics']},
 	'native': {'machine_args':  ['-march=native']},
 	'0xd03': {'machine_args':  ['-mcpu=cortex-a53']},
 	'0xd04': {'machine_args':  ['-mcpu=cortex-a35']},
@@ -74,7 +73,9 @@  implementers = {
 			['RTE_CACHE_LINE_SIZE', 128],
 			['RTE_MAX_LCORE', 256]
 		],
-		'part_number_config': part_number_config_arm
+		'part_number_config': {
+			'generic': {'machine_args':  ['-march=armv8-a+crc', '-moutline-atomics']}
+		}
 	},
 	'0x41': {
 		'description': 'Arm',
@@ -95,7 +96,6 @@  implementers = {
 			['RTE_MAX_NUMA_NODES', 2]
 		],
 		'part_number_config': {
-			'generic': {'machine_args': ['-march=armv8-a+crc+crypto', '-mcpu=thunderx']},
 			'native': {'machine_args': ['-march=native']},
 			'0xa1': {
 				'machine_args': ['-mcpu=thunderxt88'],
@@ -142,7 +142,7 @@  implementers = {
 			['RTE_MAX_NUMA_NODES', 1]
 		],
 		'part_number_config': {
-			'generic': {'machine_args':  ['-march=armv8-a+crc+crypto', '-mtune=emag']},
+			'0x0': {'machine_args':  ['-march=armv8-a+crc+crypto', '-mtune=emag']},
 			'native': {'machine_args':  ['-march=native']}
 		}
 	},
@@ -181,10 +181,9 @@  if dpdk_conf.get('RTE_ARCH_32')
 	machine_args += '-mfpu=neon'
 else
 	# aarch64 build
-	implementer_id = 'generic'
 	if machine == 'generic' and not meson.is_cross_build()
 		# generic build
-		implementer_config = implementer['generic']
+		implementer_id = 'generic'
 		part_number = 'generic'
 	elif not meson.is_cross_build()
 		# native build
@@ -197,21 +196,24 @@  else
 			cmd_output = cmd.stdout().to_lower().strip().split(' ')
 			implementer_id = cmd_output[0]
 			part_number = cmd_output[3]
-		endif
-		# Set to generic if variable is not found
-		implementer_config = implementers.get(implementer_id, ['generic'])
-		if implementer_config[0] == 'generic'
-			implementer_config = implementer['generic']
-			part_number = 'generic'
+		else
+			error('Error when getting Arm Implementer ID and part number.')
 		endif
 		if arm_force_native_march == true
 			part_number = 'native'
 		endif
 	else
 		# cross build
-		implementer_id = meson.get_cross_property('implementer_id', 'generic')
-		part_number = meson.get_cross_property('part_number', 'generic')
-		implementer_config = implementers.get(implementer_id)
+		implementer_id = meson.get_cross_property('implementer_id')
+		part_number = meson.get_cross_property('part_number')
+	endif
+
+	if implementers.has_key(implementer_id)
+		implementer_config = implementers[implementer_id]
+	else
+		error('Unsupported Arm implementer: @0@. '.format(implementer_id) +
+		      'Please add support for it or use the generic ' +
+		      '(-Dmachine=generic) build.')
 	endif
 
 	message('Arm implementer: ' + implementer_config['description'])
@@ -221,15 +223,12 @@  else
 	if part_number_config.has_key(part_number)
 		# use the specified part_number machine args if found
 		part_number_config = part_number_config[part_number]
-	elif not meson.is_cross_build()
-		# default to generic machine args if part_number is not found
-		# and not forcing native machine args
-		# but don't default in cross-builds; if part_number is specified
-		# incorrectly in a cross-file, it needs to be fixed there
-		part_number_config = part_number_config['generic']
 	else
-		# doing cross build and part number is not in part_number_config
-		error('Cross build part number 0@0 not found.'.format(part_number))
+		# unknown part number
+		error('Unsupported part number @0@ of implementer @1@. '
+		      .format(part_number, implementer_id) +
+		      'Please add support for it or use the generic ' +
+		      '(-Dmachine=generic) build.')
 	endif
 
 	# use default flags with implementer flags