Skip to content

Conversation

@Thyre
Copy link
Collaborator

@Thyre Thyre commented Sep 1, 2025

(created using eb --new-pr)

This PR implements the changes proposed in #10701, i.e. combining the different parts for OpenGL into one single EasyConfig. The components were mostly copied from the individual EasyConfigs of prior toolchains, with some minor modifications to Mesa:

  • Add option -Dgles1=enabled
  • Add option -Dgles2=enabled
  • Hard-code -Dvulkan-drivers='swrast,amd' & -Dgallium-drivers=llvmpipe,radeonsi for AMDGPU support

Due to this, we also have libclc as a new dependency.


TODO:

  • Check if fix for pkg-config of GLEW is still required
  • Apply patch for GLEW from separate directory
  • Test on systems with NVIDIA & no GPU

Requires:

Resolves #10701

@Thyre Thyre added the new label Sep 1, 2025
@Thyre Thyre marked this pull request as draft September 1, 2025 08:39
@Thyre Thyre added the 2025b issues & PRs related to 2025b common toolchains label Sep 1, 2025
@Thyre
Copy link
Collaborator Author

Thyre commented Sep 1, 2025

While there was some discussion about if we want to go this route, I think some improvements can be ported to the individual EasyConfigs, if we decide to keep the split, e.g:

  • Support for AMD GPUs
  • Manually defining additional EGL vendor files to make sure they're present

@Thyre
Copy link
Collaborator Author

Thyre commented Sep 1, 2025

Intel GPU support would probably also be achievable, but requires #23174. Therefore, I didn't look into that yet.

@Thyre
Copy link
Collaborator Author

Thyre commented Sep 1, 2025

Test report by @Thyre
FAILED
Build succeeded for 1 out of 3 (3 easyconfigs in total)
ZAM054 - Linux Zorin OS 17, x86_64, 12th Gen Intel(R) Core(TM) i7-1260P, 1 x NVIDIA NVIDIA GeForce MX550, 580.65.06, Python 3.10.12
See https://gist.github.com/Thyre/c4dcdcfb52c1ae58818a89e3d6794e38 for a full test report.

@Thyre
Copy link
Collaborator Author

Thyre commented Sep 1, 2025

Test report by @Thyre
SUCCESS
Build succeeded for 3 out of 3 (3 easyconfigs in total)
Linux - Linux Arch Linux UNKNOWN, x86_64, AMD Ryzen 7 7800X3D 8-Core Processor (zen4), 1 x AMD Navi 48 [Radeon RX 9070/9070 XT/9070 GRE] (device id: 0x7550, gfx: gfx1201, driver: 6.16.3-arch1-1), 1 x AMD Raphael (device id: 0x164e, gfx: gfx1036, driver: 6.16.3-arch1-1), Python 3.13.7
See https://gist.github.com/Thyre/0309ce23e874da25b3ff39558f4fe77a for a full test report.

@Thyre
Copy link
Collaborator Author

Thyre commented Sep 1, 2025

AMD GPU shows up in glxinfo and eglinfo:

$ which glxinfo
/data/EasyBuild-develop/software/OpenGL/2025b-GCCcore-14.3.0/bin/glxinfo
$ glxinfo | grep radeonsi
    Device: AMD Radeon RX 9070 (radeonsi, gfx1201, LLVM 20.1.8, DRM 3.64, 6.16.3-arch1-1) (0x7550)
OpenGL renderer string: AMD Radeon RX 9070 (radeonsi, gfx1201, LLVM 20.1.8, DRM 3.64, 6.16.3-arch1-1)
g: AMD Radeon RX 9070 (radeonsi, gfx1201, LLVM 20.1.8, DRM 3.64, 6.16.3-arch1-1)
$ eglinfo | grep radeonsi
EGL driver name: radeonsi
OpenGL core profile renderer: AMD Radeon Graphics (radeonsi, raphael_mendocino, LLVM 20.1.8, DRM 3.64, 6.16.3-arch1-1)
OpenGL compatibility profile renderer: AMD Radeon Graphics (radeonsi, raphael_mendocino, LLVM 20.1.8, DRM 3.64, 6.16.3-arch1-1)
OpenGL ES profile renderer: AMD Radeon Graphics (radeonsi, raphael_mendocino, LLVM 20.1.8, DRM 3.64, 6.16.3-arch1-1)
[...]

@Thyre
Copy link
Collaborator Author

Thyre commented Sep 1, 2025

Test report by @Thyre
FAILED
Build succeeded for 2 out of 3 (3 easyconfigs in total)
ZAM054 - Linux Zorin OS 17, x86_64, 12th Gen Intel(R) Core(TM) i7-1260P, 1 x NVIDIA NVIDIA GeForce MX550, 580.65.06, Python 3.10.12
See https://gist.github.com/Thyre/20cd07de7913063fba3c8805c3bfaf38 for a full test report.

@Thyre
Copy link
Collaborator Author

Thyre commented Sep 1, 2025

Test report by @Thyre
SUCCESS
Build succeeded for 3 out of 3 (3 easyconfigs in total)
ZAM054 - Linux Zorin OS 17, x86_64, 12th Gen Intel(R) Core(TM) i7-1260P, 1 x NVIDIA NVIDIA GeForce MX550, 580.65.06, Python 3.10.12
See https://gist.github.com/Thyre/11972fd14eb075e637042c92640f1231 for a full test report.

@Thyre
Copy link
Collaborator Author

Thyre commented Sep 1, 2025

From ZAM054 ( NVIDIA GPU ):

$ __GLX_VENDOR_LIBRARY_NAME=nvidia glxinfo | grep vendor
server glx vendor string: SGI
client glx vendor string: NVIDIA Corporation
OpenGL vendor string: NVIDIA Corporation

As expected, one also sees warnings due to the Intel driver missing.

@Thyre
Copy link
Collaborator Author

Thyre commented Sep 1, 2025

Per conventions of our other bundles (like Python-bundle-PyPI), we should probably name the OpenGL version 2025.08.

@Thyre
Copy link
Collaborator Author

Thyre commented Sep 1, 2025

Test report by @Thyre
SUCCESS
Build succeeded for 3 out of 3 (3 easyconfigs in total)
Linux - Linux Arch Linux UNKNOWN, x86_64, AMD Ryzen 7 7800X3D 8-Core Processor (zen4), 1 x AMD Navi 48 [Radeon RX 9070/9070 XT/9070 GRE] (device id: 0x7550, gfx: gfx1201, driver: 6.16.3-arch1-1), 1 x AMD Raphael (device id: 0x164e, gfx: gfx1036, driver: 6.16.3-arch1-1), Python 3.13.7
See https://gist.github.com/Thyre/fd8af5829768b4eeee4ef1cc6807a89d for a full test report.

@Thyre
Copy link
Collaborator Author

Thyre commented Sep 1, 2025

@boegelbot please test @ jsc-zen3
EB_ARGS="--installpath=/tmp/$USER/ecpr-23764"

@boegelbot
Copy link
Collaborator

@Thyre: Request for testing this PR well received on jsczen3l1.int.jsc-zen3.fz-juelich.de

PR test command 'if [[ develop != 'develop' ]]; then EB_BRANCH=develop ./easybuild_develop.sh 2> /dev/null 1>&2; EB_PREFIX=/home/boegelbot/easybuild/develop source init_env_easybuild_develop.sh; fi; EB_PR=23764 EB_ARGS="--installpath=/tmp/$USER/ecpr-23764" EB_CONTAINER= EB_REPO=easybuild-easyconfigs EB_BRANCH=develop /opt/software/slurm/bin/sbatch --job-name test_PR_23764 --ntasks=8 ~/boegelbot/eb_from_pr_upload_jsc-zen3.sh' executed!

  • exit code: 0
  • output:
Submitted batch job 7803

Test results coming soon (I hope)...

Details

- notification for comment with ID 3241736651 processed

Message to humans: this is just bookkeeping information for me,
it is of no use to you (unless you think I have a bug, which I don't).

@boegelbot
Copy link
Collaborator

Test report by @boegelbot
SUCCESS
Build succeeded for 3 out of 3 (3 easyconfigs in total)
jsczen3c2.int.jsc-zen3.fz-juelich.de - Linux Rocky Linux 9.6, x86_64, AMD EPYC-Milan Processor (zen3), Python 3.9.21
See https://gist.github.com/boegelbot/816a68f99363d868b148a3470352f932 for a full test report.

@github-actions github-actions bot added the update label Sep 1, 2025
@github-actions
Copy link

github-actions bot commented Sep 1, 2025

Updated software glslang-SPIRV-15.4.0-GCCcore-14.3.0.eb

Diff against glslang-SPIRV-15.3.0-GCCcore-14.2.0.eb

easybuild/easyconfigs/g/glslang-SPIRV/glslang-SPIRV-15.3.0-GCCcore-14.2.0.eb

diff --git a/easybuild/easyconfigs/g/glslang-SPIRV/glslang-SPIRV-15.3.0-GCCcore-14.2.0.eb b/easybuild/easyconfigs/g/glslang-SPIRV/glslang-SPIRV-15.4.0-GCCcore-14.3.0.eb
index 4139edf3dc..a421ca1c66 100644
--- a/easybuild/easyconfigs/g/glslang-SPIRV/glslang-SPIRV-15.3.0-GCCcore-14.2.0.eb
+++ b/easybuild/easyconfigs/g/glslang-SPIRV/glslang-SPIRV-15.4.0-GCCcore-14.3.0.eb
@@ -1,7 +1,7 @@
 easyblock = 'CMakeMake'
 
 name = 'glslang-SPIRV'
-version = '15.3.0'
+version = '15.4.0'
 
 homepage = 'https://www.khronos.org/opengles/sdk/tools/Reference-Compiler/'
 description = """Glslang is the official reference compiler front end for the OpenGL ES and OpenGL shading languages.
@@ -9,12 +9,12 @@ It implements a strict interpretation of the specifications for these languages.
 either from a command line or programmatically. The OpenGL and OpenGL ES working groups are committed to maintaining
 consistency between the reference compiler and the corresponding shading language specifications."""
 
-toolchain = {'name': 'GCCcore', 'version': '14.2.0'}
+toolchain = {'name': 'GCCcore', 'version': '14.3.0'}
 toolchainopts = {'pic': True}
 
-# From https://github.com/KhronosGroup/glslang/blob/15.3.0/known_good.json
-local_spirv_tools_commit = 'a62abcb402009b9ca5975e6167c09f237f630e0e'
-local_spirv_headers_commit = 'aa6cef192b8e693916eb713e7a9ccadf06062ceb'
+# From https://github.com/KhronosGroup/glslang/blob/15.4.0/known_good.json
+local_spirv_tools_commit = '33e02568181e3312f49a3cf33df470bf96ef293a'  # equivalent to v2025.3.0.rc1
+local_spirv_headers_commit = '2a611a970fdbc41ac2e3e328802aed9985352dca'  # equivalent to v1.4.321.0
 local_googletest_commit = 'f8d7d77c06936315286eb55f8de22cd23c188571'  # equivalent to tag v1.14.0
 
 local_github_repos = [
@@ -40,20 +40,20 @@ for local_owner, local_repo, local_commit, local_dir in local_github_repos:
     })
 
 checksums = [
-    {'15.3.0.tar.gz': 'c6c21fe1873c37e639a6a9ac72d857ab63a5be6893a589f34e09a6c757174201'},
-    {'SPIRV-Tools-a62abcb4.tar.xz': 'fd542f1e368f5ad35f75bed14ecc797279f0232dded22fe66098633505ed8d23'},
-    {'SPIRV-Headers-aa6cef19.tar.xz': 'd033dddca7e6692e1b27cb05f6dbf8d4fca23b11dd9cbfc015a43e7a04c878fa'},
+    {'15.4.0.tar.gz': 'b16c78e7604b9be9f546ee35ad8b6db6f39bbbbfb19e8d038b6fe2ea5bba4ff4'},
+    {'SPIRV-Tools-33e02568.tar.xz': '57cc1a374b2d4829a3165b586f287d33e6beb4ee69d49e42c80a2cd2e8983c1d'},
+    {'SPIRV-Headers-2a611a97.tar.xz': '0333b5d2c63b95be3771a3146b3692e7a6720889187275669119c14a48e3fd6e'},
     {'googletest-f8d7d77c.tar.xz': '8dd1ff67f8abca903d3f03c78eaae7b2076a73f465cb1f369f3698bfbd6f4aad'},
 ]
 
 builddependencies = [
-    ('CMake', '3.31.3'),
-    ('binutils', '2.42'),
+    ('binutils', '2.44'),
+    ('CMake', '4.0.3'),
     ('Bison', '3.8.2'),
 ]
 
 dependencies = [
-    ('Python', '3.13.1'),  # Only needed with SPIRV
+    ('Python', '3.13.5'),  # Only needed with SPIRV
 ]
 
 configopts = "-DENABLE_OPT=ON"  # Needed if SPIRV is used

