diff mbox series

[1/1] package/libcamera: disable compliance tool

Message ID 20211020190423.3547893-1-fontaine.fabrice@gmail.com
State Superseded
Headers show
Series [1/1] package/libcamera: disable compliance tool | expand

Commit Message

Fabrice Fontaine Oct. 20, 2021, 7:04 p.m. UTC
Disable compliance tool to fix the following build failure
raised since commit e1d37ab0a7b2b8735e69c070519978d2898d2e79 and
https://git.linuxtv.org/libcamera.git/commit/?id=02bc1108578e8b8eb68fa7d9ae3eeea558723931:

/usr/lfs/hdd_v1/rc-buildroot-test/scripts/instance-1/output-1/host/lib/gcc/arm-buildroot-linux-uclibcgnueabi/10.3.0/../../../../arm-buildroot-linux-uclibcgnueabi/bin/ld: cannot find -lgtest

Fixes:
 - http://autobuild.buildroot.org/results/e1bb8aa1de310f3d27b74ec7d8748d170ad444e2

Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
---
 package/libcamera/libcamera.mk | 1 +
 1 file changed, 1 insertion(+)

Comments

Kieran Bingham Oct. 21, 2021, 9:22 a.m. UTC | #1
Hi Fabrice,

Quoting Fabrice Fontaine (2021-10-20 20:04:23)
> Disable compliance tool to fix the following build failure
> raised since commit e1d37ab0a7b2b8735e69c070519978d2898d2e79 and
> https://git.linuxtv.org/libcamera.git/commit/?id=02bc1108578e8b8eb68fa7d9ae3eeea558723931:
> 
> /usr/lfs/hdd_v1/rc-buildroot-test/scripts/instance-1/output-1/host/lib/gcc/arm-buildroot-linux-uclibcgnueabi/10.3.0/../../../../arm-buildroot-linux-uclibcgnueabi/bin/ld: cannot find -lgtest
> 
> Fixes:
>  - http://autobuild.buildroot.org/results/e1bb8aa1de310f3d27b74ec7d8748d170ad444e2
> 

Any idea why we're failing to find gtest?

Our meson.build for src/lc-compliance contains the following:

"""
# SPDX-License-Identifier: CC0-1.0

libevent = dependency('libevent_pthreads', required : get_option('lc-compliance'))
libgtest = dependency('gtest', required : get_option('lc-compliance'))

if not (libevent.found() and libgtest.found())
    lc_compliance_enabled = false
    subdir_done()
endif

lc_compliance_enabled = true
"""

Which implies that libgtest was found during the configuration phase,
but not during the linking phase....

Is libgtest built as part of this build configuration? If it is - I'd
expect lc-compliance to get built against it. If not - then it would
automatically be disabled by our build...


> Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
> ---
>  package/libcamera/libcamera.mk | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/package/libcamera/libcamera.mk b/package/libcamera/libcamera.mk
> index 8ab95fb42a..638c9ac553 100644
> --- a/package/libcamera/libcamera.mk
> +++ b/package/libcamera/libcamera.mk
> @@ -17,6 +17,7 @@ LIBCAMERA_DEPENDENCIES = \
>  LIBCAMERA_CONF_OPTS = \
>         -Dandroid=disabled \
>         -Ddocumentation=disabled \
> +       -Dlc-compliance=disabled \
>         -Dtest=false \
>         -Dwerror=false
>  LIBCAMERA_INSTALL_STAGING = YES
> -- 
> 2.33.0
>
Fabrice Fontaine Oct. 21, 2021, 4:05 p.m. UTC | #2
Hi Kieran,

