spack/var/spack/repos/builtin/packages/mesa18/package.py
Adam J. Stewart 7ccb9992a6
Procedure to deprecate old versions of software (#20767)
* Procedure to deprecate old versions of software

* Add documentation

* Fix bug in logic

* Update tab completion

* Deprecate legacy packages

* Deprecate old mxnet as well

* More explicit docs
2021-02-09 13:51:18 -05:00

212 lines
6.9 KiB
Python

# Copyright 2013-2021 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, deprecated=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.")
# Additional backends
variant('opengles', default=False, description="Enable OpenGL ES support.")
# Provides
provides('gl@4.5')
provides('glx@1.4', when='+glx')
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')
# Require at least 1 front-end
conflicts('~osmesa ~glx')
# 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=',
'--disable-egl',
'--disable-gbm',
'--disable-dri',
'--enable-opengl']
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
args.append('--enable-glx=gallium-xlib')
args_platforms.append('x11')
else:
args.append('--disable-glx')
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')
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=True,
recursive=True)
return LibraryList()
@property
def osmesa_libs(self):
return find_libraries('libOSMesa',
root=self.spec.prefix,
shared=True,
recursive=True)
@property
def glx_libs(self):
return find_libraries('libGL',
root=self.spec.prefix,
shared=True,
recursive=True)
@property
def gl_libs(self):
return find_libraries('libGL',
root=self.spec.prefix,
shared=True,
recursive=True)