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

Juraj Linkeš juraj.linkes at pantheon.tech
Wed Feb 3 15:03:55 CET 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 speficic 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).

Remove the old Makefile arm configutaion 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                           | 41 ++++++++++++++++---
 meson.build                                   |  2 +
 4 files changed, 46 insertions(+), 9 deletions(-)

diff --git a/config/arm/meson.build b/config/arm/meson.build
index f948768578..d279724dec 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..70c1aa4e6c 100644
--- a/drivers/meson.build
+++ b/drivers/meson.build
@@ -18,8 +18,36 @@ 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()
+	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
+
+if enabled_drivers != []
+	enabled_drivers = run_command(list_dir_globs,
+		','.join(enabled_drivers)).stdout().split()
+endif
+
+if disabled_drivers != [] and enabled_drivers != []
+	# TODO/QUERY we could support both:
+	# first 'select' only drivers by enabled_drivers
+	# then 'deselect' those in disabled_drivers
+	# this would be useful if a directory is in enabled_drivers
+	# and a driver from that directory is in disabled_drivers
+	error('Simultaneous disabled drivers and enabled drivers ' +
+	      'configuration is not supported.')
+endif
 
 default_cflags = machine_args
 default_cflags += ['-DALLOW_EXPERIMENTAL_API']
@@ -48,7 +76,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,6 +104,9 @@ 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)
@@ -108,7 +139,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 +244,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')
-- 
2.20.1



More information about the dev mailing list