On Tue, Sep 13, 2022 at 03:53:21PM +0200, Marco Felsch wrote:
> Hi Matthias,
> 
> thanks for working on this, I also have a libcamera package here :) and
> want to share a few findings.
> 
> On 22-09-11, Matthias Fend wrote:
> > libcamera is an open source camera stack and framework for Linux, Android,
> > and ChromeOS.
> > 
> > Signed-off-by: Matthias Fend <matthias.f...@emfend.at>
> > ---
> >  ...t-information-for-version-generation.patch |  29 ++++
> >  .../libcamera-2022-08-30-g68683d3811a8/series |   4 +
> >  rules/libcamera.in                            |  90 ++++++++++++
> >  rules/libcamera.make                          | 133 ++++++++++++++++++
> >  4 files changed, 256 insertions(+)
> >  create mode 100644 
> > patches/libcamera-2022-08-30-g68683d3811a8/0001-do-not-use-git-information-for-version-generation.patch
> >  create mode 100644 patches/libcamera-2022-08-30-g68683d3811a8/series
> >  create mode 100644 rules/libcamera.in
> >  create mode 100644 rules/libcamera.make
> > 
> > diff --git 
> > a/patches/libcamera-2022-08-30-g68683d3811a8/0001-do-not-use-git-information-for-version-generation.patch
> >  
> > b/patches/libcamera-2022-08-30-g68683d3811a8/0001-do-not-use-git-information-for-version-generation.patch
> > new file mode 100644
> > index 000000000..3e5c5ce68
> > --- /dev/null
> > +++ 
> > b/patches/libcamera-2022-08-30-g68683d3811a8/0001-do-not-use-git-information-for-version-generation.patch
> > @@ -0,0 +1,29 @@
> > +From: Matthias Fend <matthias.f...@emfend.at>
> > +Date: Wed, 31 Aug 2022 16:54:20 +0200
> > +Subject: [PATCH] do not use git information for version generation
> > +
> > +Since libcamera is checked out without a git repo, git version reports the
> > +version of the BSP. Since this is obviously wrong, just use the project
> > +version.
> > +
> > +Signed-off-by: Matthias Fend <matthias.f...@emfend.at>
> > +---
> > + meson.build | 5 ++---
> > + 1 file changed, 2 insertions(+), 3 deletions(-)
> > +
> > +diff --git a/meson.build b/meson.build
> > +index 72919102ad55..e333df59388d 100644
> > +--- a/meson.build
> > ++++ b/meson.build
> > +@@ -20,9 +20,8 @@ libcamera_git_version = 
> > run_command('utils/gen-version.sh',
> > +                                     meson.project_build_root(),
> > +                                     meson.project_source_root(),
> > +                                     check: false).stdout().strip()
> > +-if libcamera_git_version == ''
> > +-    libcamera_git_version = meson.project_version()
> > +-endif
> > ++
> > ++libcamera_git_version = meson.project_version()
> > + 
> > + libcamera_version = libcamera_git_version.split('+')[0]
> > + 
> > diff --git a/patches/libcamera-2022-08-30-g68683d3811a8/series 
> > b/patches/libcamera-2022-08-30-g68683d3811a8/series
> > new file mode 100644
> > index 000000000..6ca42eafc
> > --- /dev/null
> > +++ b/patches/libcamera-2022-08-30-g68683d3811a8/series
> > @@ -0,0 +1,4 @@
> > +# generated by git-ptx-patches
> > +#tag:base --start-number 1
> > +0001-do-not-use-git-information-for-version-generation.patch
> > +# c3a57143ea9764ab95b84a7fb79896f4  - git-ptx-patches magic
> > diff --git a/rules/libcamera.in b/rules/libcamera.in
> > new file mode 100644
> > index 000000000..0a103fc51
> > --- /dev/null
> > +++ b/rules/libcamera.in
> > @@ -0,0 +1,90 @@
> > +## SECTION=multimedia_libs
> > +
> > +config LIBCAMERA
> > +   bool
> > +   prompt "libcamera"
> > +   select HOST_MESON
> > +   select HOST_SYSTEM_PYTHON3
> > +   select HOST_SYSTEM_PYTHON3_JINJA2
> > +   select HOST_SYSTEM_PYTHON3_PYYAML
> > +   select HOST_SYSTEM_PYTHON3_PLY
> > +   select GNUTLS
> 
> Please see below about selecting the crypto lib. Than this would be
> changed to:
> 
>       select GNUTLS                           if 
> LIBCAMERA_IPA_MODULE_SIGN_GNUTLS
>       select OPENSSL                          if 
> LIBCAMERA_IPA_MODULE_SIGN_OPENSSL

And
        select HOST_OPENSSL                     if LIBCAMERA_IPA_MODULE_SIGN

>From what I can tell, openssl is always used to sign the modules.

> > +   select UDEV_LIBUDEV
> > +   select LIBYAML
> 
> missing select BOOST                            if 
> LIBCAMERA_PIPELINE_RASPBERRYPI
> 
> > +   select LIBUNWIND                        if LIBCAMERA_BACKTRACE
> > +   select GSTREAMER1                       if LIBCAMERA_GSTREAMER
> > +   select GST_PLUGINS_BASE1                if LIBCAMERA_GSTREAMER
> > +   select LIBEVENT                         if LIBCAMERA_CAM
> 
> missing select LIBDRM                           if LIBCAMERA_CAM
> 
> > +   select QT5                              if LIBCAMERA_QCAM
> > +   select QT5_MODULE_QTBASE                if LIBCAMERA_QCAM
> > +   select QT5_MODULE_QTBASE_GUI            if LIBCAMERA_QCAM
> > +   select QT5_MODULE_QTBASE_WIDGETS        if LIBCAMERA_QCAM
> > +   help
> > +     A complex camera support library for Linux, Android, and ChromeOS.
> > +
> > +if LIBCAMERA
> 
> I would provide the user the choice of selecting/enabling the ipa module
> signing.

Hmmm, what would be the benefit of making this optional?

And if the modules are not signed then they should be stripped.

Michael