@Thyre Thyre changed the title {compiler,lib,vis}[GCCcore/14.3.0] glslang v15.3.0, libclc v20.1.8, OpenGL v2025b {compiler,lib,vis}[GCCcore/14.3.0] glslang v15.3.0, libclc v20.1.8, OpenGL v2025.08 Sep 1, 2025
@Thyre Thyre removed the update label Sep 1, 2025
@Thyre Thyre marked this pull request as ready for review September 1, 2025 11:58
@Thyre
Copy link
Collaborator Author

Thyre commented Sep 1, 2025

@boegelbot please test @ jsc-zen3

@boegelbot
Copy link
Collaborator

@Thyre: Request for testing this PR well received on jsczen3l1.int.jsc-zen3.fz-juelich.de

PR test command 'if [[ develop != 'develop' ]]; then EB_BRANCH=develop ./easybuild_develop.sh 2> /dev/null 1>&2; EB_PREFIX=/home/boegelbot/easybuild/develop source init_env_easybuild_develop.sh; fi; EB_PR=23764 EB_ARGS= EB_CONTAINER= EB_REPO=easybuild-easyconfigs EB_BRANCH=develop /opt/software/slurm/bin/sbatch --job-name test_PR_23764 --ntasks=8 ~/boegelbot/eb_from_pr_upload_jsc-zen3.sh' executed!

  • exit code: 0
  • output:
Submitted batch job 7805

Test results coming soon (I hope)...

Details

- notification for comment with ID 3242091992 processed

