[libcamera-devel] [PATCH 4/5] libcamera: ipa_manager: Search the runpath for IPA libraries
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Thu Feb 6 21:34:36 CET 2020
Hi Kieran,
Thank you for the patch.
On Wed, Feb 05, 2020 at 01:04:19PM +0000, Kieran Bingham wrote:
> Expose the IPA build path through the libcamera library runpath entry in
s/library runpath entry/library search path entry (DT_RUNPATH)/
> the elf string table. Utilise this path to search for compiled IPA
s/elf string table/ELF dynamic tags/ ?
> libraries when loading the IPAManager.
>
> The build time path is removed during the library install phase.
>
> Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> ---
> src/libcamera/ipa_manager.cpp | 9 +++++++++
> src/libcamera/meson.build | 1 +
> src/meson.build | 7 +++++++
> 3 files changed, 17 insertions(+)
>
> diff --git a/src/libcamera/ipa_manager.cpp b/src/libcamera/ipa_manager.cpp
> index 24fe709108fe..3dfe84fcf95e 100644
> --- a/src/libcamera/ipa_manager.cpp
> +++ b/src/libcamera/ipa_manager.cpp
> @@ -102,6 +102,15 @@ IPAManager::IPAManager()
> if (ret > 0)
> ipaCount += ret;
>
> + /*
> + * Utilise the Elf runpath to supply the IPA build directory, allowing
s/Elf/ELF/
> + * us to load IPA's before they are installed for testing and
> + * development.
> + */
> + const char *runpath = utils::get_runpath();
> + if (runpath)
> + ipaCount += addPath(runpath, true);
Shouldn't this go after LIBCAMERA_IPA_MODULE_PATH ? If a user sets
LIBCAMERA_IPA_MODULE_PATH, it should be considered before DT_RUNPATH.
I think we also need to move IPA_MODULE_DIR after DT_RUNPATH, as the
build directory should have precedence over the system directory.
Maybe the above comment should be expanded to explain the load order ?
/*
* Load IPA modules. The IPA manager uses the following search paths to
* locate the modules.
*
* - The directories in DT_RUNPATH. The build system sets DT_RUNPATH to
* point to the src/ipa/ subdirectory of the build directory, allowing
* finding modules in the build directory. DT_RUNPATH is stripped when
* libcamera.so is installed.
*
* - The directories specified in the LIBCAMERA_IPA_MODULE_PATH
* environment variable, if set.
*
* - The $prefix/ipa/ directory.
*/
> +
> const char *modulePaths = utils::secure_getenv("LIBCAMERA_IPA_MODULE_PATH");
> if (!modulePaths) {
> if (!ipaCount)
> diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build
> index 68d89559b290..87c5bbbb17a4 100644
> --- a/src/libcamera/meson.build
> +++ b/src/libcamera/meson.build
> @@ -107,6 +107,7 @@ libcamera = shared_library('camera',
> install : true,
> link_with : libcamera_link_with,
> include_directories : includes,
> + build_rpath : ipa_build_path,
> dependencies : libcamera_deps)
>
> libcamera_dep = declare_dependency(sources : [libcamera_api, libcamera_ipa_api, libcamera_h],
> diff --git a/src/meson.build b/src/meson.build
> index 5adcd61fd913..42e1eb984ccd 100644
> --- a/src/meson.build
> +++ b/src/meson.build
> @@ -2,6 +2,13 @@ if get_option('android')
> subdir('android')
> endif
>
> +# Provide libcamera with a reference to the current build for IPA
s/current build/build directory path/ ?
> +# loading. This allows IPAs to be successfully loaded when tests and
> +# applications are run from the build tree, but is stripped during the
> +# install phase, ensuring we maintain reproducible builds.
> +
> +ipa_build_path = join_paths(meson.current_build_dir(), 'ipa')
> +
> subdir('libcamera')
> subdir('ipa')
> subdir('cam')
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list