From mboxrd@z Thu Jan 1 00:00:00 1970 From: Peter Seiderer Date: Mon, 24 Jul 2017 19:38:22 +0200 Subject: [Buildroot] [RFC v1] libv4l: build utils only on MMU (with fork support) platforms In-Reply-To: <62b07a98-ef76-b3cc-1ce0-227ceeb06519@st.com> References: <20170711172624.7516-1-ps.report@gmx.net> <70ff5d21-0466-c470-cac3-e00c524c93b0@st.com> <20170717200901.51814cb5@gmx.net> <41bd7a05-4254-e7e4-7846-ed5e4d99d0ad@st.com> <20170722233627.4b8091bd@gmx.net> <62b07a98-ef76-b3cc-1ce0-227ceeb06519@st.com> Message-ID: <20170724193822.3630bc8c@gmx.net> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: buildroot@busybox.net Hello Hugues, On Mon, 24 Jul 2017 08:08:45 +0000, Hugues FRUCHET wrote: > Hi Peter, > > Sorry, typo in patch, this one should work as expected. > > Best regards, > Hugues. > Yes, the new version of the patch works: $ make libv4l [...] Applying 0010-configure.ac-disable-libv4l-if-no-fork.patch using patch: [...] 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 : no 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 [...] $ ls -ltr target/usr/bin/ [...] -rwxr-xr-x 1 seiderer users 259172 Jul 24 19:29 decode_tm6000 -rwxr-xr-x 1 seiderer users 13988 Jul 24 19:29 ivtv-ctl -rwxr-xr-x 1 seiderer users 198868 Jul 24 19:29 ir-ctl -rwxr-xr-x 1 seiderer users 12240 Jul 24 19:29 cx18-ctl -rwxr-xr-x 1 seiderer users 215068 Jul 24 19:29 ir-keytable -rwxr-xr-x 1 seiderer users 53452 Jul 24 19:29 media-ctl -rwxr-xr-x 1 seiderer users 206532 Jul 24 19:29 v4l2-compliance -rwxr-xr-x 1 seiderer users 265676 Jul 24 19:29 v4l2-ctl -rwxr-xr-x 1 seiderer users 188496 Jul 24 19:29 v4l2-sysfs-path -rwxr-xr-x 1 seiderer users 154228 Jul 24 19:29 cec-ctl -rwxr-xr-x 1 seiderer users 122344 Jul 24 19:29 cec-compliance -rwxr-xr-x 1 seiderer users 69860 Jul 24 19:29 cec-follower $ ls -ltr target/usr/lib drwxr-xr-x 3 seiderer users 4096 Jul 11 19:06 libv4l -rwxr-xr-x 1 seiderer users 39408 Jul 11 19:06 libv4l2.so.0.0.0 -rwxr-xr-x 1 seiderer users 17032 Jul 11 19:06 libv4l1.so.0.0.0 -rwxr-xr-x 1 seiderer users 105432 Jul 11 19:06 libv4lconvert.so.0.0.0 -rwxr-xr-x 1 seiderer users 18384 Jul 11 19:06 libv4l2rds.so.0.0.0 Thanks for your efforts... Regards, Peter > On 07/22/2017 11:36 PM, Peter Seiderer wrote: > > Hello Hugues, > > > > On Tue, 18 Jul 2017 09:08:18 +0000, Hugues FRUCHET 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 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 > >>>>> --- > >>>>> 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 > >>> > >