Message to humans: this is just bookkeeping information for me,
it is of no use to you (unless you think I have a bug, which I don't).

@Thyre
Copy link
Collaborator Author

Thyre commented Sep 1, 2025

Test report by @Thyre
SUCCESS
Build succeeded for 3 out of 3 (3 easyconfigs in total)
Linux - Linux Arch Linux UNKNOWN, x86_64, AMD Ryzen 7 7800X3D 8-Core Processor (zen4), 1 x AMD Navi 48 [Radeon RX 9070/9070 XT/9070 GRE] (device id: 0x7550, gfx: gfx1201, driver: 6.16.3-arch1-1), 1 x AMD Raphael (device id: 0x164e, gfx: gfx1036, driver: 6.16.3-arch1-1), Python 3.13.7
See https://gist.github.com/Thyre/d4666f1673511c121ddfa8de521bdae0 for a full test report.

@Thyre
Copy link
Collaborator Author

Thyre commented Sep 1, 2025

Test report by @Thyre
SUCCESS
Build succeeded for 3 out of 3 (3 easyconfigs in total)
ZAM054 - Linux Zorin OS 17, x86_64, 12th Gen Intel(R) Core(TM) i7-1260P, 1 x NVIDIA NVIDIA GeForce MX550, 580.65.06, Python 3.10.12
See https://gist.github.com/Thyre/19487b15988f425ed9f44f9040bf6fbe for a full test report.

@boegelbot
Copy link
Collaborator

Test report by @boegelbot
SUCCESS
Build succeeded for 3 out of 3 (3 easyconfigs in total)
jsczen3c2.int.jsc-zen3.fz-juelich.de - Linux Rocky Linux 9.6, x86_64, AMD EPYC-Milan Processor (zen3), Python 3.9.21
See https://gist.github.com/boegelbot/52c851d2507420bab575d538256d8743 for a full test report.

@Thyre
Copy link
Collaborator Author

Thyre commented Sep 1, 2025

Test report by @Thyre
SUCCESS
Build succeeded for 5 out of 5 (3 easyconfigs in total)
Framework - Linux Fedora Linux 42, x86_64, AMD Ryzen AI 7 350 w/ Radeon 860M (zen5), 1 x AMD Krackan [Radeon 840M / 860M Graphics] (model: 0x1114, driver: "6.15.10-200.fc42.x86_64"), Python 3.13.7
See https://gist.github.com/Thyre/4a439a60057ba2043b0b2f9a8e927e5d for a full test report.


 jreuter@Framework  ~  module purge --force    
 jreuter@Framework  ~  glxinfo | grep -e "radeonsi" -e "Mesa"
client glx vendor string: Mesa Project and SGI
    Device: AMD Radeon 860M Graphics (radeonsi, gfx1152, LLVM 20.1.8, DRM 3.63, 6.15.10-200.fc42.x86_64) (0x1114)
OpenGL renderer string: AMD Radeon 860M Graphics (radeonsi, gfx1152, LLVM 20.1.8, DRM 3.63, 6.15.10-200.fc42.x86_64)
OpenGL core profile version string: 4.6 (Core Profile) Mesa 25.1.7
OpenGL version string: 4.6 (Compatibility Profile) Mesa 25.1.7
OpenGL ES profile version string: OpenGL ES 3.2 Mesa 25.1.7
 jreuter@Framework  ~  ml GCCcore/14.3.0 OpenGL
 jreuter@Framework  ~  glxinfo | grep -e "radeonsi" -e "Mesa"
client glx vendor string: Mesa Project and SGI
    Device: AMD Radeon 860M Graphics (radeonsi, gfx1152, LLVM 20.1.8, DRM 3.63, 6.15.10-200.fc42.x86_64) (0x1114)
OpenGL renderer string: AMD Radeon 860M Graphics (radeonsi, gfx1152, LLVM 20.1.8, DRM 3.63, 6.15.10-200.fc42.x86_64)
OpenGL core profile version string: 4.6 (Core Profile) Mesa 25.2.1
OpenGL version string: 4.6 (Compatibility Profile) Mesa 25.2.1
OpenGL ES profile version string: OpenGL ES 3.2 Mesa 25.2.1

…CCcore-14.3.0.eb, OpenGL-2025b-GCCcore-14.3.0.eb
@Thyre
Copy link
Collaborator Author

Thyre commented Sep 12, 2025

Test report by @Thyre
SUCCESS
Build succeeded for 3 out of 3 (3 easyconfigs in total)
ZAM054 - Linux Zorin OS 17, x86_64, 12th Gen Intel(R) Core(TM) i7-1260P, 1 x NVIDIA NVIDIA GeForce MX550, 580.65.06, Python 3.10.12
See https://gist.github.com/Thyre/2d62acbdc01c2d4227021e8466104c67 for a full test report.

@Thyre
Copy link
Collaborator Author

Thyre commented Sep 12, 2025

@boegelbot please test @ jsc-zen3

@boegelbot
Copy link
Collaborator

@Thyre: Request for testing this PR well received on jsczen3l1.int.jsc-zen3.fz-juelich.de

PR test command 'if [[ develop != 'develop' ]]; then EB_BRANCH=develop ./easybuild_develop.sh 2> /dev/null 1>&2; EB_PREFIX=/home/boegelbot/easybuild/develop source init_env_easybuild_develop.sh; fi; EB_PR=23764 EB_ARGS= EB_CONTAINER= EB_REPO=easybuild-easyconfigs EB_BRANCH=develop /opt/software/slurm/bin/sbatch --job-name test_PR_23764 --ntasks=8 ~/boegelbot/eb_from_pr_upload_jsc-zen3.sh' executed!

  • exit code: 0
  • output:
Submitted batch job 7941

Test results coming soon (I hope)...

Details

- notification for comment with ID 3285055813 processed

Message to humans: this is just bookkeeping information for me,
it is of no use to you (unless you think I have a bug, which I don't).

@boegelbot
Copy link
Collaborator

Test report by @boegelbot
SUCCESS
Build succeeded for 3 out of 3 (3 easyconfigs in total)
jsczen3c1.int.jsc-zen3.fz-juelich.de - Linux Rocky Linux 9.6, x86_64, AMD EPYC-Milan Processor (zen3), Python 3.9.21
See https://gist.github.com/boegelbot/23c80ff2d90f0d2a860bd103b9d5af48 for a full test report.

@Thyre
Copy link
Collaborator Author

Thyre commented Sep 22, 2025

Test report by @Thyre
SUCCESS
Build succeeded for 3 out of 3 (3 easyconfigs in total)
Linux - Linux Arch Linux UNKNOWN, x86_64, AMD Ryzen 7 7800X3D 8-Core Processor (zen4), 1 x AMD Navi 48 [Radeon RX 9070/9070 XT/9070 GRE] (device id: 0x7550, gfx: gfx1201, driver: 6.16.8-arch1-1), 1 x AMD Raphael (device id: 0x164e, gfx: gfx1036, driver: 6.16.8-arch1-1), Python 3.13.7
See https://gist.github.com/Thyre/10903017b939901d384d9b8b54af8bfd for a full test report.

@Thyre Thyre mentioned this pull request Sep 22, 2025
2 tasks
@Thyre
Copy link
Collaborator Author

Thyre commented Sep 22, 2025

Test report by @Thyre
SUCCESS
Build succeeded for 5 out of 5 (3 easyconfigs in total)
jrc0900.jureca - Linux Rocky Linux 9.6, AArch64, ARM UNKNOWN, 1 x NVIDIA NVIDIA GH200 480GB, 580.65.06, Python 3.9.21
See https://gist.github.com/Thyre/99c40e8889c3710265e4a954e37f7961 for a full test report.

Copy link
Contributor

@Micket Micket left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry for being long worded. I'm bad at cutting down my text. I tried to be more direct here than my rambling response in the issue thread.

Comment on lines 89 to 109
# 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', {
'easyblock': 'ConfigureMake',
'source_urls': ['https://github.com/nigels-com/glew/releases/download/%(name)s-%(version)s/'],
'sources': ['%(name)s-%(version)s.tgz'],
'patches': [
{'name': 'glew-2.2.0-uintptr_t.patch', 'alt_location': 'glew'},
],
'checksums': [
{'glew-2.2.0.tgz': 'd4fc82893cfb00109578d0a1a2337fb8ca335b3ceccf97b97e5cc7f08e4353e1'},
{'glew-2.2.0-uintptr_t.patch': '30fffe5b6606ae840fd5d10d353196c8faf3b88618ab8db03bd1b50dde98a280'},
],
'start_dir': '%(namelower)s-%(version)s',
'skipsteps': ['configure'],
'buildopts': local_glew_buildopts,
'installopts': 'GLEW_PREFIX=%(installdir)s GLEW_DEST=%(installdir)s ',
'install_cmd': 'make install.all ',
}),
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should skip GLEW. It's barely used by anything, but most importantly, shadowing it is not safe at all; the library symbols will conflict, so loading one while a software links to the other would end up with all segfaults. The previous modules ensured that these conflicted.

