diff options
Diffstat (limited to 'src/ipa/meson.build')
-rw-r--r-- | src/ipa/meson.build | 75 |
1 files changed, 68 insertions, 7 deletions
diff --git a/src/ipa/meson.build b/src/ipa/meson.build index 73278a60..0ad4631d 100644 --- a/src/ipa/meson.build +++ b/src/ipa/meson.build @@ -1,19 +1,80 @@ -ipa_install_dir = join_paths(get_option('libdir'), 'libcamera') +# SPDX-License-Identifier: CC0-1.0 ipa_includes = [ libcamera_includes, - libcamera_internal_includes, ] +ipa_install_dir = libcamera_libdir +ipa_data_dir = libcamera_datadir / 'ipa' +ipa_sysconf_dir = libcamera_sysconfdir / 'ipa' + +config_h.set('IPA_CONFIG_DIR', + '"' + get_option('prefix') / ipa_sysconf_dir + + ':' + get_option('prefix') / ipa_data_dir + '"') + config_h.set('IPA_MODULE_DIR', - '"' + join_paths(get_option('prefix'), ipa_install_dir) + '"') + '"' + get_option('prefix') / ipa_install_dir + '"') + +summary({ + 'IPA_CONFIG_DIR' : config_h.get('IPA_CONFIG_DIR'), + 'IPA_MODULE_DIR' : config_h.get('IPA_MODULE_DIR'), + }, section : 'Paths') subdir('libipa') -ipas = ['rkisp1', 'vimc'] +ipa_sign = files('ipa-sign.sh') + +ipa_names = [] + +ipa_modules = get_option('ipas') + +# Tests require the vimc IPA, similar to vimc pipline-handler for their +# execution. Include it automatically when tests are enabled. +if get_option('test') and 'vimc' not in ipa_modules + message('Enabling vimc IPA to support tests') + ipa_modules += ['vimc'] +endif + +enabled_ipa_modules = [] +enabled_ipa_names = [] +ipa_names = [] -foreach pipeline : get_option('pipelines') - if ipas.contains(pipeline) - subdir(pipeline) +subdirs = [] +foreach pipeline : pipelines + # The current implementation expects the IPA module name to match the + # pipeline name. + # \todo Make the IPA naming scheme more flexible. + if not ipa_modules.contains(pipeline) + continue endif + enabled_ipa_names += pipeline + + # Allow multi-level directory structuring for the IPAs if needed. + pipeline = pipeline.split('/')[0] + if pipeline in subdirs + continue + endif + + subdirs += pipeline + subdir(pipeline) + + # Don't reuse the pipeline variable below, the subdirectory may have + # overwritten it. endforeach + +# The ipa-sign-install.sh script which uses the enabled_ipa_modules variable +# will itself prepend MESON_INSTALL_DESTDIR_PREFIX to each ipa module name, +# therefore we must not include the prefix string here. +foreach ipa_name : ipa_names + enabled_ipa_modules += ipa_install_dir / ipa_name + '.so' +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(), + enabled_ipa_modules, + install_tag : 'runtime') +endif |