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

Kieran Bingham kieran.bingham at ideasonboard.com
Mon Jan 30 13:45:59 CET 2023


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 which
specifies the architecture(s) that the pipeline handler supports and
iterate it 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>
Reviewed-by: Paul Elder <paul.elder at ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
---

v2:
 - Took in Laurent's feedback, and moved the comment regarding enableing
   VIMC for tests closer to the code block where that actually occurs.

 meson.build | 57 ++++++++++++++++++++++++++---------------------------
 1 file changed, 28 insertions(+), 29 deletions(-)

diff --git a/meson.build b/meson.build
index 389c547206fb..3cbe1584e2dd 100644
--- a/meson.build
+++ b/meson.build
@@ -164,42 +164,41 @@ liblttng = dependency('lttng-ust', required : get_option('tracing'))
 
 # Pipeline handlers
 #
-# Tests require the vimc pipeline handler, include it automatically when tests
-# are enabled.
 pipelines = get_option('pipelines')
 
-if pipelines.contains('all')
-    pipelines = [
-        'imx8-isi',
-        'ipu3',
-        'raspberrypi',
-        'rkisp1',
-        'simple',
-        'uvcvideo',
-        'vimc',
-    ]
-endif
+arch_arm = ['arm', 'aarch64']
+arch_x86 = ['x86', 'x86_64']
+pipelines_support = {
+    'imx8-isi':     arch_arm,
+    'ipu3':         arch_x86,
+    'raspberrypi':  arch_arm,
+    'rkisp1':       arch_arm,
+    'simple':       arch_arm,
+    'uvcvideo':     ['any'],
+    'vimc':         ['test'],
+}
 
-if pipelines.contains('auto')
+if pipelines.contains('all')
+    pipelines = pipelines_support.keys()
+elif pipelines.contains('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 pipeline, archs : pipelines_support
+        if host_cpu in archs or 'any' in archs
+            pipelines += pipeline
+        endif
+    endforeach
 endif
 
-if get_option('test') and 'vimc' not in pipelines
-    message('Enabling vimc pipeline handler to support tests')
-    pipelines += ['vimc']
+# Tests require the vimc pipeline handler, include it automatically when tests
+# are enabled.
+if get_option('test')
+    foreach pipeline, archs : pipelines_support
+        if 'test' in archs and pipeline not in pipelines
+            message('Enabling ' + pipeline + ' pipeline handler for tests')
+            pipelines += pipeline
+        endif
+    endforeach
 endif
 
 # Utilities are parsed first to provide support for other components.
-- 
2.34.1



More information about the libcamera-devel mailing list