Le jeu. 21 oct. 2021 à 11:22, Kieran Bingham
<kieran.bingham@ideasonboard.com> a écrit :
>
> Hi Fabrice,
>
> Quoting Fabrice Fontaine (2021-10-20 20:04:23)
> > Disable compliance tool to fix the following build failure
> > raised since commit e1d37ab0a7b2b8735e69c070519978d2898d2e79 and
> > https://git.linuxtv.org/libcamera.git/commit/?id=02bc1108578e8b8eb68fa7d9ae3eeea558723931:
> >
> > /usr/lfs/hdd_v1/rc-buildroot-test/scripts/instance-1/output-1/host/lib/gcc/arm-buildroot-linux-uclibcgnueabi/10.3.0/../../../../arm-buildroot-linux-uclibcgnueabi/bin/ld: cannot find -lgtest
> >
> > Fixes:
> >  - http://autobuild.buildroot.org/results/e1bb8aa1de310f3d27b74ec7d8748d170ad444e2
> >
>
> Any idea why we're failing to find gtest?
Nope, I didn't take time to find out why this is failing as I think
that lc-compliance is just not needed in the context of buildroot (as
gtest is not installed on target).
>
> Our meson.build for src/lc-compliance contains the following:
>
> """
> # SPDX-License-Identifier: CC0-1.0
>
> libevent = dependency('libevent_pthreads', required : get_option('lc-compliance'))
> libgtest = dependency('gtest', required : get_option('lc-compliance'))
>
> if not (libevent.found() and libgtest.found())
>     lc_compliance_enabled = false
>     subdir_done()
> endif
>
> lc_compliance_enabled = true
> """
>
> Which implies that libgtest was found during the configuration phase,
> but not during the linking phase....
>
> Is libgtest built as part of this build configuration? If it is - I'd
> expect lc-compliance to get built against it. If not - then it would
> automatically be disabled by our build...
Yes, it is built and found by meson otherwise lc-compliance won't be
built but for an unknown reason, the link step fails.
>
>
> > Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
> > ---
> >  package/libcamera/libcamera.mk | 1 +
> >  1 file changed, 1 insertion(+)
> >
> > diff --git a/package/libcamera/libcamera.mk b/package/libcamera/libcamera.mk
> > index 8ab95fb42a..638c9ac553 100644
> > --- a/package/libcamera/libcamera.mk
> > +++ b/package/libcamera/libcamera.mk
> > @@ -17,6 +17,7 @@ LIBCAMERA_DEPENDENCIES = \
> >  LIBCAMERA_CONF_OPTS = \
> >         -Dandroid=disabled \
> >         -Ddocumentation=disabled \
> > +       -Dlc-compliance=disabled \
> >         -Dtest=false \
> >         -Dwerror=false
> >  LIBCAMERA_INSTALL_STAGING = YES
> > --
> > 2.33.0
> >
Best Regards,

Fabrice
Kieran Bingham Oct. 21, 2021, 4:30 p.m. UTC | #3
Quoting Fabrice Fontaine (2021-10-21 17:05:51)
> Hi Kieran,
> 
> Le jeu. 21 oct. 2021 à 11:22, Kieran Bingham
> <kieran.bingham@ideasonboard.com> a écrit :
> >
> > Hi Fabrice,
> >
> > Quoting Fabrice Fontaine (2021-10-20 20:04:23)
> > > Disable compliance tool to fix the following build failure
> > > raised since commit e1d37ab0a7b2b8735e69c070519978d2898d2e79 and
> > > https://git.linuxtv.org/libcamera.git/commit/?id=02bc1108578e8b8eb68fa7d9ae3eeea558723931:
> > >
> > > /usr/lfs/hdd_v1/rc-buildroot-test/scripts/instance-1/output-1/host/lib/gcc/arm-buildroot-linux-uclibcgnueabi/10.3.0/../../../../arm-buildroot-linux-uclibcgnueabi/bin/ld: cannot find -lgtest
> > >
> > > Fixes:
> > >  - http://autobuild.buildroot.org/results/e1bb8aa1de310f3d27b74ec7d8748d170ad444e2
> > >
> >
> > Any idea why we're failing to find gtest?
> Nope, I didn't take time to find out why this is failing as I think
> that lc-compliance is just not needed in the context of buildroot (as
> gtest is not installed on target).
> >
> > Our meson.build for src/lc-compliance contains the following:
> >
> > """
> > # SPDX-License-Identifier: CC0-1.0
> >
> > libevent = dependency('libevent_pthreads', required : get_option('lc-compliance'))
> > libgtest = dependency('gtest', required : get_option('lc-compliance'))
> >
> > if not (libevent.found() and libgtest.found())
> >     lc_compliance_enabled = false
> >     subdir_done()
> > endif
> >
> > lc_compliance_enabled = true
> > """
> >
> > Which implies that libgtest was found during the configuration phase,
> > but not during the linking phase....
> >
> > Is libgtest built as part of this build configuration? If it is - I'd
> > expect lc-compliance to get built against it. If not - then it would
> > automatically be disabled by our build...
> Yes, it is built and found by meson otherwise lc-compliance won't be
> built but for an unknown reason, the link step fails.

You've mentioned above that gtest won't be installed on the target... So
.. I would expect that means it isn't in the target sysroot, and can't
be linked against.

So it seems that for some reason meson finds a host package instead of a
target package?

Do we have a way to differentiate these in buildroot?

