summaryrefslogtreecommitdiff
path: root/var
diff options
context:
space:
mode:
Diffstat (limited to 'var')
-rw-r--r--var/spack/repos/builtin/packages/libglvnd-fe/package.py56
-rw-r--r--var/spack/repos/builtin/packages/mesa/package.py46
-rw-r--r--var/spack/repos/builtin/packages/opengl/package.py42
-rw-r--r--var/spack/repos/builtin/packages/paraview/package.py13
4 files changed, 142 insertions, 15 deletions
diff --git a/var/spack/repos/builtin/packages/libglvnd-fe/package.py b/var/spack/repos/builtin/packages/libglvnd-fe/package.py
new file mode 100644
index 0000000000..6f737a9017
--- /dev/null
+++ b/var/spack/repos/builtin/packages/libglvnd-fe/package.py
@@ -0,0 +1,56 @@
+# Copyright 2013-2019 Lawrence Livermore National Security, LLC and other
+# Spack Project Developers. See the top-level COPYRIGHT file for details.
+#
+# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+
+from spack import *
+
+
+class LibglvndFe(BundlePackage):
+ """The GL Vendor-Neutral Dispatch library (Frontend Dummy Package)
+
+ 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."""
+
+ homepage = "https://github.com/NVIDIA/libglvnd"
+
+ version('1.1.1', sha256='71918ed1261e4eece18c0b74b50dc62c0237b8d526e83277ef078554544720b9')
+
+ variant('glx', default=False, description='Provide GLX API')
+ variant('egl', default=False, description='Provide EGL API')
+
+ depends_on('libglvnd')
+
+ depends_on('libglvnd-be-gl')
+ depends_on('libglvnd-be-glx', when='+glx')
+ depends_on('libglvnd-be-egl', when='+egl')
+
+ provides('gl')
+ provides('glx', when='+glx')
+ provides('egl', when='+egl')
+
+ @property
+ def gl_libs(self):
+ return find_libraries('libOpenGL',
+ root=self.spec['libglvnd'].prefix,
+ shared=True,
+ recursive=True)
+
+ @property
+ def glx_libs(self):
+ return find_libraries('libGLX',
+ root=self.spec['libglvnd'].prefix,
+ shared=True,
+ recursive=True)
+
+ @property
+ def egl_libs(self):
+ return find_libraries('libEGL',
+ root=self.spec['libglvnd'].prefix,
+ shared=True,
+ recursive=True)
diff --git a/var/spack/repos/builtin/packages/mesa/package.py b/var/spack/repos/builtin/packages/mesa/package.py
index b277a03d19..94b352d8e2 100644
--- a/var/spack/repos/builtin/packages/mesa/package.py
+++ b/var/spack/repos/builtin/packages/mesa/package.py
@@ -65,9 +65,13 @@ class Mesa(AutotoolsPackage):
variant('opengles', default=False, description="Enable OpenGL ES support.")
# Provides
- provides('gl@4.5', when='+opengl')
- provides('glx@1.4', when='+glx')
- # provides('egl@1.5', when='+egl')
+ provides('gl@4.5', when='+opengl ~glvnd')
+ provides('glx@1.4', when='+glx ~glvnd')
+ # provides('egl@1.5', when='+egl ~glvnd')
+
+ provides('libglvnd-be-gl', when='+glvnd')
+ provides('libglvnd-be-glx', when='+glvnd +glx')
+ # provides('libglvnd-be-egl', when='+glvnd +egl')
# Variant dependencies
depends_on('llvm@6:', when='+llvm')
@@ -179,10 +183,32 @@ class Mesa(AutotoolsPackage):
return args
@property
- def libs(self):
- for dir in ['lib64', 'lib']:
- libs = find_libraries(['libGL', 'libOSMesa'],
- join_path(self.prefix, dir),
- shared=True, recursive=False)
- if libs:
- return libs
+ def gl_libs(self):
+ result = LibraryList(())
+
+ if '~glvnd' in self.spec:
+ result.extend(find_libraries('libGL',
+ root=self.spec.prefix,
+ shared='+shared' in self.spec,
+ recursive=True))
+ return result
+
+ @property
+ def glx_libs(self):
+ result = LibraryList(())
+
+ if '~glvnd' in self.spec:
+ result.extend(find_libraries('libGLX',
+ root=self.spec.prefix,
+ shared='+shared' in self.spec,
+ recursive=True))
+ return result
+
+ def setup_run_environment(self, env):
+ if '+glx +glvnd' in self.spec:
+ env.set('__GLX_VENDOR_LIBRARY_NAME', 'mesa')
+
+ if '+egl +glvnd' in self.spec:
+ env.set('__EGL_VENDOR_LIBRARY_FILENAMES', ':'.join((
+ os.path.join(self.spec.prefix, 'share', 'glvnd',
+ 'egl_vendor.d', '50_mesa.json'))))
diff --git a/var/spack/repos/builtin/packages/opengl/package.py b/var/spack/repos/builtin/packages/opengl/package.py
index 413b8e0f45..572fc04845 100644
--- a/var/spack/repos/builtin/packages/opengl/package.py
+++ b/var/spack/repos/builtin/packages/opengl/package.py
@@ -13,7 +13,14 @@ class Opengl(Package):
homepage = "https://www.opengl.org/"
- provides('gl')
+ variant('glvnd',
+ default=False,
+ description="Expose Graphics APIs through libglvnd")
+
+ variant('glx', default=True, description="Enable GLX API.")
+ variant('egl', default=False, description="Enable EGL API.")
+
+ provides('gl', when='~glvnd')
provides('gl@:4.5', when='@4.5:')
provides('gl@:4.4', when='@4.4:')
provides('gl@:4.3', when='@4.3:')
@@ -33,7 +40,19 @@ class Opengl(Package):
provides('gl@:1.0', when='@1.0:')
if sys.platform != 'darwin':
- provides('glx@1.4')
+ provides('glx@1.4', when='~glvnd +glx')
+
+ # NOTE: This package should have a dependency on libglvnd, but because it
+ # is exclusively provided externally the dependency is never traversed.
+ # depends_on('libglvnd', when='+glvnd') # don't uncomment this
+
+ provides('libglvnd-be-gl', when='+glvnd')
+ provides('libglvnd-be-glx', when='+glvnd +glx')
+ provides('libglvnd-be-egl', when='+glvnd +egl')
+
+ provides('egl@1.5', when='~glvnd +egl')
+
+ depends_on('libglvnd', when='+glvnd')
# Override the fetcher method to throw a useful error message;
# fixes GitHub issue (#7061) in which this package threw a
@@ -80,8 +99,25 @@ class Opengl(Package):
@property
def libs(self):
+ result = LibraryList(())
+
+ # "libs" provided by glvnd; this package sets the environment variables
+ # so that glvnd, in turn, loads this package's libraries at run-time.
+ if '+glvnd' in self.spec:
+ return result
+
for dir in ['lib64', 'lib']:
libs = find_libraries('libGL', join_path(self.prefix, dir),
shared=True, recursive=False)
if libs:
- return libs
+ result.extend(libs)
+ break
+
+ if '+egl' in self.spec:
+ for dir in ['lib64', 'lib']:
+ libs = find_libraries('libEGL', join_path(self.prefix, dir),
+ shared=True, recursive=False)
+ if libs:
+ result.extend(libs)
+ break
+ return result
diff --git a/var/spack/repos/builtin/packages/paraview/package.py b/var/spack/repos/builtin/packages/paraview/package.py
index bb8b140b74..f5195dc2bb 100644
--- a/var/spack/repos/builtin/packages/paraview/package.py
+++ b/var/spack/repos/builtin/packages/paraview/package.py
@@ -49,6 +49,7 @@ class Paraview(CMakePackage, CudaPackage):
description='Builds a shared version of the library')
variant('kits', default=True,
description='Use module kits')
+ variant('egl', default=False, description="Enable EGL")
conflicts('+python', when='+python3')
conflicts('+python', when='@5.6:')
@@ -58,6 +59,9 @@ class Paraview(CMakePackage, CudaPackage):
# See commit: https://gitlab.kitware.com/paraview/paraview/-/commit/798d328c
conflicts('~opengl2', when='@5.5:')
+ conflicts('+egl', when='+osmesa')
+ conflicts('+egl', when='+qt')
+
# Workaround for
# adding the following to your packages.yaml
# packages:
@@ -89,6 +93,10 @@ class Paraview(CMakePackage, CudaPackage):
depends_on('mesa+osmesa', when='+osmesa')
depends_on('gl@3.2:', when='+opengl2')
depends_on('gl@1.2:', when='~opengl2')
+
+ depends_on('glx', when='~osmesa platform=linux')
+ depends_on('egl', when='+egl')
+
depends_on('libxt', when='~osmesa platform=linux')
conflicts('+qt', when='+osmesa')
@@ -208,7 +216,9 @@ class Paraview(CMakePackage, CudaPackage):
cmake_args = [
'-DPARAVIEW_BUILD_QT_GUI:BOOL=%s' % variant_bool('+qt'),
'-DVTK_OPENGL_HAS_OSMESA:BOOL=%s' % variant_bool('+osmesa'),
- '-DVTK_USE_X:BOOL=%s' % nvariant_bool('+osmesa'),
+ '-DVTK_OPENGL_HAS_EGL:BOOL=%s' % variant_bool('+egl'),
+ ('-DVTK_USE_X:BOOL=%s' %
+ variant_bool('~osmesa ~egl platform=linux')),
'-DVTK_RENDERING_BACKEND:STRING=%s' % rendering,
'-DPARAVIEW_INSTALL_DEVELOPMENT_FILES:BOOL=%s' % includes,
'-DBUILD_TESTING:BOOL=OFF',
@@ -272,7 +282,6 @@ class Paraview(CMakePackage, CudaPackage):
if 'darwin' in spec.architecture:
cmake_args.extend([
- '-DVTK_USE_X:BOOL=OFF',
'-DPARAVIEW_DO_UNIX_STYLE_INSTALLS:BOOL=ON',
])