[dpdk-dev] [PATCH] build: allow using wildcards to disable drivers

Robin Jarry robin.jarry at 6wind.com
Tue Jan 21 10:11:33 CET 2020


2020-01-20, Bruce Richardson:
> Rather than having to explicitly list each and every driver to disable in a
> build, we can use a small python script and the python glob library to
> expand out the wildcards. This means that we can configure meson using e.g.
> 
>     meson -Ddisable_drivers=crypto/*,event/* build
> 
> to do a build omitting all the crypto and event drivers. Explicitly
> specified drivers e.g. net/i40e, work as before, and can be mixed with
> wildcarded drivers as required.
> 
> Signed-off-by: Bruce Richardson <bruce.richardson at intel.com>
> ---
[snip]
> +++ b/buildtools/list-dir-globs.sh
> @@ -0,0 +1,15 @@
> +#! /usr/bin/env python
> +# SPDX-License-Identifier: BSD-3-Clause
> +# Copyright(c) 2020 Intel Corporation
> +
> +from __future__ import print_function
> +from os import chdir, environ
> +from sys import argv
> +from glob import iglob # glob iterator
> +from os.path import isdir, join
> +
> +chdir(join(environ['MESON_SOURCE_ROOT'], environ['MESON_SUBDIR']))
> +dirs = []
> +for path in argv[1].split(','):
> +  dirs.extend([entry for entry in iglob(path) if isdir(entry)])

I do not fancy changing the current directory in scripts. This can lead
to unexpected behavior. You don't need to, you can achieve the same
result with the following code:

    from __future__ import print_function
    import argparse
    import os
    import glob

    parser = argparse.ArgumentParser()
    parser.add_argument('disable_drivers', type=lambda s: s.split(','))
    args = parser.parse_args()
    root = os.path.join(os.environ['MESON_SOURCE_ROOT'],
                        os.environ['MESON_SUBDIR'])
    dirs = []
    for driver in args.disable_drivers:
        driver_path = os.path.join(root, driver)
        for path in glob.iglob(driver_path):
            if os.path.isdir(path):
                dirs.append(os.path.relpath(path, root))
    print(','.join(dirs))

I did not see why you used iglob instead of glob. iglob is case
insensitive. Is that for windows support?

> +++ b/drivers/meson.build
> @@ -17,7 +17,8 @@ dpdk_driver_classes = ['common',
>                'event',   # depends on common, bus, mempool and net.
>                'baseband'] # depends on common and bus.
> 
> -disabled_drivers = get_option('disable_drivers').split(',')
> +disabled_drivers = run_command(list_dir_globs, get_option('disable_drivers'),
> +               ).stdout().strip().split(',')

Why adding commas again? Since you are processing the option value
through a script, you might as well print one folder per line and use
the .splitlines() meson function. It will make the code simpler as you
do not need to use an intermediate list to store the disabled drivers
before printing them.

-- 
Robin


More information about the dev mailing list