* [Buildroot] [PATCH 1/3] package/multicat: add patch to fix static build
@ 2016-03-19 23:41 Jörg Krause
2016-03-19 23:41 ` [Buildroot] [PATCH 2/3] package/multicat: add patch to fix musl build Jörg Krause
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Jörg Krause @ 2016-03-19 23:41 UTC (permalink / raw)
To: buildroot
Building multicat in a static context fails with:
aggregartp.c:381: undefined reference to `pthread_self'
Fix this by adding -lpthread to LDLIBS.
Fixes:
http://autobuild.buildroot.net/results/e69/e699cf6b97bc97f2e8e51aa8b86f0e16af70b5b0/
http://autobuild.buildroot.net/results/201/2019f11dcc43cb0db13ceb4e3a575c1a91573d4c/
http://autobuild.buildroot.net/results/fa9/fa98afec377a1e8fce64af5897d1f7af45804069/
and maybe more.
Upstream status: Pending [1]
[1] https://mailman.videolan.org/pipermail/multicat-devel/2016-March/000125.html
Signed-off-by: J?rg Krause <joerg.krause@embedded.rocks>
---
package/multicat/0001-Fix-missing-pthread.patch | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
create mode 100644 package/multicat/0001-Fix-missing-pthread.patch
diff --git a/package/multicat/0001-Fix-missing-pthread.patch b/package/multicat/0001-Fix-missing-pthread.patch
new file mode 100644
index 0000000..f21c7ce
--- /dev/null
+++ b/package/multicat/0001-Fix-missing-pthread.patch
@@ -0,0 +1,19 @@
+Makefile: link with pthread
+
+Otherwise building multicat in a static context fails:
+ aggregartp.c:381: undefined reference to `pthread_self'
+
+Signed-off-by: J?rg Krause <joerg.krause@embedded.rocks>
+
+diff -purN multicat-2.1.orig/Makefile multicat-2.1/Makefile
+--- multicat-2.1.orig/Makefile 2015-10-05 18:36:29.000000000 +0200
++++ multicat-2.1/Makefile 2016-03-19 21:47:59.467745127 +0100
+@@ -4,7 +4,7 @@ VERSION = 2.1
+ CFLAGS += -Wall -Wformat-security -O3 -fomit-frame-pointer -D_FILE_OFFSET_BITS=64 -D_ISOC99_SOURCE -D_BSD_SOURCE
+ CFLAGS += -g
+ # Comment out the following line for Mac OS X build
+-LDLIBS += -lrt
++LDLIBS += -lrt -pthread
+
+ OBJ_MULTICAT = multicat.o util.o
+ OBJ_INGESTS = ingests.o util.o
--
2.7.4
^ permalink raw reply related [flat|nested] 8+ messages in thread* [Buildroot] [PATCH 2/3] package/multicat: add patch to fix musl build 2016-03-19 23:41 [Buildroot] [PATCH 1/3] package/multicat: add patch to fix static build Jörg Krause @ 2016-03-19 23:41 ` Jörg Krause 2016-03-20 14:11 ` Thomas Petazzoni 2016-03-19 23:41 ` [Buildroot] [PATCH 3/3] package/multicat: fix build with external Blackfin uClibc toolchain Jörg Krause 2016-03-20 14:09 ` [Buildroot] [PATCH 1/3] package/multicat: add patch to fix static build Thomas Petazzoni 2 siblings, 1 reply; 8+ messages in thread From: Jörg Krause @ 2016-03-19 23:41 UTC (permalink / raw) To: buildroot Add a patch to fix two musl build issues: 1) `struct udphdr` requires definition of `_GNU_SOURCE` 2) `mode_t` requires including <sys/types.h> Fixes: http://autobuild.buildroot.net/results/9f1/9f1a3f3aab854f1bd20f1064391e613457312022/ Upstream status: Pending [1] [1] https://mailman.videolan.org/pipermail/multicat-devel/2016-March/000126.html Signed-off-by: J?rg Krause <joerg.krause@embedded.rocks> --- package/multicat/0002-Fix-musl-build.patch | 46 ++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 package/multicat/0002-Fix-musl-build.patch diff --git a/package/multicat/0002-Fix-musl-build.patch b/package/multicat/0002-Fix-musl-build.patch new file mode 100644 index 0000000..3a89895 --- /dev/null +++ b/package/multicat/0002-Fix-musl-build.patch @@ -0,0 +1,46 @@ +Fix musl build + +Defining _GNU_SOURCE is required to get proper member names in `struct udphdr` +when building against musl. Build error: + + util.c: In function 'RawFillHeaders': + util.c:481:9: error: 'struct udphdr' has no member named 'source' + udph->source = htons(portsrc); + ^ + util.c:482:9: error: 'struct udphdr' has no member named 'dest' + udph->dest = htons(portdst); + ^ + util.c:483:9: error: 'struct udphdr' has no member named 'len' + udph->len = htons(sizeof(struct udphdr) + len); + ^ + util.c:484:9: error: 'struct udphdr' has no member named 'check' + udph->check = 0; + +Including <sys/types.h> in needed for mode_t, otherwise musl build fails: + util.h:91:1: error: unknown type name 'mode_t' + +Signed-off-by: J?rg Krause <joerg.krause@embedded.rocks> + +diff -purN multicat-2.1.orig/util.c multicat-2.1/util.c +--- multicat-2.1.orig/util.c 2015-07-17 18:03:17.000000000 +0200 ++++ multicat-2.1/util.c 2016-03-19 22:21:01.110178772 +0100 +@@ -21,6 +21,8 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + ++#define _GNU_SOURCE ++ + #include <stdlib.h> + #include <stdio.h> + #include <stdint.h> +diff -purN multicat-2.1.orig/util.h multicat-2.1/util.h +--- multicat-2.1.orig/util.h 2015-07-15 22:47:39.000000000 +0200 ++++ multicat-2.1/util.h 2016-03-19 22:21:58.649834990 +0100 +@@ -21,6 +21,7 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + ++#include <sys/types.h> + #include <netinet/udp.h> + #include <netinet/ip.h> + -- 2.7.4 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [Buildroot] [PATCH 2/3] package/multicat: add patch to fix musl build 2016-03-19 23:41 ` [Buildroot] [PATCH 2/3] package/multicat: add patch to fix musl build Jörg Krause @ 2016-03-20 14:11 ` Thomas Petazzoni 0 siblings, 0 replies; 8+ messages in thread From: Thomas Petazzoni @ 2016-03-20 14:11 UTC (permalink / raw) To: buildroot Hello, On Sun, 20 Mar 2016 00:41:45 +0100, J?rg Krause wrote: > Add a patch to fix two musl build issues: > 1) `struct udphdr` requires definition of `_GNU_SOURCE` > 2) `mode_t` requires including <sys/types.h> > > Fixes: > http://autobuild.buildroot.net/results/9f1/9f1a3f3aab854f1bd20f1064391e613457312022/ > > Upstream status: Pending [1] > > [1] https://mailman.videolan.org/pipermail/multicat-devel/2016-March/000126.html > > Signed-off-by: J?rg Krause <joerg.krause@embedded.rocks> > --- > package/multicat/0002-Fix-musl-build.patch | 46 ++++++++++++++++++++++++++++++ > 1 file changed, 46 insertions(+) > create mode 100644 package/multicat/0002-Fix-musl-build.patch Same comment as the previous patch: the information that you have sent it upstream (with the link) should be added to the patch itself. Applied with this fixed, thanks! Thomas -- Thomas Petazzoni, CTO, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com ^ permalink raw reply [flat|nested] 8+ messages in thread
* [Buildroot] [PATCH 3/3] package/multicat: fix build with external Blackfin uClibc toolchain 2016-03-19 23:41 [Buildroot] [PATCH 1/3] package/multicat: add patch to fix static build Jörg Krause 2016-03-19 23:41 ` [Buildroot] [PATCH 2/3] package/multicat: add patch to fix musl build Jörg Krause @ 2016-03-19 23:41 ` Jörg Krause 2016-03-20 14:22 ` Thomas Petazzoni 2016-03-20 14:09 ` [Buildroot] [PATCH 1/3] package/multicat: add patch to fix static build Thomas Petazzoni 2 siblings, 1 reply; 8+ messages in thread From: Jörg Krause @ 2016-03-19 23:41 UTC (permalink / raw) To: buildroot multicat uses clock_nanosleep() conditionally if HAVE_NANOSLEEP is defined. The bad is that multicat does not check for clock_nanosleep(), but defines HAVE_NANOSLEEP if __APPLE__ is not defined. uClibc has clock_nanosleep() only if built with UCLIBC_HAS_ADVANCED_REALTIME. and the external Blackfin toolchain has no support for clock_nanosleep(). As multicat does not has a configuration setup we add a hook for this toolchain and undef the macro HAVE_NANOSLEEP in the sources. Fixes: http://autobuild.buildroot.net/results/84f/84f8302ee94e6e6849f6b26cb697c2f9986bafe5/ http://autobuild.buildroot.net/results/9e0/9e07a98e87755c992254295c46edb0dace967a21/ http://autobuild.buildroot.net/results/4b0/4b07d276d7c09f2fc2d63c8c37c92519cfe36dbc/ http://autobuild.buildroot.net/results/84f/84f8302ee94e6e6849f6b26cb697c2f9986bafe5/ and many more. The issue has been reported upstream [1]. [1] https://mailman.videolan.org/pipermail/multicat-devel/2016-March/000127.html Signed-off-by: J?rg Krause <joerg.krause@embedded.rocks> --- package/multicat/multicat.mk | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/package/multicat/multicat.mk b/package/multicat/multicat.mk index cc6eb78..944cb4c 100644 --- a/package/multicat/multicat.mk +++ b/package/multicat/multicat.mk @@ -12,6 +12,18 @@ MULTICAT_LICENSE_FILES = COPYING MULTICAT_DEPENDENCIES = bitstream +# multicat does not test for HAVE_CLOCK_NANOSLEEP, but sets it if __APPLE__ is +# not defined. The external Blackfin toolchain is uClibc which has +# clock_nanosleep() only if built with UCLIBC_HAS_ADVANCED_REALTIME. +# Use a hool to overwrite the definition of HAVE_CLOCK_NANOSLEEP for this +# toolchain. +ifeq ($(BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX),y) +define MULTICAT_FIXUP_HAVE_CLOCK_NANOSLEEP +$(SED) 's#define HAVE_CLOCK_NANOSLEEP#undef HAVE_CLOCK_NANOSLEEP#g' $(@D)/util.h +endef +MULTICAT_POST_PATCH_HOOKS += MULTICAT_FIXUP_HAVE_CLOCK_NANOSLEEP +endif + MULTICAT_MAKE_ENV = $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) define MULTICAT_BUILD_CMDS -- 2.7.4 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [Buildroot] [PATCH 3/3] package/multicat: fix build with external Blackfin uClibc toolchain 2016-03-19 23:41 ` [Buildroot] [PATCH 3/3] package/multicat: fix build with external Blackfin uClibc toolchain Jörg Krause @ 2016-03-20 14:22 ` Thomas Petazzoni 2016-03-20 17:09 ` Jörg Krause 0 siblings, 1 reply; 8+ messages in thread From: Thomas Petazzoni @ 2016-03-20 14:22 UTC (permalink / raw) To: buildroot Hello, On Sun, 20 Mar 2016 00:41:46 +0100, J?rg Krause wrote: > multicat uses clock_nanosleep() conditionally if HAVE_NANOSLEEP is defined. The > bad is that multicat does not check for clock_nanosleep(), but defines "bad .." ? > HAVE_NANOSLEEP if __APPLE__ is not defined. > > uClibc has clock_nanosleep() only if built with UCLIBC_HAS_ADVANCED_REALTIME. > and the external Blackfin toolchain has no support for clock_nanosleep(). Are you sure? Here the Blackfin toolchain does have UCLIBC_HAS_ADVANCED_REALTIME: $ grep ADVANCED_REALTIME output/staging/usr/include/bits/uClibc_config.h #define __UCLIBC_HAS_ADVANCED_REALTIME__ 1 But indeed it doesn't have clock_nanosleep(). When I saw your patch, I was hoping to be able to replace it with a patch that tests __UCLIBC__ and __UCLIBC_HAS_ADVANCED_REALTIME__ to determine whether we have clock_nanosleep() or not. But it seems like some other things on Blackfin has the consequence that we don't have clock_nanosleep(). I looked at uClibc 0.9.33.2 (which is used in the Blackfin toolchain, as far as I can see), and I couldn't see why clock_nanosleep() was not provided. > +# multicat does not test for HAVE_CLOCK_NANOSLEEP, but sets it if __APPLE__ is > +# not defined. The external Blackfin toolchain is uClibc which has > +# clock_nanosleep() only if built with UCLIBC_HAS_ADVANCED_REALTIME. > +# Use a hool to overwrite the definition of HAVE_CLOCK_NANOSLEEP for this hool -> hook > +# toolchain. > +ifeq ($(BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX),y) > +define MULTICAT_FIXUP_HAVE_CLOCK_NANOSLEEP > +$(SED) 's#define HAVE_CLOCK_NANOSLEEP#undef HAVE_CLOCK_NANOSLEEP#g' $(@D)/util.h > +endef > +MULTICAT_POST_PATCH_HOOKS += MULTICAT_FIXUP_HAVE_CLOCK_NANOSLEEP > +endif I'll be OK to fix this with a hook, but I'd like to understand why we don't have clock_nanosleep() on Blackfin. It might affect a significant number of other packages I believe. Thomas -- Thomas Petazzoni, CTO, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com ^ permalink raw reply [flat|nested] 8+ messages in thread
* [Buildroot] [PATCH 3/3] package/multicat: fix build with external Blackfin uClibc toolchain 2016-03-20 14:22 ` Thomas Petazzoni @ 2016-03-20 17:09 ` Jörg Krause 2016-03-20 17:13 ` Thomas Petazzoni 0 siblings, 1 reply; 8+ messages in thread From: Jörg Krause @ 2016-03-20 17:09 UTC (permalink / raw) To: buildroot On So, 2016-03-20 at 15:22 +0100, Thomas Petazzoni wrote: > Hello, > > On Sun, 20 Mar 2016 00:41:46 +0100, J?rg Krause wrote: > > > > multicat uses clock_nanosleep() conditionally if HAVE_NANOSLEEP is > > defined. The > > bad is that multicat does not check for clock_nanosleep(), but > > defines > "bad .." ? Oops, bad English. > > > > HAVE_NANOSLEEP if __APPLE__ is not defined. > > > > uClibc has clock_nanosleep() only if built with > > UCLIBC_HAS_ADVANCED_REALTIME. > > and the external Blackfin toolchain has no support for > > clock_nanosleep(). > Are you sure? Here the Blackfin toolchain does have > UCLIBC_HAS_ADVANCED_REALTIME: > > $ grep ADVANCED_REALTIME > output/staging/usr/include/bits/uClibc_config.h? > #define __UCLIBC_HAS_ADVANCED_REALTIME__ 1 > > But indeed it doesn't have clock_nanosleep(). You're right! It has?__UCLIBC_HAS_ADVANCED_REALTIME__, but it does not define?__UCLIBC_HAS_THREADS_NATIVE__ and clock_nanosleep() is only defined if both are set in <time.h>: #??ifdef __UCLIBC_HAS_THREADS_NATIVE__ #???if defined __USE_XOPEN2K && defined __UCLIBC_HAS_ADVANCED_REALTIME__ extern int clock_nanosleep (clockid_t __clock_id, int __flags, ????__const struct timespec *__req, ????struct timespec *__rem); However the Blackfin toolchain has __LINUXTHREADS_OLD__: #define __LINUXTHREADS_OLD__ 1 Sorry, my bad! > > When I saw your patch, I was hoping to be able to replace it with a > patch that tests __UCLIBC__ and __UCLIBC_HAS_ADVANCED_REALTIME__ to > determine whether we have clock_nanosleep() or not. But it seems like > some other things on Blackfin has the consequence that we don't have > clock_nanosleep(). I looked at uClibc 0.9.33.2 (which is used in the > Blackfin toolchain, as far as I can see), and I couldn't see why > clock_nanosleep() was not provided. > I'll prepare a v2 with something like that testing for __UCLIBC__, __UCLIBC_HAS_THREADS_NATIVE__ and __UCLIBC_HAS_ADVANCED_REALTIME__. > > > > +# multicat does not test for HAVE_CLOCK_NANOSLEEP, but sets it if > > __APPLE__ is > > +# not defined. The external Blackfin toolchain is uClibc which has > > +# clock_nanosleep() only if built with > > UCLIBC_HAS_ADVANCED_REALTIME. > > +# Use a hool to overwrite the definition of HAVE_CLOCK_NANOSLEEP > > for this > hool -> hook > > > > > +# toolchain. > > +ifeq ($(BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX),y) > > +define MULTICAT_FIXUP_HAVE_CLOCK_NANOSLEEP > > +$(SED) 's#define HAVE_CLOCK_NANOSLEEP#undef > > HAVE_CLOCK_NANOSLEEP#g' $(@D)/util.h > > +endef > > +MULTICAT_POST_PATCH_HOOKS += MULTICAT_FIXUP_HAVE_CLOCK_NANOSLEEP > > +endif > I'll be OK to fix this with a hook, but I'd like to understand why we > don't have clock_nanosleep() on Blackfin. It might affect a > significant > number of other packages I believe. My guess is that uClibc was build with __LINUXTHREADS_OLD__ enabled, but the toolchain ships libpthread instead. However, I am not a toolchain expert. Best regards J?rg Krause ^ permalink raw reply [flat|nested] 8+ messages in thread
* [Buildroot] [PATCH 3/3] package/multicat: fix build with external Blackfin uClibc toolchain 2016-03-20 17:09 ` Jörg Krause @ 2016-03-20 17:13 ` Thomas Petazzoni 0 siblings, 0 replies; 8+ messages in thread From: Thomas Petazzoni @ 2016-03-20 17:13 UTC (permalink / raw) To: buildroot Hello, On Sun, 20 Mar 2016 18:09:47 +0100, J?rg Krause wrote: > You're right! It has?__UCLIBC_HAS_ADVANCED_REALTIME__, but it does not > define?__UCLIBC_HAS_THREADS_NATIVE__ and clock_nanosleep() is only > defined if both are set in <time.h>: > > #??ifdef __UCLIBC_HAS_THREADS_NATIVE__ > #???if defined __USE_XOPEN2K && defined > __UCLIBC_HAS_ADVANCED_REALTIME__ Ah, makes sense! > I'll prepare a v2 with something like that testing for __UCLIBC__, > __UCLIBC_HAS_THREADS_NATIVE__ and __UCLIBC_HAS_ADVANCED_REALTIME__. Sounds good. It would of course be better if they were using autoconf, to be able to add a configure script, but well... > My guess is that uClibc was build with __LINUXTHREADS_OLD__ enabled, > but the toolchain ships libpthread instead. However, I am not a > toolchain expert. Regardless of whether you have linuxthreads/old, linuxthreads or NPTL, there is always a library named libpthread. It's the internals of the library and how it interacts with the kernel that completely differs between the different implementations. Best regards, Thomas -- Thomas Petazzoni, CTO, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com ^ permalink raw reply [flat|nested] 8+ messages in thread
* [Buildroot] [PATCH 1/3] package/multicat: add patch to fix static build 2016-03-19 23:41 [Buildroot] [PATCH 1/3] package/multicat: add patch to fix static build Jörg Krause 2016-03-19 23:41 ` [Buildroot] [PATCH 2/3] package/multicat: add patch to fix musl build Jörg Krause 2016-03-19 23:41 ` [Buildroot] [PATCH 3/3] package/multicat: fix build with external Blackfin uClibc toolchain Jörg Krause @ 2016-03-20 14:09 ` Thomas Petazzoni 2 siblings, 0 replies; 8+ messages in thread From: Thomas Petazzoni @ 2016-03-20 14:09 UTC (permalink / raw) To: buildroot J?rg, On Sun, 20 Mar 2016 00:41:44 +0100, J?rg Krause wrote: > Building multicat in a static context fails with: > aggregartp.c:381: undefined reference to `pthread_self' > > Fix this by adding -lpthread to LDLIBS. > > Fixes: > http://autobuild.buildroot.net/results/e69/e699cf6b97bc97f2e8e51aa8b86f0e16af70b5b0/ > http://autobuild.buildroot.net/results/201/2019f11dcc43cb0db13ceb4e3a575c1a91573d4c/ > http://autobuild.buildroot.net/results/fa9/fa98afec377a1e8fce64af5897d1f7af45804069/ > and maybe more. > > Upstream status: Pending [1] > > [1] https://mailman.videolan.org/pipermail/multicat-devel/2016-March/000125.html This info would be useful to have in the patch itself, so I've added it and applied. Thanks! Thomas -- Thomas Petazzoni, CTO, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2016-03-20 17:13 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2016-03-19 23:41 [Buildroot] [PATCH 1/3] package/multicat: add patch to fix static build Jörg Krause 2016-03-19 23:41 ` [Buildroot] [PATCH 2/3] package/multicat: add patch to fix musl build Jörg Krause 2016-03-20 14:11 ` Thomas Petazzoni 2016-03-19 23:41 ` [Buildroot] [PATCH 3/3] package/multicat: fix build with external Blackfin uClibc toolchain Jörg Krause 2016-03-20 14:22 ` Thomas Petazzoni 2016-03-20 17:09 ` Jörg Krause 2016-03-20 17:13 ` Thomas Petazzoni 2016-03-20 14:09 ` [Buildroot] [PATCH 1/3] package/multicat: add patch to fix static build Thomas Petazzoni
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox