Mesa(18): Use libllvm virtual package (#28365)
* Mesa(18): Use libllvm virtual package * Mesa patch configuration Patch Mesa to define LLVM_VERSION_SUFFIX if llvm is pre-release * Patch llvm-config to define LLVM_VERSION_SUFFIX
This commit is contained in:
parent
92abffa2d4
commit
991438a242
@ -0,0 +1,14 @@
|
|||||||
|
diff --git a/llvm/include/llvm/Config/llvm-config.h.cmake b/llvm/include/llvm/Config/llvm-config.h.cmake
|
||||||
|
index 4493bb65d444..e2b3c61b3c33 100644
|
||||||
|
--- a/llvm/include/llvm/Config/llvm-config.h.cmake
|
||||||
|
+++ b/llvm/include/llvm/Config/llvm-config.h.cmake
|
||||||
|
@@ -74,6 +74,9 @@
|
||||||
|
/* Patch version of the LLVM API */
|
||||||
|
#define LLVM_VERSION_PATCH ${LLVM_VERSION_PATCH}
|
||||||
|
|
||||||
|
+/* LLVM version suffix */
|
||||||
|
+#cmakedefine LLVM_VERSION_SUFFIX "${LLVM_VERSION_SUFFIX}"
|
||||||
|
+
|
||||||
|
/* LLVM version string */
|
||||||
|
#define LLVM_VERSION_STRING "${PACKAGE_VERSION}"
|
||||||
|
|
@ -38,10 +38,15 @@ class LlvmAmdgpu(CMakePackage):
|
|||||||
variant('rocm-device-libs', default=True, description='Build ROCm device libs as external LLVM project instead of a standalone spack package.')
|
variant('rocm-device-libs', default=True, description='Build ROCm device libs as external LLVM project instead of a standalone spack package.')
|
||||||
variant('openmp', default=True, description='Enable OpenMP')
|
variant('openmp', default=True, description='Enable OpenMP')
|
||||||
variant(
|
variant(
|
||||||
"llvm_dylib",
|
'llvm_dylib',
|
||||||
default=False,
|
default=False,
|
||||||
description="Build LLVM shared library, containing all "
|
description='Build LLVM shared library, containing all '
|
||||||
"components in a single shared library",
|
'components in a single shared library',
|
||||||
|
)
|
||||||
|
variant(
|
||||||
|
'link_llvm_dylib',
|
||||||
|
default=False,
|
||||||
|
description='Link LLVM tools against the LLVM shared library',
|
||||||
)
|
)
|
||||||
|
|
||||||
provides('libllvm@11', when='@3.5:3.8')
|
provides('libllvm@11', when='@3.5:3.8')
|
||||||
@ -67,6 +72,10 @@ class LlvmAmdgpu(CMakePackage):
|
|||||||
# This is already fixed in upstream but not in 4.2.0 rocm release
|
# This is already fixed in upstream but not in 4.2.0 rocm release
|
||||||
patch('fix-spack-detection-4.2.0.patch', when='@4.2.0:')
|
patch('fix-spack-detection-4.2.0.patch', when='@4.2.0:')
|
||||||
|
|
||||||
|
# Add LLVM_VERSION_SUFFIX
|
||||||
|
# https://reviews.llvm.org/D115818
|
||||||
|
patch('llvm-version-suffix-macro.patch', when='@:4.3.2')
|
||||||
|
|
||||||
conflicts('^cmake@3.19.0')
|
conflicts('^cmake@3.19.0')
|
||||||
|
|
||||||
root_cmakelists_dir = 'llvm'
|
root_cmakelists_dir = 'llvm'
|
||||||
@ -145,7 +154,10 @@ def cmake_args(self):
|
|||||||
])
|
])
|
||||||
|
|
||||||
if '+llvm_dylib' in self.spec:
|
if '+llvm_dylib' in self.spec:
|
||||||
cmake_args.append("-DLLVM_BUILD_LLVM_DYLIB:Bool=ON")
|
args.append("-DLLVM_BUILD_LLVM_DYLIB:Bool=ON")
|
||||||
|
|
||||||
|
if '+link_llvm_dylib' in self.spec:
|
||||||
|
args.append("-DLLVM_LINK_LLVM_DYLIB:Bool=ON")
|
||||||
|
|
||||||
# Get the GCC prefix for LLVM.
|
# Get the GCC prefix for LLVM.
|
||||||
if self.compiler.name == "gcc":
|
if self.compiler.name == "gcc":
|
||||||
|
@ -0,0 +1,14 @@
|
|||||||
|
diff --git a/llvm/include/llvm/Config/llvm-config.h.cmake b/llvm/include/llvm/Config/llvm-config.h.cmake
|
||||||
|
index 4493bb65d444..e2b3c61b3c33 100644
|
||||||
|
--- a/llvm/include/llvm/Config/llvm-config.h.cmake
|
||||||
|
+++ b/llvm/include/llvm/Config/llvm-config.h.cmake
|
||||||
|
@@ -74,6 +74,9 @@
|
||||||
|
/* Patch version of the LLVM API */
|
||||||
|
#define LLVM_VERSION_PATCH ${LLVM_VERSION_PATCH}
|
||||||
|
|
||||||
|
+/* LLVM version suffix */
|
||||||
|
+#cmakedefine LLVM_VERSION_SUFFIX "${LLVM_VERSION_SUFFIX}"
|
||||||
|
+
|
||||||
|
/* LLVM version string */
|
||||||
|
#define LLVM_VERSION_STRING "${PACKAGE_VERSION}"
|
||||||
|
|
@ -342,6 +342,10 @@ class Llvm(CMakePackage, CudaPackage):
|
|||||||
patch('no_cyclades.patch', when='@10:12.0.0')
|
patch('no_cyclades.patch', when='@10:12.0.0')
|
||||||
patch('no_cyclades9.patch', when='@6:9')
|
patch('no_cyclades9.patch', when='@6:9')
|
||||||
|
|
||||||
|
# Add LLVM_VERSION_SUFFIX
|
||||||
|
# https://reviews.llvm.org/D115818
|
||||||
|
patch('llvm-version-suffix-macro.patch', when='@:13.0.0')
|
||||||
|
|
||||||
# The functions and attributes below implement external package
|
# The functions and attributes below implement external package
|
||||||
# detection for LLVM. See:
|
# detection for LLVM. See:
|
||||||
#
|
#
|
||||||
|
@ -0,0 +1,23 @@
|
|||||||
|
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp b/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp
|
||||||
|
index be288ab02e2..378381b16ff 100644
|
||||||
|
--- a/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp
|
||||||
|
+++ b/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp
|
||||||
|
@@ -619,8 +619,15 @@ lp_is_function(LLVMValueRef v)
|
||||||
|
extern "C" void
|
||||||
|
lp_set_module_stack_alignment_override(LLVMModuleRef MRef, unsigned align)
|
||||||
|
{
|
||||||
|
-#if LLVM_VERSION_MAJOR >= 13
|
||||||
|
- llvm::Module *M = llvm::unwrap(MRef);
|
||||||
|
- M->setOverrideStackAlignment(align);
|
||||||
|
+// Check that the LLVM version is >= 13.0.0 "release"
|
||||||
|
+// llvm::Module::setOverrideStackAlignment was added during the LLVM 13.0.0 development cycle and
|
||||||
|
+// cannot be guarenteed to exist until the official release.
|
||||||
|
+#if ( \
|
||||||
|
+ LLVM_VERSION_MAJOR > 13 || \
|
||||||
|
+ (LLVM_VERSION_MAJOR == 13 && \
|
||||||
|
+ (LLVM_VERSION_MINOR > 0 || \
|
||||||
|
+ (LLVM_VERSION_MINOR == 0 && (LLVM_VERSION_PATCH > 0 || !defined(LLVM_VERSION_SUFFIX))))))
|
||||||
|
+ llvm::Module* M = llvm::unwrap(MRef);
|
||||||
|
+ M->setOverrideStackAlignment(align);
|
||||||
|
#endif
|
||||||
|
}
|
@ -80,7 +80,7 @@ class Mesa(MesonPackage):
|
|||||||
provides('osmesa', when='+osmesa')
|
provides('osmesa', when='+osmesa')
|
||||||
|
|
||||||
# Variant dependencies
|
# Variant dependencies
|
||||||
depends_on('llvm@6:12', when='+llvm')
|
depends_on('libllvm@6:', when='+llvm')
|
||||||
depends_on('libx11', when='+glx')
|
depends_on('libx11', when='+glx')
|
||||||
depends_on('libxcb', when='+glx')
|
depends_on('libxcb', when='+glx')
|
||||||
depends_on('libxext', when='+glx')
|
depends_on('libxext', when='+glx')
|
||||||
@ -106,6 +106,8 @@ class Mesa(MesonPackage):
|
|||||||
# requires native to be added to llvm_modules when using gallium swrast
|
# requires native to be added to llvm_modules when using gallium swrast
|
||||||
patch('https://cgit.freedesktop.org/mesa/mesa/patch/meson.build?id=054dd668a69acc70d47c73abe4646e96a1f23577', sha256='36096a178070e40217945e12d542dfe80016cb897284a01114d616656c577d73', when='@21.0.0:21.0.3')
|
patch('https://cgit.freedesktop.org/mesa/mesa/patch/meson.build?id=054dd668a69acc70d47c73abe4646e96a1f23577', sha256='36096a178070e40217945e12d542dfe80016cb897284a01114d616656c577d73', when='@21.0.0:21.0.3')
|
||||||
|
|
||||||
|
patch('mesa_check_llvm_version_suffix.patch', when='@21.2.3:')
|
||||||
|
|
||||||
# 'auto' needed when shared llvm is built
|
# 'auto' needed when shared llvm is built
|
||||||
@when('^llvm~shared_libs')
|
@when('^llvm~shared_libs')
|
||||||
def patch(self):
|
def patch(self):
|
||||||
@ -175,18 +177,19 @@ def meson_args(self):
|
|||||||
|
|
||||||
if '+llvm' in spec:
|
if '+llvm' in spec:
|
||||||
# Fix builds on hosts where /usr/bin/llvm-config-* is found and provides an
|
# Fix builds on hosts where /usr/bin/llvm-config-* is found and provides an
|
||||||
# incompatible version. Ensure that the llvm-config of spec['llvm'] is used.
|
# incompatible version. Ensure that the llvm-config of spec['libllvm'] is
|
||||||
|
# used.
|
||||||
args.append('--native-file')
|
args.append('--native-file')
|
||||||
args.append('meson-native-config.ini')
|
args.append('meson-native-config.ini')
|
||||||
mkdirp(self.build_directory)
|
mkdirp(self.build_directory)
|
||||||
with working_dir(self.build_directory):
|
with working_dir(self.build_directory):
|
||||||
with open('meson-native-config.ini', 'w') as native_config:
|
with open('meson-native-config.ini', 'w') as native_config:
|
||||||
llvm_config = spec['llvm'].prefix.bin + '/llvm-config'
|
llvm_config = spec['libllvm'].prefix.bin + '/llvm-config'
|
||||||
native_config.write('[binaries]\n')
|
native_config.write('[binaries]\n')
|
||||||
native_config.write("llvm-config = '{0}'\n".format(llvm_config))
|
native_config.write("llvm-config = '{0}'\n".format(llvm_config))
|
||||||
args.append('-Dllvm=enabled')
|
args.append('-Dllvm=enabled')
|
||||||
args.append(opt_enable(
|
args.append(opt_enable(
|
||||||
'+llvm_dylib' in spec['llvm'], 'shared-llvm'))
|
'+llvm_dylib' in spec['libllvm'], 'shared-llvm'))
|
||||||
else:
|
else:
|
||||||
args.append('-Dllvm=disabled')
|
args.append('-Dllvm=disabled')
|
||||||
|
|
||||||
|
@ -61,7 +61,7 @@ class Mesa18(AutotoolsPackage):
|
|||||||
provides('osmesa', when='+osmesa')
|
provides('osmesa', when='+osmesa')
|
||||||
|
|
||||||
# Variant dependencies
|
# Variant dependencies
|
||||||
depends_on('llvm@6:10', when='+llvm')
|
depends_on('libllvm@6:10', when='+llvm')
|
||||||
depends_on('libx11', when='+glx')
|
depends_on('libx11', when='+glx')
|
||||||
depends_on('libxcb', when='+glx')
|
depends_on('libxcb', when='+glx')
|
||||||
depends_on('libxext', when='+glx')
|
depends_on('libxext', when='+glx')
|
||||||
@ -138,8 +138,8 @@ def configure_args(self):
|
|||||||
|
|
||||||
if '+llvm' in spec:
|
if '+llvm' in spec:
|
||||||
args.append('--enable-llvm')
|
args.append('--enable-llvm')
|
||||||
args.append('--with-llvm-prefix=%s' % spec['llvm'].prefix)
|
args.append('--with-llvm-prefix=%s' % spec['libllvm'].prefix)
|
||||||
if '+llvm_dylib' in spec['llvm']:
|
if '+llvm_dylib' in spec['libllvm']:
|
||||||
args.append('--enable-llvm-shared-libs')
|
args.append('--enable-llvm-shared-libs')
|
||||||
else:
|
else:
|
||||||
args.append('--disable-llvm-shared-libs')
|
args.append('--disable-llvm-shared-libs')
|
||||||
|
Loading…
Reference in New Issue
Block a user