I'm not sure if there's some buildroot wizardry that would make
libcamera's configure phase see only the packages that are installed on
the target when being built, but if buildroot doesn't support installing
gtest at all - then indeed there isn't any point supporting
lc-compliance which requires it.


> >
> >
> > > Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
> > > ---
> > >  package/libcamera/libcamera.mk | 1 +
> > >  1 file changed, 1 insertion(+)
> > >
> > > diff --git a/package/libcamera/libcamera.mk b/package/libcamera/libcamera.mk
> > > index 8ab95fb42a..638c9ac553 100644
> > > --- a/package/libcamera/libcamera.mk
> > > +++ b/package/libcamera/libcamera.mk
> > > @@ -17,6 +17,7 @@ LIBCAMERA_DEPENDENCIES = \
> > >  LIBCAMERA_CONF_OPTS = \
> > >         -Dandroid=disabled \
> > >         -Ddocumentation=disabled \
> > > +       -Dlc-compliance=disabled \
> > >         -Dtest=false \
> > >         -Dwerror=false
> > >  LIBCAMERA_INSTALL_STAGING = YES
> > > --
> > > 2.33.0
> > >
> Best Regards,
> 
> Fabrice
Fabrice Fontaine Oct. 21, 2021, 5:05 p.m. UTC | #4
Le jeu. 21 oct. 2021 à 18:30, Kieran Bingham
<kieran.bingham@ideasonboard.com> a écrit :
>
> Quoting Fabrice Fontaine (2021-10-21 17:05:51)
> > Hi Kieran,
> >
> > Le jeu. 21 oct. 2021 à 11:22, Kieran Bingham
> > <kieran.bingham@ideasonboard.com> a écrit :
> > >
> > > Hi Fabrice,
> > >
> > > Quoting Fabrice Fontaine (2021-10-20 20:04:23)
> > > > Disable compliance tool to fix the following build failure
> > > > raised since commit e1d37ab0a7b2b8735e69c070519978d2898d2e79 and
> > > > https://git.linuxtv.org/libcamera.git/commit/?id=02bc1108578e8b8eb68fa7d9ae3eeea558723931:
> > > >
> > > > /usr/lfs/hdd_v1/rc-buildroot-test/scripts/instance-1/output-1/host/lib/gcc/arm-buildroot-linux-uclibcgnueabi/10.3.0/../../../../arm-buildroot-linux-uclibcgnueabi/bin/ld: cannot find -lgtest
> > > >
> > > > Fixes:
> > > >  - http://autobuild.buildroot.org/results/e1bb8aa1de310f3d27b74ec7d8748d170ad444e2
> > > >
> > >
> > > Any idea why we're failing to find gtest?
> > Nope, I didn't take time to find out why this is failing as I think
> > that lc-compliance is just not needed in the context of buildroot (as
> > gtest is not installed on target).
> > >
> > > Our meson.build for src/lc-compliance contains the following:
> > >
> > > """
> > > # SPDX-License-Identifier: CC0-1.0
> > >
> > > libevent = dependency('libevent_pthreads', required : get_option('lc-compliance'))
> > > libgtest = dependency('gtest', required : get_option('lc-compliance'))
> > >
> > > if not (libevent.found() and libgtest.found())
> > >     lc_compliance_enabled = false
> > >     subdir_done()
> > > endif
> > >
> > > lc_compliance_enabled = true
> > > """
> > >
> > > Which implies that libgtest was found during the configuration phase,
> > > but not during the linking phase....
> > >
> > > Is libgtest built as part of this build configuration? If it is - I'd
> > > expect lc-compliance to get built against it. If not - then it would
> > > automatically be disabled by our build...
> > Yes, it is built and found by meson otherwise lc-compliance won't be
> > built but for an unknown reason, the link step fails.
>
> You've mentioned above that gtest won't be installed on the target... So
> .. I would expect that means it isn't in the target sysroot, and can't
> be linked against.
>
> So it seems that for some reason meson finds a host package instead of a
> target package?
gtest is installed on staging (but not on target):
GTEST_INSTALL_STAGING = YES
GTEST_INSTALL_TARGET = NO

