From 04d5c1549c2d626164d2bf0ce1ac5fad4d795ff5 Mon Sep 17 00:00:00 2001
From: Stepan Nassyr <nassyr1@jrlogin04.jureca>
Date: Wed, 18 May 2022 17:08:39 +0200
Subject: [PATCH] AMD MI200 OpenGL + Vulkan

---
 Custom_EasyBlocks/llvm_amdgpu.py              | 101 +++++++++
 .../l/LLVM/LLVM-13.0.0-GCCcore-11.2.0.eb      |  44 ++++
 .../l/libdrm/libdrm-2.4.107-GCCcore-11.2.0.eb |  32 +++
 .../l/libdrm/libdrm-2.4.108-GCCcore-11.2.0.eb |  34 +++
 .../l/libdrm/libdrm-2.4.110-GCCcore-11.2.0.eb |  34 +++
 .../o/OpenGL/OpenGL-2021b-GCCcore-11.2.0.eb   | 210 ++++++++++++++++++
 .../Vulkan-Headers-1.24.0-GCCcore-11.2.0.eb   |  30 +++
 .../Vulkan-Loader-1.3.213-GCCcore-11.2.0.eb   |  37 +++
 8 files changed, 522 insertions(+)
 create mode 100644 Custom_EasyBlocks/llvm_amdgpu.py
 create mode 100644 Overlays/jureca_mi200_overlay/l/LLVM/LLVM-13.0.0-GCCcore-11.2.0.eb
 create mode 100644 Overlays/jureca_mi200_overlay/l/libdrm/libdrm-2.4.107-GCCcore-11.2.0.eb
 create mode 100644 Overlays/jureca_mi200_overlay/l/libdrm/libdrm-2.4.108-GCCcore-11.2.0.eb
 create mode 100644 Overlays/jureca_mi200_overlay/l/libdrm/libdrm-2.4.110-GCCcore-11.2.0.eb
 create mode 100644 Overlays/jureca_mi200_overlay/o/OpenGL/OpenGL-2021b-GCCcore-11.2.0.eb
 create mode 100644 Overlays/jureca_mi200_overlay/v/Vulkan-Headers/Vulkan-Headers-1.24.0-GCCcore-11.2.0.eb
 create mode 100644 Overlays/jureca_mi200_overlay/v/Vulkan-Loader/Vulkan-Loader-1.3.213-GCCcore-11.2.0.eb

