[dpdk-dev] [PATCH v7 07/14] build: isolate configuration for generic build

Juraj Linkeš juraj.linkes at pantheon.tech
Thu Nov 5 15:09:18 CET 2020



> -----Original Message-----
> From: Juraj Linkeš <juraj.linkes at pantheon.tech>
> Sent: Thursday, November 5, 2020 2:59 PM
> To: bruce.richardson at intel.com; Ruifeng.Wang at arm.com;
> Honnappa.Nagarahalli at arm.com; Phil.Yang at arm.com;
> vcchunga at amazon.com; Dharmik.Thakkar at arm.com; jerinjacobk at gmail.com;
> hemant.agrawal at nxp.com; ajit.khaparde at broadcom.com;
> ferruh.yigit at intel.com; aconole at redhat.com
> Cc: dev at dpdk.org; Juraj Linkeš <juraj.linkes at 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 at 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 at .
> '.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 at 0 not
> found.'.format(part_number))
> +		# unknown part number
> +		error('Unsupported part number @0@ of implementer @1 at . '
> +		      .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



More information about the dev mailing list