diff --git a/0001-OpenGL-Statically-export-a-few-more-things.patch b/0001-OpenGL-Statically-export-a-few-more-things.patch new file mode 100644 index 0000000..64f3799 --- /dev/null +++ b/0001-OpenGL-Statically-export-a-few-more-things.patch @@ -0,0 +1,27 @@ +From 55f564b77773e6bfcbe1fa6b1d613ea194b408ed Mon Sep 17 00:00:00 2001 +From: Adam Jackson +Date: Mon, 17 Oct 2016 16:58:56 -0400 +Subject: [PATCH] OpenGL: Statically export a few more things + +I'm... unsure if I like this. + +Signed-off-by: Adam Jackson +--- + src/generate/genCommon.py | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/generate/genCommon.py b/src/generate/genCommon.py +index 5781275..bb4e491 100644 +--- a/src/generate/genCommon.py ++++ b/src/generate/genCommon.py +@@ -41,6 +41,7 @@ _LIBRARY_FEATURE_NAMES = { + "GL_VERSION_2_0", "GL_VERSION_2_1", "GL_VERSION_3_0", "GL_VERSION_3_1", + "GL_VERSION_3_2", "GL_VERSION_3_3", "GL_VERSION_4_0", "GL_VERSION_4_1", + "GL_VERSION_4_2", "GL_VERSION_4_3", "GL_VERSION_4_4", "GL_VERSION_4_5", ++ "GL_ARB_imaging", "GL_ARB_multitexture", + )), + "glesv1" : frozenset(("GL_VERSION_ES_CM_1_0", "GL_OES_point_size_array")), + "glesv2" : frozenset(("GL_ES_VERSION_2_0", "GL_ES_VERSION_3_0", +-- +2.9.3 + diff --git a/0002-Print-out-host_cpu-when-undetected-for-easier-debugg.patch b/0002-Print-out-host_cpu-when-undetected-for-easier-debugg.patch new file mode 100644 index 0000000..9192656 --- /dev/null +++ b/0002-Print-out-host_cpu-when-undetected-for-easier-debugg.patch @@ -0,0 +1,25 @@ +From 2e35628e90e0b524ecadea498a2ffe06b6b5a4fc Mon Sep 17 00:00:00 2001 +From: Rob Clark +Date: Wed, 14 Dec 2016 08:40:44 -0500 +Subject: [PATCH 2/6] Print out $host_cpu when undetected, for easier debugging + +--- + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index fdfaf00..29f90d8 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -117,7 +117,7 @@ if test "x$enable_asm" = xyes; then + AC_MSG_RESULT([yes, aarch64]) + ;; + *) +- AC_MSG_RESULT([no, platform not supported]) ++ AC_MSG_RESULT([no, platform '$host_cpu' not supported]) + ;; + esac + fi +-- +2.9.3 + diff --git a/0003-Fix-compile-errors.patch b/0003-Fix-compile-errors.patch new file mode 100644 index 0000000..b5c34e4 --- /dev/null +++ b/0003-Fix-compile-errors.patch @@ -0,0 +1,37 @@ +From 07c095397bb336c2e4fbed89c6b9202730886acc Mon Sep 17 00:00:00 2001 +From: Rob Clark +Date: Wed, 14 Dec 2016 09:35:40 -0500 +Subject: [PATCH 3/6] Fix compile errors + +--- + src/GLdispatch/vnd-glapi/entry_armv7_tsd.c | 1 - + tests/dummy/EGL_dummy.c | 1 - + 2 files changed, 2 deletions(-) + +diff --git a/src/GLdispatch/vnd-glapi/entry_armv7_tsd.c b/src/GLdispatch/vnd-glapi/entry_armv7_tsd.c +index faec5bf..2bce0c2 100644 +--- a/src/GLdispatch/vnd-glapi/entry_armv7_tsd.c ++++ b/src/GLdispatch/vnd-glapi/entry_armv7_tsd.c +@@ -166,7 +166,6 @@ const int entry_stub_size = ARMV7_ENTRY_SIZE; + static const int TEMPLATE_OFFSET_CURRENT_TABLE = ARMV7_BYTECODE_SIZE - 3*4; + static const int TEMPLATE_OFFSET_CURRENT_TABLE_GET = ARMV7_BYTECODE_SIZE - 2*4; + static const int TEMPLATE_OFFSET_SLOT = ARMV7_BYTECODE_SIZE - 4; +-static const int TEMPLATE_OFFSETS_SIZE = 3*4; + + void + entry_init_public(void) +diff --git a/tests/dummy/EGL_dummy.c b/tests/dummy/EGL_dummy.c +index 372e0a0..7860dce 100644 +--- a/tests/dummy/EGL_dummy.c ++++ b/tests/dummy/EGL_dummy.c +@@ -56,7 +56,6 @@ static const char *PLATFORM_EXTENSIONS = + ; + + static const char *DISPLAY_EXTENSIONS = ""; +-static const EGLint DUMMY_EGL_CONFIG_COUNT = 2; + + typedef struct DummyEGLDisplayRec { + EGLenum platform; +-- +2.9.3 + diff --git a/0004-armv7-make-sure-asm-is-compiled-in-unified-syntax-mo.patch b/0004-armv7-make-sure-asm-is-compiled-in-unified-syntax-mo.patch new file mode 100644 index 0000000..ca942a3 --- /dev/null +++ b/0004-armv7-make-sure-asm-is-compiled-in-unified-syntax-mo.patch @@ -0,0 +1,34 @@ +From c386bd5a233ed82d51ff9200c40e97e1817881f9 Mon Sep 17 00:00:00 2001 +From: Rob Clark +Date: Wed, 14 Dec 2016 10:44:07 -0500 +Subject: [PATCH 4/6] armv7: make sure asm is compiled in unified syntax mode + +The individual stub functions already have .thumb_func but if syntax is +divided the assembler will reject the STUB_ASM_CODE. +--- + src/GLdispatch/vnd-glapi/entry_armv7_tsd.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/GLdispatch/vnd-glapi/entry_armv7_tsd.c b/src/GLdispatch/vnd-glapi/entry_armv7_tsd.c +index 2bce0c2..0ea8902 100644 +--- a/src/GLdispatch/vnd-glapi/entry_armv7_tsd.c ++++ b/src/GLdispatch/vnd-glapi/entry_armv7_tsd.c +@@ -140,6 +140,7 @@ static uint16_t BYTECODE_TEMPLATE[] = + + __asm__(".section wtext,\"ax\"\n" + ".balign 4096\n" ++ ".syntax unified\n" + ".globl public_entry_start\n" + ".hidden public_entry_start\n" + "public_entry_start:\n"); +@@ -148,6 +149,7 @@ __asm__(".section wtext,\"ax\"\n" + #include "mapi_tmp.h" + + __asm__(".balign 4096\n" ++ ".syntax divided\n" + ".globl public_entry_end\n" + ".hidden public_entry_end\n" + "public_entry_end:\n" +-- +2.9.3 + diff --git a/0005-Treat-armv7hl-as-armv7l.patch b/0005-Treat-armv7hl-as-armv7l.patch new file mode 100644 index 0000000..109ae99 --- /dev/null +++ b/0005-Treat-armv7hl-as-armv7l.patch @@ -0,0 +1,25 @@ +From ec5bd547b5fe2b82a4a72b9dbd7c0c47d41c7bde Mon Sep 17 00:00:00 2001 +From: Rob Clark +Date: Wed, 14 Dec 2016 11:06:05 -0500 +Subject: [PATCH 5/6] Treat armv7hl as armv7l + +--- + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index 29f90d8..9a68eb2 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -91,7 +91,7 @@ if test "x$enable_asm" = xyes; then + ;; + esac + ;; +- armv7l) ++ armv7*l) + asm_arch=armv7l + ;; + aarch64) +-- +2.9.3 + diff --git a/0006-skip-tests-that-cannot-pass-with-pure-c-dispatch.patch b/0006-skip-tests-that-cannot-pass-with-pure-c-dispatch.patch new file mode 100644 index 0000000..aaf69ff --- /dev/null +++ b/0006-skip-tests-that-cannot-pass-with-pure-c-dispatch.patch @@ -0,0 +1,49 @@ +From 0475afe8e1c20509799b8e41ebad64938315e630 Mon Sep 17 00:00:00 2001 +From: Rob Clark +Date: Mon, 9 Jan 2017 14:52:22 -0500 +Subject: [PATCH 6/6] skip tests that cannot pass with pure-c dispatch + +glvnd will not actually work 100% with pure-c dispatch.. but this at +least removes expected make-check fails so that it can be built. +--- + tests/Makefile.am | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/tests/Makefile.am b/tests/Makefile.am +index fb8408f..e413d5b 100644 +--- a/tests/Makefile.am ++++ b/tests/Makefile.am +@@ -56,7 +56,9 @@ AM_CFLAGS = \ + -I$(top_srcdir)/src/util/glvnd_pthread + + ++if ! GLDISPATCH_TYPE_PURE_C + TESTS += testpatchentrypoints_gldispatch.sh ++endif + check_PROGRAMS += testpatchentrypoints_gldispatch + testpatchentrypoints_gldispatch_SOURCES = \ + testpatchentrypoints_gldispatch.c +@@ -74,6 +76,7 @@ testpatchentrypoints_gldispatch_LDADD += $(top_builddir)/src/util/libutils_misc. + # the scripts would be missing when you run "make dist" or "make distcheck". + + TESTS_GLX = ++if ! GLDISPATCH_TYPE_PURE_C + TESTS_GLX += testglxmcbasic.sh + TESTS_GLX += testglxmcloop.sh + TESTS_GLX += testglxmcthreads.sh +@@ -81,9 +84,12 @@ TESTS_GLX += testglxmclate.sh + TESTS_GLX += testglxmcoldlink.sh + TESTS_GLX += testglxgetprocaddress.sh + TESTS_GLX += testglxgetprocaddress_genentry.sh ++endif + TESTS_GLX += testglxgetclientstr.sh + TESTS_GLX += testglxqueryversion.sh ++if ! GLDISPATCH_TYPE_PURE_C + TESTS_GLX += testpatchentrypoints.sh ++endif + + if ENABLE_GLX + +-- +2.9.3 + diff --git a/egl_crash.patch b/egl_crash.patch deleted file mode 100644 index b5754fb..0000000 --- a/egl_crash.patch +++ /dev/null @@ -1,80 +0,0 @@ -From 758b525463cd00478bf071d477ab58c92414b852 Mon Sep 17 00:00:00 2001 -From: Kyle Brenneman -Date: Tue, 25 Oct 2016 17:32:47 -0600 -Subject: [PATCH 1/2] GLdispatch: Don't call into the vendor from - __glDispatchForceUnpatch. - -In __glDispatchForceUnpatch, don't call the vendor's releasePatch callback, -because the vendor library might have already been unloaded by that point. ---- - src/GLdispatch/GLdispatch.c | 6 ++++-- - 1 file changed, 4 insertions(+), 2 deletions(-) - -diff --git a/src/GLdispatch/GLdispatch.c b/src/GLdispatch/GLdispatch.c -index 8c4c3a7..cf4254e 100644 ---- a/src/GLdispatch/GLdispatch.c -+++ b/src/GLdispatch/GLdispatch.c -@@ -570,8 +570,10 @@ static int PatchEntrypoints( - - if (stubCurrentPatchCb) { - // Notify the previous vendor that it no longer owns these -- // entrypoints. -- if (stubCurrentPatchCb->releasePatch != NULL) { -+ // entrypoints. If this is being called from a library unload, -+ // though, then skip the callback, because the vendor may have -+ // already been unloaded. -+ if (stubCurrentPatchCb->releasePatch != NULL && !force) { - stubCurrentPatchCb->releasePatch(); - } - - -From 8146a979d85e975587f3a20f0a6fdc2f04fa478f Mon Sep 17 00:00:00 2001 -From: Kyle Brenneman -Date: Tue, 25 Oct 2016 17:34:26 -0600 -Subject: [PATCH 2/2] EGL: Don't call into the vendor library from __eglFini. - -In __eglFini, check for a fork, but don't call __glDispatchCheckMultithreaded. - -If a vendor has patched the OpenGL entrypoints, then -__glDispatchCheckMultithreaded will try to call the vendor's thread attach -callback, but the vendor library may have already been unloaded. - -Fixes https://github.com/NVIDIA/libglvnd/issues/103 ---- - src/EGL/libegl.c | 8 ++++++-- - 1 file changed, 6 insertions(+), 2 deletions(-) - -diff --git a/src/EGL/libegl.c b/src/EGL/libegl.c -index 65e6605..e0a5488 100644 ---- a/src/EGL/libegl.c -+++ b/src/EGL/libegl.c -@@ -1088,7 +1088,7 @@ static void __eglResetOnFork(void); - * Currently, this only detects whether a fork occurred since the last - * entrypoint was called, and performs recovery as needed. - */ --void __eglThreadInitialize(void) -+void CheckFork(void) - { - volatile static int g_threadsInCheck = 0; - volatile static int g_lastPid = -1; -@@ -1120,7 +1120,11 @@ void __eglThreadInitialize(void) - sched_yield(); - } - } -+} - -+void __eglThreadInitialize(void) -+{ -+ CheckFork(); - __glDispatchCheckMultithreaded(); - } - -@@ -1190,7 +1194,7 @@ void _fini(void) - #endif - { - /* Check for a fork before going further. */ -- __eglThreadInitialize(); -+ CheckFork(); - - /* - * If libEGL owns the current API state, lose current diff --git a/libglvnd.spec b/libglvnd.spec index 261a941..174b9df 100644 --- a/libglvnd.spec +++ b/libglvnd.spec @@ -1,18 +1,29 @@ -%global commit0 28867bb6597d1cf879b12c60a4b512a23758d3f6 +%global commit0 dc16f8c337703ad141f83583a4004fcf42e07766 %global shortcommit0 %(c=%{commit0}; echo ${c:0:7}) Name: libglvnd Version: 0.2.999 -Release: 6%{?commit0:.git%{shortcommit0}}%{?dist} +Release: 7%{?commit0:.git%{shortcommit0}}%{?dist} +# Provide an upgrade path from the negativo17.org pkgs which have Epoch 1 +Epoch: 1 Summary: The GL Vendor-Neutral Dispatch library License: MIT URL: https://github.com/NVIDIA/libglvnd Source0: https://github.com/NVIDIA/%{name}/archive/%{commit0}.tar.gz#/%{name}-%{shortcommit0}.tar.gz -Patch0: egl_crash.patch +# https://github.com/NVIDIA/libglvnd/pull/100 +Patch1: 0001-OpenGL-Statically-export-a-few-more-things.patch +# https://github.com/NVIDIA/libglvnd/pull/113 +Patch2: 0002-Print-out-host_cpu-when-undetected-for-easier-debugg.patch +Patch3: 0003-Fix-compile-errors.patch +Patch4: 0004-armv7-make-sure-asm-is-compiled-in-unified-syntax-mo.patch +Patch5: 0005-Treat-armv7hl-as-armv7l.patch +# WIP +Patch6: 0006-skip-tests-that-cannot-pass-with-pure-c-dispatch.patch BuildRequires: libtool BuildRequires: gcc +BuildRequires: python BuildRequires: libxml2-python BuildRequires: pkgconfig(glproto) BuildRequires: pkgconfig(x11) @@ -24,29 +35,95 @@ BuildRequires: pkgconfig(xext) #https://github.com/NVIDIA/libglvnd/issues/93 BuildRequires: xorg-x11-server-Xvfb -%{!?_with_mesa_glvnd_default: -%global __provides_exclude ^(libGL\\.so.*|libEGL\\.so.*|libGLESv2\\.so.*)$ -%global __requires_exclude ^(libGL\\.so.*|libEGL\\.so.*|libGLESv2\\.so.*)$ +%{?_without_mesa_glvnd_default: +%global __provides_exclude ^(libGL\\.so.*|libEGL\\.so.*|libGLES*\\.so.*)$ +%global __requires_exclude ^(libGL\\.so.*|libEGL\\.so.*|libGLES*\\.so.*)$ } - %description libglvnd is an implementation of the vendor-neutral dispatch layer for arbitrating OpenGL API calls between multiple vendors on a per-screen basis. + %package devel Summary: Development files for %{name} -Requires: %{name}%{?_isa} = :%{version}-%{release} +Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-opengl%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-gles%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-glx%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-egl%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-core-devel%{?_isa} = %{epoch}:%{version}-%{release} -%description devel +%description devel The %{name}-devel package contains libraries and header files for developing applications that use %{name}. +%package core-devel +Summary: Core development files for %{name} + +%description core-devel +The %{name}-core-devel package is a bootstrap trick for Mesa, which wants +to build against the %{name} headers but does not link against any of +its libraries (and, initially, has file conflicts with them). If you are +not Mesa you almost certainly want %{name}-devel instead. + + +%package opengl +Summary: OpenGL support for libglvnd +Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release} + +%description opengl +libOpenGL is the common dispatch interface for the workstation OpenGL API. + + +%package gles +Summary: GLES support for libglvnd +Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release} +%{!?_without_mesa_glvnd_default: +# mesa is the default EGL implementation provider +Requires: mesa-libEGL%{?_isa} +Provides: libGLES +Provides: libGLES%{?_isa} +} + +%description gles +libGLESv[12] are the common dispatch interface for the GLES API. + + +%package egl +Summary: EGL support for libglvnd +Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release} +%{!?_without_mesa_glvnd_default: +# mesa is the default EGL implementation provider +Requires: mesa-libEGL%{?_isa} +Provides: libEGL +Provides: libEGL%{?_isa} +} + +%description egl +libEGL are the common dispatch interface for the EGL API. + + +%package glx +Summary: GLX support for libglvnd +Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release} +%{!?_without_mesa_glvnd_default: +# mesa is the default GL implementation provider +Requires: mesa-libGL%{?_isa} +Provides: libGL +Provides: libGL%{?_isa} +} + +%description glx +libGL and libGLX are the common dispatch interface for the GLX API. + + %prep %autosetup -p1 -n %{name}-%{?commit0}%{?!commit0:%{version}} autoreconf -vif + %build %configure \ --disable-static \ @@ -60,18 +137,15 @@ autoreconf -vif %make_install INSTALL="install -p" find %{buildroot} -name '*.la' -delete -%{!?_with_mesa_glvnd_default: -# Avoid conflict with mesa-libGL until mesa has gained libglvnd support +%{?_without_mesa_glvnd_default: +# Avoid conflict with mesa-libGL mkdir -p %{buildroot}%{_libdir}/%{name} -for l in libEGL libGL libGLESv2 ; do +for l in libEGL libGL libGLESv1_CM libGLESv2 ; do mv %{buildroot}%{_libdir}/${l}.so* \ %{buildroot}%{_libdir}/%{name} done } -# Fedora does not provide libGLESv1_CM -rm -rf %{buildroot}%{_libdir}/libGLESv1_CM* - # Create directory layout mkdir -p %{buildroot}%{_sysconfdir}/glvnd/egl_vendor.d mkdir -p %{buildroot}%{_datadir}/glvnd/egl_vendor.d @@ -87,33 +161,75 @@ xvfb-run -a make check V=1 || cat `find . -name test-suite.log` %post -p /sbin/ldconfig - %postun -p /sbin/ldconfig - - %files %doc README.md -%{_libdir}/*.so.* -%{!?_with_mesa_glvnd_default: -%dir %{_libdir}/%{name} -%{_libdir}/%{name}/lib*GL*.so.* -} %dir %{_sysconfdir}/glvnd -%dir %{_sysconfdir}/glvnd/egl_vendor.d %dir %{_datadir}/glvnd -%dir %{_datadir}/glvnd/egl_vendor.d +%{_libdir}/libGLdispatch.so.0* -%files devel +%post opengl -p /sbin/ldconfig +%postun opengl -p /sbin/ldconfig +%files opengl +%{_libdir}/libOpenGL.so.0* + +%post gles -p /sbin/ldconfig +%postun gles -p /sbin/ldconfig +%files gles +%if 0%{?_without_mesa_glvnd_default} +%{_libdir}/%{name}/libGLES*.so.* +%else +%{_libdir}/libGLES*.so.* +%endif + +%post glx -p /sbin/ldconfig +%postun glx -p /sbin/ldconfig +%files glx +%if 0%{?_without_mesa_glvnd_default} +%{_libdir}/%{name}/libGL.so.* +%{_libdir}/%{name}/libGLX.so.* +%else +%{_libdir}/libGL.so.* +%{_libdir}/libGLX.so.* +%endif + +%post egl -p /sbin/ldconfig +%postun egl -p /sbin/ldconfig +%files egl +%dir %{_sysconfdir}/glvnd/egl_vendor.d +%dir %{_datadir}/glvnd/egl_vendor.d +%if 0%{?_without_mesa_glvnd_default} +%{_libdir}/%{name}/libEGL*.so.* +%else +%{_libdir}/libEGL*.so.* +%endif + +%files core-devel %dir %{_includedir}/glvnd %{_includedir}/glvnd/*.h -%{!?_with_mesa_glvnd_default: -%{_libdir}/%{name}/lib*GL*.so -} -%{_libdir}/*.so %{_libdir}/pkgconfig/*.pc +%files devel +%{_libdir}/lib*.so +%if 0%{?_without_mesa_glvnd_default} +%{_libdir}/%{name}/lib*.so +%endif + %changelog +* Wed Jan 11 2017 Hans de Goede - 1:0.2.999-7.gitdc16f8c +- Epoch:1 to provide upgrade path from negativo17.org rpms +- New snapshot +- Add patches to fix building on ARM (from Rob Clark) +- Add BuildRequires: python +- Add ldconfig scriptlets for library sub-packages + +* Wed Jan 11 2017 Adam Jackson +- Don't hide libraries in a subdir (rhbz#1413579) +- Split up libraries to appropriate subpackages +- Make the req/prov filter catch more cases +- Restore libGLESv1 for ABI compliance + * Wed Oct 26 2016 Leigh Scott - 0.2.999-6.git28867bb - Update snapshot - Fix EGL crash for KDE/Plasma (rfbz#4303) diff --git a/sources b/sources index 99bd5a7..14d6065 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -7f361721ca9b1db26ebb40400034c45f libglvnd-28867bb.tar.gz +SHA512 (libglvnd-dc16f8c.tar.gz) = ac236cbf39be47d34c5df05fac720e13425cb1cd27c3d66c1cea5c2c6a337bddfb16851f76c2c6b0888b0b01cd8d2324971d5220b13d4ac0ec24f1a5c3d8177f