[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