[libcamera-devel] [PATCH] meson: Rework automatic pipeline selection

Laurent Pinchart laurent.pinchart at ideasonboard.com
Thu Jan 26 12:13:05 CET 2023


Hi Kieran,

Thank you for the patch.

On Thu, Jan 12, 2023 at 11:07:56AM +0000, Kieran Bingham via libcamera-devel wrote:
> The supported pipelines are listed in three places: the
> meson_options.txt file, the defined array when a user selects
> -Dpipelines="all", and arrays defined when the default
> -Dpipelines="auto" is selected.
> 
> This can be hard to maintain and error prone.
> 
> Rework the definition of pipeline selection to a single table within the
> meson.build to reduce duplication within this file. The new table
> specifies the architecture(s) that the pipeline handler supports and
> is iterated to handle the special cases for 'all', 'auto' and 'test'.
> 
> The current behaviour such that 'all' takes precedence over 'auto' is
> maintained, and 'test' is now extended such that additional test
> pipeline handlers can easily be introduced.
> 
> The existing implementation defines the i.MX8-ISI and RKISP1 pipeline
> handlers as only supported by 'aarch64'. This conversion changes the
> behaviour such that those pipeline handlers are now supported on both
> 'arm' and 'aarch64' as each of those platforms could support a 32-bit
> ARM build.
> 
> Suggested-by: Javier Martinez Canillas <javierm at redhat.com>
> Reviewed-by: Javier Martinez Canillas <javierm at redhat.com>
> Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> ---
>  meson.build | 54 +++++++++++++++++++++++++++++------------------------
>  1 file changed, 30 insertions(+), 24 deletions(-)
> 
> diff --git a/meson.build b/meson.build
> index e86673dd5c0c..c35376e1e97b 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -164,38 +164,44 @@ liblttng = dependency('lttng-ust', required : get_option('tracing'))
>  # are enabled.
>  pipelines = get_option('pipelines')
>  
> +arch_arm = ['arm', 'aarch64']
> +arch_x86 = ['x86', 'x86_64']
> +pipes_support = {

pipelines_support to match the pipelines option ?

> +  'imx8-isi':     arch_arm,
> +  'ipu3':         arch_x86,
> +  'raspberrypi':  arch_arm,
> +  'rkisp1':       arch_arm,
> +  'simple':       arch_arm,
> +  'uvcvideo':     ['any'],
> +  'vimc':         ['test'],

4 spaces for indentation please.

> +}
> +
>  if pipelines.contains('all')
> -    pipelines = [
> -        'imx8-isi',
> -        'ipu3',
> -        'raspberrypi',
> -        'rkisp1',
> -        'simple',
> -        'uvcvideo',
> -        'vimc',
> -    ]
> +    pipelines = []
> +    foreach pipe, archs : pipes_support

Same here, s/pipe/pipeline/ ?

> +        pipelines += pipe
> +    endforeach

I think this could be simplified to

    pipelines = pipes_support.keys()

>  endif
>  
>  if pipelines.contains('auto')

elif ? The above case has added all pipeline handlers already. It will
also making it clearer that 'all' takes precedence over 'auto'.

>      host_cpu = host_machine.cpu_family()
>      pipelines = []
> -    if host_cpu == 'x86' or host_cpu == 'x86_64'
> -        pipelines += ['ipu3']
> -    elif host_cpu == 'aarch64'
> -        pipelines += ['imx8-isi', 'rkisp1']
> -    endif
> -
> -    if host_cpu == 'arm' or host_cpu == 'aarch64'
> -        pipelines += ['raspberrypi', 'simple']
> -    endif
> -
> -    # Always include the uvcvideo pipeline handler.
> -    pipelines += ['uvcvideo']
> +    foreach pipe, archs : pipes_support
> +        if host_cpu in archs or 'any' in archs
> +            message('Auto-enabling ' + pipe + ' pipeline handler')

Do we need a message ? The selected pipeline handlers are printed in the
summary, I'm not sure this message adds much value.

Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>

> +            pipelines += pipe
> +        endif
> +    endforeach
>  endif
>  
> -if get_option('test') and 'vimc' not in pipelines
> -    message('Enabling vimc pipeline handler to support tests')
> -    pipelines += ['vimc']
> +if get_option('test')
> +    foreach pipe, archs : pipes_support
> +        if 'test' in archs and pipe not in pipelines
> +            message('Enabling ' + pipe + ' pipeline handler for tests')
> +            pipelines += pipe
> +        endif
> +    endforeach
>  endif
>  
>  # Utilities are parsed first to provide support for other components.

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list