From 86eaa6c5e10dde632f17b900ea0e3aa4d61cb3b3 Mon Sep 17 00:00:00 2001
From: Kieran Bingham <kieran.bingham@ideasonboard.com>
Date: Tue, 15 Jun 2021 15:23:09 +0100
Subject: libcamera/base: Introduce new base library

The libcamera-base.so will feature internal support functionality
that is utilised by libcamera, and can be shared in other places.

This new library provides a layer beneath libcamera which provides
common abstractions to internal objects.

A pkg-config file is generated and named libcamera-base.pc which allows
components such as external IPA modules to link directly to this library
if they need. Normal applications will reference this library through
the Requires: statement provided by the libcamera.pc package
configuration, and linkage will be handled automatically through the
pkg-config mechanisms.

No code is moved to this library yet, this patch only introduces the
framework, construction and linkage.

Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Hirokazu Honda <hiroh@chromium.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
---
 Documentation/meson.build          |  2 ++
 include/libcamera/base/meson.build |  9 +++++++++
 include/libcamera/meson.build      |  1 +
 src/libcamera/base/meson.build     | 26 ++++++++++++++++++++++++++
 src/libcamera/meson.build          |  4 ++++
 5 files changed, 42 insertions(+)
 create mode 100644 include/libcamera/base/meson.build
 create mode 100644 src/libcamera/base/meson.build

diff --git a/Documentation/meson.build b/Documentation/meson.build
index 9ecf4dfc..c4bd3c7f 100644
--- a/Documentation/meson.build
+++ b/Documentation/meson.build
@@ -22,6 +22,8 @@ if doxygen.found() and dot.found()
     custom_target('doxygen',
                   input : [
                       doxyfile,
+                      libcamera_base_headers,
+                      libcamera_base_sources,
                       libcamera_internal_headers,
                       libcamera_ipa_headers,
                       libcamera_ipa_interfaces,
diff --git a/include/libcamera/base/meson.build b/include/libcamera/base/meson.build
new file mode 100644
index 00000000..0a7a57b8
--- /dev/null
+++ b/include/libcamera/base/meson.build
@@ -0,0 +1,9 @@
+# SPDX-License-Identifier: CC0-1.0
+
+libcamera_base_include_dir = libcamera_include_dir / 'base'
+
+libcamera_base_headers = files([
+])
+
+install_headers(libcamera_base_headers,
+                subdir: libcamera_base_include_dir)
diff --git a/include/libcamera/meson.build b/include/libcamera/meson.build
index 086c958b..4ac864b7 100644
--- a/include/libcamera/meson.build
+++ b/include/libcamera/meson.build
@@ -23,6 +23,7 @@ libcamera_public_headers = files([
 
 include_dir = libcamera_include_dir / 'libcamera'
 
+subdir('base')
 subdir('internal')
 subdir('ipa')
 
diff --git a/src/libcamera/base/meson.build b/src/libcamera/base/meson.build
new file mode 100644
index 00000000..e8384602
--- /dev/null
+++ b/src/libcamera/base/meson.build
@@ -0,0 +1,26 @@
+# SPDX-License-Identifier: CC0-1.0
+
+libcamera_base_sources = files([
+])
+
+libcamera_base_deps = [
+]
+
+libcamera_base_lib = shared_library('libcamera-base',
+                                    [libcamera_base_sources, libcamera_base_headers],
+                                    name_prefix : '',
+                                    install : true,
+                                    include_directories : libcamera_includes,
+                                    dependencies : libcamera_base_deps)
+
+libcamera_base = declare_dependency(sources : [
+                                        libcamera_base_headers,
+                                    ],
+                                    include_directories : libcamera_includes,
+                                    link_with : libcamera_base_lib)
+
+pkg_mod = import('pkgconfig')
+pkg_mod.generate(libcamera_base_lib,
+                 version : '1.0',
+                 description : 'Camera support base utility library',
+                 subdirs : 'libcamera')
diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build
index 693008d5..655c0c16 100644
--- a/src/libcamera/meson.build
+++ b/src/libcamera/meson.build
@@ -67,6 +67,7 @@ includes = [
     libcamera_includes,
 ]
 
+subdir('base')
 subdir('ipa')
 subdir('pipeline')
 subdir('proxy')
@@ -124,6 +125,7 @@ endif
 
 libcamera_deps = [
     libatomic,
+    libcamera_base,
     libdl,
     libgnutls,
     liblttng,
@@ -156,10 +158,12 @@ libcamera_dep = declare_dependency(sources : [
                                        libcamera_generated_ipa_headers,
                                    ],
                                    include_directories : libcamera_includes,
+                                   dependencies: libcamera_base,
                                    link_with : libcamera)
 
 pkg_mod = import('pkgconfig')
 pkg_mod.generate(libcamera,
+                 libraries : libcamera_base_lib,
                  version : '1.0',
                  description : 'Complex Camera Support Library',
                  subdirs : 'libcamera')
-- 
cgit v1.2.1