On Thu, Jul 23, 2020 at 10:10 PM Parav Pandit <pa...@mellanox.com> wrote: > > From: Thomas Monjalon <tho...@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 <tho...@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 >
Reviewed-by: David Marchand <david.march...@redhat.com> -- David Marchand