[dpdk-dev] [PATCH v20 1/3] build: disable/enable drivers in Arm builds

Bruce Richardson bruce.richardson at intel.com
Wed Apr 14 15:27:36 CEST 2021


On Wed, Apr 14, 2021 at 02:58:36PM +0200, Juraj Linkeš wrote:
> Add support for enabling or disabling drivers for Arm cross build. Do
> not implement any enable/disable lists yet.
> 
> Enabling drivers is useful when building for an SoC where we only want
> to build a few drivers. That way the list won't be too long.
> 
> Similarly, disabling drivers is useful when we want to disable only a
> few drivers.
> 
> Both of these are advantageous mainly in aarch64 -> aarch64 (or arch ->
> same arch) builds, where the build machine may have the required driver
> dependencies, yet we don't want to build drivers for a specific SoC.
> 
> If enable_drivers is a non-empty list, build only those drivers,
> otherwise build all drivers and add them to enable_drivers.  If
> disable_drivers is non-empty list, build all drivers specified in
> enable_drivers except those in disable_drivers.
> 
> There are two drivers, bus/pci and bus/vdev, which break the build if
> not enabled. Address this by always enabling these if the user disables
> them or doesn't specify in their allowlist.
> 
> Also remove the old Makefile arm configuration options which don't do
> anything in Meson.
> 
> Signed-off-by: Juraj Linkeš <juraj.linkes at pantheon.tech>
> Reviewed-by: Honnappa Nagarahalli <honnappa.nagarahalli at arm.com>
> Reviewed-by: Ruifeng Wang <ruifeng.wang at arm.com>

Please see one comment inline below. Otherwise LGTM.

Acked-by: Bruce Richardson <bruce.richardson at intel.com>

