[libcamera-devel] [PATCH] src/libcamera/meson.build: link with atomic when needed
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Mon Sep 9 01:01:12 CEST 2019
Hi Kieran,
On Fri, Sep 06, 2019 at 02:50:38PM +0100, Kieran Bingham wrote:
> On 05/09/2019 20:04, Fabrice Fontaine wrote:
> > On some architectures, atomic binutils are provided by the libatomic
> > library from gcc. Linking with libatomic is therefore necessary,
> > otherwise the build fails with:
> >
> > /home/buildroot/autobuild/run/instance-3/output/host/opt/ext-toolchain/bin/../lib/gcc/sparc-buildroot-linux-uclibc/7.4.0/../../../../sparc-buildroot-linux-uclibc/bin/ld: src/libcamera/4ab8042@@camera at sha/v4l2_videodevice.cpp.o: in function `libcamera::V4L2VideoDevice::queueBuffer(libcamera::Buffer*)':
> > v4l2_videodevice.cpp:(.text+0x1470): undefined reference to `__atomic_fetch_add_4'
> >
> > This is often for example the case on sparc v8 32 bits.
> >
> > Fixes:
> > - http://autobuild.buildroot.org/results/1f0b8338f5f39aa86b9d432598dae2f53c5f7c84
> >
> > Signed-off-by: Fabrice Fontaine <fontaine.fabrice at gmail.com>
> > ---
> > src/libcamera/meson.build | 1 +
> > 1 file changed, 1 insertion(+)
> >
> > diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build
> > index c5d8f11..0706a08 100644
> > --- a/src/libcamera/meson.build
> > +++ b/src/libcamera/meson.build
> > @@ -99,6 +99,7 @@ version_cpp = vcs_tag(command : [gen_version, meson.build_root()],
> > libcamera_sources += version_cpp
> >
> > libcamera_deps = [
> > + cc.find_library('atomic', required: false),
>
> Interestingly, this adds the following clear message when I build on x86:
>
> Library atomic found: YES
>
> So - my system finds 'libatomic' and now explicitly adds it as the
> dependencies. (I assumed it was a gcc builtin, for it not to be necessary)
>
> I wondered if this caused any ill-effect, but actually I believe this is
> perfectly safe. Thanks to using meson we have reproducible builds, and I
> can see that both with and without this explicit linking we get
> identical output binaries for libcamera.so
Is that because the linker doesn't find any symbol in libatomic.so that
are required by libcamera, and thus skips it ?
> With that, and seeing the libcamera tests pass (which is not surprising
> with no binary change - I've ensured that the git sha1 did not change
> between builds) then I believe this is a good fix to support the broken
> compile issues reported.
>
> Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
>
> I'll give the others a chance to provide any feedback if necessary and
> then we can push this into the master branch, and then get buildroot
> package building the latest version.
I was initially a bit worried that we would link to libatomic.so
unnecessarily, or that it would break on platforms not providing
libatomic.so, but as all that seems fine,
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Out of curiosity I still would like to know what code in V4L2VideoDevice
generates atomic calls.
> > cc.find_library('dl'),
> > libudev,
> > dependency('threads'),
> >
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list