I'm not sure we have anything anymore that even uses GLEW since ParaView ditched it for GLAD (static generator).

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You have a very good point here, especially since we're now having rpath enabled by default. I'll remove the component.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I dropped GLEW from this EasyConfig.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually, rpath does help a little bit here (but it's not mandatory, so I don't want to rely on it); if it's just different programs that would have rpath linked to egl vs glx, then they could coexist.

Hopefully, more things switch to GLAD and we don't have to worry about this at all.

Comment on lines 135 to 144
(
'{ 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'
),
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Isn't the standard Mesa build already generating this exact file (into this very location)? It certainly did for all my previous Mesa builds, and we never generated this file manually like this before.

It's standard, required file for all EGL stuff these days after all. All library providers would need to provide these themselves.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll cross-check, but I'm totally fine with removing this. I've checked quite a few systems and the only one missing these files was a empty Ubuntu container IIRC. I'd need to check my home server again. That one might not have the system files, but if our Mesa installation already provides them by default, there's no need to generate them again.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I removed both files. You're correct that Mesa already creates this (I checked the one from 2024a).

Comment on lines 124 to 134
# EGL vendor ICDs
(
'{ cat > %(installdir)s/share/glvnd/egl_vendor.d/10_nvidia.json; } << \'EOF\'\n'
'{\n'
' \"file_format_version\" : \"1.0.0\",\n'
' \"ICD\" : {\n'
' \"library_path\" : \"libEGL_nvidia.so.0\"\n'
' }\n'
'}\n'
'EOF'
),
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm really not sure why re-generating this json is done here.
It's a requirement that anything that is providing libEGL_nvidia.so.0 also must be providing the accompanying ICD (10_nvidia_json).
Every EGL vendor would need to supply this.