It should be noted that no packages are using gtest in buldroot.
IMHO, we should remove it to avoid unexpected build failures and
improve build reproducibility as I assume that libcamera is not the
only package that has a "hidden" gtest dependency.
>> Do we have a way to differentiate these in buildroot?
>
> I'm not sure if there's some buildroot wizardry that would make
> libcamera's configure phase see only the packages that are installed on
> the target when being built, but if buildroot doesn't support installing
> gtest at all - then indeed there isn't any point supporting
> lc-compliance which requires it.
>
>
> > >
> > >
> > > > Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
> > > > ---
> > > >  package/libcamera/libcamera.mk | 1 +
> > > >  1 file changed, 1 insertion(+)
> > > >
> > > > diff --git a/package/libcamera/libcamera.mk b/package/libcamera/libcamera.mk
> > > > index 8ab95fb42a..638c9ac553 100644
> > > > --- a/package/libcamera/libcamera.mk
> > > > +++ b/package/libcamera/libcamera.mk
> > > > @@ -17,6 +17,7 @@ LIBCAMERA_DEPENDENCIES = \
> > > >  LIBCAMERA_CONF_OPTS = \
> > > >         -Dandroid=disabled \
> > > >         -Ddocumentation=disabled \
> > > > +       -Dlc-compliance=disabled \
> > > >         -Dtest=false \
> > > >         -Dwerror=false
> > > >  LIBCAMERA_INSTALL_STAGING = YES
> > > > --
> > > > 2.33.0
> > > >
> > Best Regards,
> >
> > Fabrice
Best Regards,

Fabrice
Peter Seiderer Oct. 21, 2021, 6:05 p.m. UTC | #5
Hello Fabrice,

On Thu, 21 Oct 2021 19:05:38 +0200, Fabrice Fontaine <fontaine.fabrice@gmail.com> wrote:

> Le jeu. 21 oct. 2021 à 18:30, Kieran Bingham
> <kieran.bingham@ideasonboard.com> a écrit :
> >
> > Quoting Fabrice Fontaine (2021-10-21 17:05:51)  
> > > Hi Kieran,
> > >
> > > Le jeu. 21 oct. 2021 à 11:22, Kieran Bingham
> > > <kieran.bingham@ideasonboard.com> a écrit :  
> > > >
> > > > Hi Fabrice,
> > > >
> > > > Quoting Fabrice Fontaine (2021-10-20 20:04:23)  
> > > > > Disable compliance tool to fix the following build failure
> > > > > raised since commit e1d37ab0a7b2b8735e69c070519978d2898d2e79 and
> > > > > https://git.linuxtv.org/libcamera.git/commit/?id=02bc1108578e8b8eb68fa7d9ae3eeea558723931:
> > > > >
> > > > > /usr/lfs/hdd_v1/rc-buildroot-test/scripts/instance-1/output-1/host/lib/gcc/arm-buildroot-linux-uclibcgnueabi/10.3.0/../../../../arm-buildroot-linux-uclibcgnueabi/bin/ld: cannot find -lgtest
> > > > >
> > > > > Fixes:
> > > > >  - http://autobuild.buildroot.org/results/e1bb8aa1de310f3d27b74ec7d8748d170ad444e2
> > > > >  
> > > >
> > > > Any idea why we're failing to find gtest?  
> > > Nope, I didn't take time to find out why this is failing as I think
> > > that lc-compliance is just not needed in the context of buildroot (as
> > > gtest is not installed on target).  
> > > >
> > > > Our meson.build for src/lc-compliance contains the following:
> > > >
> > > > """
> > > > # SPDX-License-Identifier: CC0-1.0
> > > >
> > > > libevent = dependency('libevent_pthreads', required : get_option('lc-compliance'))
> > > > libgtest = dependency('gtest', required : get_option('lc-compliance'))
> > > >
> > > > if not (libevent.found() and libgtest.found())
> > > >     lc_compliance_enabled = false
> > > >     subdir_done()
> > > > endif
> > > >
> > > > lc_compliance_enabled = true
> > > > """
> > > >
> > > > Which implies that libgtest was found during the configuration phase,
> > > > but not during the linking phase....
> > > >
> > > > Is libgtest built as part of this build configuration? If it is - I'd
> > > > expect lc-compliance to get built against it. If not - then it would
> > > > automatically be disabled by our build...  
> > > Yes, it is built and found by meson otherwise lc-compliance won't be
> > > built but for an unknown reason, the link step fails.  
> >
> > You've mentioned above that gtest won't be installed on the target... So
> > .. I would expect that means it isn't in the target sysroot, and can't
> > be linked against.
> >
> > So it seems that for some reason meson finds a host package instead of a
> > target package?  
> gtest is installed on staging (but not on target):
> GTEST_INSTALL_STAGING = YES
> GTEST_INSTALL_TARGET = NO
> 
> It should be noted that no packages are using gtest in buldroot.
> IMHO, we should remove it to avoid unexpected build failures and
> improve build reproducibility as I assume that libcamera is not the
> only package that has a "hidden" gtest dependency.