> ---
>  buildtools/list-dir-globs.py                  |  7 ++--
>  config/arm/meson.build                        |  4 ---
>  config/meson.build                            |  4 +++
>  .../linux_gsg/cross_build_dpdk_for_arm64.rst  |  8 +++++
>  drivers/common/qat/meson.build                |  4 +--
>  drivers/meson.build                           | 32 ++++++++++++++++---
>  meson_options.txt                             |  2 ++
>  7 files changed, 48 insertions(+), 13 deletions(-)
> 
> diff --git a/buildtools/list-dir-globs.py b/buildtools/list-dir-globs.py
> index 80b5e801f2..911e267335 100755
> --- a/buildtools/list-dir-globs.py
> +++ b/buildtools/list-dir-globs.py
> @@ -14,6 +14,7 @@
>                      os.getenv('MESON_SUBDIR', '.'))
>  
>  for path in sys.argv[1].split(','):
> -    for p in iglob(os.path.join(root, path)):
> -        if os.path.isdir(p):
> -            print(os.path.relpath(p))
> +    if path:
> +        for p in iglob(os.path.join(root, path)):
> +            if os.path.isdir(p):
> +                print(os.path.relpath(p))
> diff --git a/config/arm/meson.build b/config/arm/meson.build
> index aaed89bd5b..2984ae2db3 100644
> --- a/config/arm/meson.build
> +++ b/config/arm/meson.build
> @@ -17,9 +17,6 @@ flags_common = [
>  	#	['RTE_ARM64_MEMCPY_ALIGN_MASK', 0xF],
>  	#	['RTE_ARM64_MEMCPY_STRICT_ALIGN', false],
>  
> -	['RTE_NET_FM10K', false],
> -	['RTE_NET_AVP', false],
> -
>  	['RTE_SCHED_VECTOR', false],
>  	['RTE_ARM_USE_WFE', false],
>  	['RTE_ARCH_ARM64', true],
> @@ -126,7 +123,6 @@ implementer_cavium = {
>  				['RTE_MACHINE', '"octeontx2"'],
>  				['RTE_ARM_FEATURE_ATOMICS', true],
>  				['RTE_USE_C11_MEM_MODEL', true],
> -				['RTE_EAL_IGB_UIO', false],
>  				['RTE_MAX_LCORE', 36],
>  				['RTE_MAX_NUMA_NODES', 1]
>  			]
> diff --git a/config/meson.build b/config/meson.build
> index 3268cf6804..6e6ef8c0e1 100644
> --- a/config/meson.build
> +++ b/config/meson.build
> @@ -63,6 +63,10 @@ if not is_windows
>  			pmd_subdir_opt)
>  endif
>  
> +# init disable/enable driver lists that will be populated in different places
> +disable_drivers = ''
> +enable_drivers = ''
> +
>  # set the machine type and cflags for it
>  if meson.is_cross_build()
>  	machine = host_machine.cpu()
> diff --git a/doc/guides/linux_gsg/cross_build_dpdk_for_arm64.rst b/doc/guides/linux_gsg/cross_build_dpdk_for_arm64.rst
> index faaf24b95b..9b9e8ef704 100644
> --- a/doc/guides/linux_gsg/cross_build_dpdk_for_arm64.rst
> +++ b/doc/guides/linux_gsg/cross_build_dpdk_for_arm64.rst
> @@ -234,3 +234,11 @@ There are other options you may specify in a cross file to tailor the build::
>        numa = false        # set to false to force building for a non-NUMA system
>           # if not set or set to true, the build system will build for a NUMA
>           # system only if libnuma is installed
> +
> +      disable_drivers = 'bus/dpaa,crypto/*'  # add disabled drivers
> +         # valid values are dir/subdirs in the drivers directory
> +         # wildcards are allowed
> +
> +      enable_drivers = 'common/*,bus/*'  # build only these drivers
> +         # valid values are dir/subdirs in the drivers directory
> +         # wildcards are allowed
> diff --git a/drivers/common/qat/meson.build b/drivers/common/qat/meson.build
> index 3ad7dd5017..fe278f734f 100644
> --- a/drivers/common/qat/meson.build
> +++ b/drivers/common/qat/meson.build
> @@ -14,13 +14,13 @@ qat_compress = true
>  qat_compress_path = 'compress/qat'
>  qat_compress_relpath = '../../' + qat_compress_path
>  
> -if disabled_drivers.contains(qat_crypto_path)
> +if disable_drivers.contains(qat_crypto_path)
>  	qat_crypto = false
>  	dpdk_drvs_disabled += qat_crypto_path
>  	set_variable(qat_crypto_path.underscorify() + '_disable_reason',
>  			'Explicitly disabled via build config')
>  endif
> -if disabled_drivers.contains(qat_compress_path)
> +if disable_drivers.contains(qat_compress_path)
>  	qat_compress = false
>  	dpdk_drvs_disabled += qat_compress_path
>  	set_variable(qat_compress_path.underscorify() + '_disable_reason',
> diff --git a/drivers/meson.build b/drivers/meson.build
> index 45af8749da..00fe70452d 100644
> --- a/drivers/meson.build
> +++ b/drivers/meson.build
> @@ -20,8 +20,25 @@ subdirs = [
>  	'baseband', # depends on common and bus.
>  ]
>  
> -disabled_drivers = run_command(list_dir_globs, get_option('disable_drivers'),
> -		).stdout().split()
> +if meson.is_cross_build()
> +	disable_drivers += ',' + meson.get_cross_property('disable_drivers', [])
> +	enable_drivers += ',' + meson.get_cross_property('enable_drivers', [])

Should the fallbacks here not be empty strings rather than empty values?

> +endif
> +
> +# add cmdline disabled drivers and meson disabled drivers together
> +disable_drivers += ',' + get_option('disable_drivers')
> +disable_drivers = run_command(list_dir_globs, disable_drivers).stdout().split()
> +
> +# add cmdline enabled drivers and meson enabled drivers together
> +enable_drivers = ',' + get_option('enable_drivers')
> +enable_drivers = run_command(list_dir_globs, enable_drivers).stdout().split()
> +if enable_drivers.length() == 0
> +	enable_drivers = run_command(list_dir_globs, '*/*').stdout().split()
> +endif
> +
> +# these drivers must always be enabled, otherwise the build breaks
> +always_enable = ['bus/pci', 'bus/vdev']
> +enable_drivers += always_enable
>  
>  default_cflags = machine_args
>  default_cflags += ['-DALLOW_EXPERIMENTAL_API']
> @@ -75,9 +92,16 @@ foreach subpath:subdirs
>  		ext_deps = []
>  		pkgconfig_extra_libs = []
>  
> -		if disabled_drivers.contains(drv_path)
> +		if not enable_drivers.contains(drv_path)
>  			build = false
> -			reason = 'explicitly disabled via build config'
> +			reason = 'not in enabled drivers build config'
> +		elif disable_drivers.contains(drv_path)
> +			if always_enable.contains(drv_path)
> +				message('Driver @0@ cannot be disabled, not disabling.'.format(drv_path))
> +			else
> +				build = false
> +				reason = 'explicitly disabled via build config'
> +			endif
>  		else
>  			# pull in driver directory which should update all the local variables
>  			subdir(drv_path)
> diff --git a/meson_options.txt b/meson_options.txt
> index fa207cbada..e1dc351620 100644
> --- a/meson_options.txt
> +++ b/meson_options.txt
> @@ -10,6 +10,8 @@ option('drivers_install_subdir', type: 'string', value: 'dpdk/pmds-<VERSION>',
>  	description: 'Subdirectory of libdir where to install PMDs. Defaults to using a versioned subdirectory.')
>  option('enable_docs', type: 'boolean', value: false,
>  	description: 'build documentation')
> +option('enable_drivers', type: 'string', value: '',
> +	description: 'Comma-separated list of drivers to build. If unspecified, build all drivers.')
>  option('enable_driver_sdk', type: 'boolean', value: false,
>  	description: 'Install headers to build drivers.')
>  option('enable_kmods', type: 'boolean', value: false,
> -- 
> 2.20.1
> 


More information about the dev mailing list