From: Michael Olbrich <m.olbrich@pengutronix.de>
To: Matthias Fend <matthias.fend@emfend.at>
Cc: ptxdist@pengutronix.de
Subject: Re: [ptxdist] [PATCH 1/1] libcamera: new package
Date: Sat, 10 Sep 2022 14:35:27 +0200 [thread overview]
Message-ID: <20220910123527.GE24434@pengutronix.de> (raw)
In-Reply-To: <49557c69-0628-2679-f5c4-175bffce41a1@emfend.at>
Hi,
On Sat, Sep 10, 2022 at 02:27:45PM +0200, Matthias Fend wrote:
> Am 09.09.2022 um 11:46 schrieb Michael Olbrich:
> > On Thu, Sep 08, 2022 at 09:29:18AM +0200, Matthias Fend wrote:
> > > libcamera is an open source camera stack and framework for Linux, Android,
> > > and ChromeOS.
> > >
> > > Signed-off-by: Matthias Fend <matthias.fend@emfend.at>
> > > ---
> > > ...t-information-for-version-generation.patch | 29 ++++
> > > .../series | 4 +
> > > rules/libcamera.in | 90 ++++++++++++
> > > rules/libcamera.make | 137 ++++++++++++++++++
> > > 4 files changed, 260 insertions(+)
> > > create mode 100644 patches/libcamera-68683d3811a803aa087c38a2063cf64c8d084d49/0001-do-not-use-git-information-for-version-generation.patch
> > > create mode 100644 patches/libcamera-68683d3811a803aa087c38a2063cf64c8d084d49/series
> > > create mode 100644 rules/libcamera.in
> > > create mode 100644 rules/libcamera.make
> > >
> > > diff --git a/patches/libcamera-68683d3811a803aa087c38a2063cf64c8d084d49/0001-do-not-use-git-information-for-version-generation.patch b/patches/libcamera-68683d3811a803aa087c38a2063cf64c8d084d49/0001-do-not-use-git-information-for-version-generation.patch
> > > new file mode 100644
> > > index 000000000..3e5c5ce68
> > > --- /dev/null
> > > +++ b/patches/libcamera-68683d3811a803aa087c38a2063cf64c8d084d49/0001-do-not-use-git-information-for-version-generation.patch
> > > @@ -0,0 +1,29 @@
> > > +From: Matthias Fend <matthias.fend@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.fend@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-68683d3811a803aa087c38a2063cf64c8d084d49/series b/patches/libcamera-68683d3811a803aa087c38a2063cf64c8d084d49/series
> > > new file mode 100644
> > > index 000000000..6ca42eafc
> > > --- /dev/null
> > > +++ b/patches/libcamera-68683d3811a803aa087c38a2063cf64c8d084d49/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
> > > + select UDEV_LIBUDEV
> > > + select LIBYAML
> > > + select LIBUNWIND if LIBCAMERA_BACKTRACE
> > > + select GSTREAMER1 if LIBCAMERA_GSTREAMER
> > > + select GST_PLUGINS_BASE1 if LIBCAMERA_GSTREAMER
> > > + select LIBEVENT 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
> > > +
> > > +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..3ed9e2a71
> > > --- /dev/null
> > > +++ b/rules/libcamera.make
> > > @@ -0,0 +1,137 @@
> > > +# -*-makefile-*-
> > > +#
> > > +# Copyright (C) 2022 by Matthias Fend <matthias.fend@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 := 68683d3811a803aa087c38a2063cf64c8d084d49
> >
> > Please use a faked git-describe string: 2022-08-30-g68683d3811a8
> > (<commit-date>-g<short-hash>).
> >
> > > +LIBCAMERA_MD5 := 0a1c0f6656dae9dc338b46aab50d83f9
> > > +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 :=
> > > +LIBCAMERA_IPAS += $(call ptx/ifdef,PTXCONF_LIBCAMERA_IPA_IPU3,ipu3)
> > > +LIBCAMERA_IPAS += $(call ptx/ifdef,PTXCONF_LIBCAMERA_IPA_RASPBERRYPI,raspberrypi)
> > > +LIBCAMERA_IPAS += $(call ptx/ifdef,PTXCONF_LIBCAMERA_IPA_RKISP1,rkisp1)
> > > +LIBCAMERA_IPAS += $(call ptx/ifdef,PTXCONF_LIBCAMERA_IPA_VIMC,vimc)
> >
> > For stuff like that I prefer:
> >
> > LIBCAMERA_IPAS-y :=
> > LIBCAMERA_IPAS-$(PTXCONF_LIBCAMERA_IPA_IPU3) += ipu3
> > ...
> >
> > > +
> > > +LIBCAMERA_IPAS := $(strip $(LIBCAMERA_IPAS))
> > > +LIBCAMERA_IPAS := $(subst $(ptx/def/space),$(ptx/def/comma),$(LIBCAMERA_IPAS))
> >
> > I'd do this as part of the LIBCAMERA_CONF_OPT. Then yoy can reuse the
> > variable below.
> >
> > > +
> > > +LIBCAMERA_PIPELINES :=
> > > +LIBCAMERA_PIPELINES += $(call ptx/ifdef,PTXCONF_LIBCAMERA_PIPELINE_IPU3,ipu3)
> > > +LIBCAMERA_PIPELINES += $(call ptx/ifdef,PTXCONF_LIBCAMERA_PIPELINE_RASPBERRYPI,raspberrypi)
> > > +LIBCAMERA_PIPELINES += $(call ptx/ifdef,PTXCONF_LIBCAMERA_PIPELINE_RKISP1,rkisp1)
> > > +LIBCAMERA_PIPELINES += $(call ptx/ifdef,PTXCONF_LIBCAMERA_PIPELINE_SIMPLE,simple)
> > > +LIBCAMERA_PIPELINES += $(call ptx/ifdef,PTXCONF_LIBCAMERA_PIPELINE_UVCVIDEO,uvcvideo)
> > > +LIBCAMERA_PIPELINES += $(call ptx/ifdef,PTXCONF_LIBCAMERA_PIPELINE_VIMC,vimc)
> > > +
> > > +LIBCAMERA_PIPELINES := $(strip $(LIBCAMERA_PIPELINES))
> > > +LIBCAMERA_PIPELINES := $(subst $(ptx/def/space),$(ptx/def/comma),$(LIBCAMERA_PIPELINES))
> >
> > same here.
> >
> > > +
> > > +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=$(LIBCAMERA_IPAS) \
> > > + -Dlc-compliance=disabled \
> > > + -Dpipelines=$(LIBCAMERA_PIPELINES) \
> > > + -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, 0644, -, /usr/lib/libcamera/ipa_$(strip $(1)).so, 0)
> >
> > Use 'n' as the last argument. And this should have a comment, why this
> > library is not stripped.
> >
> > > + @$(call install_copy, libcamera, 0, 0, 0644, -, /usr/lib/libcamera/ipa_$(strip $(1)).so.sign)
> > > + @$(call install_copy, libcamera, 0, 0, 0755, -, /usr/libexec/libcamera/$(strip $(2))_ipa_proxy)
> > > + @$(call install_alternative_tree, libcamera, 0, 0, /usr/share/libcamera/ipa/$(strip $(2)))
> >
> > Break all four lines before the filename.
> >
> > > +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.fend@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)
> > > +
> > > +ifdef PTXCONF_LIBCAMERA_IPA_IPU3
> > > + @$(call install_ipa, ipu3, ipu3)
> > > +endif
> > > +
> > > +ifdef PTXCONF_LIBCAMERA_IPA_RASPBERRYPI
> > > + @$(call install_ipa, rpi, raspberrypi)
> > > +endif
> > > +
> > > +ifdef PTXCONF_LIBCAMERA_IPA_RKISP1
> > > + @$(call install_ipa, rkisp1, rkisp1)
> > > +endif
> > > +
> > > +ifdef PTXCONF_LIBCAMERA_IPA_VIMC
> > > + @$(call install_ipa, vimc, vimc)
> > > +endif
> > > +
> >
> > @$(foreach ipa,$(LIBCAMERA_IPAS-y), \
> > $(call install_ipa, $(ipa), $(ipa))$(ptx/nl))
> >
> > Untested, instead of the stuff above.
>
> This was actually my first attempt where I noticed that there is a slight
> inconsistency in the names of the RaspberryPI IPA. The build option and
> module proxy are named "raspberrypi", while the IPA module itself uses "rpi"
> :/
>
> As an alternative to the current variant, one could of course also create a
> second list with the actual IPA module names. But I'm not sure if that's
> better. Any favors?
I expect that there will be more plugins in the future. So I prefer the
loop. Take a look at gst-plugins-good1. It has the same problem with
different names for meson options and file names. It uses a shared list
when the name matches and separate otherwise.
Michael
> Thank you for your comments and improvements.
>
> ~Matthias
>
> >
> > Michael
> >
> > > +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 |
prev parent reply other threads:[~2022-09-10 12:35 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-08 7:29 [ptxdist] [PATCH 0/1] " Matthias Fend
2022-09-08 7:29 ` [ptxdist] [PATCH 1/1] " Matthias Fend
2022-09-09 9:46 ` Michael Olbrich
2022-09-10 12:27 ` Matthias Fend
2022-09-10 12:35 ` Michael Olbrich [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220910123527.GE24434@pengutronix.de \
--to=m.olbrich@pengutronix.de \
--cc=matthias.fend@emfend.at \
--cc=ptxdist@pengutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox