diff mbox series

[v2] libdrm: fix static build (tests/nouveau)

Message ID 20190809231908.22209-1-ps.report@gmx.net
State Changes Requested
Headers show
Series [v2] libdrm: fix static build (tests/nouveau) | expand

Commit Message

Peter Seiderer Aug. 9, 2019, 11:19 p.m. UTC
Some toolchains (e.g. br-arm-cortex-m4-full) provide empty libdl
libraries. This fools the dynamic/static detection for tests/nouveau,
so explicit check for library type instead.

Fixes [1]:

  ../tests/nouveau/threaded.c:24:10: fatal error: dlfcn.h: No such file or directory

[1] http://autobuild.buildroot.net/results/d15/d15ed604756cac4e4a87afca61b7a4778f293baf

Signed-off-by: Peter Seiderer <ps.report@gmx.net>
---
Changes v1 -> v2:
  - patch updated
---
 ...shared-library-support-detection-for.patch | 52 +++++++++++++++++++
 1 file changed, 52 insertions(+)
 create mode 100644 package/libdrm/0005-meson-fix-libdl-shared-library-support-detection-for.patch

--
2.22.0

Comments

Thomas Petazzoni Aug. 11, 2019, 1:38 p.m. UTC | #1
Hello Peter,

Thanks for working on this topic. Some questions/comments below.

On Sat, 10 Aug 2019 01:19:08 +0200
Peter Seiderer <ps.report@gmx.net> wrote:

> Some toolchains (e.g. br-arm-cortex-m4-full) provide empty libdl
> libraries. This fools the dynamic/static detection for tests/nouveau,
> so explicit check for library type instead.
> 
> Fixes [1]:
> 
>   ../tests/nouveau/threaded.c:24:10: fatal error: dlfcn.h: No such file or directory

So the error is about not finding a header.

> + # Among others FreeBSD does not have a separate dl library.
> + if not cc.has_function('dlsym')
> ++  # fooled in case empty libdl provided, e.g. toolchain br-arm-cortex-m4-full
> +   dep_dl = cc.find_library('dl', required : with_nouveau)

What about instead checking for the availability of dlfcn.h, in
addition to checking the availability of the libdl library ?

Also, how come the cc.has_function('dlsym') checks returns true ? I
guess in a static library configuration, this check should return false.

Also, could you drop the references to br-arm-cortex-m4-full, so that
the patch can be upstreamed ?

BTW, with uClibc-ng and musl, the libdl library is always empty,
regardless of whether it has dynamic library support or not. Here is a
uClibc-ng toolchain, with dynamic library support:

-rw-r--r-- 1 thomas thomas 8  1 août  22:23 output/host/usr/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/lib/libdl.a

Indeed, since quite a while, uClibc-ng is all in a single file,
libc.so, including symbols that used to be in libdl.so:

$ ./output/host/bin/arm-linux-readelf -s output/host/usr/arm-buildroot-linux-uclibcgnueabi/sysroot/lib/libc.so.1  | grep "FUNC.*dlsym"
   884: 00058fe0   468 FUNC    GLOBAL DEFAULT    8 dlsym
  7356: 00058fe0   468 FUNC    GLOBAL DEFAULT    8 dlsym

Best regards,

Thomas
Peter Seiderer Aug. 11, 2019, 9:55 p.m. UTC | #2
Hello Thomas,

On Sun, 11 Aug 2019 15:38:46 +0200, Thomas Petazzoni <thomas.petazzoni@bootlin.com> wrote:

> Hello Peter,
> 
> Thanks for working on this topic. Some questions/comments below.
> 
> On Sat, 10 Aug 2019 01:19:08 +0200
> Peter Seiderer <ps.report@gmx.net> wrote:
> 
> > Some toolchains (e.g. br-arm-cortex-m4-full) provide empty libdl
> > libraries. This fools the dynamic/static detection for tests/nouveau,
> > so explicit check for library type instead.
> > 
> > Fixes [1]:
> > 
> >   ../tests/nouveau/threaded.c:24:10: fatal error: dlfcn.h: No such file or directory  
> 
> So the error is about not finding a header.

Yes, follow up failure from misdetecting dynamic library support...
 
