This reverts commit 573489db71
.
This commit is contained in:
parent
cdab4bdee0
commit
547c71ad78
@ -23,12 +23,8 @@ packages:
|
||||
daal: [intel-daal]
|
||||
elf: [elfutils]
|
||||
fftw-api: [fftw]
|
||||
gl: [libglvnd-fe, mesa+opengl~glvnd, opengl~glvnd]
|
||||
glx: [libglvnd-fe+glx, mesa+glx~glvnd, opengl+glx~glvnd]
|
||||
egl: [libglvnd-fe+egl, opengl+egl~glvnd]
|
||||
libglvnd-be-gl: [mesa+glvnd, opengl+glvnd]
|
||||
libglvnd-be-glx: [mesa+glx+glvnd, opengl+glx+glvnd]
|
||||
libglvnd-be-egl: [opengl+egl+glvnd]
|
||||
gl: [mesa+opengl, opengl]
|
||||
glx: [mesa+glx, opengl]
|
||||
glu: [mesa-glu, openglu]
|
||||
golang: [gcc]
|
||||
iconv: [libiconv]
|
||||
|
@ -812,100 +812,6 @@ to add the following to ``packages.yaml``:
|
||||
from other dependencies. This ensures that binaries in Spack dependencies
|
||||
are preferred over system binaries.
|
||||
|
||||
^^^^^^
|
||||
OpenGL
|
||||
^^^^^^
|
||||
|
||||
To use hardware-accelerated rendering from a system-supplied OpenGL driver,
|
||||
add something like the following to your ``packages`` configuration:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
packages:
|
||||
opengl:
|
||||
paths:
|
||||
opengl+glx@4.5: /usr
|
||||
buildable: False
|
||||
all:
|
||||
providers:
|
||||
gl: [opengl]
|
||||
glx: [opengl]
|
||||
|
||||
For `EGL <https://www.khronos.org/egl>` support, or for certain modern drivers,
|
||||
OpenGL calls are dispatched dynamically at run time to the hardware graphics
|
||||
implementation. This dynamic dispatch is performed using `libglvnd
|
||||
<https://github.com/NVIDIA/libglvnd>`. In this mode, the graphics library
|
||||
(e.g.: opengl) must be built to work with libglvnd. Applications then link
|
||||
against libglvnd instead of the underlying implementation. Environment
|
||||
variables set at run time govern the process by which libglvnd loads the
|
||||
underlying implementation and dispatches calls to it. See `this
|
||||
<https://github.com/NVIDIA/libglvnd/issues/177#issuecomment-496562769>` comment
|
||||
for details on loading a specific GLX implementation and `this
|
||||
<https://github.com/NVIDIA/libglvnd/blob/master/src/EGL/icd_enumeration.md>`
|
||||
page for information about EGL ICD enumeration.
|
||||
|
||||
This codependency between libglvnd and the underlying implementation is modeled
|
||||
in Spack with two packages for libglvnd: libglvnd, which provides libglvnd
|
||||
proper; and libglvnd-fe, a bundle package that depends on libglvnd and an
|
||||
implementation. Implementations that work through libglvnd are no longer
|
||||
providers for graphics virtual dependencies, like "gl" or "glx", but instead
|
||||
provide libglvnd versions of these dependencies ("libglvnd-be-gl",
|
||||
"libglvnd-be-glx", etc.). The libglvnd-fe package depends on these
|
||||
"libglvnd-be-..." virtual packages, which provide the actual implementation.
|
||||
It also depends on libglvnd, itself, and exposes its libraries to downstream
|
||||
applications. For correct operation, the Spack package for the underlying
|
||||
implementation has to set the runtime environment to ensure that it is loaded
|
||||
when an application linked against libglvnd runs. This last detail is
|
||||
important for users who want to set up an external OpenGL implementation that
|
||||
requires libglvnd to work. This setup requires modifying the ``modules``
|
||||
configuration so that modules generated for the external OpenGL implementation
|
||||
set the necessary environment variables.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
packages:
|
||||
opengl:
|
||||
paths:
|
||||
opengl@4.5+glx+egl+glvnd: /does/not/exist
|
||||
buildable: False
|
||||
variants:+glx+egl+glvnd
|
||||
libglvnd-fe:
|
||||
variants:+gl+glx+egl
|
||||
all:
|
||||
providers:
|
||||
glvnd-be-gl: [opengl]
|
||||
glvnd-be-glx: [opengl]
|
||||
glvnd-be-egl: [opengl]
|
||||
gl: [libglvnd-fe]
|
||||
glx: [libglvnd-fe]
|
||||
egl: [libglvnd-fe]
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
modules:
|
||||
tcl:
|
||||
opengl@4.5+glx+glvnd:
|
||||
environment:
|
||||
set:
|
||||
__GLX_VENDOR_LIBRARY_NAME: nvidia
|
||||
opengl@4.5+egl+glvnd:
|
||||
environment:
|
||||
set:
|
||||
__EGL_VENDOR_LIBRARY_FILENAMES: /usr/share/glvnd/egl_vendor.d/10_nvidia.json
|
||||
|
||||
One final detail about the above example is that it avoids setting the true
|
||||
root of the external OpenGL implementation, instead opting to set it to a path
|
||||
that is not expected to exist on the system. This is done for two reasons.
|
||||
First, Spack would add directories under this root to environment variables
|
||||
that would affect the process of building and installing other packages, such
|
||||
as ``PATH`` and ``PKG_CONFIG_PATH``. These additions may potentially prevent
|
||||
those packages from installing successfully, and this risk is especially great
|
||||
for paths that house many libraries and applications, like ``/usr``. Second,
|
||||
providing the true root of the external implementation in the ``packages``
|
||||
configuration is not necessary because libglvnd need only the environment
|
||||
variables set above in the ``modules`` configuration to determine what OpenGL
|
||||
implementation to dispatch calls to at run time.
|
||||
|
||||
^^^
|
||||
Git
|
||||
^^^
|
||||
|
@ -1,56 +0,0 @@
|
||||
# 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)
|
@ -65,13 +65,9 @@ class Mesa(AutotoolsPackage):
|
||||
variant('opengles', default=False, description="Enable OpenGL ES support.")
|
||||
|
||||
# Provides
|
||||
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')
|
||||
provides('gl@4.5', when='+opengl')
|
||||
provides('glx@1.4', when='+glx')
|
||||
# provides('egl@1.5', when='+egl')
|
||||
|
||||
# Variant dependencies
|
||||
depends_on('llvm@6:', when='+llvm')
|
||||
@ -183,32 +179,10 @@ def configure_args(self):
|
||||
return args
|
||||
|
||||
@property
|
||||
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'))))
|
||||
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
|
||||
|
@ -13,14 +13,7 @@ class Opengl(Package):
|
||||
|
||||
homepage = "https://www.opengl.org/"
|
||||
|
||||
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')
|
||||
provides('gl@:4.5', when='@4.5:')
|
||||
provides('gl@:4.4', when='@4.4:')
|
||||
provides('gl@:4.3', when='@4.3:')
|
||||
@ -40,19 +33,7 @@ class Opengl(Package):
|
||||
provides('gl@:1.0', when='@1.0:')
|
||||
|
||||
if sys.platform != 'darwin':
|
||||
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')
|
||||
provides('glx@1.4')
|
||||
|
||||
# Override the fetcher method to throw a useful error message;
|
||||
# fixes GitHub issue (#7061) in which this package threw a
|
||||
@ -99,25 +80,8 @@ def fetcher(self):
|
||||
|
||||
@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:
|
||||
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
|
||||
return libs
|
||||
|
@ -49,7 +49,6 @@ 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:')
|
||||
@ -59,9 +58,6 @@ 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:
|
||||
@ -93,10 +89,6 @@ 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')
|
||||
|
||||
@ -216,9 +208,7 @@ def nvariant_bool(feature):
|
||||
cmake_args = [
|
||||
'-DPARAVIEW_BUILD_QT_GUI:BOOL=%s' % variant_bool('+qt'),
|
||||
'-DVTK_OPENGL_HAS_OSMESA:BOOL=%s' % variant_bool('+osmesa'),
|
||||
'-DVTK_OPENGL_HAS_EGL:BOOL=%s' % variant_bool('+egl'),
|
||||
('-DVTK_USE_X:BOOL=%s' %
|
||||
variant_bool('~osmesa ~egl platform=linux')),
|
||||
'-DVTK_USE_X:BOOL=%s' % nvariant_bool('+osmesa'),
|
||||
'-DVTK_RENDERING_BACKEND:STRING=%s' % rendering,
|
||||
'-DPARAVIEW_INSTALL_DEVELOPMENT_FILES:BOOL=%s' % includes,
|
||||
'-DBUILD_TESTING:BOOL=OFF',
|
||||
@ -282,6 +272,7 @@ def nvariant_bool(feature):
|
||||
|
||||
if 'darwin' in spec.architecture:
|
||||
cmake_args.extend([
|
||||
'-DVTK_USE_X:BOOL=OFF',
|
||||
'-DPARAVIEW_DO_UNIX_STYLE_INSTALLS:BOOL=ON',
|
||||
])
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user