[dpdk-dev] [PATCH v17 1/3] build: disable/enable drivers in Arm builds
Juraj Linkeš
juraj.linkes at pantheon.tech
Wed Mar 31 12:26:09 CEST 2021
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 at pantheon.tech>
Acked-by: Bruce Richardson <bruce.richardson at intel.com>
Reviewed-by: Honnappa Nagarahalli <honnappa.nagarahalli at 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(-)
diff --git a/config/arm/meson.build b/config/arm/meson.build
index 00bc4610a3..a241c45d13 100644
--- a/config/arm/meson.build
+++ b/config/arm/meson.build
@@ -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]
]
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..1504dbfef0 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
+
+ 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
diff --git a/drivers/meson.build b/drivers/meson.build
index fdf76120ac..2d5c51b326 100644
--- a/drivers/meson.build
+++ b/drivers/meson.build
@@ -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
diff --git a/meson.build b/meson.build
index fcc4d4c900..ea7ccfdae3 100644
--- a/meson.build
+++ b/meson.build
@@ -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')
diff --git a/meson_options.txt b/meson_options.txt
index 6eff62e47d..db8b2951a4 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -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: '',
--
2.20.1
More information about the dev
mailing list