[libcamera-devel] [PATCH v2] apps: Share common source between applications
Kieran Bingham
kieran.bingham at ideasonboard.com
Mon Oct 24 23:16:00 CEST 2022
Quoting Laurent Pinchart (2022-10-24 21:11:34)
> Hi Kieran,
>
> On Mon, Oct 24, 2022 at 08:56:56PM +0100, Kieran Bingham wrote:
> > Quoting Laurent Pinchart via libcamera-devel (2022-10-20 23:10:26)
> > > Multiple source files in the src/apps/cam/ directory are used by cam,
> > > qcam and lc-compliance. They are compiled separately for each
> > > application. Move them to a new src/apps/common/ directory and compile
> > > them in a static library to decrease the number of compilation
> > > operations.
> > >
> > > Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> > > ---
> > > Changes since v1:
> > >
> > > - Move common code to src/apps/common/
> > > ---
> > > src/apps/cam/camera_session.cpp | 5 ++--
> > > src/apps/cam/camera_session.h | 2 +-
> > > src/apps/cam/drm.cpp | 2 +-
> > > src/apps/cam/file_sink.cpp | 5 ++--
> > > src/apps/cam/main.cpp | 7 +++---
> > > src/apps/cam/meson.build | 14 ++---------
> > > src/apps/cam/sdl_sink.cpp | 5 ++--
> > > src/apps/cam/sdl_texture.h | 2 +-
> > > src/apps/{cam => common}/dng_writer.cpp | 0
> > > src/apps/{cam => common}/dng_writer.h | 0
> > > src/apps/{cam => common}/event_loop.cpp | 0
> > > src/apps/{cam => common}/event_loop.h | 0
> > > src/apps/{cam => common}/image.cpp | 0
> > > src/apps/{cam => common}/image.h | 0
> > > src/apps/common/meson.build | 26 +++++++++++++++++++++
> > > src/apps/{cam => common}/options.cpp | 0
> > > src/apps/{cam => common}/options.h | 0
> > > src/apps/{cam => common}/stream_options.cpp | 0
> > > src/apps/{cam => common}/stream_options.h | 0
> > > src/apps/lc-compliance/main.cpp | 3 ++-
> > > src/apps/lc-compliance/meson.build | 3 +--
> > > src/apps/lc-compliance/simple_capture.h | 2 +-
> > > src/apps/meson.build | 2 ++
> > > src/apps/qcam/format_converter.cpp | 2 +-
> > > src/apps/qcam/main.cpp | 5 ++--
> > > src/apps/qcam/main_window.cpp | 4 ++--
> > > src/apps/qcam/main_window.h | 2 +-
> > > src/apps/qcam/meson.build | 13 ++---------
> > > src/apps/qcam/viewfinder_gl.cpp | 2 +-
> > > src/apps/qcam/viewfinder_qt.cpp | 2 +-
> > > 30 files changed, 61 insertions(+), 47 deletions(-)
> > > rename src/apps/{cam => common}/dng_writer.cpp (100%)
> > > rename src/apps/{cam => common}/dng_writer.h (100%)
> > > rename src/apps/{cam => common}/event_loop.cpp (100%)
> > > rename src/apps/{cam => common}/event_loop.h (100%)
> > > rename src/apps/{cam => common}/image.cpp (100%)
> > > rename src/apps/{cam => common}/image.h (100%)
> > > create mode 100644 src/apps/common/meson.build
> > > rename src/apps/{cam => common}/options.cpp (100%)
> > > rename src/apps/{cam => common}/options.h (100%)
> > > rename src/apps/{cam => common}/stream_options.cpp (100%)
> > > rename src/apps/{cam => common}/stream_options.h (100%)
> > >
> > > diff --git a/src/apps/cam/camera_session.cpp b/src/apps/cam/camera_session.cpp
> > > index 6b409c983b86..8fcec6304d66 100644
> > > --- a/src/apps/cam/camera_session.cpp
> > > +++ b/src/apps/cam/camera_session.cpp
> > > @@ -13,9 +13,11 @@
> > > #include <libcamera/control_ids.h>
> > > #include <libcamera/property_ids.h>
> > >
> > > +#include "../common/event_loop.h"
> > > +#include "../common/stream_options.h"
> > > +
> >
> > I still dislike the includes from a relative parent path.
> >
> > Is it possible to fix with the dependency or static library apps_lib
> > object? Or just something you didn't want to do?
>
> I thought about it. It would involve -I, #include <...>, and the risk of
it was -iquote I was actually thinking about, but it seems like meson
doesn't really support it.
We could put it directly in the args, but I'm not sure that's practical
either.
> conflict with system includes. I think it's still a good idea, but I
> didn't want to explore that rabbit hole right now. If someone wants to
> send a patch on top, I'll be happy to review it :-)
Maybe if meson ever actually implemented something like suggested in
[0], but I'll not hold my breath.
(I.e. if this were possible, but it won't work...)
# https://mesonbuild.com/Reference-manual_functions.html#arguments27
apps_inc = include_directories(['common'], is_system: false)
or
# https://github.com/mesonbuild/meson/issues/9219#issuecomment-1289622872
apps_inc = include_directories(['common'], is_quote: true)
...
apps_lib = static_library('apps', apps_sources,
cpp_args : apps_cpp_args,
+ includes : apps_inc,
dependencies : [libcamera_public])
lc_compliance = executable('lc-compliance', lc_compliance_sources,
cpp_args : [ '-fexceptions' ],
dependencies : [
+ apps_
libatomic,
libcamera_public,
...
[0] https://github.com/mesonbuild/meson/issues/9219
Maybe proposing 'is_quote' as an option to include_directories might be
interesting, but that's not going to change this patch anytime soon.
--
Kieran
>
> > Anyway, with or without that, grouping this makes sense.
> >
> >
> > Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> >
More information about the libcamera-devel
mailing list