Message ID | 41bd7a05-4254-e7e4-7846-ed5e4d99d0ad@st.com |
---|---|
State | Changes Requested |
Headers | show |
Hello, On Tue, 18 Jul 2017 09:08:18 +0000, Hugues FRUCHET wrote: > 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. Does your patch actually work? A lot of the utils in utils/ do require the libraries, won't they fail to build if the libraries are not built ? Could you make a clean patch submission to resolve this issue ? Thanks, Thomas
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@busybox.net > >> http://lists.busybox.net/mailman/listinfo/buildroot > >
Hi Thomas, On 07/22/2017 09:44 PM, Thomas Petazzoni wrote: > Hello, > > On Tue, 18 Jul 2017 09:08:18 +0000, Hugues FRUCHET wrote: > >> 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. > > Does your patch actually work? A lot of the utils in utils/ do require > the libraries, won't they fail to build if the libraries are not built ? Those which depends on libraries won't be built, but some will remains built, as the compliancy tools. This was the aim of the initial patch. > > Could you make a clean patch submission to resolve this issue ? There was a typo in proposed patch, I've sent to Peter a fixed version. When build is confirmed OK by Peter, I'll push to both V4L2 and buildroot lists. > > Thanks, > > Thomas > BR, Hugues.
--- a/configure.ac +++ b/configure.ac @@ -298,6 +298,9 @@ argp_saved_libs=$LIBS AC_SUBST([ARGP_LIBS]) LIBS=$argp_saved_libs +# Check for fork(), needed by libv4lconvert +AC_CHECK_FUNCS([fork], have_fork=yes, have_fork=no) + AC_CHECK_HEADER([linux/i2c-dev.h], [linux_i2c_dev=yes], [linux_i2c_dev=no]) AM_CONDITIONAL([HAVE_LINUX_I2C_DEV], [test x$linux_i2c_dev = xyes]) @@ -436,7 +439,7 @@ AM_CONDITIONAL([WITH_LIBDVBV5], [tes AM_CONDITIONAL([WITH_DVBV5_REMOTE], [test x$enable_libdvbv5 != xno -a x$have_libudev = xyes -a x$have_pthread = xyes]) AM_CONDITIONAL([WITH_DYN_LIBV4L], [test x$enable_dyn_libv4l != xno]) -AM_CONDITIONAL([WITH_LIBV4L], [test x$enable_libv4l != xno -a x$enable_shared != xno]) +AM_CONDITIONAL([WITH_LIBV4L], [test x$enable_libv4l != xno -a x$enable_shared != xno -a x$have_forked != xno]) AM_CONDITIONAL([WITH_V4LUTILS], [test x$enable_v4l_utils != xno -a x$linux_os = xyes]) AM_CONDITIONAL([WITH_QV4L2], [test x${qt_pkgconfig} = xtrue -a x$enable_qv4l2 != xno]) AM_CONDITIONAL([WITH_V4L_PLUGINS], [test x$enable_dyn_libv4l != xno -a x$enable_shared != xno]) @@ -492,6 +495,7 @@ compile time options summary libjpeg : $have_jpeg libudev : $have_libudev pthread : $have_pthread + fork : $have_fork QT version : $QT_VERSION ALSA support : $USE_ALSA