summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--etc/spack/defaults/packages.yaml5
-rw-r--r--var/spack/repos/builtin/packages/catalyst/package.py2
-rw-r--r--var/spack/repos/builtin/packages/mesa/package.py204
-rw-r--r--var/spack/repos/builtin/packages/mesa18/autotools-x11-nodri.patch (renamed from var/spack/repos/builtin/packages/mesa/autotools-x11-nodri.patch)0
-rw-r--r--var/spack/repos/builtin/packages/mesa18/multiple-symbols_hash.patch (renamed from var/spack/repos/builtin/packages/mesa/multiple-symbols_hash.patch)0
-rw-r--r--var/spack/repos/builtin/packages/mesa18/package.py229
-rw-r--r--var/spack/repos/builtin/packages/paraview/package.py2
-rw-r--r--var/spack/repos/builtin/packages/vtk/package.py2
8 files changed, 348 insertions, 96 deletions
diff --git a/etc/spack/defaults/packages.yaml b/etc/spack/defaults/packages.yaml
index 2e2f263f60..80cc68ef9d 100644
--- a/etc/spack/defaults/packages.yaml
+++ b/etc/spack/defaults/packages.yaml
@@ -23,8 +23,8 @@ packages:
daal: [intel-daal]
elf: [elfutils]
fftw-api: [fftw]
- gl: [mesa+opengl, opengl]
- glx: [mesa+glx, opengl]
+ gl: [mesa+opengl, mesa18+opengl, opengl]
+ glx: [mesa+glx, mesa18+glx, opengl]
glu: [mesa-glu, openglu]
golang: [gcc]
iconv: [libiconv]
@@ -38,6 +38,7 @@ packages:
mpi: [openmpi, mpich]
mysql-client: [mysql, mariadb-c-client]
opencl: [pocl]
+ osmesa: [mesa+osmesa, mesa18+osmesa]
pil: [py-pillow]
pkgconfig: [pkgconf, pkg-config]
rpc: [libtirpc]
diff --git a/var/spack/repos/builtin/packages/catalyst/package.py b/var/spack/repos/builtin/packages/catalyst/package.py
index 1a2967926d..5806b0cd75 100644
--- a/var/spack/repos/builtin/packages/catalyst/package.py
+++ b/var/spack/repos/builtin/packages/catalyst/package.py
@@ -70,7 +70,7 @@ class Catalyst(CMakePackage):
depends_on('py-mpi4py', when='+python3+mpi', type=('build', 'run'))
depends_on('gl@3.2:', when='+rendering')
- depends_on('mesa+osmesa', when='+rendering+osmesa')
+ depends_on('osmesa', when='+rendering+osmesa')
depends_on('glx', when='+rendering~osmesa')
depends_on('cmake@3.3:', type='build')
diff --git a/var/spack/repos/builtin/packages/mesa/package.py b/var/spack/repos/builtin/packages/mesa/package.py
index 779dbeac7c..e2da830f72 100644
--- a/var/spack/repos/builtin/packages/mesa/package.py
+++ b/var/spack/repos/builtin/packages/mesa/package.py
@@ -8,41 +8,34 @@ from spack import *
import sys
-class Mesa(AutotoolsPackage):
+class Mesa(MesonPackage):
"""Mesa is an open-source implementation of the OpenGL specification
- a system for rendering interactive 3D graphics."""
homepage = "http://www.mesa3d.org"
- maintainers = ['v-dobrev']
+ maintainers = ['chuckatkins', 'v-dobrev']
- # Note that we always want to build from the git repo instead of a
- # tarball since the tarball has pre-generated files for certain versions
- # of LLVM while the git repo doesn't so it can adapt at build time to
- # whatever version of LLVM you're using.
- git = "https://gitlab.freedesktop.org/mesa/mesa.git"
+ git = "https://gitlab.freedesktop.org/mesa/mesa.git"
+ url = "https://archive.mesa3d.org/mesa-20.2.1.tar.xz"
- version('18.3.6', tag='mesa-18.3.6', preferred=True)
+ version('master', tag='master')
+ version('20.2.1', sha256='d1a46d9a3f291bc0e0374600bdcb59844fa3eafaa50398e472a36fc65fd0244a')
+
+ depends_on('meson@0.52:', type='build')
- depends_on('autoconf', type='build')
- depends_on('automake', type='build')
- depends_on('libtool', type='build')
- depends_on('m4', type='build')
depends_on('pkgconfig', type='build')
depends_on('binutils', when=(sys.platform != 'darwin'), type='build')
depends_on('bison', type='build')
depends_on('flex', type='build')
depends_on('gettext', type='build')
- depends_on('pkgconfig', type='build')
- depends_on('python', type='build')
+ depends_on('python@3:', type='build')
depends_on('py-mako@0.8.0:', type='build')
- depends_on('libxml2')
- depends_on('zlib')
- depends_on('expat')
- depends_on('ncurses+termlib')
# Internal options
variant('llvm', default=True, description="Enable LLVM.")
- variant('swr', values=any_combination_of('avx', 'avx2', 'knl', 'skx'),
+ variant('swr', default='auto',
+ values=('auto', 'none', 'avx', 'avx2', 'knl', 'skx'),
+ multi=True,
description="Enable the SWR driver.")
# conflicts('~llvm', when='~swr=none')
@@ -68,124 +61,153 @@ class Mesa(AutotoolsPackage):
provides('gl@4.5', when='+opengl')
provides('glx@1.4', when='+glx')
# provides('egl@1.5', when='+egl')
+ provides('osmesa', when='+osmesa')
# Variant dependencies
- depends_on('llvm@6:10', when='+llvm')
+ depends_on('llvm@6:', when='+llvm')
depends_on('libx11', when='+glx')
depends_on('libxcb', when='+glx')
depends_on('libxext', when='+glx')
+ depends_on('libxt', when='+glx')
+ depends_on('xrandr', when='+glx')
depends_on('glproto@1.4.14:', when='+glx', type='build')
- # Prevent an unnecessary xcb-dri dependency
- patch('autotools-x11-nodri.patch')
-
- # Backport Mesa MR#6053 to prevent multiply-defined symbols
- patch('multiple-symbols_hash.patch', when='@:20.1.4%gcc@10:')
-
- def autoreconf(self, spec, prefix):
- which('autoreconf')('--force', '--verbose', '--install')
-
- def configure_args(self):
+ def meson_args(self):
spec = self.spec
args = [
- 'LDFLAGS={0}'.format(self.spec['ncurses'].libs.search_flags),
- '--enable-shared',
- '--disable-static',
- '--disable-libglvnd',
- '--disable-nine',
- '--disable-omx-bellagio',
- '--disable-omx-tizonia',
- '--disable-opencl',
- '--disable-opencl-icd',
- '--disable-va',
- '--disable-vdpau',
- '--disable-xa',
- '--disable-xvmc',
- '--disable-osmesa',
- '--with-vulkan-drivers=']
+ '-Dvulkan-drivers=',
+ '-Dgallium-vdpau=disabled',
+ '-Dgallium-xvmc=disabled',
+ '-Dgallium-omx=disabled',
+ '-Dgallium-va=disabled',
+ '-Dgallium-xa=disabled',
+ '-Dgallium-nine=false',
+ '-Dgallium-opencl=disabled',
+ '-Dbuild-tests=false',
+ '-Dglvnd=false']
args_platforms = []
args_gallium_drivers = ['swrast']
args_dri_drivers = []
+ opt_enable = lambda c, o: '-D%s=%sabled' % (o, 'en' if c else 'dis')
+ opt_bool = lambda c, o: '-D%s=%s' % (o, str(c).lower())
if spec.target.family == 'arm' or spec.target.family == 'aarch64':
- args.append('--disable-libunwind')
+ args.append('-Dlibunwind=disabled')
num_frontends = 0
if '+osmesa' in spec:
num_frontends += 1
- args.append('--enable-gallium-osmesa')
+ args.append('-Dosmesa=gallium')
else:
- args.append('--disable-gallium-osmesa')
+ args.append('-Dosmesa=none')
if '+glx' in spec:
num_frontends += 1
if '+egl' in spec:
- args.append('--enable-glx=dri')
+ args.append('-Dglx=dri')
else:
- args.append('--enable-glx=gallium-xlib')
+ args.append('-Dglx=gallium-xlib')
args_platforms.append('x11')
else:
- args.append('--disable-glx')
+ args.append('-Dglx=disabled')
if '+egl' in spec:
num_frontends += 1
- args.extend(['--enable-egl', '--enable-gbm', '--enable-dri'])
+ args.extend(['-Degl=enabled', '-Dgbm=enabled', '-Ddri3=enabled'])
args_platforms.append('surfaceless')
else:
- args.extend(['--disable-egl', '--disable-gbm', '--disable-dri'])
+ args.extend(
+ ['-Degl=disabled', '-Dgbm=disabled', '-Ddri3=disabled'])
- if '+opengl' in spec:
- args.append('--enable-opengl')
- else:
- args.append('--disable-opengl')
+ args.append(opt_bool('+opengl' in spec, 'opengl'))
+ args.append(opt_enable('+opengles' in spec, 'gles1'))
+ args.append(opt_enable('+opengles' in spec, 'gles2'))
- if '+opengles' in spec:
- args.extend(['--enable-gles1', '--enable-gles2'])
- else:
- args.extend(['--disable-gles1', '--disable-gles2'])
-
- if num_frontends > 1:
- args.append('--enable-shared-glapi')
- else:
- args.append('--disable-shared-glapi')
+ args.append(opt_enable(num_frontends > 1, 'shared-glapi'))
if '+llvm' in spec:
- args.append('--enable-llvm')
- args.append('--with-llvm-prefix=%s' % spec['llvm'].prefix)
- if '+link_dylib' in spec['llvm']:
- args.append('--enable-llvm-shared-libs')
- else:
- args.append('--disable-llvm-shared-libs')
+ args.append('-Dllvm=enabled')
+ args.append(opt_enable(
+ '+link_dylib' in spec['llvm'], 'shared-llvm'))
else:
- args.append('--disable-llvm')
+ args.append('-Dllvm=disabled')
args_swr_arches = []
- if 'swr=avx' in spec:
- args_swr_arches.append('avx')
- if 'swr=avx2' in spec:
- args_swr_arches.append('avx2')
- if 'swr=knl' in spec:
- args_swr_arches.append('knl')
- if 'swr=skx' in spec:
- args_swr_arches.append('skx')
+ if 'swr=auto' in spec:
+ if 'avx' in spec.target:
+ args_swr_arches.append('avx')
+ if 'avx2' in spec.target:
+ args_swr_arches.append('avx2')
+ if 'avx512f' in spec.target:
+ if 'avx512er' in spec.target:
+ args_swr_arches.append('knl')
+ if 'avx512bw' in spec.target:
+ args_swr_arches.append('skx')
+ else:
+ if 'swr=avx' in spec:
+ args_swr_arches.append('avx')
+ if 'swr=avx2' in spec:
+ args_swr_arches.append('avx2')
+ if 'swr=knl' in spec:
+ args_swr_arches.append('knl')
+ if 'swr=skx' in spec:
+ args_swr_arches.append('skx')
+
if args_swr_arches:
if '+llvm' not in spec:
raise SpecError('Variant swr requires +llvm')
args_gallium_drivers.append('swr')
- args.append('--with-swr-archs=' + ','.join(args_swr_arches))
+ args.append('-Dswr-arches=' + ','.join(args_swr_arches))
# Add the remaining list args
- args.append('--with-platforms=' + ','.join(args_platforms))
- args.append('--with-gallium-drivers=' + ','.join(args_gallium_drivers))
- args.append('--with-dri-drivers=' + ','.join(args_dri_drivers))
+ args.append('-Dplatforms=' + ','.join(args_platforms))
+ args.append('-Dgallium-drivers=' + ','.join(args_gallium_drivers))
+ args.append('-Ddri-drivers=' + ','.join(args_dri_drivers))
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
+ spec = self.spec
+ libs_to_seek = set()
+
+ if '+osmesa' in spec:
+ libs_to_seek.add('libOSMesa')
+
+ if '+glx' in spec:
+ libs_to_seek.add('libGL')
+
+ if '+opengl' in spec:
+ libs_to_seek.add('libGL')
+
+ if '+opengles' in spec:
+ libs_to_seek.add('libGLES')
+ libs_to_seek.add('libGLES2')
+
+ if libs_to_seek:
+ return find_libraries(list(libs_to_seek),
+ root=self.spec.prefix,
+ shared='+shared' in self.spec,
+ recursive=True)
+ return LibraryList()
+
+ @property
+ def osmesa_libs(self):
+ return find_libraries('libOSMesa',
+ root=self.spec.prefix,
+ shared='+shared' in self.spec,
+ recursive=True)
+
+ @property
+ def glx_libs(self):
+ return find_libraries('libGL',
+ root=self.spec.prefix,
+ shared='+shared' in self.spec,
+ recursive=True)
+
+ @property
+ def gl_libs(self):
+ return find_libraries('libGL',
+ root=self.spec.prefix,
+ shared='+shared' in self.spec,
+ recursive=True)
diff --git a/var/spack/repos/builtin/packages/mesa/autotools-x11-nodri.patch b/var/spack/repos/builtin/packages/mesa18/autotools-x11-nodri.patch
index a88f5f5113..a88f5f5113 100644
--- a/var/spack/repos/builtin/packages/mesa/autotools-x11-nodri.patch
+++ b/var/spack/repos/builtin/packages/mesa18/autotools-x11-nodri.patch
diff --git a/var/spack/repos/builtin/packages/mesa/multiple-symbols_hash.patch b/var/spack/repos/builtin/packages/mesa18/multiple-symbols_hash.patch
index 7c92326f37..7c92326f37 100644
--- a/var/spack/repos/builtin/packages/mesa/multiple-symbols_hash.patch
+++ b/var/spack/repos/builtin/packages/mesa18/multiple-symbols_hash.patch
diff --git a/var/spack/repos/builtin/packages/mesa18/package.py b/var/spack/repos/builtin/packages/mesa18/package.py
new file mode 100644
index 0000000000..10d4275c6c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mesa18/package.py
@@ -0,0 +1,229 @@
+# Copyright 2013-2020 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 *
+
+import sys
+
+
+class Mesa18(AutotoolsPackage):
+ """Mesa is an open-source implementation of the OpenGL specification
+ - a system for rendering interactive 3D graphics."""
+
+ homepage = "http://www.mesa3d.org"
+ maintainers = ['v-dobrev', 'chuckatkins']
+
+ # Note that we always want to build from the git repo instead of a
+ # tarball since the tarball has pre-generated files for certain versions
+ # of LLVM while the git repo doesn't so it can adapt at build time to
+ # whatever version of LLVM you're using.
+ git = "https://gitlab.freedesktop.org/mesa/mesa.git"
+
+ version('18.3.6', tag='mesa-18.3.6', preferred=True)
+
+ depends_on('autoconf', type='build')
+ depends_on('automake', type='build')
+ depends_on('libtool', type='build')
+ depends_on('m4', type='build')
+ depends_on('pkgconfig', type='build')
+ depends_on('binutils', when=(sys.platform != 'darwin'), type='build')
+ depends_on('bison', type='build')
+ depends_on('flex', type='build')
+ depends_on('gettext', type='build')
+ depends_on('pkgconfig', type='build')
+ depends_on('python', type='build')
+ depends_on('py-mako@0.8.0:', type='build')
+ depends_on('libxml2')
+ depends_on('zlib')
+ depends_on('expat')
+ depends_on('ncurses+termlib')
+
+ # Internal options
+ variant('llvm', default=True, description="Enable LLVM.")
+ variant('swr', values=any_combination_of('avx', 'avx2', 'knl', 'skx'),
+ description="Enable the SWR driver.")
+ # conflicts('~llvm', when='~swr=none')
+
+ # Front ends
+ variant('osmesa', default=True, description="Enable the OSMesa frontend.")
+
+ is_linux = sys.platform.startswith('linux')
+ variant('glx', default=is_linux, description="Enable the GLX frontend.")
+
+ # TODO: effectively deal with EGL. The implications of this have not been
+ # worked through yet
+ # variant('egl', default=False, description="Enable the EGL frontend.")
+
+ # TODO: Effectively deal with hardware drivers
+ # The implication of this is enabling DRI, among other things, and
+ # needing to check which llvm targets were built (ptx or amdgpu, etc.)
+
+ # Back ends
+ variant('opengl', default=True, description="Enable full OpenGL support.")
+ 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('osmesa', when='+osmesa')
+
+ # Variant dependencies
+ depends_on('llvm@6:10', when='+llvm')
+ depends_on('libx11', when='+glx')
+ depends_on('libxcb', when='+glx')
+ depends_on('libxext', when='+glx')
+ depends_on('glproto@1.4.14:', when='+glx', type='build')
+
+ # Prevent an unnecessary xcb-dri dependency
+ patch('autotools-x11-nodri.patch')
+
+ # Backport Mesa MR#6053 to prevent multiply-defined symbols
+ patch('multiple-symbols_hash.patch', when='@:20.1.4%gcc@10:')
+
+ def autoreconf(self, spec, prefix):
+ which('autoreconf')('--force', '--verbose', '--install')
+
+ def configure_args(self):
+ spec = self.spec
+ args = [
+ 'LDFLAGS={0}'.format(self.spec['ncurses'].libs.search_flags),
+ '--enable-shared',
+ '--disable-static',
+ '--disable-libglvnd',
+ '--disable-nine',
+ '--disable-omx-bellagio',
+ '--disable-omx-tizonia',
+ '--disable-opencl',
+ '--disable-opencl-icd',
+ '--disable-va',
+ '--disable-vdpau',
+ '--disable-xa',
+ '--disable-xvmc',
+ '--disable-osmesa',
+ '--with-vulkan-drivers=']
+ args_platforms = []
+ args_gallium_drivers = ['swrast']
+ args_dri_drivers = []
+
+ if spec.target.family == 'arm' or spec.target.family == 'aarch64':
+ args.append('--disable-libunwind')
+
+ num_frontends = 0
+ if '+osmesa' in spec:
+ num_frontends += 1
+ args.append('--enable-gallium-osmesa')
+ else:
+ args.append('--disable-gallium-osmesa')
+
+ if '+glx' in spec:
+ num_frontends += 1
+ if '+egl' in spec:
+ args.append('--enable-glx=dri')
+ else:
+ args.append('--enable-glx=gallium-xlib')
+ args_platforms.append('x11')
+ else:
+ args.append('--disable-glx')
+
+ if '+egl' in spec:
+ num_frontends += 1
+ args.extend(['--enable-egl', '--enable-gbm', '--enable-dri'])
+ args_platforms.append('surfaceless')
+ else:
+ args.extend(['--disable-egl', '--disable-gbm', '--disable-dri'])
+
+ if '+opengl' in spec:
+ args.append('--enable-opengl')
+ else:
+ args.append('--disable-opengl')
+
+ if '+opengles' in spec:
+ args.extend(['--enable-gles1', '--enable-gles2'])
+ else:
+ args.extend(['--disable-gles1', '--disable-gles2'])
+
+ if num_frontends > 1:
+ args.append('--enable-shared-glapi')
+ else:
+ args.append('--disable-shared-glapi')
+
+ if '+llvm' in spec:
+ args.append('--enable-llvm')
+ args.append('--with-llvm-prefix=%s' % spec['llvm'].prefix)
+ if '+link_dylib' in spec['llvm']:
+ args.append('--enable-llvm-shared-libs')
+ else:
+ args.append('--disable-llvm-shared-libs')
+ else:
+ args.append('--disable-llvm')
+
+ args_swr_arches = []
+ if 'swr=avx' in spec:
+ args_swr_arches.append('avx')
+ if 'swr=avx2' in spec:
+ args_swr_arches.append('avx2')
+ if 'swr=knl' in spec:
+ args_swr_arches.append('knl')
+ if 'swr=skx' in spec:
+ args_swr_arches.append('skx')
+ if args_swr_arches:
+ if '+llvm' not in spec:
+ raise SpecError('Variant swr requires +llvm')
+ args_gallium_drivers.append('swr')
+ args.append('--with-swr-archs=' + ','.join(args_swr_arches))
+
+ # Add the remaining list args
+ args.append('--with-platforms=' + ','.join(args_platforms))
+ args.append('--with-gallium-drivers=' + ','.join(args_gallium_drivers))
+ args.append('--with-dri-drivers=' + ','.join(args_dri_drivers))
+
+ return args
+
+ @property
+ def libs(self):
+ spec = self.spec
+ libs_to_seek = set()
+
+ if '+osmesa' in spec:
+ libs_to_seek.add('libOSMesa')
+
+ if '+glx' in spec:
+ libs_to_seek.add('libGL')
+
+ if '+opengl' in spec:
+ libs_to_seek.add('libGL')
+
+ if '+opengles' in spec:
+ libs_to_seek.add('libGLES')
+ libs_to_seek.add('libGLES2')
+
+ if libs_to_seek:
+ return find_libraries(list(libs_to_seek),
+ root=self.spec.prefix,
+ shared='+shared' in self.spec,
+ recursive=True)
+ return LibraryList()
+
+ @property
+ def osmesa_libs(self):
+ return find_libraries('libOSMesa',
+ root=self.spec.prefix,
+ shared='+shared' in self.spec,
+ recursive=True)
+
+ @property
+ def glx_libs(self):
+ return find_libraries('libGL',
+ root=self.spec.prefix,
+ shared='+shared' in self.spec,
+ recursive=True)
+
+ @property
+ def gl_libs(self):
+ return find_libraries('libGL',
+ root=self.spec.prefix,
+ shared='+shared' in self.spec,
+ recursive=True)
diff --git a/var/spack/repos/builtin/packages/paraview/package.py b/var/spack/repos/builtin/packages/paraview/package.py
index 3dae12b6ac..b9da3ce06d 100644
--- a/var/spack/repos/builtin/packages/paraview/package.py
+++ b/var/spack/repos/builtin/packages/paraview/package.py
@@ -95,7 +95,7 @@ class Paraview(CMakePackage, CudaPackage):
depends_on('qt~opengl', when='@5.3.0:+qt~opengl2')
depends_on('qt@:4', when='@:5.2.0+qt')
- depends_on('mesa+osmesa', when='+osmesa')
+ depends_on('osmesa', when='+osmesa')
depends_on('gl@3.2:', when='+opengl2')
depends_on('gl@1.2:', when='~opengl2')
depends_on('libxt', when='~osmesa platform=linux')
diff --git a/var/spack/repos/builtin/packages/vtk/package.py b/var/spack/repos/builtin/packages/vtk/package.py
index ef6c6570c2..19640c4222 100644
--- a/var/spack/repos/builtin/packages/vtk/package.py
+++ b/var/spack/repos/builtin/packages/vtk/package.py
@@ -74,7 +74,7 @@ class Vtk(CMakePackage):
# Note: it is recommended to use mesa+llvm, if possible.
# mesa default is software rendering, llvm makes it faster
- depends_on('mesa+osmesa', when='+osmesa')
+ depends_on('osmesa', when='+osmesa')
# VTK will need Qt5OpenGL, and qt needs '-opengl' for that
depends_on('qt+opengl', when='+qt')