But this is normal behavior for a (maybe static) library to be installed
to staging...., and the failure is a compile time one and not a
runtime one? If you want reproducibility you have to add a optional
dependency on gtest (and fix the link failure) or (as you suggested)
disable the need/check for gtest in the failing package...

I know more than one custom package using gtest (optional on the
target hardware for runtime tests)...

Regards,
Peter

> >> Do we have a way to differentiate these in buildroot?  
> >
> > I'm not sure if there's some buildroot wizardry that would make
> > libcamera's configure phase see only the packages that are installed on
> > the target when being built, but if buildroot doesn't support installing
> > gtest at all - then indeed there isn't any point supporting
> > lc-compliance which requires it.
> >
> >  
> > > >
> > > >  
> > > > > Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
> > > > > ---
> > > > >  package/libcamera/libcamera.mk | 1 +
> > > > >  1 file changed, 1 insertion(+)
> > > > >
> > > > > diff --git a/package/libcamera/libcamera.mk b/package/libcamera/libcamera.mk
> > > > > index 8ab95fb42a..638c9ac553 100644
> > > > > --- a/package/libcamera/libcamera.mk
> > > > > +++ b/package/libcamera/libcamera.mk
> > > > > @@ -17,6 +17,7 @@ LIBCAMERA_DEPENDENCIES = \
> > > > >  LIBCAMERA_CONF_OPTS = \
> > > > >         -Dandroid=disabled \
> > > > >         -Ddocumentation=disabled \
> > > > > +       -Dlc-compliance=disabled \
> > > > >         -Dtest=false \
> > > > >         -Dwerror=false
> > > > >  LIBCAMERA_INSTALL_STAGING = YES
> > > > > --
> > > > > 2.33.0
> > > > >  
> > > Best Regards,
> > >
> > > Fabrice  
> Best Regards,
> 
> Fabrice
> _______________________________________________
> buildroot mailing list
> buildroot@buildroot.org
> https://lists.buildroot.org/mailman/listinfo/buildroot
Peter Seiderer Oct. 21, 2021, 7:04 p.m. UTC | #6
Hello Fabrice, Kieran,

On Thu, 21 Oct 2021 20:05:18 +0200, Peter Seiderer <ps.report@gmx.net> wrote:

> Hello Fabrice,
> 
> On Thu, 21 Oct 2021 19:05:38 +0200, Fabrice Fontaine <fontaine.fabrice@gmail.com> wrote:
> 
> > Le jeu. 21 oct. 2021 à 18:30, Kieran Bingham
> > <kieran.bingham@ideasonboard.com> a écrit :  
> > >
> > > Quoting Fabrice Fontaine (2021-10-21 17:05:51)    
> > > > Hi Kieran,
> > > >
> > > > Le jeu. 21 oct. 2021 à 11:22, Kieran Bingham
> > > > <kieran.bingham@ideasonboard.com> a écrit :    
> > > > >
> > > > > Hi Fabrice,
> > > > >
> > > > > Quoting Fabrice Fontaine (2021-10-20 20:04:23)    
> > > > > > Disable compliance tool to fix the following build failure
> > > > > > raised since commit e1d37ab0a7b2b8735e69c070519978d2898d2e79 and
> > > > > > https://git.linuxtv.org/libcamera.git/commit/?id=02bc1108578e8b8eb68fa7d9ae3eeea558723931:
> > > > > >
> > > > > > /usr/lfs/hdd_v1/rc-buildroot-test/scripts/instance-1/output-1/host/lib/gcc/arm-buildroot-linux-uclibcgnueabi/10.3.0/../../../../arm-buildroot-linux-uclibcgnueabi/bin/ld: cannot find -lgtest

The failing configuration has set 'BR2_ENABLE_RUNTIME_DEBUG=y' and gtest installs
its library as libgtestd.a (instead of libgtest.a as requested by gtest.pc), can
be fixed by:

--- a/package/gtest/gtest.mk
+++ b/package/gtest/gtest.mk
@@ -46,6 +46,10 @@ ifeq ($(BR2_STATIC_LIBS),)
 GTEST_CONF_OPTS += -DCMAKE_POSITION_INDEPENDENT_CODE=ON
 endif
 
+# set build type always to Release, otherwise the library is named
+# libgtestd.a and not found by dependent packages using gtest.pc
+# requuesting plain libgtest.a
+GTEST_CONF_OPTS += -DCMAKE_BUILD_TYPE=Release
 ifeq ($(BR2_PACKAGE_GTEST_GMOCK),y)
 GTEST_CONF_OPTS += -DBUILD_GMOCK=ON
 else

