summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2020-04-15 22:27:33 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2020-04-16 17:34:08 +0300
commitb7c5e0e4f0e922c6988c68af6a64c31b071ad696 (patch)
tree799071e5f07acfaef0936c6b7c404ea01c7f67b1
parent2155a9b74ea3cc3bc0295c5709749520ffacdf6b (diff)
libcamera: Make IPA module signing optional
The IPA module signing mechanism relies on openssl to generate keys and sign the module. If openssl is not found on the system, the build will fail. Make the dependency optional by detecting openssl, and skip generation of signatures if openssl isn't found. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
-rw-r--r--src/ipa/rkisp1/meson.build14
-rw-r--r--src/ipa/vimc/meson.build14
-rw-r--r--src/libcamera/include/ipa_manager.h2
-rw-r--r--src/libcamera/ipa_manager.cpp4
-rw-r--r--src/libcamera/ipa_pub_key.cpp.in4
-rw-r--r--src/libcamera/meson.build16
-rw-r--r--src/meson.build15
7 files changed, 45 insertions, 24 deletions
diff --git a/src/ipa/rkisp1/meson.build b/src/ipa/rkisp1/meson.build
index 6ccadcfb..247d0429 100644
--- a/src/ipa/rkisp1/meson.build
+++ b/src/ipa/rkisp1/meson.build
@@ -9,9 +9,11 @@ mod = shared_module(ipa_name,
install : true,
install_dir : ipa_install_dir)
-custom_target(ipa_name + '.so.sign',
- input : mod,
- output : ipa_name + '.so.sign',
- command : [ ipa_sign, ipa_priv_key, '@INPUT@', '@OUTPUT@' ],
- install : true,
- install_dir : ipa_install_dir)
+if ipa_sign_module
+ custom_target(ipa_name + '.so.sign',
+ input : mod,
+ output : ipa_name + '.so.sign',
+ command : [ ipa_sign, ipa_priv_key, '@INPUT@', '@OUTPUT@' ],
+ install : true,
+ install_dir : ipa_install_dir)
+endif
diff --git a/src/ipa/vimc/meson.build b/src/ipa/vimc/meson.build
index 3c932aa7..a354096d 100644
--- a/src/ipa/vimc/meson.build
+++ b/src/ipa/vimc/meson.build
@@ -9,9 +9,11 @@ mod = shared_module(ipa_name,
install : true,
install_dir : ipa_install_dir)
-custom_target(ipa_name + '.so.sign',
- input : mod,
- output : ipa_name + '.so.sign',
- command : [ ipa_sign, ipa_priv_key, '@INPUT@', '@OUTPUT@' ],
- install : true,
- install_dir : ipa_install_dir)
+if ipa_sign_module
+ custom_target(ipa_name + '.so.sign',
+ input : mod,
+ output : ipa_name + '.so.sign',
+ command : [ ipa_sign, ipa_priv_key, '@INPUT@', '@OUTPUT@' ],
+ install : true,
+ install_dir : ipa_install_dir)
+endif
diff --git a/src/libcamera/include/ipa_manager.h b/src/libcamera/include/ipa_manager.h
index 0b5fd2ac..6165efb8 100644
--- a/src/libcamera/include/ipa_manager.h
+++ b/src/libcamera/include/ipa_manager.h
@@ -40,8 +40,10 @@ private:
bool isSignatureValid(IPAModule *ipa) const;
+#if HAVE_IPA_PUBKEY
static const uint8_t publicKeyData_[];
static const PubKey pubKey_;
+#endif
};
} /* namespace libcamera */
diff --git a/src/libcamera/ipa_manager.cpp b/src/libcamera/ipa_manager.cpp
index 7de1404e..50b6792d 100644
--- a/src/libcamera/ipa_manager.cpp
+++ b/src/libcamera/ipa_manager.cpp
@@ -304,6 +304,7 @@ std::unique_ptr<IPAInterface> IPAManager::createIPA(PipelineHandler *pipe,
bool IPAManager::isSignatureValid(IPAModule *ipa) const
{
+#if HAVE_IPA_PUBKEY
File file{ ipa->path() };
if (!file.open(File::ReadOnly))
return false;
@@ -319,6 +320,9 @@ bool IPAManager::isSignatureValid(IPAModule *ipa) const
<< (valid ? "valid" : "not valid");
return valid;
+#else
+ return false;
+#endif
}
} /* namespace libcamera */
diff --git a/src/libcamera/ipa_pub_key.cpp.in b/src/libcamera/ipa_pub_key.cpp.in
index e1fe287c..7ffc1e24 100644
--- a/src/libcamera/ipa_pub_key.cpp.in
+++ b/src/libcamera/ipa_pub_key.cpp.in
@@ -2,7 +2,7 @@
/*
* Copyright (C) 2020, Laurent Pinchart <laurent.pinchart@ideasonboard.com>
*
- * ipa_key.cpp - IPA module signing public key
+ * ipa_pub_key.cpp - IPA module signing public key
*
* This file is auto-generated. Do not edit.
*/
@@ -11,10 +11,12 @@
namespace libcamera {
+#if HAVE_IPA_PUBKEY
const uint8_t IPAManager::publicKeyData_[] = {
${ipa_key}
};
const PubKey IPAManager::pubKey_{ { IPAManager::publicKeyData_ } };
+#endif
} /* namespace libcamera */
diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build
index c502450c..dcd2fb49 100644
--- a/src/libcamera/meson.build
+++ b/src/libcamera/meson.build
@@ -101,13 +101,15 @@ version_cpp = vcs_tag(command : [gen_version, meson.build_root()],
libcamera_sources += version_cpp
-gen_ipa_pub_key = files('gen-ipa-pub-key.py')
-ipa_pub_key_cpp = custom_target('ipa_pub_key_cpp',
- input : [ ipa_priv_key, 'ipa_pub_key.cpp.in' ],
- output : 'ipa_pub_key.cpp',
- command : [ gen_ipa_pub_key, '@INPUT@', '@OUTPUT@' ])
-
-libcamera_sources += ipa_pub_key_cpp
+if ipa_sign_module
+ gen_ipa_pub_key = files('gen-ipa-pub-key.py')
+ ipa_pub_key_cpp = custom_target('ipa_pub_key_cpp',
+ input : [ ipa_priv_key, 'ipa_pub_key.cpp.in' ],
+ output : 'ipa_pub_key.cpp',
+ command : [ gen_ipa_pub_key, '@INPUT@', '@OUTPUT@' ])
+
+ libcamera_sources += ipa_pub_key_cpp
+endif
libcamera_deps = [
libatomic,
diff --git a/src/meson.build b/src/meson.build
index dc0e0c82..29668275 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -2,10 +2,17 @@ if get_option('android')
subdir('android')
endif
-ipa_gen_priv_key = find_program('ipa/gen-ipa-priv-key.sh')
-ipa_priv_key = custom_target('ipa-priv-key',
- output : [ 'ipa-priv-key.pem' ],
- command : [ ipa_gen_priv_key, '@OUTPUT@' ])
+openssl = find_program('openssl', required : false)
+if openssl.found()
+ ipa_gen_priv_key = find_program('ipa/gen-ipa-priv-key.sh')
+ ipa_priv_key = custom_target('ipa-priv-key',
+ output : [ 'ipa-priv-key.pem' ],
+ command : [ ipa_gen_priv_key, '@OUTPUT@' ])
+ config_h.set('HAVE_IPA_PUBKEY', 1)
+ ipa_sign_module = true
+else
+ ipa_sign_module = false
+endif
subdir('libcamera')
subdir('ipa')