[libcamera-devel] [PATCH] DNI: Allow nested IPA builds

Laurent Pinchart laurent.pinchart at ideasonboard.com
Tue May 2 18:02:57 CEST 2023


Hi Naush,

On Fri, Apr 28, 2023 at 02:12:15PM +0100, Naushir Patuck via libcamera-devel wrote:
> ONLY FOR TESTING!
> ---
> 
> Hi Laurent,
> 
> Here is an attempt at allowing the IPAs to be built within nested directories.
> It seems to do the trick, but you might be better suited to do something cleaner
> if desired.
> 
> Regards,
> Naush
> 
>  src/ipa/ipu3/meson.build   |  2 ++
>  src/ipa/meson.build        | 33 +++++++++++++++++++--------------
>  src/ipa/rkisp1/meson.build |  2 ++
>  src/ipa/rpi/meson.build    | 14 ++++++++++++++
>  4 files changed, 37 insertions(+), 14 deletions(-)
>  create mode 100644 src/ipa/rpi/meson.build
> 
> diff --git a/src/ipa/ipu3/meson.build b/src/ipa/ipu3/meson.build
> index 658e7c9bc366..66c398432d43 100644
> --- a/src/ipa/ipu3/meson.build
> +++ b/src/ipa/ipu3/meson.build
> @@ -29,3 +29,5 @@ if ipa_sign_module
>                    install : false,
>                    build_by_default : true)
>  endif
> +
> +ipa_names += ipa_name
> diff --git a/src/ipa/meson.build b/src/ipa/meson.build
> index 0c622c38a4a0..ca7fc90e21e0 100644
> --- a/src/ipa/meson.build
> +++ b/src/ipa/meson.build
> @@ -36,34 +36,39 @@ if get_option('test') and 'vimc' not in ipa_modules
>  endif
>  
>  enabled_ipa_modules = []
> -
> -# If the Raspberry Pi VC4 IPA is enabled, ensure we include the cam_helper,
> -# common and controller subdirectories in the build.
> -#
> -# This is done here and not within rpi/vc4/meson.build as meson does not
> -# allow the subdir command to traverse up the directory tree.
> -if pipelines.contains('rpi/vc4')
> -    subdir('rpi/cam_helper')
> -    subdir('rpi/common')
> -    subdir('rpi/controller')
> -endif
> +enabled_ipa_names = []
> +ipa_names = []
>  
>  # The ipa-sign-install.sh script which uses the ipa_names variable will itself
>  # prepend MESON_INSTALL_DESTDIR_PREFIX to each ipa module name, therefore we
>  # must not include the prefix string here.
> +
> +subdirs = []
>  foreach pipeline : pipelines
>      if ipa_modules.contains(pipeline)

You could do

    if not ipa_modules.contains(pipeline)
        continue
    endif

to lower the indentation level.

> -        subdir(pipeline)
> -        ipa_names += ipa_install_dir / ipa_name + '.so'
>          enabled_ipa_modules += pipeline

As ipa_names now contain the names of the IPA modules, not the module
full path, I'd use enabled_ipa_names here (and update the top-level
meson.build file accordingly).

> +
> +        # Allow multi-level directory structuring for the IPAs if needed.
> +        # An example would be the Raspberry Pi IPA (rpi).
> +        pipeline = pipeline.split('/')[0]
> +        if pipeline in subdirs
> +            continue
> +        endif
> +
> +        subdir(pipeline)
> +        subdirs += [pipeline]
>      endif
>  endforeach
>  
> +foreach ipa_name : ipa_names
> +    enabled_ipa_names += ipa_install_dir / ipa_name + '.so'

And here I'd use enabled_ipa_modules.

> +endforeach
> +
>  if ipa_sign_module
>      # Regenerate the signatures for all IPA modules. We can't simply install the
>      # .sign files, as meson strips the DT_RPATH and DT_RUNPATH from binaries at
>      # install time, which invalidates the signatures.
>      meson.add_install_script('ipa-sign-install.sh',
>                               ipa_priv_key.full_path(),
> -                             ipa_names)
> +                             enabled_ipa_names)

Same here.

Apart from that, I think this looks good.


>  endif
> diff --git a/src/ipa/rkisp1/meson.build b/src/ipa/rkisp1/meson.build
> index ccb84b27525b..e813da53ae9b 100644
> --- a/src/ipa/rkisp1/meson.build
> +++ b/src/ipa/rkisp1/meson.build
> @@ -29,3 +29,5 @@ if ipa_sign_module
>                    install : false,
>                    build_by_default : true)
>  endif
> +
> +ipa_names += ipa_name
> diff --git a/src/ipa/rpi/meson.build b/src/ipa/rpi/meson.build
> new file mode 100644
> index 000000000000..4811c76f3f9e
> --- /dev/null
> +++ b/src/ipa/rpi/meson.build
> @@ -0,0 +1,14 @@
> +# SPDX-License-Identifier: CC0-1.0
> +
> +subdir('cam_helper')
> +subdir('common')
> +subdir('controller')
> +
> +foreach pipeline : pipelines
> +    pipeline = pipeline.split('/')
> +    if pipeline.length() < 2 or pipeline[0] != 'rpi'
> +        continue
> +    endif
> +
> +    subdir(pipeline[1])
> +endforeach

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list