Alternative would be to fix the generation of gtest.pc...

Regards,
Peter

> > > > > >
> > > > > > Fixes:
> > > > > >  - http://autobuild.buildroot.org/results/e1bb8aa1de310f3d27b74ec7d8748d170ad444e2
> > > > > >    
> > > > >
> > > > > Any idea why we're failing to find gtest?    
> > > > Nope, I didn't take time to find out why this is failing as I think
> > > > that lc-compliance is just not needed in the context of buildroot (as
> > > > gtest is not installed on target).    
> > > > >
> > > > > Our meson.build for src/lc-compliance contains the following:
> > > > >
> > > > > """
> > > > > # SPDX-License-Identifier: CC0-1.0
> > > > >
> > > > > libevent = dependency('libevent_pthreads', required : get_option('lc-compliance'))
> > > > > libgtest = dependency('gtest', required : get_option('lc-compliance'))
> > > > >
> > > > > if not (libevent.found() and libgtest.found())
> > > > >     lc_compliance_enabled = false
> > > > >     subdir_done()
> > > > > endif
> > > > >
> > > > > lc_compliance_enabled = true
> > > > > """
> > > > >
> > > > > Which implies that libgtest was found during the configuration phase,
> > > > > but not during the linking phase....
> > > > >
> > > > > Is libgtest built as part of this build configuration? If it is - I'd
> > > > > expect lc-compliance to get built against it. If not - then it would
> > > > > automatically be disabled by our build...    
> > > > Yes, it is built and found by meson otherwise lc-compliance won't be
> > > > built but for an unknown reason, the link step fails.    
> > >
> > > You've mentioned above that gtest won't be installed on the target... So
> > > .. I would expect that means it isn't in the target sysroot, and can't
> > > be linked against.
> > >
> > > So it seems that for some reason meson finds a host package instead of a
> > > target package?    
> > gtest is installed on staging (but not on target):
> > GTEST_INSTALL_STAGING = YES
> > GTEST_INSTALL_TARGET = NO
> > 
> > It should be noted that no packages are using gtest in buldroot.
> > IMHO, we should remove it to avoid unexpected build failures and
> > improve build reproducibility as I assume that libcamera is not the
> > only package that has a "hidden" gtest dependency.  
> 
> But this is normal behavior for a (maybe static) library to be installed
> to staging...., and the failure is a compile time one and not a
> runtime one? If you want reproducibility you have to add a optional
> dependency on gtest (and fix the link failure) or (as you suggested)
> disable the need/check for gtest in the failing package...
> 
> I know more than one custom package using gtest (optional on the
> target hardware for runtime tests)...
> 
> Regards,
> Peter
> 
> > >> Do we have a way to differentiate these in buildroot?    
> > >
> > > I'm not sure if there's some buildroot wizardry that would make
> > > libcamera's configure phase see only the packages that are installed on
> > > the target when being built, but if buildroot doesn't support installing
> > > gtest at all - then indeed there isn't any point supporting
> > > lc-compliance which requires it.
> > >
> > >    
> > > > >
> > > > >    
> > > > > > Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
> > > > > > ---
> > > > > >  package/libcamera/libcamera.mk | 1 +
> > > > > >  1 file changed, 1 insertion(+)
> > > > > >
> > > > > > diff --git a/package/libcamera/libcamera.mk b/package/libcamera/libcamera.mk
> > > > > > index 8ab95fb42a..638c9ac553 100644
> > > > > > --- a/package/libcamera/libcamera.mk
> > > > > > +++ b/package/libcamera/libcamera.mk
> > > > > > @@ -17,6 +17,7 @@ LIBCAMERA_DEPENDENCIES = \
> > > > > >  LIBCAMERA_CONF_OPTS = \
> > > > > >         -Dandroid=disabled \
> > > > > >         -Ddocumentation=disabled \
> > > > > > +       -Dlc-compliance=disabled \
> > > > > >         -Dtest=false \
> > > > > >         -Dwerror=false
> > > > > >  LIBCAMERA_INSTALL_STAGING = YES
> > > > > > --
> > > > > > 2.33.0
> > > > > >    
> > > > Best Regards,
> > > >
> > > > Fabrice    
> > Best Regards,
> > 
> > Fabrice
> > _______________________________________________
> > buildroot mailing list
> > buildroot@buildroot.org
> > https://lists.buildroot.org/mailman/listinfo/buildroot  
> 
> _______________________________________________
> buildroot mailing list
> buildroot@buildroot.org
> https://lists.buildroot.org/mailman/listinfo/buildroot
Peter Seiderer Oct. 22, 2021, 7:10 p.m. UTC | #7
Hello *,

