Buildroot Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Seiderer <ps.report@gmx.net>
To: buildroot@busybox.net
Subject: [Buildroot] [RFC v1] libv4l: build utils only on MMU (with fork support) platforms
Date: Sat, 22 Jul 2017 23:36:27 +0200	[thread overview]
Message-ID: <20170722233627.4b8091bd@gmx.net> (raw)
In-Reply-To: <41bd7a05-4254-e7e4-7846-ed5e4d99d0ad@st.com>

Hello Hugues,

On Tue, 18 Jul 2017 09:08:18 +0000, Hugues FRUCHET <hugues.fruchet@st.com> wrote:

> Hi Peter,
> 
> On 07/17/2017 08:09 PM, Peter Seiderer wrote:
> > Hello Hugues,
> > 
> > On Mon, 17 Jul 2017 10:07:07 +0000, Hugues FRUCHET <hugues.fruchet@st.com> wrote:
> > 
> >> Hi Peter,
> >>
> >> I have tested on STM32 platform running Cortex F family having no MMU,
> >> shared libraries are disabled (no dlopen) and no fork supported on our
> >> setup.
> >>
> >> libv4lconvert should not have been built at all, because entire lib/
> >> folder build is conditional to shared library support:
> >> * configure.ac
> >> AM_CONDITIONAL([WITH_LIBV4L],       [test x$enable_libv4l    != xno -a
> >> x$enable_shared != xno])
> >> * Makefile.am
> >> [...]
> >> +if WITH_LIBV4L
> >> +SUBDIRS += lib
> >> +endif
> > 
> > A little bit confused, one of the patches you introduced changed it to:
> > 
> > - without WITH_LIBV4L: no libv4l libraries at all
> > - without WITH_DYN_LIBV4L: only static libraries, no dynamic libraries
> > 
> > And from configure --help:
> > 
> >    --disable-libv4l        disable libv4l compilation
> >    --disable-dyn-libv4l    disable dynamic libv4l support
> 
> This package is named "libv4l" in buildroot but repo name is "v4l-utils" 
> which contains:
> 1) some library plugins on top of V4L kernel interface in order to 
> intercept user calls and hook/convert to the appropriate kernel call.
> => so called "libv4l" and located in "lib/" folder
> 2) some utilities located in "utils/" folder, such as the V4L compliancy 
> tool "v4l2-compliance" or the CEC compliancy tool "cec-compliance" which 
> are calling either the libv4l interface (default), the libv4l interface 
> but statically linked inside utilities (--disable-dyn-libv4l) or the V4L 
> kernel interface directly (--disable-libv4l).
> Hope that helps to better understand the options.
> 
> > 
> >>
> >> But checking your log I see that --enable-shared is set, so it seems
> >> that you are supporting shared libraries on no-MMU platform but without
> >> fork() support, is my understanding correct ?
> >>
> > 
> > Yes...
> > 
> >> What you can do to fix build is to force disabling of libs inside libv4l
> >> package:
> >>
> >> package/libv4l/libv4l.mk
> >> +ifeq ($(BR2_USE_MMU),)
> >> +LIBV4L_CONF_OPTS += --disable-libv4l
> >> +endif
> > 
> > Works, but feels wrong: A package named libv4l enabled and building/installing
> > nothing (except when LIBV4L_UTILS is enabled)...
> 
> Right.
> The aim of the no-MMU dependency removal patchset was to enable build of 
> "utils" even on no-MMU platform. This is required to build at least the 
> 2 mandatory compliancy tools:
> - v4l-compliance: its test report is required by V4L maintainers and is 
> to be attached to the cover letter of any V4L driver pushed upstream.
> - cec-compliance: the same for CEC drivers.
> 
> 
> Please note that you cannot use the libv4l plugins mechanism without 
> having fork() support, see libv4lconvert/helper.c, 
> v4lconvert_helper_start().

Yes, but only libv4lconvert needs fork, all other libraries not...,
without fork support only libv4lconvert (and all dependent utils)
should not be built...

> Means that only V4L utilities can be currently supported on no-MMU 
> platforms.
> 
> Back to your exact build issue, the best fix on my opinion is to add a 
> dependency on fork() symbol in configure.ac instead of the one proposed 
> in libv4l.mk, find attached a patch proposal.

Patch did not work:

	$ make libv4l
