> -----Original Message-----
> From: Juraj Linkeš <juraj.linkes@pantheon.tech>
> Sent: Wednesday, March 31, 2021 6:26 PM
> To: bruce.richardson@intel.com; Ruifeng Wang <Ruifeng.Wang@arm.com>;
> Honnappa Nagarahalli <Honnappa.Nagarahalli@arm.com>; Phil Yang
> <Phil.Yang@arm.com>; vcchunga@amazon.com; Dharmik Thakkar
> <Dharmik.Thakkar@arm.com>; jerinjacobk@gmail.com;
> hemant.agrawal@nxp.com; Ajit Khaparde (ajit.khaparde@broadcom.com)
> <ajit.khaparde@broadcom.com>; ferruh.yigit@intel.com;
> aboyer@pensando.io
> Cc: dev@dpdk.org; Juraj Linkeš <juraj.linkes@pantheon.tech>
> Subject: [PATCH v17 1/3] build: disable/enable drivers in Arm builds
>
> 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.
>
> By default, build all drivers for which dependencies are found. If
> enabled_drivers is a non-empty list, build only those drivers. If
> disabled_drivers is non-empty list, build all drivers except those in
> disabled_drivers. Error out if both are specified (i.e. do not support that case).
>
> 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@pantheon.tech>
> Acked-by: Bruce Richardson <bruce.richardson@intel.com>
> Reviewed-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
> ---
> config/arm/meson.build | 4 --
> .../linux_gsg/cross_build_dpdk_for_arm64.rst | 8 +++
> drivers/meson.build | 49 +++++++++++++++++--
> meson.build | 2 +
> meson_options.txt | 2 +
> 5 files changed, 56 insertions(+), 9 deletions(-)
>
Reviewed-by: Ruifeng Wang <ruifeng.wang@arm.com>
@@ -16,9 +16,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],
@@ -125,7 +122,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]
]
@@ -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
+
+ disabled_drivers = ['bus/dpaa', 'crypto/*'] # add disabled drivers
+ # valid values are dir/subdirs in the drivers directory
+ # wildcards are allowed
+
+ enabled_drivers = ['common/*', 'bus/*'] # build only these drivers
+ # valid values are dir/subdirs in the drivers directory
+ # wildcards are allowed
@@ -18,8 +18,39 @@ subdirs = [
'baseband', # depends on common and bus.
]
-disabled_drivers = run_command(list_dir_globs, get_option('disable_drivers'),
- ).stdout().split()
+always_enabled = ['bus/pci', 'bus/vdev']
+
+if meson.is_cross_build()
+ disabled_drivers += meson.get_cross_property('disabled_drivers', [])
+ enabled_drivers += meson.get_cross_property('enabled_drivers', [])
+endif
+
+# add cmdline disabled drivers (comma separated string)
+# and meson disabled drivers (list)
+# together into a comma separated string
+disabled_drivers = ','.join([get_option('disable_drivers'), ','.join(disabled_drivers)]).strip(',')
+if disabled_drivers != ''
+ disabled_drivers = run_command(list_dir_globs,
+ disabled_drivers).stdout().split()
+else
+ disabled_drivers = []
+endif
+
+# add cmdline enabled drivers (comma separated string)
+# and meson enabled drivers (list)
+# together into a comma separated string
+enabled_drivers = ','.join([get_option('enable_drivers'), ','.join(enabled_drivers)]).strip(',')
+if enabled_drivers != ''
+ enabled_drivers = run_command(list_dir_globs,
+ enabled_drivers).stdout().split()
+else
+ enabled_drivers = []
+endif
+
+if disabled_drivers != [] and enabled_drivers != []
+ error('Simultaneous disabled drivers and enabled drivers ' +
+ 'configuration is not supported.')
+endif
default_cflags = machine_args
default_cflags += ['-DALLOW_EXPERIMENTAL_API']
@@ -48,7 +79,7 @@ foreach subpath:subdirs
dpdk_driver_classes += class
endif
# get already enabled drivers of the same class
- enabled_drivers = get_variable(class + '_drivers', [])
+ enabled_class_drivers = get_variable(class + '_drivers', [])
foreach drv:drivers
drv_path = join_paths(class, drv)
@@ -76,11 +107,19 @@ foreach subpath:subdirs
if disabled_drivers.contains(drv_path)
build = false
reason = 'explicitly disabled via build config'
+ elif enabled_drivers.length() > 0 and not enabled_drivers.contains(drv_path)
+ build = false
+ reason = 'not in enabled drivers build config'
else
# pull in driver directory which should update all the local variables
subdir(drv_path)
endif
+ if not build and always_enabled.contains(drv_path)
+ build = true
+ message('Driver @0@ cannot be disabled, enabling.'.format(drv_path))
+ endif
+
if build
# get dependency objs from strings
shared_deps = ext_deps
@@ -108,7 +147,7 @@ foreach subpath:subdirs
'_disable_reason', reason)
endif
else
- enabled_drivers += name
+ enabled_class_drivers += name
lib_name = '_'.join(['rte', class, name])
dpdk_conf.set(lib_name.to_upper(), 1)
@@ -213,5 +252,5 @@ foreach subpath:subdirs
endif # build
endforeach
- set_variable(class + '_drivers', enabled_drivers)
+ set_variable(class + '_drivers', enabled_class_drivers)
endforeach
@@ -22,6 +22,8 @@ dpdk_drivers = []
dpdk_extra_ldflags = []
dpdk_libs_disabled = []
dpdk_drvs_disabled = []
+disabled_drivers = []
+enabled_drivers = []
abi_version_file = files('ABI_VERSION')
if host_machine.cpu_family().startswith('x86')
@@ -8,6 +8,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_kmods', type: 'boolean', value: false,
description: 'build kernel modules')
option('examples', type: 'string', value: '',