On Thu, 21 Oct 2021 21:04:00 +0200, Peter Seiderer <ps.report@gmx.net> wrote:

> Hello Fabrice, Kieran,
> 
> On Thu, 21 Oct 2021 20:05:18 +0200, Peter Seiderer <ps.report@gmx.net> wrote:
> 
> > Hello Fabrice,
> > 
> > On Thu, 21 Oct 2021 19:05:38 +0200, Fabrice Fontaine <fontaine.fabrice@gmail.com> wrote:
> >   
> > > Le jeu. 21 oct. 2021 à 18:30, Kieran Bingham
> > > <kieran.bingham@ideasonboard.com> a écrit :    
> > > >
> > > > Quoting Fabrice Fontaine (2021-10-21 17:05:51)      
> > > > > Hi Kieran,
> > > > >
> > > > > Le jeu. 21 oct. 2021 à 11:22, Kieran Bingham
> > > > > <kieran.bingham@ideasonboard.com> a écrit :      
> > > > > >
> > > > > > Hi Fabrice,
> > > > > >
> > > > > > Quoting Fabrice Fontaine (2021-10-20 20:04:23)      
> > > > > > > Disable compliance tool to fix the following build failure
> > > > > > > raised since commit e1d37ab0a7b2b8735e69c070519978d2898d2e79 and
> > > > > > > https://git.linuxtv.org/libcamera.git/commit/?id=02bc1108578e8b8eb68fa7d9ae3eeea558723931:
> > > > > > >
> > > > > > > /usr/lfs/hdd_v1/rc-buildroot-test/scripts/instance-1/output-1/host/lib/gcc/arm-buildroot-linux-uclibcgnueabi/10.3.0/../../../../arm-buildroot-linux-uclibcgnueabi/bin/ld: cannot find -lgtest  
> 
> The failing configuration has set 'BR2_ENABLE_RUNTIME_DEBUG=y' and gtest installs
> its library as libgtestd.a (instead of libgtest.a as requested by gtest.pc), can
> be fixed by:
> 
> --- a/package/gtest/gtest.mk
> +++ b/package/gtest/gtest.mk
> @@ -46,6 +46,10 @@ ifeq ($(BR2_STATIC_LIBS),)
>  GTEST_CONF_OPTS += -DCMAKE_POSITION_INDEPENDENT_CODE=ON
>  endif
>  
> +# set build type always to Release, otherwise the library is named
> +# libgtestd.a and not found by dependent packages using gtest.pc
> +# requuesting plain libgtest.a
> +GTEST_CONF_OPTS += -DCMAKE_BUILD_TYPE=Release
>  ifeq ($(BR2_PACKAGE_GTEST_GMOCK),y)
>  GTEST_CONF_OPTS += -DBUILD_GMOCK=ON
>  else
> 
> Alternative would be to fix the generation of gtest.pc...

Alternative implemented for package/gtest and added an lc-compliance
option for package/libcamera (to gain an gtest consumer in buildroot),
see [1] and [2]...

Regards,
Peter

[1] https://patchwork.ozlabs.org/project/buildroot/patch/20211022190702.7782-1-ps.report@gmx.net/
[2] https://patchwork.ozlabs.org/project/buildroot/patch/20211022190702.7782-2-ps.report@gmx.net/

