libdrm: fix libatomic_ops linking
PATCH v2 1/1 libdrm: fix libatomic_ops linking
Add patch 0003-configure-Makefile.am-use-pkg-config-to-discover-lib.patch provided by Thomas Petazzoni handling libatomic_ops linking when needed.
Fixes [1]:
CCLD etnaviv_cmd_stream_test
../../etnaviv/.libs/libdrm_etnaviv.so: undefined reference to AO_store_full_emulation' ../../etnaviv/.libs/libdrm_etnaviv.so: undefined reference to AO_fetch_compare_and_swap_emulation'
collect2: error: ld returned 1 exit status
[1] http://autobuild.buildroot.net/results/92e074c49417261843eef95872ff935a56077c98
---
Changes v1 -> v2:
- use patch provided by Thomas Petazzoni instead of forced libatomic_ops linking.
--- ...akefile.am-use-pkg-config-to-discover-lib.patch | 160 +++++++++++++++++++++ package/libdrm/libdrm.mk | 8 +- 2 files changed, 167 insertions(+), 1 deletion(-) create mode 100644 package/libdrm/0003-configure-Makefile.am-use-pkg-config-to-discover-lib.patch
package/libdrm/0003-configure-Makefile.am-use-pkg-config-to-discover-lib.patch new file +160 -0
@@ -0,0 +1,160 @@ +From 57d544ff2f96a26cac07d5be00ff7b67678ae7b8 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni <[email protected]> +Date: Mon, 18 Dec 2017 13:08:39 +0100 +Subject: [PATCH] configure/Makefile.am: use pkg-config to discover + libatomic_ops + +The configure script currently tests the availability of libatomic_ops +by checking the presence of atomic_ops.h. While this is good enough as +an availability test, it is not sufficient as on some platforms, +libatomic_ops provides an actual shared library against which we +should be linked to access libatomic_ops functionality. + +Therefore, we instead use PKG_CHECK_MODULES() to test the availability +of libatomic_ops. Besides testing its availability, this also fills in +the ATOMIC_OPS_LIBS variable with the list of libraries we need to +link with to use libatomic_ops. + +All Mesa drivers that include xf86atomic.h have been updated to link +against ATOMIC_OPS_LIBS. + +Of course, if we're not using libatomic_ops, ATOMIC_OPS_LIBS is empty, +and we don't link against it. + +Signed-off-by: Thomas Petazzoni <[email protected]> +Signed-off-by: Peter Seiderer <[email protected]> +--- + amdgpu/Makefile.am | 2 +- + configure.ac | 2 +- + etnaviv/Makefile.am | 3 ++- + freedreno/Makefile.am | 3 ++- + intel/Makefile.am | 3 ++- + nouveau/Makefile.am | 2 +- + omap/Makefile.am | 2 +- + radeon/Makefile.am | 2 +- + tegra/Makefile.am | 2 +- + 9 files changed, 12 insertions(+), 9 deletions(-) + +diff --git a/amdgpu/Makefile.am b/amdgpu/Makefile.am +index a1b0d05c..b2bcceff 100644 +--- a/amdgpu/Makefile.am ++++ b/amdgpu/Makefile.am +@@ -36,7 +36,7 @@ AM_CPPFLAGS = -DAMDGPU_ASIC_ID_TABLE=\"${libdrmdatadir}/amdgpu.ids\" + libdrm_amdgpu_la_LTLIBRARIES = libdrm_amdgpu.la + libdrm_amdgpu_ladir = $(libdir) + libdrm_amdgpu_la_LDFLAGS = -version-number 1:0:0 -no-undefined +-libdrm_amdgpu_la_LIBADD = ../libdrm.la @PTHREADSTUBS_LIBS@ ++libdrm_amdgpu_la_LIBADD = ../libdrm.la @PTHREADSTUBS_LIBS@ @ATOMIC_OPS_LIBS@ + + libdrm_amdgpu_la_SOURCES = $(LIBDRM_AMDGPU_FILES) + amdgpu_asic_id.lo: $(top_srcdir)/data/amdgpu.ids +diff --git a/configure.ac b/configure.ac +index 35378b33..501d0871 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -247,7 +247,7 @@ AC_CACHE_CHECK([for native atomic primitives], drm_cv_atomic_primitives, [ + ]],[[]])], [drm_cv_atomic_primitives="Intel"],[]) + + if test "x$drm_cv_atomic_primitives" = "xnone"; then +- AC_CHECK_HEADER([atomic_ops.h], drm_cv_atomic_primitives="libatomic-ops") ++ PKG_CHECK_MODULES(ATOMIC_OPS, [atomic_ops], drm_cv_atomic_primitives="libatomic-ops") + fi + + # atomic functions defined in <atomic.h> & libc on Solaris +diff --git a/etnaviv/Makefile.am b/etnaviv/Makefile.am +index be96ba86..669cf14f 100644 +--- a/etnaviv/Makefile.am ++++ b/etnaviv/Makefile.am +@@ -12,7 +12,8 @@ libdrm_etnaviv_la_LDFLAGS = -version-number 1:0:0 -no-undefined + libdrm_etnaviv_la_LIBADD = \ + ../libdrm.la \ + @PTHREADSTUBS_LIBS@ \ +- @CLOCK_LIB@ ++ @CLOCK_LIB@ \ ++ @ATOMIC_OPS_LIBS@ + + libdrm_etnaviv_la_SOURCES = $(LIBDRM_ETNAVIV_FILES) + +diff --git a/freedreno/Makefile.am b/freedreno/Makefile.am +index cbb0d031..238407e3 100644 +--- a/freedreno/Makefile.am ++++ b/freedreno/Makefile.am +@@ -14,7 +14,8 @@ libdrm_freedreno_la_LDFLAGS = -version-number 1:0:0 -no-undefined + libdrm_freedreno_la_LIBADD = \ + ../libdrm.la \ + @PTHREADSTUBS_LIBS@ \ +- @CLOCK_LIB@ ++ @CLOCK_LIB@ \ ++ @ATOMIC_OPS_LIBS@ + + libdrm_freedreno_la_SOURCES = $(LIBDRM_FREEDRENO_FILES) + if HAVE_FREEDRENO_KGSL +diff --git a/intel/Makefile.am b/intel/Makefile.am +index c52e8c08..f3635a64 100644 +--- a/intel/Makefile.am ++++ b/intel/Makefile.am +@@ -38,7 +38,8 @@ libdrm_intel_la_LDFLAGS = -version-number 1:0:0 -no-undefined + libdrm_intel_la_LIBADD = ../libdrm.la \ + @PTHREADSTUBS_LIBS@ \ + @PCIACCESS_LIBS@ \ +- @CLOCK_LIB@ ++ @CLOCK_LIB@ \ ++ @ATOMIC_OPS_LIBS@ + + libdrm_intel_la_SOURCES = $(LIBDRM_INTEL_FILES) + +diff --git a/nouveau/Makefile.am b/nouveau/Makefile.am +index 344a8445..a4e6a78b 100644 +--- a/nouveau/Makefile.am ++++ b/nouveau/Makefile.am +@@ -10,7 +10,7 @@ AM_CFLAGS = \ + libdrm_nouveau_la_LTLIBRARIES = libdrm_nouveau.la + libdrm_nouveau_ladir = $(libdir) + libdrm_nouveau_la_LDFLAGS = -version-number 2:0:0 -no-undefined +-libdrm_nouveau_la_LIBADD = ../libdrm.la @PTHREADSTUBS_LIBS@ ++libdrm_nouveau_la_LIBADD = ../libdrm.la @PTHREADSTUBS_LIBS@ @ATOMIC_OPS_LIBS@ + + libdrm_nouveau_la_SOURCES = $(LIBDRM_NOUVEAU_FILES) + +diff --git a/omap/Makefile.am b/omap/Makefile.am +index 599bb9de..524afee3 100644 +--- a/omap/Makefile.am ++++ b/omap/Makefile.am +@@ -7,7 +7,7 @@ AM_CFLAGS = \ + libdrm_omap_la_LTLIBRARIES = libdrm_omap.la + libdrm_omap_ladir = $(libdir) + libdrm_omap_la_LDFLAGS = -version-number 1:0:0 -no-undefined +-libdrm_omap_la_LIBADD = ../libdrm.la @PTHREADSTUBS_LIBS@ ++libdrm_omap_la_LIBADD = ../libdrm.la @PTHREADSTUBS_LIBS@ @ATOMIC_OPS_LIBS@ + + libdrm_omap_la_SOURCES = omap_drm.c + +diff --git a/radeon/Makefile.am b/radeon/Makefile.am +index e2415314..c27d3c75 100644 +--- a/radeon/Makefile.am ++++ b/radeon/Makefile.am +@@ -33,7 +33,7 @@ AM_CFLAGS = \ + libdrm_radeon_la_LTLIBRARIES = libdrm_radeon.la + libdrm_radeon_ladir = $(libdir) + libdrm_radeon_la_LDFLAGS = -version-number 1:0:1 -no-undefined +-libdrm_radeon_la_LIBADD = ../libdrm.la @PTHREADSTUBS_LIBS@ ++libdrm_radeon_la_LIBADD = ../libdrm.la @PTHREADSTUBS_LIBS@ @ATOMIC_OPS_LIBS@ + + libdrm_radeon_la_SOURCES = $(LIBDRM_RADEON_FILES) + +diff --git a/tegra/Makefile.am b/tegra/Makefile.am +index fb40be55..12abe8c4 100644 +--- a/tegra/Makefile.am ++++ b/tegra/Makefile.am +@@ -9,7 +9,7 @@ AM_CFLAGS = \ + libdrm_tegra_ladir = $(libdir) + libdrm_tegra_la_LTLIBRARIES = libdrm_tegra.la + libdrm_tegra_la_LDFLAGS = -version-number 0:0:0 -no-undefined +-libdrm_tegra_la_LIBADD = ../libdrm.la @PTHREADSTUBS_LIBS@ ++libdrm_tegra_la_LIBADD = ../libdrm.la @PTHREADSTUBS_LIBS@ @ATOMIC_OPS_LIBS@ + + libdrm_tegra_la_SOURCES = \ + private.h \ +-- +2.14.3 +
package/libdrm/libdrm.mk +7 -1
@@ -9,9 +9,15 @@ LIBDRM_SOURCE = libdrm-$(LIBDRM_VERSION).tar.bz2 LIBDRM_SITE = https://dri.freedesktop.org/libdrm LIBDRM_LICENSE = MIT LIBDRM_INSTALL_STAGING = YES + +# patch 0003-configure-Makefile.am-use-pkg-config-to-discover-lib.patch +# touching configure.ac/Makefile.am (and host-xutil_util-macros dependency) +LIBDRM_AUTORECONF = YES + LIBDRM_DEPENDENCIES = \ libpthread-stubs \ - host-pkgconf + host-pkgconf \ + host-xutil_util-macros LIBDRM_CONF_OPTS = \ --disable-cairo-tests \
Signature · 1 line
2.15.1
Thomas Petazzoni
AppliedPATCH v2 1/1 libdrm: fix libatomic_ops linking
Hello,
Quoted 17 lines · Peter Seiderer
Add patch 0003-configure-Makefile.am-use-pkg-config-to-discover-lib.patch provided by Thomas Petazzoni handling
libatomic_opslinking when needed.Fixes [1]:
CCLD
etnaviv_cmd_stream_test
../../etnaviv/.libs/libdrm_etnaviv.so: undefined reference toAO_store_full_emulation' ../../etnaviv/.libs/libdrm_etnaviv.so: undefined reference toAO_fetch_compare_and_swap_emulation'
collect2: error: ld returned 1 exit status[1] http://autobuild.buildroot.net/results/92e074c49417261843eef95872ff935a56077c98
Signed-off-by Peter Seiderer <[email protected]>---
Changes v1 -> v2:
- use patch provided by Thomas Petazzoni instead of forcedlibatomic_opslinking.
Quoted 5 lines
--- ...akefile.am-use-pkg-config-to-discover-lib.patch | 160 +++++++++++++++++++++ package/libdrm/libdrm.mk | 8 +- 2 files changed, 167 insertions(+), 1 deletion(-) create mode 100644 package/libdrm/0003-configure-Makefile.am-use-pkg-config-to-discover-lib.patch
Applied to master, thanks. Could you submit the patch upstream to the libdrm project ?
Thanks a lot!
Thomas
Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com
PATCH v2 1/1 libdrm: fix libatomic_ops linking
Hello Thomas,
Quoted 26 lines · Thomas Petazzoni
Hello,
Quoted 17 lines · Peter Seiderer
Add patch 0003-configure-Makefile.am-use-pkg-config-to-discover-lib.patch provided by Thomas Petazzoni handling
libatomic_opslinking when needed.Fixes [1]:
CCLD
etnaviv_cmd_stream_test
../../etnaviv/.libs/libdrm_etnaviv.so: undefined reference toAO_store_full_emulation' ../../etnaviv/.libs/libdrm_etnaviv.so: undefined reference toAO_fetch_compare_and_swap_emulation'
collect2: error: ld returned 1 exit status[1] http://autobuild.buildroot.net/results/92e074c49417261843eef95872ff935a56077c98
Signed-off-by Peter Seiderer <[email protected]>---
Changes v1 -> v2:
- use patch provided by Thomas Petazzoni instead of forcedlibatomic_opslinking.Quoted 5 lines
--- ...akefile.am-use-pkg-config-to-discover-lib.patch | 160 +++++++++++++++++++++ package/libdrm/libdrm.mk | 8 +- 2 files changed, 167 insertions(+), 1 deletion(-) create mode 100644 package/libdrm/0003-configure-Makefile.am-use-pkg-config-to-discover-lib.patch
Quoted 2 lines
Applied to master, thanks. Could you submit the patch upstream to the libdrm project ?
Patch finally submitted upstream, see [2]...
Regards,
Peter
[2] https://lists.freedesktop.org/archives/dri-devel/2018-February/164908.html
Quoted 4 lines
Thanks a lot!
Thomas