* [Buildroot] [PATCH] yajl: fix build with uClibc
@ 2016-04-20 9:38 Vicente Olivert Riera
2016-04-21 6:15 ` Jörg Krause
0 siblings, 1 reply; 3+ messages in thread
From: Vicente Olivert Riera @ 2016-04-20 9:38 UTC (permalink / raw)
To: buildroot
The failure looks like this:
../yajl-2.1.0/lib/libyajl.so.2.1.0: undefined reference to `__isinf'
../yajl-2.1.0/lib/libyajl.so.2.1.0: undefined reference to `__isnan'
We already have a patch (0001) which should fix this problem, however,
as stated here [1], it doesn't work when cross compiling.
To fix the problem we add -lm to CFLAGS when building with uClibc.
Fixes:
http://autobuild.buildroot.net/results/308/30892ffb298acc2334f8c694038c420120fe43b9/
1: https://github.com/lloyd/yajl/issues/58#issuecomment-15683796
Signed-off-by: Vicente Olivert Riera <Vincent.Riera@imgtec.com>
---
package/yajl/yajl.mk | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/package/yajl/yajl.mk b/package/yajl/yajl.mk
index 7770e86..145bf2c 100644
--- a/package/yajl/yajl.mk
+++ b/package/yajl/yajl.mk
@@ -11,4 +11,8 @@ YAJL_LICENSE = ISC
YAJL_LICENSE_FILES = COPYING
YAJL_PATCH = https://github.com/vriera/yajl/commit/6d09f11b8fd358cab0e31b965327e64a599f9ce9.patch
+ifeq ($(BR2_TOOLCHAIN_USES_UCLIBC),y)
+YAJL_CONF_OPTS += -DCMAKE_C_FLAGS="$(TARGET_CFLAGS) -lm"
+endif
+
$(eval $(cmake-package))
--
2.7.3
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [Buildroot] [PATCH] yajl: fix build with uClibc
2016-04-20 9:38 [Buildroot] [PATCH] yajl: fix build with uClibc Vicente Olivert Riera
@ 2016-04-21 6:15 ` Jörg Krause
2016-04-22 13:58 ` Benoît Mauduit
0 siblings, 1 reply; 3+ messages in thread
From: Jörg Krause @ 2016-04-21 6:15 UTC (permalink / raw)
To: buildroot
Hi Vicente,
On Mi, 2016-04-20 at 10:38 +0100, Vicente Olivert Riera wrote:
> The failure looks like this:
>
> ../yajl-2.1.0/lib/libyajl.so.2.1.0: undefined reference to `__isinf'
> ../yajl-2.1.0/lib/libyajl.so.2.1.0: undefined reference to `__isnan'
>
> We already have a patch (0001) which should fix this problem,
> however,
> as stated here [1], it doesn't work when cross compiling.
>
> To fix the problem we add -lm to CFLAGS when building with uClibc.
>
> Fixes:
>
> ? http://autobuild.buildroot.net/results/308/30892ffb298acc2334f8c694
> 038c420120fe43b9/
>
> 1: https://github.com/lloyd/yajl/issues/58#issuecomment-15683796
>
> Signed-off-by: Vicente Olivert Riera <Vincent.Riera@imgtec.com>
> ---
> ?package/yajl/yajl.mk | 4 ++++
> ?1 file changed, 4 insertions(+)
>
> diff --git a/package/yajl/yajl.mk b/package/yajl/yajl.mk
> index 7770e86..145bf2c 100644
> --- a/package/yajl/yajl.mk
> +++ b/package/yajl/yajl.mk
> @@ -11,4 +11,8 @@ YAJL_LICENSE = ISC
> ?YAJL_LICENSE_FILES = COPYING
> ?YAJL_PATCH = https://github.com/vriera/yajl/commit/6d09f11b8fd358cab
> 0e31b965327e64a599f9ce9.patch
> ?
> +ifeq ($(BR2_TOOLCHAIN_USES_UCLIBC),y)
> +YAJL_CONF_OPTS += -DCMAKE_C_FLAGS="$(TARGET_CFLAGS) -lm"
> +endif
> +
> ?$(eval $(cmake-package))
For the record, Bernd Kuhls proposed a patch [1] to fix this issue,
too.
The patch [2] in commit?3cfd8bf15cd8b80215bb70db28e065ff0b80437b fixed
an issue, where the executables build in yajl, like 'parse_config', are
linked against the static yajl library, even in a shared context.
Unfortunatly, the submitter (me) of this patch did not test with the
uClibc based toolchain, but only for musl.
We have already the patch "0001-cmake-uClibc-Fix-missing-libm-for-
tests.patch" for yajl which fixes the missing libm for uClibc for the
executable 'gen-extra-close', which should be removed by your patch.
I'm not sure if it's worth, but I would prefer to fix the CMake build
files of yajl by checking if libm is needed for isnan and it to the
list of LIBS and let all executables link against LIBS. Thomas
Petazzoni did this for an autotools package [3]. For CMake it would be
something like this:
# check if isnan needs libm
try_compile(ISNAN_NEEDS_LIBM, ...)
if (ISNAN_NEEDS_LIBM)
? set(LIBS ${LIBS} m)
endif ()
[..]
TARGET_LINK_LIBRARIES(${testProg} yajl ${LIBS})
Furthermore, the .pc file should be fixed.
[1]?http://patchwork.ozlabs.org/patch/612226/
[2]?http://patchwork.ozlabs.org/patch/608412/
[3]?http://lists.busybox.net/pipermail/buildroot/2015-May/127381.html
Best regards
J?rg Krause
^ permalink raw reply [flat|nested] 3+ messages in thread
* [Buildroot] [PATCH] yajl: fix build with uClibc
2016-04-21 6:15 ` Jörg Krause
@ 2016-04-22 13:58 ` Benoît Mauduit
0 siblings, 0 replies; 3+ messages in thread
From: Benoît Mauduit @ 2016-04-22 13:58 UTC (permalink / raw)
To: buildroot
Hi Vicente, J?rg,
On 04/21/2016 08:15 AM, J?rg Krause wrote:
> (...)
>
> I'm not sure if it's worth, but I would prefer to fix the CMake build
> files of yajl by checking if libm is needed for isnan and it to the
> list of LIBS and let all executables link against LIBS. Thomas
> Petazzoni did this for an autotools package [3]. For CMake it would be
> something like this:
>
> # check if isnan needs libm
> try_compile(ISNAN_NEEDS_LIBM, ...)
> if (ISNAN_NEEDS_LIBM)
> set(LIBS ${LIBS} m)
> endif ()
>
> [..]
>
> TARGET_LINK_LIBRARIES(${testProg} yajl ${LIBS})
>
I just encountered this build issue.
I end up with a patch like that, in yasl Top-level CMakeList.txt :
# uclibc does not provide isnan() & isinf().
# Symbol are in libm instead.
INCLUDE(CheckLibraryExists)
CHECK_LIBRARY_EXISTS(c isnan "" HAVE_LIBC_ISNAN)
IF (NOT HAVE_LIBC_ISNAN)
SET(CMAKE_SHARED_LINKER_FLAGS "-lm ${CMAKE_SHARED_LINKER_FLAGS}")
ENDIF (NOT HAVE_LIBC_ISNAN)
It works with uClibc based toolchain.
But I am not sure about this patch for compatibility with other C
library. I have just test on my host (glibc) with a dummy CMakeList.txt,
and :
CHECK_LIBRARY_EXISTS(c isnan "" HAVE_LIBC_ISNAN)
>>
-- Looking for isnan in c
-- Looking for isnan in c - found
Anyway, looking at the man page for isnan & isinf, we are supposed to
link against libmath... (Link with -lm)
Regards,
--
Beno?t Mauduit
Mail : <bmauduit@beneth.fr>
XMPP : <bmauduit@im.beneth.fr>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2016-04-22 13:58 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-04-20 9:38 [Buildroot] [PATCH] yajl: fix build with uClibc Vicente Olivert Riera
2016-04-21 6:15 ` Jörg Krause
2016-04-22 13:58 ` Benoît Mauduit
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox