* [Buildroot] [PATCH 1/2 v3] package/libglvnd: new package
2020-06-22 21:03 [Buildroot] [PATCH 0/2 v3] package/libglvnd: introduce the GL vendor-neutral proxy (branch yem/libglvnd) Yann E. MORIN
@ 2020-06-22 21:03 ` Yann E. MORIN
2020-06-22 21:03 ` [Buildroot] [PATCH 2/2 v3] package/mesa3d: make it aware of libglvnd and support it when present Yann E. MORIN
1 sibling, 0 replies; 3+ messages in thread
From: Yann E. MORIN @ 2020-06-22 21:03 UTC (permalink / raw)
To: buildroot
From: Jakub Skrzypnik <jskrzypnik@novomatic-tech.com>
libglvnd is the GL Vendor-Neutral Dispatch library, used to dispatch
GL calls across multiple GL implementations at runtime.
Full GL support, as usual, requires (parts of) the X11 stack: libX11,
libXext, and xorgproto (for glproto). However, with just libX11, it is
possible to do EGL on X11. EGL and GLES have no dependencies.
Note: x11 and glx are 'features', so need to be 'enabled' or 'disabled'
(or 'auto', but we don't care in Buildroot), while egl and gles1/2 are
'booleans', so need to be 'true' or 'false'.
When an actual provider for GL, EGL, or GLES is enabled, so must the
corresponding flavour be enabled in libglvnd. Conversely, when there is
no actual provider, the corresponding support must be disabled in
libglvnd. So we make each flavour selectable with hidden options, which
actual providers will have to select.
The license for libglvnd itself is a custom license by NVidia. It is
pretty close to MIT, but it's different (although Debian does classify
it as MIT); SPDX has no identifier for that license either. As such, we
choose to just identify it as 'libglvnd license', and let users deal
that with their legal department. Additionally, libglvnd bundles some
code from other projects, so we list them explicitly as well.
Signed-off-by: Jakub Skrzypnik <jskrzypnik@novomatic-tech.com>
[yann.morin.1998 at free.fr:
- provide help text
- don't force X11 libraries, split them between X11 and full GL
- make each flavour selectable
- fix make check-package issues
- fix and complete licensing information
- expand commit log
]
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
---
package/Config.in | 1 +
package/libglvnd/Config.in | 42 +++++++++++++++++++++++++++
package/libglvnd/libglvnd.hash | 7 +++++
package/libglvnd/libglvnd.mk | 53 ++++++++++++++++++++++++++++++++++
4 files changed, 103 insertions(+)
create mode 100644 package/libglvnd/Config.in
create mode 100644 package/libglvnd/libglvnd.hash
create mode 100644 package/libglvnd/libglvnd.mk
diff --git a/package/Config.in b/package/Config.in
index e2bb004015..9c6b994549 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -310,6 +310,7 @@ comment "Graphic libraries"
source "package/fbv/Config.in"
source "package/freerdp/Config.in"
source "package/imagemagick/Config.in"
+ source "package/libglvnd/Config.in"
source "package/linux-fusion/Config.in"
source "package/lite/Config.in"
source "package/mesa3d/Config.in"
diff --git a/package/libglvnd/Config.in b/package/libglvnd/Config.in
new file mode 100644
index 0000000000..680479a19b
--- /dev/null
+++ b/package/libglvnd/Config.in
@@ -0,0 +1,42 @@
+config BR2_PACKAGE_LIBGLVND
+ bool "libglvnd"
+ help
+ The GL Vendor-Neutral Dispatch library
+
+ libglvnd is a vendor-neutral dispatch layer for arbitrating
+ OpenGL API calls between multiple vendors. It allows multiple
+ drivers from different vendors to coexist on the same
+ filesystem, and determines which vendor to dispatch each API
+ call to at runtime.
+
+ Both GLX and EGL are supported, in any combination with OpenGL
+ and OpenGL ES.
+
+if BR2_PACKAGE_LIBGLVND
+
+config BR2_PACKAGE_LIBGLVND_DISPATCH_GL
+ bool
+ depends on BR2_PACKAGE_XORG7 # libx11, libXext, xorgproto
+ select BR2_PACKAGE_XLIB_LIBX11
+ select BR2_PACKAGE_XLIB_LIBXEXT
+ select BR2_PACKAGE_XLIB_XORGPROTO
+ select BR2_PACKAGE_HAS_LIBGL
+
+config BR2_PACKAGE_LIBGLVND_DISPATCH_EGL
+ bool
+ select BR2_PACKAGE_HAS_LIBEGL
+
+config BR2_PACKAGE_LIBGLVND_DISPATCH_GLES
+ bool
+ select BR2_PACKAGE_HAS_LIBGLES
+
+config BR2_PACKAGE_PROVIDES_LIBGL
+ default "libglvnd" if BR2_PACKAGE_LIBGLVND_DISPATCH_GL
+
+config BR2_PACKAGE_PROVIDES_LIBEGL
+ default "libglvnd" if BR2_PACKAGE_LIBGLVND_DISPATCH_EGL
+
+config BR2_PACKAGE_PROVIDES_LIBGLES
+ default "libglvnd" if BR2_PACKAGE_LIBGLVND_DISPATCH_GLES
+
+endif
diff --git a/package/libglvnd/libglvnd.hash b/package/libglvnd/libglvnd.hash
new file mode 100644
index 0000000000..1b13c5738e
--- /dev/null
+++ b/package/libglvnd/libglvnd.hash
@@ -0,0 +1,7 @@
+# Locally computed
+sha256 b26c931ff79feced0d1ac69332797a08427308fa85541282ee9995680c880b24 libglvnd-v1.3.1.tar.gz
+
+# Locally computed hashes for license files
+sha256 224534547628a9e5e889d8808385bd38839e6bdb77d89c90ac04dad6891a4f5f README.md
+sha256 bebdc0fd27cd37af8406e47af23c113866b7856c3f7349ffcbc672029ec8acf7 src/util/uthash/LICENSE
+sha256 f6f207863675ca5a5128fd120b9aef4f4bbab73ffa57e5f771ccffc8e3cc56b7 src/util/cJSON/LICENSE
diff --git a/package/libglvnd/libglvnd.mk b/package/libglvnd/libglvnd.mk
new file mode 100644
index 0000000000..917e03a7f7
--- /dev/null
+++ b/package/libglvnd/libglvnd.mk
@@ -0,0 +1,53 @@
+################################################################################
+#
+# libglvnd
+#
+################################################################################
+
+LIBGLVND_VERSION = 1.3.1
+LIBGLVND_SOURCE = libglvnd-v$(LIBGLVND_VERSION).tar.gz
+LIBGLVND_SITE = https://gitlab.freedesktop.org/glvnd/libglvnd/-/archive/v$(LIBGLVND_VERSION)
+
+LIBGLVND_LICENSE = \
+ libglvnd license, \
+ Apache-2.0 (Khronos headers), \
+ MIT (Xorg; mesa; cJSON), \
+ BSD-1=Clause (uthash)
+
+LIBGLVND_LICENSE_FILES = \
+ README.md \
+ src/util/uthash/LICENSE \
+ src/util/cJSON/LICENSE
+
+LIBGLVND_INSTALL_STAGING = YES
+
+ifeq ($(BR2_PACKAGE_XLIB_LIBX11),y)
+LIBGLVND_DEPENDENCIES += xlib_libX11
+LIBGLVND_CONF_OPTS += -Dx11=enabled
+else
+LIBGLVND_CONF_OPTS += -Dx11=disabled
+endif
+
+ifeq ($(BR2_PACKAGE_LIBGLVND_DISPATCH_GL),y)
+LIBGLVND_DEPENDENCIES += xlib_libXext xorgproto
+LIBGLVND_CONF_OPTS += -Dglx=enabled
+LIBGLVND_PROVIDES += libgl
+else
+LIBGLVND_CONF_OPTS += -Dglx=disabled
+endif
+
+ifeq ($(BR2_PACKAGE_LIBGLVND_DISPATCH_EGL),y)
+LIBGLVND_CONF_OPTS = -Degl=true
+LIBGLVND_PROVIDES += libegl
+else
+LIBGLVND_CONF_OPTS = -Degl=false
+endif
+
+ifeq ($(BR2_PACKAGE_LIBGLVND_DISPATCH_GLES),y)
+LIBGLVND_CONF_OPTS = -Dgles1=true -Dgles2=true
+LIBGLVND_PROVIDES += libgles
+else
+LIBGLVND_CONF_OPTS = -Dgles1=false -Dgles2=false
+endif
+
+$(eval $(meson-package))
--
2.20.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [Buildroot] [PATCH 2/2 v3] package/mesa3d: make it aware of libglvnd and support it when present
2020-06-22 21:03 [Buildroot] [PATCH 0/2 v3] package/libglvnd: introduce the GL vendor-neutral proxy (branch yem/libglvnd) Yann E. MORIN
2020-06-22 21:03 ` [Buildroot] [PATCH 1/2 v3] package/libglvnd: new package Yann E. MORIN
@ 2020-06-22 21:03 ` Yann E. MORIN
1 sibling, 0 replies; 3+ messages in thread
From: Yann E. MORIN @ 2020-06-22 21:03 UTC (permalink / raw)
To: buildroot
From: Jakub Skrzypnik <jskrzypnik@novomatic-tech.com>
When libglvnd is enabled, mesa3d must be told so, so as it installs its
libraries with the vendor suffix (e.g. libEGL_mesa.so instead of
libEGL.so).
Additionally, the provider (in Buildroot parlance) is libglvnd, not mesa3d.
Signed-off-by: Jakub Skrzypnik <jskrzypnik@novomatic-tech.com>
[yann.morin.1998 at free.fr:
- don't override the _PROVIDES variable, only assign when needed
]
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
---
package/mesa3d/Config.in | 15 +++++++++------
package/mesa3d/mesa3d.mk | 15 +++++++++++----
2 files changed, 20 insertions(+), 10 deletions(-)
diff --git a/package/mesa3d/Config.in b/package/mesa3d/Config.in
index 11d04b7a3f..5417aeda1a 100644
--- a/package/mesa3d/Config.in
+++ b/package/mesa3d/Config.in
@@ -422,7 +422,8 @@ comment "gbm support needs a dri driver or a gallium driver w/ EGL support."
config BR2_PACKAGE_MESA3D_OPENGL_GLX
bool "OpenGL GLX"
depends on BR2_PACKAGE_XORG7
- select BR2_PACKAGE_HAS_LIBGL
+ select BR2_PACKAGE_HAS_LIBGL if !BR2_PACKAGE_LIBGLVND
+ select BR2_PACKAGE_LIBGLVND_DISPATCH_GL if BR2_PACKAGE_LIBGLVND
select BR2_PACKAGE_MESA3D_NEEDS_X11
help
Enable GLX graphic acceleration (OpenGL + X11).
@@ -432,7 +433,8 @@ comment "OpenGL GLX support needs X11"
config BR2_PACKAGE_MESA3D_OPENGL_EGL
bool "OpenGL EGL"
- select BR2_PACKAGE_HAS_LIBEGL
+ select BR2_PACKAGE_HAS_LIBEGL if !BR2_PACKAGE_LIBGLVND
+ select BR2_PACKAGE_LIBGLVND_DISPATCH_EGL if BR2_PACKAGE_LIBGLVND
select BR2_PACKAGE_HAS_LIBEGL_WAYLAND
select BR2_PACKAGE_MESA3D_GBM
help
@@ -441,7 +443,8 @@ config BR2_PACKAGE_MESA3D_OPENGL_EGL
config BR2_PACKAGE_MESA3D_OPENGL_ES
bool "OpenGL ES"
- select BR2_PACKAGE_HAS_LIBGLES
+ select BR2_PACKAGE_HAS_LIBGLES if !BR2_PACKAGE_LIBGLVND
+ select BR2_PACKAGE_LIBGLVND_DISPATCH_GLES if BR2_PACKAGE_LIBGLVND
help
Use the Khronos OpenGL ES APIs. This is commonly used on
embedded systems and represents a subset of the OpenGL API.
@@ -449,13 +452,13 @@ config BR2_PACKAGE_MESA3D_OPENGL_ES
endif # BR2_PACKAGE_MESA3D_DRIVER
config BR2_PACKAGE_PROVIDES_LIBGL
- default "mesa3d" if BR2_PACKAGE_MESA3D_OPENGL_GLX
+ default "mesa3d" if BR2_PACKAGE_MESA3D_OPENGL_GLX && !BR2_PACKAGE_LIBGLVND
config BR2_PACKAGE_PROVIDES_LIBEGL
- default "mesa3d" if BR2_PACKAGE_MESA3D_OPENGL_EGL
+ default "mesa3d" if BR2_PACKAGE_MESA3D_OPENGL_EGL && !BR2_PACKAGE_LIBGLVND
config BR2_PACKAGE_PROVIDES_LIBGLES
- default "mesa3d" if BR2_PACKAGE_MESA3D_OPENGL_ES
+ default "mesa3d" if BR2_PACKAGE_MESA3D_OPENGL_ES && !BR2_PACKAGE_LIBGLVND
config BR2_PACKAGE_PROVIDES_LIBOPENCL
default "mesa3d" if BR2_PACKAGE_MESA3D_OPENCL
diff --git a/package/mesa3d/mesa3d.mk b/package/mesa3d/mesa3d.mk
index 4e083979cc..2f61b4d219 100644
--- a/package/mesa3d/mesa3d.mk
+++ b/package/mesa3d/mesa3d.mk
@@ -162,9 +162,9 @@ MESA3D_CONF_OPTS += -Dopengl=true
# we do not need libva support in mesa3d, therefore disable this option
MESA3D_CONF_OPTS += -Dgallium-va=false
-# libGL is only provided for a full xorg stack
+# libGL is only provided for a full xorg stack, without libglvnd
ifeq ($(BR2_PACKAGE_MESA3D_OPENGL_GLX),y)
-MESA3D_PROVIDES += libgl
+MESA3D_PROVIDES += $(if $(BR2_PACKAGE_LIBGLVND),,libgl)
else
define MESA3D_REMOVE_OPENGL_HEADERS
rm -rf $(STAGING_DIR)/usr/include/GL/
@@ -224,7 +224,7 @@ MESA3D_CONF_OPTS += \
endif
ifeq ($(BR2_PACKAGE_MESA3D_OPENGL_EGL),y)
-MESA3D_PROVIDES += libegl
+MESA3D_PROVIDES += $(if $(BR2_PACKAGE_LIBGLVND),,libegl)
MESA3D_CONF_OPTS += \
-Degl=true
else
@@ -233,7 +233,7 @@ MESA3D_CONF_OPTS += \
endif
ifeq ($(BR2_PACKAGE_MESA3D_OPENGL_ES),y)
-MESA3D_PROVIDES += libgles
+MESA3D_PROVIDES += $(if $(BR2_PACKAGE_LIBGLVND),,libgles)
MESA3D_CONF_OPTS += -Dgles1=true -Dgles2=true
else
MESA3D_CONF_OPTS += -Dgles1=false -Dgles2=false
@@ -281,4 +281,11 @@ else
MESA3D_CONF_OPTS += -Dzstd=false
endif
+ifeq ($(BR2_PACKAGE_LIBGLVND),y)
+MESA3D_DEPENDENCIES += libglvnd
+MESA3D_CONF_OPTS += -Dglvnd=true
+else
+MESA3D_CONF_OPTS += -Dglvnd=false
+endif
+
$(eval $(meson-package))
--
2.20.1
^ permalink raw reply related [flat|nested] 3+ messages in thread