[...]
compile time options summary
============================

    Host OS                    : linux-uclibc
    X11                        : no
    GL                         : no
    glu                        : no
    libjpeg                    : 
    libudev                    : no
    pthread                    : yes
    fork                       : no
    QT version                 : none
    ALSA support               : no

    build dynamic libs         : yes
    build static libs          : no

    gconv                      : no

    libv4l                     : yes
    dynamic libv4l             : yes
    v4l_plugins                : yes
    v4l_wrappers               : yes
    libdvbv5                   : no
    dvbv5-daemon               : no
    v4lutils                   : yes
    qv4l2                      : no
    v4l2-ctl uses libv4l       : yes
    v4l2-compliance uses libv4l: yes
[...]
helper.c: In function ?v4lconvert_helper_start?:
helper.c:64:25: warning: implicit declaration of function ?fork? [-Wimplicit-function-declaration]
  data->decompress_pid = fork();
                         ^~~~
[...]
  CXXLD    v4l2-compliance
.../build_bfin_libv4l_fix_fork_001/build/libv4l-1.12.5/lib/libv4lconvert/.libs/libv4lconvert.so: undefined reference to `fork'
collect2: error: ld returned 1 exit status

Regards,
Peter


> 
> 
> Regards,
> Hugues.
> > 
> > Regards,
> > Peter
> > 
> >>
> >> Hoping that helps.
> >>
> >> Best regards,
> >> Hugues.
> >>
> >> On 07/11/2017 07:26 PM, Peter Seiderer wrote:
> >>> Fixes [1]:
> >>>
> >>>       CXXLD    v4l2-compliance
> >>>     .../output/build/libv4l-1.12.5/lib/libv4lconvert/.libs/libv4lconvert.so: undefined reference to `fork'
> >>>     collect2: error: ld returned 1 exit status
> >>>
> >>> [1] http://autobuild.buildroot.net/results/7e8/7e8fbd99a8c091d7bbeedd16066297682bbe29fe
> >>>
> >>> Signed-off-by: Peter Seiderer <ps.report@gmx.net>
> >>> ---
> >>> The libv4l build for noMMU platforms was enabled with commit 'package/libv4l:
> >>> allow build of v4l2 utilities on noMMU platforms' (see [2]). But libv4lconvert uses
> >>> fork internally, so all utils linking against fail to build. Fix this by disabling
> >>> the utils on noMMU platforms (so keep building all libraries).
> >>>
> >>> Alternatives would be:
> >>>
> >>> - disable libv4l on all noMMU platforms (not only the utils), revert a part
> >>>     of commit [2]
> >>>
> >>> - create a patch to disable only libv4lconvert (and all dependend utils)
> >>>     on noMMU platforms
> >>>
> >>> [2] https://git.buildroot.net/buildroot/commit/?id=f837251785e9389f53d695ddb8a094707865171b
> >>> ---
> >>>    package/libv4l/Config.in | 1 +
> >>>    1 file changed, 1 insertion(+)
> >>>
> >>> diff --git a/package/libv4l/Config.in b/package/libv4l/Config.in
> >>> index e7f78dc70f..61c290f251 100644
> >>> --- a/package/libv4l/Config.in
> >>> +++ b/package/libv4l/Config.in
> >>> @@ -19,6 +19,7 @@ comment "libv4l JPEG support not enabled"
> >>>    
> >>>    config BR2_PACKAGE_LIBV4L_UTILS
> >>>    	bool "v4l-utils tools"
> >>> +	depends on BR2_USE_MMU # fork(), used in libv4lconvert linked by various utils eg. v4l2-compliance
> >>>    	help
> >>>    	  v4l-utils is a collection of various video4linux and DVB utilities.
> >>>    	  Enable this if you want to build the following tools:
> >>>
> >> _______________________________________________
> >> buildroot mailing list
> >> buildroot at busybox.net
> >> http://lists.busybox.net/mailman/listinfo/buildroot
> > 

  parent reply	other threads:[~2017-07-22 21:36 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-07-11 17:26 [Buildroot] [RFC v1] libv4l: build utils only on MMU (with fork support) platforms Peter Seiderer
2017-07-11 21:13 ` Thomas Petazzoni
2017-07-17 10:07 ` Hugues FRUCHET
2017-07-17 18:09   ` Peter Seiderer
2017-07-18  9:08     ` Hugues FRUCHET
2017-07-22 19:44       ` Thomas Petazzoni
2017-07-24  8:14         ` Hugues FRUCHET
2017-07-22 21:36       ` Peter Seiderer [this message]
2017-07-24  8:08         ` Hugues FRUCHET
2017-07-24 17:38           ` Peter Seiderer
2017-07-24 17:51             ` Peter Seiderer
2017-07-25  7:54               ` Hugues FRUCHET

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=20170722233627.4b8091bd@gmx.net \
    --to=ps.report@gmx.net \
    --cc=buildroot@busybox.net \
    /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