[dpdk-dev] [PATCH v8 03/10] drivers: relax dependency order
Parav Pandit
parav at mellanox.com
Thu Jul 23 22:09:03 CEST 2020
From: Thomas Monjalon <thomas at monjalon.net>
Drivers dependencies are evaluated in the order defined per
their parent directory (also called class).
This strict ordering prevent from having 2 different drivers
of the same class with different dependencies ordering.
This problem occurs if drivers/common/mlx5 depends on drivers/bus/pci,
while drivers/bus/dpaa depends on drivers/common/dpaax.
Having a strict ordering between directories bus and common
is too much restrictive.
That's why it is made possible to have a more fine-grain directory list,
adding a driver sub-directory in the list.
In this case, the isolated driver must be removed from its class list,
and added directly in drivers/meson.build.
Also, the per-class variables must be duplicated in the isolated driver,
because the call "subdir(class)" is skipped in the isolated driver case.
Signed-off-by: Thomas Monjalon <thomas at monjalon.net>
---
drivers/meson.build | 28 +++++++++++++++++++++-------
1 file changed, 21 insertions(+), 7 deletions(-)
diff --git a/drivers/meson.build b/drivers/meson.build
index e2aeba931..e6d0409aa 100644
--- a/drivers/meson.build
+++ b/drivers/meson.build
@@ -1,8 +1,8 @@
# SPDX-License-Identifier: BSD-3-Clause
# Copyright(c) 2017-2019 Intel Corporation
-# Defines the order in which the drivers are buit.
-dpdk_driver_classes = [
+# Defines the order of dependencies evaluation
+subdirs = [
'common',
'bus',
'mempool', # depends on common and bus.
@@ -27,7 +27,7 @@ if cc.has_argument('-Wno-format-truncation')
default_cflags += '-Wno-format-truncation'
endif
-foreach class:dpdk_driver_classes
+foreach subpath:subdirs
drivers = []
std_deps = []
config_flag_fmt = '' # format string used to set the value in dpdk_conf
@@ -35,8 +35,22 @@ foreach class:dpdk_driver_classes
# the library, the dependency and to find the
# version file for linking
- subdir(class)
- class_drivers = []
+ # subpath can be either "class" or "class/driver"
+ if subpath.contains('/')
+ driver_path = subpath.split('/')
+ class = driver_path[0]
+ drivers += driver_path[1]
+ else
+ class = subpath
+ subdir(class)
+ endif
+
+ # save class name on first occurence
+ if not dpdk_driver_classes.contains(class)
+ dpdk_driver_classes += class
+ endif
+ # get already enabled drivers of the same class
+ enabled_drivers = get_variable(class + '_drivers', [])
foreach drv:drivers
drv_path = join_paths(class, drv)
@@ -96,7 +110,7 @@ foreach class:dpdk_driver_classes
'_disable_reason', reason)
endif
else
- class_drivers += name
+ enabled_drivers += name
if fmt_name == ''
fmt_name = name
@@ -203,5 +217,5 @@ foreach class:dpdk_driver_classes
endif # build
endforeach
- set_variable(class + '_drivers', class_drivers)
+ set_variable(class + '_drivers', enabled_drivers)
endforeach
--
2.25.4
More information about the dev
mailing list