diff --git a/Custom_EasyBlocks/llvm_amdgpu.py b/Custom_EasyBlocks/llvm_amdgpu.py
new file mode 100644
index 000000000..ff902a178
--- /dev/null
+++ b/Custom_EasyBlocks/llvm_amdgpu.py
@@ -0,0 +1,101 @@
+##
+# Copyright 2020-2022 Ghent University
+#
+# This file is part of EasyBuild,
+# originally created by the HPC team of Ghent University (http://ugent.be/hpc/en),
+# with support of Ghent University (http://ugent.be/hpc),
+# the Flemish Supercomputer Centre (VSC) (https://www.vscentrum.be),
+# Flemish Research Foundation (FWO) (http://www.fwo.be/en)
+# and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en).
+#
+# https://github.com/easybuilders/easybuild
+#
+# EasyBuild is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation v2.
+#
+# EasyBuild is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with EasyBuild.  If not, see <http://www.gnu.org/licenses/>.
+##
+"""
+EasyBuild support for building and installing LLVM, implemented as an easyblock
+
+@author: Simon Branford (University of Birmingham)
+"""
+from easybuild.easyblocks.clang import CLANG_TARGETS, DEFAULT_TARGETS_MAP
+from easybuild.easyblocks.generic.cmakemake import CMakeMake
+from easybuild.framework.easyconfig import CUSTOM
+from easybuild.tools.build_log import EasyBuildError
+from easybuild.tools.modules import get_software_root
+from easybuild.tools.systemtools import get_cpu_architecture
+from distutils.version import LooseVersion
+
+
+class EB_LLVM_AMDGPU(CMakeMake):
+    """
+    Support for building and installing LLVM
+    """
+
+    @staticmethod
+    def extra_options():
+        extra_vars = CMakeMake.extra_options()
+        extra_vars.update({
+            'build_targets': [None, "Build targets for LLVM (host architecture if None). Possible values: " +
+                                    ', '.join(CLANG_TARGETS), CUSTOM],
+            'enable_rtti': [True, "Enable RTTI", CUSTOM],
+        })
+
+        return extra_vars
+
+    def __init__(self, *args, **kwargs):
+        """Initialize LLVM-specific variables."""
+        super(EB_LLVM_AMDGPU, self).__init__(*args, **kwargs)
+
+        self.build_shared = self.cfg.get('build_shared_libs', False)
+        if LooseVersion(self.version) >= LooseVersion('14'):
+            self.cfg['start_dir'] = '%s-%s.src' % (self.name.lower(), self.version)
+            # avoid using -DBUILD_SHARED_LIBS directly, use -DLLVM_{BUILD,LINK}_LLVM_DYLIB flags instead
+            if self.build_shared:
+                self.cfg['build_shared_libs'] = None
+
+    def configure_step(self):
+        """
+        Install extra tools in bin/; enable zlib if it is a dep; optionally enable rtti; and set the build target
+        """
+        if LooseVersion(self.version) >= LooseVersion('14'):
+            self.cfg.update('configopts', '-DLLVM_INCLUDE_BENCHMARKS=OFF')
+            if self.build_shared:
+                self.cfg.update('configopts', '-DLLVM_BUILD_LLVM_DYLIB=ON -DLLVM_LINK_LLVM_DYLIB=ON')
+
+        self.cfg.update('configopts', '-DLLVM_INSTALL_UTILS=ON')
+
+        if get_software_root('zlib'):
+            self.cfg.update('configopts', '-DLLVM_ENABLE_ZLIB=ON')
+
+        if self.cfg["enable_rtti"]:
+            self.cfg.update('configopts', '-DLLVM_ENABLE_RTTI=ON')
+
+        build_targets = self.cfg['build_targets']
+        if build_targets is None:
+            arch = get_cpu_architecture()
+            try:
+                default_targets = DEFAULT_TARGETS_MAP[arch][:]
+                self.cfg['build_targets'] = build_targets = default_targets
+                self.log.debug("Using %s as default build targets for CPU architecture %s.", default_targets, arch)
+            except KeyError:
+                raise EasyBuildError("No default build targets defined for CPU architecture %s.", arch)
+
+        unknown_targets = [target for target in build_targets if target not in CLANG_TARGETS+['AMDGPU']]
+
+        if unknown_targets:
+            raise EasyBuildError("Some of the chosen build targets (%s) are not in %s.",
+                                 ', '.join(unknown_targets), ', '.join(CLANG_TARGETS+['AMDGPU']))
+
+        self.cfg.update('configopts', '-DLLVM_TARGETS_TO_BUILD="%s"' % ';'.join(build_targets))
+
+        super(EB_LLVM_AMDGPU, self).configure_step()
diff --git a/Overlays/jureca_mi200_overlay/l/LLVM/LLVM-13.0.0-GCCcore-11.2.0.eb b/Overlays/jureca_mi200_overlay/l/LLVM/LLVM-13.0.0-GCCcore-11.2.0.eb
new file mode 100644
index 000000000..4024ac3a5
--- /dev/null
+++ b/Overlays/jureca_mi200_overlay/l/LLVM/LLVM-13.0.0-GCCcore-11.2.0.eb
@@ -0,0 +1,44 @@
+name = 'LLVM'
+easyblock = 'EB_LLVM_AMDGPU'
+version = '13.0.0'
+
+homepage = "https://llvm.org/"
+description = """The LLVM Core libraries provide a modern source- and target-independent
+optimizer, along with code generation support for many popular CPUs
+(as well as some less common ones!) These libraries are built around a well
+specified code representation known as the LLVM intermediate representation
+("LLVM IR"). The LLVM Core libraries are well documented, and it is
+particularly easy to invent your own language (or port an existing compiler)
+to use LLVM as an optimizer and code generator."""
+
+toolchain = {'name': 'GCCcore', 'version': '11.2.0'}
+toolchainopts = {'cstd': 'gnu++11', 'pic': 'True'}
+
+source_urls = [
+    'https://github.com/llvm/llvm-project/releases/download/llvmorg-%(version)s/']
+sources = ['llvm-%(version)s.src.tar.xz']
+checksums = ['408d11708643ea826f519ff79761fcdfc12d641a2510229eec459e72f8163020']
+
+builddependencies = [
+    ('binutils', '2.37'),
+    ('CMake', '3.21.1', '', SYSTEM),
+    ('Python', '3.9.6'),
+]
+
+dependencies = [
+    ('ncurses', '6.2'),
+    ('zlib', '1.2.11'),
+]
+
+build_shared_libs = True
+
+build_targets=["AMDGPU","X86"]
+
+sanity_check_paths = {
+    'files': ['bin/llvm-ar', 'bin/FileCheck'],
+    'dirs': ['include/llvm', 'include/llvm-c'],
+}
+
+sanity_check_commands = ["llvm-ar --help"]
+
+moduleclass = 'compiler'
diff --git a/Overlays/jureca_mi200_overlay/l/libdrm/libdrm-2.4.107-GCCcore-11.2.0.eb b/Overlays/jureca_mi200_overlay/l/libdrm/libdrm-2.4.107-GCCcore-11.2.0.eb
new file mode 100644
index 000000000..842abee08
--- /dev/null
+++ b/Overlays/jureca_mi200_overlay/l/libdrm/libdrm-2.4.107-GCCcore-11.2.0.eb
@@ -0,0 +1,32 @@
+easyblock = 'MesonNinja'
+
+name = 'libdrm'
+version = '2.4.107'
+
+homepage = 'https://dri.freedesktop.org'
+description = """Direct Rendering Manager runtime library."""
+
+toolchain = {'name': 'GCCcore', 'version': '11.2.0'}
+
+source_urls = ['https://dri.freedesktop.org/libdrm/']
+sources = [SOURCELOWER_TAR_XZ]
+checksums = ['c554cef03b033636a975543eab363cc19081cb464595d3da1ec129f87370f888']
+
+builddependencies = [
+    ('binutils', '2.37'),
+    ('pkg-config', '0.29.2'),
+    ('Meson', '0.58.2'),
+    ('Ninja', '1.10.2'),
+]
+dependencies = [('X11', '20210802')]
+
+# installing manpages requires an extra build dependency (docbook xsl)
+configopts = '-Dman-pages=false'
+
+sanity_check_paths = {
+    'files': ['lib/libdrm.%s' % SHLIB_EXT, 'include/libdrm/drm.h'],
+    'dirs': ['include', 'lib'],
+}
+
+
+moduleclass = 'lib'
diff --git a/Overlays/jureca_mi200_overlay/l/libdrm/libdrm-2.4.108-GCCcore-11.2.0.eb b/Overlays/jureca_mi200_overlay/l/libdrm/libdrm-2.4.108-GCCcore-11.2.0.eb
new file mode 100644
index 000000000..6ecd87421
--- /dev/null
+++ b/Overlays/jureca_mi200_overlay/l/libdrm/libdrm-2.4.108-GCCcore-11.2.0.eb
@@ -0,0 +1,34 @@
+easyblock = 'MesonNinja'
+
+name = 'libdrm'
+version = '2.4.108'
+
+homepage = 'https://dri.freedesktop.org'
+description = """Direct Rendering Manager runtime library."""
+
+toolchain = {'name': 'GCCcore', 'version': '11.2.0'}
+
+source_urls = ['https://dri.freedesktop.org/libdrm/']
+sources = [SOURCELOWER_TAR_XZ]
+checksums = ['a1d7948cbc536763fde14b4beb5e4da7867607966d4cf46301087e8b8fe3d6a0']
+
+# checksums = ['92d8ac54429b171e087e61c2894dc5399fe6a549b1fbba09fa6a3cb9d4e57bd4']
+
+builddependencies = [
+    ('binutils', '2.37'),
+    ('pkg-config', '0.29.2'),
+    ('Meson', '0.58.2'),
+    ('Ninja', '1.10.2'),
+]
+dependencies = [('X11', '20210802')]
+
+# installing manpages requires an extra build dependency (docbook xsl)
+configopts = '-Dman-pages=false'
+
+sanity_check_paths = {
+    'files': ['lib/libdrm.%s' % SHLIB_EXT, 'include/libdrm/drm.h'],
+    'dirs': ['include', 'lib'],
+}
+
+
+moduleclass = 'lib'
diff --git a/Overlays/jureca_mi200_overlay/l/libdrm/libdrm-2.4.110-GCCcore-11.2.0.eb b/Overlays/jureca_mi200_overlay/l/libdrm/libdrm-2.4.110-GCCcore-11.2.0.eb
new file mode 100644
index 000000000..528f05768
--- /dev/null
+++ b/Overlays/jureca_mi200_overlay/l/libdrm/libdrm-2.4.110-GCCcore-11.2.0.eb
@@ -0,0 +1,34 @@
+easyblock = 'MesonNinja'
+
+name = 'libdrm'
+version = '2.4.110'
+
+homepage = 'https://dri.freedesktop.org'
+description = """Direct Rendering Manager runtime library."""
+
+toolchain = {'name': 'GCCcore', 'version': '11.2.0'}
+
+source_urls = ['https://dri.freedesktop.org/libdrm/']
+sources = [SOURCELOWER_TAR_XZ]
+checksums = ['eecee4c4b47ed6d6ce1a9be3d6d92102548ea35e442282216d47d05293cf9737']
+
+# checksums = ['92d8ac54429b171e087e61c2894dc5399fe6a549b1fbba09fa6a3cb9d4e57bd4']
+
+builddependencies = [
+    ('binutils', '2.37'),
+    ('pkg-config', '0.29.2'),
+    ('Meson', '0.58.2'),
+    ('Ninja', '1.10.2'),
+]
+dependencies = [('X11', '20210802')]
+
+# installing manpages requires an extra build dependency (docbook xsl)
+configopts = '-Dman-pages=false'
+
+sanity_check_paths = {
+    'files': ['lib/libdrm.%s' % SHLIB_EXT, 'include/libdrm/drm.h'],
+    'dirs': ['include', 'lib'],
+}
+
+
+moduleclass = 'lib'
diff --git a/Overlays/jureca_mi200_overlay/o/OpenGL/OpenGL-2021b-GCCcore-11.2.0.eb b/Overlays/jureca_mi200_overlay/o/OpenGL/OpenGL-2021b-GCCcore-11.2.0.eb
new file mode 100644
index 000000000..3f1a33ec2
--- /dev/null
+++ b/Overlays/jureca_mi200_overlay/o/OpenGL/OpenGL-2021b-GCCcore-11.2.0.eb
@@ -0,0 +1,210 @@
+easyblock = 'Bundle'
+
+name = 'OpenGL'
+version = '2021b'
+
+homepage = 'http://www.opengl.org/'
+description = """
+Open Graphics Library (OpenGL) is a cross-language, cross-platform application programming interface (API) for rendering
+2D and 3D vector graphics. Mesa is an open-source implementation of the OpenGL specification - a system for rendering
+interactive 3D graphics. NVIDIA supports OpenGL and a complete set of OpenGL extensions, designed to give a maximum
+performance on NVIDIA GPUs.
+
+This is a GL vendor neutral dispatch (GLVND) installation with Mesa and NVIDIA in the same lib-directory. Mesa or NVIDIA
+OpenGL is set individually for each XScreen.
+"""
+
+toolchain = {'name': 'GCCcore', 'version': '11.2.0'}
+# swr detects and builds parts specific for AVX and AVX2. If we use
+# -xHost, this always gets overwritten and will fail.
+toolchainopts = {'optarch': False}
+
+builddependencies = [
+    ('Python', '3.9.6'),
+    ('binutils', '2.37'),
+    ('flex', '2.6.4'),
+    ('Bison', '3.7.6'),
+    ('Autotools', '20210726'),
+    ('pkg-config', '0.29.2'),
+    ('expat', '2.4.1'),
+    ('libxml2', '2.9.10'),
+    ('Meson', '0.58.2'),
+    ('Ninja', '1.10.2'),
+    ('CMake', '3.21.1', '', SYSTEM),
+]
+
+dependencies = [
+    ('zlib', '1.2.11'),
+    ('nettle', '3.7.3'),
+    ('libdrm', '2.4.110'),
+    ('LLVM', '13.0.0'),
+    ('X11', '20210802'),
+    ('libunwind', '1.5.0'),
+    ('Vulkan-Headers', '1.3.213'),
+    ('Vulkan-Loader', '1.3.213'),
+]
+
+default_easyblock = 'ConfigureMake'
+
+default_component_specs = {
+    'sources': [SOURCE_TAR_GZ],
+    'start_dir': '%(name)s-%(version)s',
+}
+
+local_pkg_config = ('export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:%(installdir)s/lib/pkgconfig && '
+                    'export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:%(installdir)s/lib64/pkgconfig && ')
+
+components = [
+    # A vendor neutral dispatch layer
+    ('libglvnd', '1.3.4', {
+        'source_urls': [
+            'https://gitlab.freedesktop.org/glvnd/libglvnd/-/archive/v%(version)s/'
+        ],
+        'sources':   ['%(name)s-v%(version)s.tar.gz'],
+        'start_dir':  '%(name)s-v%(version)s',
+        'checksums': ['c42061da999f75234f9bca501c21144d9a5768c5911d674eceb8650ce3fb94bb'],
+        'preconfigopts': './autogen.sh && '
+    }),
+    # Mesa for software rendering, not hardware rendering.
+    ('Mesa', '22.0.3', {
+        # We build:
+        # - llvmpipe: the high-performance Gallium LLVM driver (only possible with glx=gallium-xlib)
+        # - swr: Intel's OpenSWR
+        'easyblock': 'MesonNinja',
+        'source_urls': [
+            'https://mesa.freedesktop.org/archive/',
+            'https://mesa.freedesktop.org/archive/%(version)s',
+            'ftp://ftp.freedesktop.org/pub/mesa/%(version)s',
+            'ftp://ftp.freedesktop.org/pub/mesa/older-versions/%(version_major)s.x/%(version)s',
+            'ftp://ftp.freedesktop.org/pub/mesa/older-versions/%(version_major)s.x',
+        ],
+        'sources': [SOURCELOWER_TAR_XZ],
+        'checksums': [
+            '9f2b30f5276a9abaf71aafc6979685e2636189de1a87aea2c9e69744a6d0ebb9',
+        ],
+        'start_dir': '%(namelower)s-%(version)s',
+        'separate_build_dir': True,
+        'preconfigopts': local_pkg_config,
+        # https://gitlab.freedesktop.org/mesa/mesa/-/blob/master/meson_options.txt
+        'configopts': (' -D libdir=%(installdir)s/lib'
+                       ' -D gbm=enabled'
+                       ' -D glx=auto'
+                       ' -D osmesa=true'
+                       ' -D llvm=enabled'
+                       ' -D shared-llvm=enabled'
+                       ' -D dri-drivers=""'
+                       ' -D vulkan-drivers="amd,swrast"'
+                       ' -D gallium-drivers="radeonsi,zink,swrast"'
+                       ' -D platforms=x11'  # surfaceless taken automatically, see logs
+                       ' -D glvnd=true'
+                       ' -D libunwind=disabled'
+                       ' -D valgrind=disabled'
+                       ' -D egl=enabled'
+                       ' -D gles1=enabled -Dgles2=enabled'
+                       ' -D shared-glapi=enabled'
+                       ' -D gallium-vdpau=disabled'  # only for r300, r600, radeonsi, nouveau
+                       ' -D buildtype=release'),
+    }),
+    # OpenGL Utility Library - offers higher level GL-graphics functions
+    ('glu', '9.0.2', {
+        'preconfigopts': local_pkg_config,
+        'source_urls': [
+            'ftp://ftp.freedesktop.org/pub/mesa/glu/'
+        ],
+        'sources': [
+            'glu-%(version)s.tar.gz'
+        ],
+        'checksums': [
+            '24effdfb952453cc00e275e1c82ca9787506aba0282145fff054498e60e19a65',
+        ],
+    }),
+    # OpenGL Extension Wrangler Library - determines which OpenGL extensions are supported at run-time
+    # This is just GLEW for GLX (which requires DISPLAY to be set) and not GLEW for EGL as GLEW selects GLX/EGL at
+    # compile-time and not run-time (https://github.com/nigels-com/glew/issues/172#issuecomment-357400019)
+    # Compile+Load GLEW-EGL on top to enable GLEW for EGL
+    ('glew', '2.2.0', {
+        'source_urls': [
+            'https://sourceforge.net/projects/glew/files/glew/snapshots/',
+        ],
+        'sources': [
+            'glew-20200115.tgz',
+        ],
+        'checksums': [
+            '314219ba1db50d49b99705e8eb00e83b230ee7e2135289a00b5b570e4a4db43a',
+        ],
+        'skipsteps': ['configure'],
+        'buildopts': ('GLEW_PREFIX=%(installdir)s GLEW_DEST=%(installdir)s LIBDIR=%(installdir)s/lib '
+                      'LDFLAGS.EXTRA="-L${EBROOTX11}/lib/ -lX11" LDFLAGS.GL="-L%(installdir)s/lib -lGL"'),
+        'installopts': 'GLEW_PREFIX=%(installdir)s GLEW_DEST=%(installdir)s LIBDIR=%(installdir)s/lib ',
+        'install_cmd': 'make install.all ',
+    }),
+    # MESA demos - offers the important command 'eglinfo'
+    ('demos', '95c1a57cfdd1ef2852c828cba4659a72575c5c5d', {
+        'source_urls': [
+            'https://gitlab.freedesktop.org/mesa/demos/-/archive/%(version)s/',
+        ],
+        'sources': [SOURCELOWER_TAR_GZ],
+        'checksums': [
+            '7738beca8f6f6981ba04c8a22fde24d69d6b2aaab1758ac695c9475bf704249c',
+        ],
+        'preconfigopts': ('./autogen.sh && ' +
+                          local_pkg_config +
+                          'GLEW_CFLAGS="-I%(installdir)s/include/" GLEW_LIBS="-L%(installdir)s/lib/ -lGLEW -lGL" '
+                          'EGL_CFLAGS="-I%(installdir)s/include/" EGL_LIBS="-L%(installdir)s/lib/ -lEGL" '),
+        'configopts': '--disable-osmesa ',
+    }),
+]
+
+postinstallcmds = [
+    'cd %(installdir)s/lib && ln -sf libGL.so.1.7.0 libGL.so.1',
+    'rm %(installdir)s/lib/*.la',
+    'cd %(installdir)s/lib && ln -sf libGLX_mesa.so.0 libGLX_indirect.so.0',
+    # EGL vendor ICDs
+    (
+        '{ cat > %(installdir)s/share/glvnd/egl_vendor.d/50_mesa.json; } << \'EOF\'\n'
+        '{\n'
+        '  \"file_format_version\" : \"1.0.0\",\n'
+        '  \"ICD\" : {\n'
+        '     \"library_path\" : \"libEGL_mesa.so.0\"\n'
+        '  }\n'
+        '}\n'
+        'EOF'
+    ),
+    # correct pkg-config of GLEW
+    'sed -i "/^libdir=/c\libdir=\${exec_prefix}\/lib" %(installdir)s/lib/pkgconfig/glew.pc',
+    'sed -i "/^prefix=/c\prefix=%(installdir)s"       %(installdir)s/lib/pkgconfig/glew.pc',
+]
+
+modextravars = {
+    # '__GLX_VENDOR_LIBRARY_NAME': 'mesa' 
+    '__EGL_VENDOR_LIBRARY_FILENAMES': ('%(installdir)s/share/glvnd/egl_vendor.d/50_mesa.json'),
+    'EGL_PLATFORM': 'surfaceless',
+    'EGL_DRIVER': 'radeonsi',
+    'EGL_LOG_LEVEL': 'fatal',
+    'GALLIUM_DRIVER': 'radeonsi',
+    'KNOB_MAX_WORKER_THREADS': '65535',
+}
+
+modluafooter = '''
+add_property("arch","gpu")
+
+conflict("Mesa")
+conflict("libGLU")
+'''
+
+sanity_check_paths = {
+    'files': [
+        'lib/libEGL_mesa.%s' % SHLIB_EXT, 'lib/libOSMesa.%s' % SHLIB_EXT,
+        'lib/libGLESv1_CM.%s' % SHLIB_EXT, 'lib/libGLESv2.%s' % SHLIB_EXT,
+        'include/GL/glext.h', 'include/GL/glx.h',
+        'include/GL/osmesa.h', 'include/GL/gl.h', 'include/GL/glxext.h',
+        'include/GLES/gl.h', 'include/GLES2/gl2.h', 'include/GLES3/gl3.h',
+        'lib/libOpenGL.%s' % SHLIB_EXT,
+        'lib/libGLEW.a', 'lib/libGLEW.%s' % SHLIB_EXT,
+        'bin/glewinfo', 'bin/visualinfo',
+        'include/GL/glew.h', 'include/GL/glxew.h', 'include/GL/wglew.h',
+    ],
+    'dirs': []
+}
+
+moduleclass = 'vis'
diff --git a/Overlays/jureca_mi200_overlay/v/Vulkan-Headers/Vulkan-Headers-1.24.0-GCCcore-11.2.0.eb b/Overlays/jureca_mi200_overlay/v/Vulkan-Headers/Vulkan-Headers-1.24.0-GCCcore-11.2.0.eb
new file mode 100644
index 000000000..2ea42156a
--- /dev/null
+++ b/Overlays/jureca_mi200_overlay/v/Vulkan-Headers/Vulkan-Headers-1.24.0-GCCcore-11.2.0.eb
@@ -0,0 +1,30 @@
+easyblock = 'CMakeNinja'
+
+name = 'Vulkan-Headers'
+version = '1.3.213'
+
+homepage = 'https://www.vulkan.org/'
+description = """Vulkan header files and API registry"""
+
+toolchain = {'name': 'GCCcore', 'version': '11.2.0'}
+
+github_account = 'KhronosGroup'
+
+source_urls = [GITHUB_SOURCE]
+sources = {
+    'filename' : SOURCELOWER_TAR_GZ,
+    'download_filename' : 'v%(version)s.tar.gz'
+}
+checksums = ['7f4a6118dc3524703c1ce0a44089379e89eeb930fbe28188b90fdac1f10ef676']
+
+builddependencies = [
+    ('CMake', '3.21.1'),
+    ('Ninja', '1.10.2'),
+]
+
+sanity_check_paths = {
+    'files': ['include/vulkan/vulkan.h'],
+    'dirs': [],
+}
+
+moduleclass = 'devel'
diff --git a/Overlays/jureca_mi200_overlay/v/Vulkan-Loader/Vulkan-Loader-1.3.213-GCCcore-11.2.0.eb b/Overlays/jureca_mi200_overlay/v/Vulkan-Loader/Vulkan-Loader-1.3.213-GCCcore-11.2.0.eb
new file mode 100644
index 000000000..cfaf886bf
--- /dev/null
+++ b/Overlays/jureca_mi200_overlay/v/Vulkan-Loader/Vulkan-Loader-1.3.213-GCCcore-11.2.0.eb
@@ -0,0 +1,37 @@
+easyblock = 'CMakeNinja'
+
+name = 'Vulkan-Loader'
+version = '1.3.213'
+
+homepage = 'https://www.vulkan.org/'
+description = """Provides the Khronos official Vulkan ICD desktop loader for Windows, Linux, and MacOS"""
+
+toolchain = {'name': 'GCCcore', 'version': '11.2.0'}
+
+github_account = 'KhronosGroup'
+
+source_urls = [GITHUB_SOURCE]
+sources = {
+    'filename' : SOURCELOWER_TAR_GZ,
+    'download_filename' : 'v%(version)s.tar.gz'
+}
+checksums = ['3cacac2a39026ce74ff96d2bf5d2c85f2729218182cf0be07ae62f58a5301a39']
+
+builddependencies = [
+    ('CMake', '3.21.1'),
+    ('Ninja', '1.10.2'),
+]
+
+dependencies = [
+    ('Vulkan-Headers', version),
+    ('X11', '20210802'),
+]
+
+configopts = '-DBUILD_WSI_WAYLAND_SUPPORT=OFF'
+
+sanity_check_paths = {
+    'files': ['lib/libvulkan.so'],
+    'dirs': ['lib/pkgconfig'],
+}
+
+moduleclass = 'devel'
-- 
GitLab