> 
> > + # Among others FreeBSD does not have a separate dl library.
> > + if not cc.has_function('dlsym')
> > ++  # fooled in case empty libdl provided, e.g. toolchain br-arm-cortex-m4-full
> > +   dep_dl = cc.find_library('dl', required : with_nouveau)  
> 
> What about instead checking for the availability of dlfcn.h, in
> addition to checking the availability of the libdl library ?

Yes, this would be the better/perfect solution (but did not yet find the
time to impelment it)....

> 
> Also, how come the cc.has_function('dlsym') checks returns true ? I
> guess in a static library configuration, this check should return false.

Mind the 'not' in the if statement, if no 'native' cc support for dlsym
check for libdl as indication for dynamic library support...

> 
> Also, could you drop the references to br-arm-cortex-m4-full, so that
> the patch can be upstreamed ?

Yes will do (as soon as I find a suitable timeslot ;-) )...

The librm/meson patch series is re-suggested upsteam, see [1], [2], [3]...

Regards,
Peter

[1] https://lists.freedesktop.org/archives/dri-devel/2019-August/230489.html
[2] https://lists.freedesktop.org/archives/dri-devel/2019-August/230490.html
[3] https://lists.freedesktop.org/archives/dri-devel/2019-August/230491.html

> 
> BTW, with uClibc-ng and musl, the libdl library is always empty,
> regardless of whether it has dynamic library support or not. Here is a
> uClibc-ng toolchain, with dynamic library support:
> 
> -rw-r--r-- 1 thomas thomas 8  1 août  22:23 output/host/usr/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/lib/libdl.a
> 
> Indeed, since quite a while, uClibc-ng is all in a single file,
> libc.so, including symbols that used to be in libdl.so:
> 
> $ ./output/host/bin/arm-linux-readelf -s output/host/usr/arm-buildroot-linux-uclibcgnueabi/sysroot/lib/libc.so.1  | grep "FUNC.*dlsym"
>    884: 00058fe0   468 FUNC    GLOBAL DEFAULT    8 dlsym
>   7356: 00058fe0   468 FUNC    GLOBAL DEFAULT    8 dlsym
> 
> Best regards,
> 
> Thomas
diff mbox series

Patch

diff --git a/package/libdrm/0005-meson-fix-libdl-shared-library-support-detection-for.patch b/package/libdrm/0005-meson-fix-libdl-shared-library-support-detection-for.patch
new file mode 100644
index 0000000000..eb36f55ba5
--- /dev/null
+++ b/package/libdrm/0005-meson-fix-libdl-shared-library-support-detection-for.patch
@@ -0,0 +1,52 @@ 
+From 8705f6908f5de494dcdb13323b8c15fb9b09acf1 Mon Sep 17 00:00:00 2001
+From: Peter Seiderer <ps.report@gmx.net>
+Date: Sat, 10 Aug 2019 01:06:13 +0200
+Subject: [PATCH] meson: fix libdl/shared library support detection for nouveau
+ tests
+
+Some toolchains (e.g. br-arm-cortex-m4-full) provide empty libdl
+libraries. This fools the dynamic/static detection for tests/nouveau,
+so explicit check for library type instead.
+
+Fixes:
+
+  ../tests/nouveau/threaded.c:24:10: fatal error: dlfcn.h: No such file or directory
+
+Signed-off-by: Peter Seiderer <ps.report@gmx.net>
+---
+ meson.build       | 1 +
+ tests/meson.build | 5 ++++-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/meson.build b/meson.build
+index adaaf22..b78d9e5 100644
+--- a/meson.build
++++ b/meson.build
+@@ -168,6 +168,7 @@ endif
+
+ # Among others FreeBSD does not have a separate dl library.
+ if not cc.has_function('dlsym')
++  # fooled in case empty libdl provided, e.g. toolchain br-arm-cortex-m4-full
+   dep_dl = cc.find_library('dl', required : with_nouveau)
+ else
+   dep_dl = []
+diff --git a/tests/meson.build b/tests/meson.build
+index 6c8ddd9..f7cb5f0 100644
+--- a/tests/meson.build
++++ b/tests/meson.build
+@@ -44,8 +44,11 @@ endif
+ if with_etnaviv
+   subdir('etnaviv')
+ endif
++lib_type = get_option('default_library')
+ if with_nouveau
+-  subdir('nouveau')
++  if lib_type != 'static'
++    subdir('nouveau')
++  endif
+ endif
+
+ drmsl = executable(
+--
+2.22.0
+