I don't have any alternative system where there would be anything beyond mesa or nvidia, so I'm not sure there is a single other vendor to compare with here (ARM Mali? broadcome/videocore on raspberry pi maybe?)

The only thing I can think of is maybe a OS installed Intel GPU, and we aren't building that in this Mesa (but we could?) But even in that case, it's would still be libEGL_mesa.so.0., so LD_LIBRARY_PATH would take over.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't have any alternative system where there would be anything beyond mesa or nvidia, so I'm not sure there is a single other vendor to compare with here (ARM Mali? broadcome/videocore on raspberry pi maybe?)

I think handling NVIDIA & Mesa (therefore AMD & potentially Intel) is a good set to target. If there's more, we could try to handle this later. But since the core audience for EasyBuild is HPC, I don't think that other graphic accelerators are common.

The only thing I can think of is maybe a OS installed Intel GPU, and we aren't building that in this Mesa (but we could?) But even in that case, it's would still be libEGL_mesa.so.0., so LD_LIBRARY_PATH would take over.

I'd need to check the requirements for Intel GPUs again, but building that as well might be worthwhile.
At that point we could adapt the EasyBlock for this as well, so that we always build them if the dependencies are given.

}

modextravars = {
'EGL_PLATFORM': 'surfaceless',
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hm. Does this not interfere with interactive applications by forcing some off-screen rendering to happen? I haven't played with this parameter before.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jhgoebbert, can you maybe give some information on this? 😄

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.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So, a lot of the text in the description is.. very misleading.

Some strange emphasis on that it's using the same lib-directory? Well, first, they aren't in this easyconfig. Also, if they are, or not makes no difference to GLVND anyway. It looks at your library paths. Standard OS paths, as well as LD_LIBRARY_PATH as far as I know.

This easyconfig does include a duplicate ICD for mesa, but that just fails to load unless the user also provides the nvidia drivers separately (which will also provide them with a secondary ICD json).
This might mislead people into thinking they need to embed the nvidia driver libraries into this easyconfigs singular %(installdir)s, which would be completely unnecessary and convoluted.
GLVND works perfectly well without doing any such thing (i mean, all the previous Mesa ones just did the simple approach, and that has always worked with accelerated 3D support, assuming you have the nvidia driver libs somewhere, which is still a requirement here).

I have no idea what is meant that very last part about XScreens. That you can pick at runtime?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I haven't really looked at the text, basically copied what we had at JSC in prior stages. I'll rework the text a bit.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I completely rewrote the description. Hopefully this is a bit better now 😄

@Thyre
Copy link
Collaborator Author

Thyre commented Sep 23, 2025

Sorry for being long worded. I'm bad at cutting down my text. I tried to be more direct here than my rambling response in the issue thread.

Thanks a lot for the detailed review.
My intention was do bring an updated EasyConfig PR for this exact discussion, since it helps everyone at the end.
I'll try to address your comments as soon as possible. Maybe @jhgoebbert can also chime in here, as I'm absolutely no expert in OpenGL & Vulkan.

Signed-off-by: Jan André Reuter <[email protected]>
We first need to figure out what we need to do specifically

Signed-off-by: Jan André Reuter <[email protected]>
Signed-off-by: Jan André Reuter <[email protected]>
Signed-off-by: Jan André Reuter <[email protected]>
@Thyre
Copy link
Collaborator Author

Thyre commented Sep 23, 2025

Test report by @Thyre
SUCCESS
Build succeeded for 3 out of 3 (3 easyconfigs in total)
ZAM054 - Linux Zorin OS 17, x86_64, 12th Gen Intel(R) Core(TM) i7-1260P, 1 x NVIDIA NVIDIA GeForce MX550, 580.65.06, Python 3.10.12
See https://gist.github.com/Thyre/2e258bc314aa4305e0facddc9a3152c4 for a full test report.

@Thyre
Copy link
Collaborator Author

Thyre commented Sep 23, 2025

@boegelbot please test @ jsc-zen3

@boegelbot
Copy link
Collaborator

@Thyre: Request for testing this PR well received on jsczen3l1.int.jsc-zen3.fz-juelich.de

PR test command 'if [[ develop != 'develop' ]]; then EB_BRANCH=develop ./easybuild_develop.sh 2> /dev/null 1>&2; EB_PREFIX=/home/boegelbot/easybuild/develop source init_env_easybuild_develop.sh; fi; EB_PR=23764 EB_ARGS= EB_CONTAINER= EB_REPO=easybuild-easyconfigs EB_BRANCH=develop /opt/software/slurm/bin/sbatch --job-name test_PR_23764 --ntasks=8 ~/boegelbot/eb_from_pr_upload_jsc-zen3.sh' executed!

  • exit code: 0
  • output:
Submitted batch job 8033

Test results coming soon (I hope)...

Details

- notification for comment with ID 3323192083 processed

Message to humans: this is just bookkeeping information for me,
it is of no use to you (unless you think I have a bug, which I don't).

@boegelbot
Copy link
Collaborator

Test report by @boegelbot
SUCCESS
Build succeeded for 3 out of 3 (3 easyconfigs in total)
jsczen3c2.int.jsc-zen3.fz-juelich.de - Linux Rocky Linux 9.6, x86_64, AMD EPYC-Milan Processor (zen3), Python 3.9.21
See https://gist.github.com/boegelbot/3061ca0665aba4af873d311015d61dfa for a full test report.

@Micket
Copy link
Contributor

Micket commented Oct 4, 2025

Test report by @Micket
SUCCESS
Build succeeded for 3 out of 3 (3 easyconfigs in total)
vera-r07-05 - Linux Rocky Linux 9.6, x86_64, Intel(R) Xeon(R) Gold 6338 CPU @ 2.00GHz, 1 x NVIDIA NVIDIA A100-SXM4-40GB, 580.65.06, Python 3.9.21
See https://gist.github.com/Micket/bf4b86fbed398ff90b654c293d79464c for a full test report.

Copy link
Contributor

@Micket Micket left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lets merge this as is, though i might discover something down the line that requires tweaking, i just have so many more easyconfigs to build on top of this before i can determine that.

@Micket Micket merged commit acbab5c into easybuilders:develop Oct 4, 2025
8 checks passed
@Thyre
Copy link
Collaborator Author

Thyre commented Oct 4, 2025

lets merge this as is, though i might discover something down the line that requires tweaking, i just have so many more easyconfigs to build on top of this before i can determine that.

Happy to help out with any fixes if they're required 😄

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

2025b issues & PRs related to 2025b common toolchains new ready-to-review update

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Wrapping MESA in OpenGL

5 participants