> 
> Regards,
> Peter
> 
> > > > > > >
> > > > > > > Fixes:
> > > > > > >  - http://autobuild.buildroot.org/results/e1bb8aa1de310f3d27b74ec7d8748d170ad444e2
> > > > > > >      
> > > > > >
> > > > > > Any idea why we're failing to find gtest?      
> > > > > Nope, I didn't take time to find out why this is failing as I think
> > > > > that lc-compliance is just not needed in the context of buildroot (as
> > > > > gtest is not installed on target).      
> > > > > >
> > > > > > Our meson.build for src/lc-compliance contains the following:
> > > > > >
> > > > > > """
> > > > > > # SPDX-License-Identifier: CC0-1.0
> > > > > >
> > > > > > libevent = dependency('libevent_pthreads', required : get_option('lc-compliance'))
> > > > > > libgtest = dependency('gtest', required : get_option('lc-compliance'))
> > > > > >
> > > > > > if not (libevent.found() and libgtest.found())
> > > > > >     lc_compliance_enabled = false
> > > > > >     subdir_done()
> > > > > > endif
> > > > > >
> > > > > > lc_compliance_enabled = true
> > > > > > """
> > > > > >
> > > > > > Which implies that libgtest was found during the configuration phase,
> > > > > > but not during the linking phase....
> > > > > >
> > > > > > Is libgtest built as part of this build configuration? If it is - I'd
> > > > > > expect lc-compliance to get built against it. If not - then it would
> > > > > > automatically be disabled by our build...      
> > > > > Yes, it is built and found by meson otherwise lc-compliance won't be
> > > > > built but for an unknown reason, the link step fails.      
> > > >
> > > > You've mentioned above that gtest won't be installed on the target... So
> > > > .. I would expect that means it isn't in the target sysroot, and can't
> > > > be linked against.
> > > >
> > > > So it seems that for some reason meson finds a host package instead of a
> > > > target package?      
> > > gtest is installed on staging (but not on target):
> > > GTEST_INSTALL_STAGING = YES
> > > GTEST_INSTALL_TARGET = NO
> > > 
> > > It should be noted that no packages are using gtest in buldroot.
> > > IMHO, we should remove it to avoid unexpected build failures and
> > > improve build reproducibility as I assume that libcamera is not the
> > > only package that has a "hidden" gtest dependency.    
> > 
> > But this is normal behavior for a (maybe static) library to be installed
> > to staging...., and the failure is a compile time one and not a
> > runtime one? If you want reproducibility you have to add a optional
> > dependency on gtest (and fix the link failure) or (as you suggested)
> > disable the need/check for gtest in the failing package...
> > 
> > I know more than one custom package using gtest (optional on the
> > target hardware for runtime tests)...
> > 
> > Regards,
> > Peter
> >   
> > > >> Do we have a way to differentiate these in buildroot?      
> > > >
> > > > I'm not sure if there's some buildroot wizardry that would make
> > > > libcamera's configure phase see only the packages that are installed on
> > > > the target when being built, but if buildroot doesn't support installing
> > > > gtest at all - then indeed there isn't any point supporting
> > > > lc-compliance which requires it.
> > > >
> > > >      
> > > > > >
> > > > > >      
> > > > > > > Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
> > > > > > > ---
> > > > > > >  package/libcamera/libcamera.mk | 1 +
> > > > > > >  1 file changed, 1 insertion(+)
> > > > > > >
> > > > > > > diff --git a/package/libcamera/libcamera.mk b/package/libcamera/libcamera.mk
> > > > > > > index 8ab95fb42a..638c9ac553 100644
> > > > > > > --- a/package/libcamera/libcamera.mk
> > > > > > > +++ b/package/libcamera/libcamera.mk
> > > > > > > @@ -17,6 +17,7 @@ LIBCAMERA_DEPENDENCIES = \
> > > > > > >  LIBCAMERA_CONF_OPTS = \
> > > > > > >         -Dandroid=disabled \
> > > > > > >         -Ddocumentation=disabled \
> > > > > > > +       -Dlc-compliance=disabled \
> > > > > > >         -Dtest=false \
> > > > > > >         -Dwerror=false
> > > > > > >  LIBCAMERA_INSTALL_STAGING = YES
> > > > > > > --
> > > > > > > 2.33.0
> > > > > > >      
> > > > > Best Regards,
> > > > >
> > > > > Fabrice      
> > > Best Regards,
> > > 
> > > Fabrice
> > > _______________________________________________
> > > buildroot mailing list
> > > buildroot@buildroot.org
> > > https://lists.buildroot.org/mailman/listinfo/buildroot    
> > 
> > _______________________________________________
> > buildroot mailing list
> > buildroot@buildroot.org
> > https://lists.buildroot.org/mailman/listinfo/buildroot  
> 
> _______________________________________________
> buildroot mailing list
> buildroot@buildroot.org
> https://lists.buildroot.org/mailman/listinfo/buildroot
diff mbox series

Patch

diff --git a/package/libcamera/libcamera.mk b/package/libcamera/libcamera.mk
index 8ab95fb42a..638c9ac553 100644
--- a/package/libcamera/libcamera.mk
+++ b/package/libcamera/libcamera.mk
@@ -17,6 +17,7 @@  LIBCAMERA_DEPENDENCIES = \
 LIBCAMERA_CONF_OPTS = \
 	-Dandroid=disabled \
 	-Ddocumentation=disabled \
+	-Dlc-compliance=disabled \
 	-Dtest=false \
 	-Dwerror=false
 LIBCAMERA_INSTALL_STAGING = YES