> config LIBCAMERA_IPA_MODULE_SIGN
>         bool
>         default y
>         prompt "Enable IPA module signing"
>         help
>           Without IPA module signing, all IPA modules will be isolated in a
>           separate process. This adds an unnecessary extra overhead at 
> runtime.
> 
> if LIBCAMERA_IPA_MODULE_SIGN
> 
> choice
>         prompt "Crypt provider"
>         default LIBCAMERA_IPA_MODULE_SIGN_GNUTLS
> 
> config LIBCAMERA_IPA_MODULE_SIGN_GNUTLS
>         bool "gnutls"
> 
> config LIBCAMERA_IPA_MODULE_SIGN_OPENSSL
>         bool "openssl (libcrypto)"
> 
> endchoice
> 
> endif
> 
> Regards,
>   Marco
> 
> > +
> > +config LIBCAMERA_GSTREAMER
> > +   bool
> > +   prompt "install GStreamer plugin"
> > +
> > +config LIBCAMERA_CAM
> > +   bool
> > +   prompt "install cam test application"
> > +
> > +config LIBCAMERA_QCAM
> > +   bool
> > +   prompt "install qcam test application"
> > +
> > +config LIBCAMERA_BACKTRACE
> > +   bool
> > +   prompt "enable tracing support"
> > +
> > +endif
> > +
> > +menu "IPAs"
> > +
> > +config LIBCAMERA_IPA_IPU3
> > +   bool
> > +   prompt "ipu3"
> > +
> > +config LIBCAMERA_IPA_RASPBERRYPI
> > +   bool
> > +   prompt "raspberrypi"
> > +
> > +config LIBCAMERA_IPA_RKISP1
> > +   bool
> > +   prompt "rkisp1"
> > +
> > +config LIBCAMERA_IPA_VIMC
> > +   bool
> > +   prompt "vimc"
> > +endmenu
> > +
> > +menu "Pipelines"
> > +
> > +config LIBCAMERA_PIPELINE_IPU3
> > +   bool
> > +   prompt "ipu3"
> > +
> > +config LIBCAMERA_PIPELINE_RASPBERRYPI
> > +   bool
> > +   prompt "raspberrypi"
> > +
> > +config LIBCAMERA_PIPELINE_RKISP1
> > +   bool
> > +   prompt "rkisp1"
> > +
> > +config LIBCAMERA_PIPELINE_SIMPLE
> > +   bool
> > +   prompt "simple"
> > +
> > +config LIBCAMERA_PIPELINE_UVCVIDEO
> > +   bool
> > +   prompt "uvcvideo"
> > +
> > +config LIBCAMERA_PIPELINE_VIMC
> > +   bool
> > +   prompt "vimc"
> > +
> > +endmenu
> > diff --git a/rules/libcamera.make b/rules/libcamera.make
> > new file mode 100644
> > index 000000000..78a5e94de
> > --- /dev/null
> > +++ b/rules/libcamera.make
> > @@ -0,0 +1,133 @@
> > +# -*-makefile-*-
> > +#
> > +# Copyright (C) 2022 by Matthias Fend <matthias.f...@emfend.at>
> > +#
> > +# For further information about the PTXdist project and license conditions
> > +# see the README file.
> > +#
> > +
> > +#
> > +# We provide this package
> > +#
> > +PACKAGES-$(PTXCONF_LIBCAMERA) += libcamera
> > +
> > +#
> > +# Paths and names
> > +#
> > +LIBCAMERA_VERSION  := 2022-08-30-g68683d3811a8
> > +LIBCAMERA_MD5              := 2f5a985257a0797e0bd0b4182ef9bc9c
> > +LIBCAMERA          := libcamera-$(LIBCAMERA_VERSION)
> > +LIBCAMERA_SUFFIX   := tar.gz
> > +LIBCAMERA_URL              := 
> > https://git.libcamera.org/libcamera/libcamera.git;tag=$(LIBCAMERA_VERSION)
> > +LIBCAMERA_SOURCE   := $(SRCDIR)/$(LIBCAMERA).$(LIBCAMERA_SUFFIX)
> > +LIBCAMERA_DIR              := $(BUILDDIR)/$(LIBCAMERA)
> > +LIBCAMERA_LICENSE  := Apache-2.0 AND \
> > +                      BSD-2-Clause AND BSD-3-Clause AND \
> > +                      CC0-1.0 AND CC-BY-SA-4.0 AND \
> > +                      GPL-2.0-or-later AND GPL-2.0 WITH Linux-syscall-note 
> > AND \
> > +                      (GPL-2.0+ WITH Linux-syscall-note OR MIT) AND 
> > LGPL-2.1-or-later
> > +LIBCAMERA_LICENSE_FILES    := 
> > file://LICENSES/Apache-2.0.txt;md5=3b83ef96387f14655fc854ddc3c6bd57 \
> > +                      
> > file://LICENSES/BSD-2-Clause.txt;md5=63d6ee386b8aaba70b1bf15a79ca50f2 \
> > +                      
> > file://LICENSES/BSD-3-Clause.txt;md5=954f4d71a37096249f837652a7f586c0 \
> > +                      
> > file://LICENSES/CC0-1.0.txt;md5=6fd064768b8d61c31ddd0540570fbd33 \
> > +                      
> > file://LICENSES/CC-BY-SA-4.0.txt;md5=598a2bb2d212cf9bc240fb554efcb169 \
> > +                      
> > file://LICENSES/GPL-2.0-or-later.txt;md5=fed54355545ffd980b814dab4a3b312c \
> > +                      
> > file://LICENSES/GPL-2.0.txt;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
> > +                      
> > file://LICENSES/Linux-syscall-note.txt;md5=370f20aa0795bf47c9a50d8cee5a7cfb 
> > \
> > +                      
> > file://LICENSES/GPL-2.0+.txt;md5=fed54355545ffd980b814dab4a3b312c \
> > +                      
> > file://LICENSES/MIT.txt;md5=38aa75cf4c4c87f018227d5ec9638d75 \
> > +                      
> > file://LICENSES/LGPL-2.1-or-later.txt;md5=2a4f4fd2128ea2f65047ee63fbca9f68
> > +
> > +# 
> > ----------------------------------------------------------------------------
> > +# Prepare
> > +# 
> > ----------------------------------------------------------------------------
> > +
> > +LIBCAMERA_IPAS-y                                   :=
> > +LIBCAMERA_IPAS-$(PTXCONF_LIBCAMERA_IPA_IPU3)               += ipu3
> > +LIBCAMERA_IPASC-$(PTXCONF_LIBCAMERA_IPA_RASPBERRYPI)       += raspberrypi
> > +LIBCAMERA_IPASM-$(PTXCONF_LIBCAMERA_IPA_RASPBERRYPI)       += rpi
> > +LIBCAMERA_IPAS-$(PTXCONF_LIBCAMERA_IPA_RKISP1)             += rkisp1
> > +LIBCAMERA_IPAS-$(PTXCONF_LIBCAMERA_IPA_VIMC)               += vimc
> > +
> > +LIBCAMERA_IPASC-y  += $(LIBCAMERA_IPAS-y)
> > +LIBCAMERA_IPASM-y  += $(LIBCAMERA_IPAS-y)
> > +
> > +LIBCAMERA_PIPELINES-y                                              :=
> > +LIBCAMERA_PIPELINES-$(PTXCONF_LIBCAMERA_PIPELINE_IPU3)             += ipu3
> > +LIBCAMERA_PIPELINES-$(PTXCONF_LIBCAMERA_PIPELINE_RASPBERRYPI)      += 
> > raspberrypi
> > +LIBCAMERA_PIPELINES-$(PTXCONF_LIBCAMERA_PIPELINE_RKISP1)   += rkisp1
> > +LIBCAMERA_PIPELINES-$(PTXCONF_LIBCAMERA_PIPELINE_SIMPLE)   += simple
> > +LIBCAMERA_PIPELINES-$(PTXCONF_LIBCAMERA_PIPELINE_UVCVIDEO) += uvcvideo
> > +LIBCAMERA_PIPELINES-$(PTXCONF_LIBCAMERA_PIPELINE_VIMC)             += vimc
> > +
> > +LIBCAMERA_CONF_TOOL        := meson
> > +LIBCAMERA_CONF_OPT := \
> > +   $(CROSS_MESON_USR) \
> > +   -Dandroid=disabled \
> > +   -Dcam=$(call ptx/endis,PTXCONF_LIBCAMERA_CAM)d \
> > +   -Ddocumentation=disabled \
> > +   -Dgstreamer=$(call ptx/endis,PTXCONF_LIBCAMERA_GSTREAMER)d \
> > +   -Dipas=$(subst $(ptx/def/space),$(ptx/def/comma),$(strip 
> > $(LIBCAMERA_IPASC-y))) \
> > +   -Dlc-compliance=disabled \
> > +   -Dpipelines=$(subst $(ptx/def/space),$(ptx/def/comma),$(strip 
> > $(LIBCAMERA_PIPELINES-y))) \
> > +   -Dqcam=$(call ptx/endis,PTXCONF_LIBCAMERA_QCAM)d \
> > +   -Dtest=false \
> > +   -Dtracing=$(call ptx/endis,PTXCONF_LIBCAMERA_TRACING)d \
> > +   -Dv4l2=false \
> > +   -Dpycamera=disabled
> > +
> > +# 
> > ----------------------------------------------------------------------------
> > +# Target-Install
> > +# 
> > ----------------------------------------------------------------------------
> > +
> > +define install_ipa
> > +   @$(call install_copy, libcamera, 0, 0, 0755, -, \
> > +           /usr/libexec/libcamera/$(strip $(1))_ipa_proxy)
> > +   @$(call install_alternative_tree, libcamera, 0, 0, \
> > +           /usr/share/libcamera/ipa/$(strip $(1)))
> > +endef
> > +
> > +define install_ipa_module
> > +   # The IPA modules must not be stripped, otherwise the associated
> > +   # signatures will no longer be valid.
> > +   @$(call install_copy, libcamera, 0, 0, 0644, -, \
> > +           /usr/lib/libcamera/ipa_$(strip $(1)).so, n)
> > +   @$(call install_copy, libcamera, 0, 0, 0644, -, \
> > +           /usr/lib/libcamera/ipa_$(strip $(1)).so.sign)
> > +endef
> > +
> > +$(STATEDIR)/libcamera.targetinstall:
> > +   @$(call targetinfo)
> > +
> > +   @$(call install_init, libcamera)
> > +   @$(call install_fixup, libcamera, PRIORITY, optional)
> > +   @$(call install_fixup, libcamera, SECTION, base)
> > +   @$(call install_fixup, libcamera, AUTHOR, "Matthias Fend 
> > <matthias.f...@emfend.at>")
> > +   @$(call install_fixup, libcamera, DESCRIPTION, missing)
> > +
> > +   @$(call install_lib, libcamera, 0, 0, 0644, libcamera)
> > +   @$(call install_lib, libcamera, 0, 0, 0644, libcamera-base)
> > +
> > +   @$(foreach ipa,$(LIBCAMERA_IPASC-y), \
> > +           $(call install_ipa, $(ipa))$(ptx/nl))
> > +
> > +   @$(foreach ipa_module,$(LIBCAMERA_IPASM-y), \
> > +           $(call install_ipa_module, $(ipa_module))$(ptx/nl))
> > +
> > +ifdef PTXCONF_LIBCAMERA_GSTREAMER
> > +   @$(call install_lib, libcamera, 0, 0, 0644, 
> > gstreamer-1.0/libgstlibcamera)
> > +endif
> > +
> > +ifdef PTXCONF_LIBCAMERA_CAM
> > +   @$(call install_copy, libcamera, 0, 0, 0755, -, /usr/bin/cam)
> > +endif
> > +
> > +ifdef PTXCONF_LIBCAMERA_QCAM
> > +   @$(call install_copy, libcamera, 0, 0, 0755, -, /usr/bin/qcam)
> > +endif
> > +
> > +   @$(call install_finish, libcamera)
> > +
> > +   @$(call touch)
> > +
> > +# vim: syntax=make
> > -- 
> > 2.25.1
> > 
> > 
> > 
> 
> 

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

Reply via email to