Skip to content

{lib,phys}[GCCcore/13.2.0,gfbf/2023b] MuJoCo v3.3.0, python-mujoco v3.3.0#22643

Merged
bedroge merged 5 commits intoeasybuilders:developfrom
Flamefire:20250321174718_new_pr_MuJoCo330
Dec 15, 2025
Merged

{lib,phys}[GCCcore/13.2.0,gfbf/2023b] MuJoCo v3.3.0, python-mujoco v3.3.0#22643
bedroge merged 5 commits intoeasybuilders:developfrom
Flamefire:20250321174718_new_pr_MuJoCo330

Conversation

@Flamefire
Copy link
Copy Markdown
Contributor

@Flamefire Flamefire commented Mar 21, 2025

(created using eb --new-pr)

This is especially an improvement over our previous easyconfigs as it builds fully from source without downloading anything.

Requires

….0-gfbf-2023b.eb and patches: MuJoCo-3.3.0_use_eb_deps.patch, python-mujoco-3.3.0_fix-ogl-use-after-free.patch, python-mujoco-3.3.0_use_eb_deps.patch
@github-actions
Copy link
Copy Markdown

github-actions bot commented Mar 21, 2025

Updated software MuJoCo-3.3.0-GCCcore-13.2.0.eb

Diff against MuJoCo-3.1.4-GCCcore-12.3.0.eb

easybuild/easyconfigs/m/MuJoCo/MuJoCo-3.1.4-GCCcore-12.3.0.eb

diff --git a/easybuild/easyconfigs/m/MuJoCo/MuJoCo-3.1.4-GCCcore-12.3.0.eb b/easybuild/easyconfigs/m/MuJoCo/MuJoCo-3.3.0-GCCcore-13.2.0.eb
index fe1f93209e..20019cc352 100644
--- a/easybuild/easyconfigs/m/MuJoCo/MuJoCo-3.1.4-GCCcore-12.3.0.eb
+++ b/easybuild/easyconfigs/m/MuJoCo/MuJoCo-3.3.0-GCCcore-13.2.0.eb
@@ -1,7 +1,7 @@
-easyblock = 'PackedBinary'
+easyblock = 'CMakeMake'
 
 name = 'MuJoCo'
-version = '3.1.4'
+version = '3.3.0'
 
 homepage = 'https://mujoco.org/'
 description = """MuJoCo stands for Multi-Joint dynamics with Contact. It is a general purpose
@@ -10,37 +10,80 @@ biomechanics, graphics and animation, machine learning, and other areas which
 demand fast and accurate simulation of articulated structures interacting with
 their environment."""
 
-toolchain = {'name': 'GCCcore', 'version': '12.3.0'}
+toolchain = {'name': 'GCCcore', 'version': '13.2.0'}
 
-source_urls = ['https://github.com/deepmind/mujoco/releases/download/%(version)s']
-sources = ['%(namelower)s-%(version)s-linux-%(arch)s.tar.gz']
-checksums = ['3bb373e081daaf6bf179d7f83dd8fa39e491a6daa4250a1b7ac42850309cb313']
+source_urls = ['https://github.com/google-deepmind/mujoco/archive/refs/tags']
+
+# Sources otherwise downloaded by CMake FetchContent
+local_extract_cmd_tmpl = "mkdir -p _deps/{0} && tar --strip-components=1 -C _deps/{0} -xf %s"
+sources = [
+    '%(version)s.tar.gz',
+    # Hashes from MUJOCO_DEP_VERSION_* in cmake/MujocoDependencies.cmake
+    {
+        'source_urls': ['https://github.com/danfis/libccd/archive'],
+        'filename': '7931e764a19ef6b21b443376c699bbc9c6d4fba8.tar.gz',
+        'extract_cmd': local_extract_cmd_tmpl.format('ccd-src'),
+    },
+    {
+        'source_urls': ['https://github.com/lvandeve/lodepng/archive'],
+        'filename': 'b4ed2cd7ecf61d29076169b49199371456d4f90b.tar.gz',
+        'extract_cmd': local_extract_cmd_tmpl.format('lodepng-src'),
+    },
+    {
+        'source_urls': ['https://github.com/aparis69/MarchingCubeCpp/archive'],
+        'filename': 'f03a1b3ec29b1d7d865691ca8aea4f1eb2c2873d.tar.gz',
+        'extract_cmd': local_extract_cmd_tmpl.format('marchingcubecpp-src'),
+    },
+]
+patches = [
+    'MuJoCo-3.3.0_use_eb_deps.patch',
+]
+checksums = [
+    {'3.3.0.tar.gz': '608cd202ac5066096fdc7e5adb322aca2fe7b4d118543a7c4b54dc183a6b3b54'},
+    {'7931e764a19ef6b21b443376c699bbc9c6d4fba8.tar.gz':
+     '479994a86d32e2effcaad64204142000ee6b6b291fd1859ac6710aee8d00a482'},
+    {'b4ed2cd7ecf61d29076169b49199371456d4f90b.tar.gz':
+     'b67e466ba659c07ac775d07dbd97af319cde449ce14abed9ae596df29d888603'},
+    {'f03a1b3ec29b1d7d865691ca8aea4f1eb2c2873d.tar.gz':
+     '227c10b2cffe886454b92a0e9ef9f0c9e8e001d00ea156cc37c8fc43055c9ca6'},
+    {'MuJoCo-3.3.0_use_eb_deps.patch': 'd60c4f78f5f59c8fc43c1e9e93580806b86bcd17507c1030e831bece17fbd710'},
+]
 
 builddependencies = [
     ('binutils', '2.40'),
+    ('CMake', '3.27.6'),
+    ('googlebenchmark', '1.9.1'),
+    ('googletest', '1.14.0'),
 ]
-
-# MuJoCo bundles 3 variants of glew using non-standard sonames:
-# - libglew with GLX
-# - libglewegl with EGL
-# - libglewosmesa with OSMESA
-# - Software depending on MuJoCo expect these non-standard sonames, so they should not be removed
-# - libglew and libglewegl seem to work with Mesa and X11 for toolchain GCCcore/11.2.0
-# - libglewosmesa has to be replaced as it links to an old libOSMesa
-
 dependencies = [
-    ('glew', '2.2.0', '-osmesa'),
+    ('Abseil', '20240116.1'),
+    ('GLFW', '3.4'),
+    ('Qhull', '2020.2'),
+    ('SdfLib', '20250125'),
+    ('tinyobjloader', '2.0.0rc13'),
+    ('TinyXML-2', '11.0.0'),
+    ('X11', '20231019'),
 ]
 
-postinstallcmds = [
-    # replace bundled libglewosmesa.so with glew libs from EB
-    "ln -sf $EBROOTGLEW/lib64/libGLEW.so %(installdir)s/lib/libglewosmesa.so",
-]
+build_shared_libs = True
+# Avoid test failure due to different vectorization between C/C++
+# see https://github.com/google-deepmind/mujoco/issues/2515
+preconfigopts = 'CXXFLAGS="$CXXFLAGS -ffp-contract=off" '
+
+configopts = ' '.join([
+    '-DMUJOCO_SAMPLES_USE_SYSTEM_GLFW=ON',
+    '-DMUJOCO_SIMULATE_USE_SYSTEM_GLFW=ON',
+    '-DMUJOCO_TEST_PYTHON_UTIL=OFF',
+    '-DFETCHCONTENT_FULLY_DISCONNECTED=ON',
+    '-DFETCHCONTENT_BASE_DIR=%(builddir)s/_deps',
+])
+
+runtest = True
 
 sanity_check_paths = {
     'files': ['bin/basic', 'bin/record', 'bin/simulate',
               'lib/libmujoco.%s' % SHLIB_EXT],
-    'dirs': ['include', 'model', 'sample'],
+    'dirs': ['bin', 'include', 'share/mujoco/model'],
 }
 
 sanity_check_commands = ['basic']
Diff against MuJoCo-2.2.2-GCCcore-11.3.0.eb

easybuild/easyconfigs/m/MuJoCo/MuJoCo-2.2.2-GCCcore-11.3.0.eb

diff --git a/easybuild/easyconfigs/m/MuJoCo/MuJoCo-2.2.2-GCCcore-11.3.0.eb b/easybuild/easyconfigs/m/MuJoCo/MuJoCo-3.3.0-GCCcore-13.2.0.eb
index 01b0b71bbb..20019cc352 100644
--- a/easybuild/easyconfigs/m/MuJoCo/MuJoCo-2.2.2-GCCcore-11.3.0.eb
+++ b/easybuild/easyconfigs/m/MuJoCo/MuJoCo-3.3.0-GCCcore-13.2.0.eb
@@ -1,7 +1,7 @@
-easyblock = 'PackedBinary'
+easyblock = 'CMakeMake'
 
 name = 'MuJoCo'
-version = '2.2.2'
+version = '3.3.0'
 
 homepage = 'https://mujoco.org/'
 description = """MuJoCo stands for Multi-Joint dynamics with Contact. It is a general purpose
@@ -10,37 +10,80 @@ biomechanics, graphics and animation, machine learning, and other areas which
 demand fast and accurate simulation of articulated structures interacting with
 their environment."""
 
-toolchain = {'name': 'GCCcore', 'version': '11.3.0'}
+toolchain = {'name': 'GCCcore', 'version': '13.2.0'}
 
-source_urls = ['https://github.com/deepmind/mujoco/releases/download/%(version)s']
-sources = ['%(namelower)s-%(version)s-linux-%(arch)s.tar.gz']
-checksums = ['c887a4c315201ce47cf654e0115a55c29648567450d44cd8afe8e3a09d34ea1e']
+source_urls = ['https://github.com/google-deepmind/mujoco/archive/refs/tags']
 
-builddependencies = [
-    ('binutils', '2.38'),
+# Sources otherwise downloaded by CMake FetchContent
+local_extract_cmd_tmpl = "mkdir -p _deps/{0} && tar --strip-components=1 -C _deps/{0} -xf %s"
+sources = [
+    '%(version)s.tar.gz',
+    # Hashes from MUJOCO_DEP_VERSION_* in cmake/MujocoDependencies.cmake
+    {
+        'source_urls': ['https://github.com/danfis/libccd/archive'],
+        'filename': '7931e764a19ef6b21b443376c699bbc9c6d4fba8.tar.gz',
+        'extract_cmd': local_extract_cmd_tmpl.format('ccd-src'),
+    },
+    {
+        'source_urls': ['https://github.com/lvandeve/lodepng/archive'],
+        'filename': 'b4ed2cd7ecf61d29076169b49199371456d4f90b.tar.gz',
+        'extract_cmd': local_extract_cmd_tmpl.format('lodepng-src'),
+    },
+    {
+        'source_urls': ['https://github.com/aparis69/MarchingCubeCpp/archive'],
+        'filename': 'f03a1b3ec29b1d7d865691ca8aea4f1eb2c2873d.tar.gz',
+        'extract_cmd': local_extract_cmd_tmpl.format('marchingcubecpp-src'),
+    },
+]
+patches = [
+    'MuJoCo-3.3.0_use_eb_deps.patch',
+]
+checksums = [
+    {'3.3.0.tar.gz': '608cd202ac5066096fdc7e5adb322aca2fe7b4d118543a7c4b54dc183a6b3b54'},
+    {'7931e764a19ef6b21b443376c699bbc9c6d4fba8.tar.gz':
+     '479994a86d32e2effcaad64204142000ee6b6b291fd1859ac6710aee8d00a482'},
+    {'b4ed2cd7ecf61d29076169b49199371456d4f90b.tar.gz':
+     'b67e466ba659c07ac775d07dbd97af319cde449ce14abed9ae596df29d888603'},
+    {'f03a1b3ec29b1d7d865691ca8aea4f1eb2c2873d.tar.gz':
+     '227c10b2cffe886454b92a0e9ef9f0c9e8e001d00ea156cc37c8fc43055c9ca6'},
+    {'MuJoCo-3.3.0_use_eb_deps.patch': 'd60c4f78f5f59c8fc43c1e9e93580806b86bcd17507c1030e831bece17fbd710'},
 ]
 
-# MuJoCo bundles 3 variants of glew using non-standard sonames:
-# - libglew with GLX
-# - libglewegl with EGL
-# - libglewosmesa with OSMESA
-# - Software depending on MuJoCo expect these non-standard sonames, so they should not be removed
-# - libglew and libglewegl seem to work with Mesa and X11 for toolchain GCCcore/11.2.0
-# - libglewosmesa has to be replaced as it links to an old libOSMesa
-
+builddependencies = [
+    ('binutils', '2.40'),
+    ('CMake', '3.27.6'),
+    ('googlebenchmark', '1.9.1'),
+    ('googletest', '1.14.0'),
+]
 dependencies = [
-    ('glew', '2.2.0', '-osmesa'),
+    ('Abseil', '20240116.1'),
+    ('GLFW', '3.4'),
+    ('Qhull', '2020.2'),
+    ('SdfLib', '20250125'),
+    ('tinyobjloader', '2.0.0rc13'),
+    ('TinyXML-2', '11.0.0'),
+    ('X11', '20231019'),
 ]
 
-postinstallcmds = [
-    # replace bundled libglewosmesa.so with glew libs from EB
-    "ln -sf $EBROOTGLEW/lib64/libGLEW.so %(installdir)s/lib/libglewosmesa.so",
-]
+build_shared_libs = True
+# Avoid test failure due to different vectorization between C/C++
+# see https://github.com/google-deepmind/mujoco/issues/2515
+preconfigopts = 'CXXFLAGS="$CXXFLAGS -ffp-contract=off" '
+
+configopts = ' '.join([
+    '-DMUJOCO_SAMPLES_USE_SYSTEM_GLFW=ON',
+    '-DMUJOCO_SIMULATE_USE_SYSTEM_GLFW=ON',
+    '-DMUJOCO_TEST_PYTHON_UTIL=OFF',
+    '-DFETCHCONTENT_FULLY_DISCONNECTED=ON',
+    '-DFETCHCONTENT_BASE_DIR=%(builddir)s/_deps',
+])
+
+runtest = True
 
 sanity_check_paths = {
-    'files': ['bin/basic', 'bin/derivative', 'bin/record', 'bin/simulate',
+    'files': ['bin/basic', 'bin/record', 'bin/simulate',
               'lib/libmujoco.%s' % SHLIB_EXT],
-    'dirs': ['include', 'model', 'sample'],
+    'dirs': ['bin', 'include', 'share/mujoco/model'],
 }
 
 sanity_check_commands = ['basic']
Diff against MuJoCo-2.1.1-GCCcore-11.2.0.eb

easybuild/easyconfigs/m/MuJoCo/MuJoCo-2.1.1-GCCcore-11.2.0.eb

diff --git a/easybuild/easyconfigs/m/MuJoCo/MuJoCo-2.1.1-GCCcore-11.2.0.eb b/easybuild/easyconfigs/m/MuJoCo/MuJoCo-3.3.0-GCCcore-13.2.0.eb
index f6cdc55170..20019cc352 100644
--- a/easybuild/easyconfigs/m/MuJoCo/MuJoCo-2.1.1-GCCcore-11.2.0.eb
+++ b/easybuild/easyconfigs/m/MuJoCo/MuJoCo-3.3.0-GCCcore-13.2.0.eb
@@ -1,7 +1,7 @@
-easyblock = 'PackedBinary'
+easyblock = 'CMakeMake'
 
 name = 'MuJoCo'
-version = '2.1.1'
+version = '3.3.0'
 
 homepage = 'https://mujoco.org/'
 description = """MuJoCo stands for Multi-Joint dynamics with Contact. It is a general purpose
@@ -10,46 +10,80 @@ biomechanics, graphics and animation, machine learning, and other areas which
 demand fast and accurate simulation of articulated structures interacting with
 their environment."""
 
-toolchain = {'name': 'GCCcore', 'version': '11.2.0'}
+toolchain = {'name': 'GCCcore', 'version': '13.2.0'}
 
-source_urls = ['https://github.com/deepmind/mujoco/releases/download/%(version)s']
-sources = ['%(namelower)s-%(version)s-linux-%(arch)s.tar.gz']
-checksums = [
+source_urls = ['https://github.com/google-deepmind/mujoco/archive/refs/tags']
+
+# Sources otherwise downloaded by CMake FetchContent
+local_extract_cmd_tmpl = "mkdir -p _deps/{0} && tar --strip-components=1 -C _deps/{0} -xf %s"
+sources = [
+    '%(version)s.tar.gz',
+    # Hashes from MUJOCO_DEP_VERSION_* in cmake/MujocoDependencies.cmake
+    {
+        'source_urls': ['https://github.com/danfis/libccd/archive'],
+        'filename': '7931e764a19ef6b21b443376c699bbc9c6d4fba8.tar.gz',
+        'extract_cmd': local_extract_cmd_tmpl.format('ccd-src'),
+    },
     {
-        '%(namelower)s-%(version)s-linux-aarch64.tar.gz':
-            '83949d7d159b3b958153efcd62d3c7c9b160917b37a19cacda95c2cb1f0dda19',
-        '%(namelower)s-%(version)s-linux-x86_64.tar.gz':
-            'd422720fc53f161992b264847d6173eabbe3a3710aa0045d68738ee942f3246e',
-        '%(namelower)s-%(version)s-linux-ppc64le.tar.gz':
-            '1075785e6a737ed3072decac4c1d44db692d6f20843496dacb59196af06957b0',
-    }
+        'source_urls': ['https://github.com/lvandeve/lodepng/archive'],
+        'filename': 'b4ed2cd7ecf61d29076169b49199371456d4f90b.tar.gz',
+        'extract_cmd': local_extract_cmd_tmpl.format('lodepng-src'),
+    },
+    {
+        'source_urls': ['https://github.com/aparis69/MarchingCubeCpp/archive'],
+        'filename': 'f03a1b3ec29b1d7d865691ca8aea4f1eb2c2873d.tar.gz',
+        'extract_cmd': local_extract_cmd_tmpl.format('marchingcubecpp-src'),
+    },
+]
+patches = [
+    'MuJoCo-3.3.0_use_eb_deps.patch',
+]
+checksums = [
+    {'3.3.0.tar.gz': '608cd202ac5066096fdc7e5adb322aca2fe7b4d118543a7c4b54dc183a6b3b54'},
+    {'7931e764a19ef6b21b443376c699bbc9c6d4fba8.tar.gz':
+     '479994a86d32e2effcaad64204142000ee6b6b291fd1859ac6710aee8d00a482'},
+    {'b4ed2cd7ecf61d29076169b49199371456d4f90b.tar.gz':
+     'b67e466ba659c07ac775d07dbd97af319cde449ce14abed9ae596df29d888603'},
+    {'f03a1b3ec29b1d7d865691ca8aea4f1eb2c2873d.tar.gz':
+     '227c10b2cffe886454b92a0e9ef9f0c9e8e001d00ea156cc37c8fc43055c9ca6'},
+    {'MuJoCo-3.3.0_use_eb_deps.patch': 'd60c4f78f5f59c8fc43c1e9e93580806b86bcd17507c1030e831bece17fbd710'},
 ]
 
 builddependencies = [
-    ('binutils', '2.37'),
+    ('binutils', '2.40'),
+    ('CMake', '3.27.6'),
+    ('googlebenchmark', '1.9.1'),
+    ('googletest', '1.14.0'),
 ]
-
-# MuJoCo bundles 3 variants of glew using non-standard sonames:
-# - libglew with GLX
-# - libglewegl with EGL
-# - libglewosmesa with OSMESA
-# Softare depending on MuJoCo expect these non-standard sonames, so they should not be removed
-# - libglew and libglewegl seem to work with Mesa and X11 in this toolchain
-# - libglewosmesa has to be replaced as it links to an old libOSMesa
-
 dependencies = [
-    ('glew', '2.2.0', '-osmesa'),
+    ('Abseil', '20240116.1'),
+    ('GLFW', '3.4'),
+    ('Qhull', '2020.2'),
+    ('SdfLib', '20250125'),
+    ('tinyobjloader', '2.0.0rc13'),
+    ('TinyXML-2', '11.0.0'),
+    ('X11', '20231019'),
 ]
 
-postinstallcmds = [
-    # replace bundled libglewosmesa.so with glew libs from EB
-    "ln -sf $EBROOTGLEW/lib64/libGLEW.so %(installdir)s/lib/libglewosmesa.so",
-]
+build_shared_libs = True
+# Avoid test failure due to different vectorization between C/C++
+# see https://github.com/google-deepmind/mujoco/issues/2515
+preconfigopts = 'CXXFLAGS="$CXXFLAGS -ffp-contract=off" '
+
+configopts = ' '.join([
+    '-DMUJOCO_SAMPLES_USE_SYSTEM_GLFW=ON',
+    '-DMUJOCO_SIMULATE_USE_SYSTEM_GLFW=ON',
+    '-DMUJOCO_TEST_PYTHON_UTIL=OFF',
+    '-DFETCHCONTENT_FULLY_DISCONNECTED=ON',
+    '-DFETCHCONTENT_BASE_DIR=%(builddir)s/_deps',
+])
+
+runtest = True
 
 sanity_check_paths = {
-    'files': ['bin/basic', 'bin/derivative', 'bin/record', 'bin/simulate',
-              'lib/libmujoco.%s' % SHLIB_EXT, 'lib/libmujoco_nogl.%s' % SHLIB_EXT],
-    'dirs': ['include', 'model', 'sample'],
+    'files': ['bin/basic', 'bin/record', 'bin/simulate',
+              'lib/libmujoco.%s' % SHLIB_EXT],
+    'dirs': ['bin', 'include', 'share/mujoco/model'],
 }
 
 sanity_check_commands = ['basic']

Updated software python-mujoco-3.3.0-gfbf-2023b.eb

Diff against python-mujoco-3.1.4-foss-2023a.eb

easybuild/easyconfigs/p/python-mujoco/python-mujoco-3.1.4-foss-2023a.eb

diff --git a/easybuild/easyconfigs/p/python-mujoco/python-mujoco-3.1.4-foss-2023a.eb b/easybuild/easyconfigs/p/python-mujoco/python-mujoco-3.3.0-gfbf-2023b.eb
index 18f72c5c7b..43dc18e325 100644
--- a/easybuild/easyconfigs/p/python-mujoco/python-mujoco-3.1.4-foss-2023a.eb
+++ b/easybuild/easyconfigs/p/python-mujoco/python-mujoco-3.3.0-gfbf-2023b.eb
@@ -1,7 +1,7 @@
-easyblock = 'PythonBundle'
+easyblock = 'PythonPackage'
 
 name = 'python-mujoco'
-version = '3.1.4'
+version = '3.3.0'
 
 homepage = 'https://www.mujoco.org'
 description = """
@@ -11,43 +11,60 @@ constants, and enumerations. Structs are provided as Python classes, with
 Pythonic initialization and deletion semantics.
 """
 
-toolchain = {'name': 'foss', 'version': '2023a'}
+toolchain = {'name': 'gfbf', 'version': '2023b'}
 
 builddependencies = [
-    ('CMake', '3.26.3'),
     ('Eigen', '3.4.0'),
     ('pybind11', '2.11.1'),
+    ('CMake', '3.27.6'),
 ]
 
 dependencies = [
-    ('Python', '3.11.3'),
-    ('SciPy-bundle', '2023.07'),
-    ('Abseil', '20230125.3'),
-    ('MuJoCo', '3.1.4'),
-    ('GLFW', '3.4'),
-    ('PyOpenGL', '3.1.7'),
+    ('Python', '3.11.5'),
+    ('absl-py', '2.1.0'),
+    ('etils', '1.12.2'),
+    ('python-glfw', '2.8.0'),
+    ('MuJoCo', '3.3.0'),
+    ('PyOpenGL', '3.1.9'),
+    ('SciPy-bundle', '2023.11'),
 ]
 
-exts_list = [
-    ('absl-py', '2.1.0', {
-        'modulename': 'absl',
-        'checksums': ['7820790efbb316739cde8b4e19357243fc3608a152024288513dd968d7d959ff'],
-    }),
-    ('glfw', '2.7.0', {
-        'checksums': ['0e209ad38fa8c5be67ca590d7b17533d95ad1eb57d0a3f07b98131db69b79000'],
-    }),
-    ('etils', '1.8.0', {
-        'checksums': ['fb478f57fec202e260e54c9192b317692fd63db2d11d993e70bcdffa29cccd58'],
-    }),
-    ('mujoco', version, {
-        'patches': ['python-mujoco-3.1.4_use_eb_deps.patch'],
-        'preinstallopts': 'MUJOCO_PATH="$EBROOTMUJOCO" MUJOCO_PLUGIN_PATH="$EBROOTMUJOCO/bin/mujoco_plugin"',
-        'checksums': [
-            {'mujoco-3.1.4.tar.gz': '19d78bd7332b8bf02b8d7ca35d381a9f8f1654f4c70c0d7f499c6d4d807c4059'},
-            {'python-mujoco-3.1.4_use_eb_deps.patch':
-             '2160f00996011ff31faaf566d1cb0c0ae4fe49b3c36c29e860b34a61fa732b55'},
-        ],
-    }),
+
+options = {'modulename': 'mujoco'}
+source_urls = ['https://pypi.python.org/packages/source/m/mujoco']
+local_extract_cmd_tmpl = "mkdir -p %(builddir)s/_deps/{0} && tar --strip-components=1 -C %(builddir)s/_deps/{0} -xf %s"
+sources = [
+    'mujoco-%(version)s.tar.gz',
+    # Hashes from MUJOCO_DEP_VERSION_* in mujoco/simulate/CMakeLists.txt
+    {
+        'source_urls': ['https://github.com/lvandeve/lodepng/archive'],
+        'filename': 'b4ed2cd7ecf61d29076169b49199371456d4f90b.tar.gz',
+        'extract_cmd': local_extract_cmd_tmpl.format('lodepng-src'),
+    },
+]
+patches = [
+    'python-mujoco-3.3.0_fix-ogl-use-after-free.patch',
+    'python-mujoco-3.3.0_use_eb_deps.patch',
+]
+checksums = [
+    {'mujoco-3.3.0.tar.gz': '0fb12ab715bc2b6d2394a6330b8c3a1dd95b0f3ba812bfe4f6c91e0a1ca3ad0f'},
+    {'b4ed2cd7ecf61d29076169b49199371456d4f90b.tar.gz':
+     'b67e466ba659c07ac775d07dbd97af319cde449ce14abed9ae596df29d888603'},
+    {'python-mujoco-3.3.0_fix-ogl-use-after-free.patch':
+     'a0098aa9633ec3849ded3d886c957c5802a872f74970bdc5456020cd6ccc86d9'},
+    {'python-mujoco-3.3.0_use_eb_deps.patch': 'bed192acb9aab3d9dbd674c0faafc981a92791385dac300cca5ca80d7ca04991'},
 ]
 
-moduleclass = 'phys'
+local_cmake_opts = ' '.join([
+    '-DFETCHCONTENT_FULLY_DISCONNECTED=ON',
+    '-DFETCHCONTENT_BASE_DIR=%(builddir)s/_deps',
+    '-DMUJOCO_PYTHON_USE_SYSTEM_PYBIND11=ON',
+    '-DMUJOCO_SIMULATE_USE_SYSTEM_MUJOCO=ON',
+    '-DMUJOCO_SIMULATE_USE_SYSTEM_GLFW=ON',
+])
+
+prebuildopts = 'MUJOCO_PATH="$EBROOTMUJOCO" MUJOCO_PLUGIN_PATH="$EBROOTMUJOCO/bin/mujoco_plugin"'
+prebuildopts += f' MUJOCO_CMAKE_ARGS="{local_cmake_opts}"'
+preinstallopts = prebuildopts
+
+moduleclass = 'lib'
Diff against python-mujoco-2.2.2-foss-2022a.eb

easybuild/easyconfigs/p/python-mujoco/python-mujoco-2.2.2-foss-2022a.eb

diff --git a/easybuild/easyconfigs/p/python-mujoco/python-mujoco-2.2.2-foss-2022a.eb b/easybuild/easyconfigs/p/python-mujoco/python-mujoco-3.3.0-gfbf-2023b.eb
index 10b8046525..43dc18e325 100644
--- a/easybuild/easyconfigs/p/python-mujoco/python-mujoco-2.2.2-foss-2022a.eb
+++ b/easybuild/easyconfigs/p/python-mujoco/python-mujoco-3.3.0-gfbf-2023b.eb
@@ -1,7 +1,7 @@
-easyblock = 'PythonBundle'
+easyblock = 'PythonPackage'
 
 name = 'python-mujoco'
-version = '2.2.2'
+version = '3.3.0'
 
 homepage = 'https://www.mujoco.org'
 description = """
@@ -11,40 +11,60 @@ constants, and enumerations. Structs are provided as Python classes, with
 Pythonic initialization and deletion semantics.
 """
 
-toolchain = {'name': 'foss', 'version': '2022a'}
+toolchain = {'name': 'gfbf', 'version': '2023b'}
 
 builddependencies = [
-    ('CMake', '3.24.3'),
     ('Eigen', '3.4.0'),
-    ('pybind11', '2.9.2'),
+    ('pybind11', '2.11.1'),
+    ('CMake', '3.27.6'),
 ]
 
 dependencies = [
-    ('Python', '3.10.4'),
-    ('SciPy-bundle', '2022.05'),
-    ('Abseil', '20230125.2'),
-    ('MuJoCo', '2.2.2'),
-    ('GLFW', '3.3.8'),
-    ('PyOpenGL', '3.1.6'),
+    ('Python', '3.11.5'),
+    ('absl-py', '2.1.0'),
+    ('etils', '1.12.2'),
+    ('python-glfw', '2.8.0'),
+    ('MuJoCo', '3.3.0'),
+    ('PyOpenGL', '3.1.9'),
+    ('SciPy-bundle', '2023.11'),
 ]
 
-exts_list = [
-    ('mujoco', version, {
-        'patches': ['python-mujoco-2.2.2_use_eb_deps.patch'],
-        'preinstallopts': 'MUJOCO_PATH="$EBROOTMUJOCO"',
-        'checksums': [
-            {'mujoco-2.2.2.tar.gz': 'b1ca70b21ef01d0e56952d03a387bdae9c6b141c042379226596410a3ac82085'},
-            {'python-mujoco-2.2.2_use_eb_deps.patch':
-             'dc05de6a86abbc12e23becdcec4c04715c8dcb9abf3dfcdd6baf0113e22273c9'},
-        ],
-    }),
-    ('absl-py', '1.4.0', {
-        'modulename': 'absl',
-        'checksums': ['d2c244d01048ba476e7c080bd2c6df5e141d211de80223460d5b3b8a2a58433d'],
-    }),
-    ('glfw', '2.6.1', {
-        'checksums': ['e15c21f06e74cc9740bf36c3c618b5f0d015ef09fb4e216d138967d8ee532567'],
-    }),
+
+options = {'modulename': 'mujoco'}
+source_urls = ['https://pypi.python.org/packages/source/m/mujoco']
+local_extract_cmd_tmpl = "mkdir -p %(builddir)s/_deps/{0} && tar --strip-components=1 -C %(builddir)s/_deps/{0} -xf %s"
+sources = [
+    'mujoco-%(version)s.tar.gz',
+    # Hashes from MUJOCO_DEP_VERSION_* in mujoco/simulate/CMakeLists.txt
+    {
+        'source_urls': ['https://github.com/lvandeve/lodepng/archive'],
+        'filename': 'b4ed2cd7ecf61d29076169b49199371456d4f90b.tar.gz',
+        'extract_cmd': local_extract_cmd_tmpl.format('lodepng-src'),
+    },
+]
+patches = [
+    'python-mujoco-3.3.0_fix-ogl-use-after-free.patch',
+    'python-mujoco-3.3.0_use_eb_deps.patch',
+]
+checksums = [
+    {'mujoco-3.3.0.tar.gz': '0fb12ab715bc2b6d2394a6330b8c3a1dd95b0f3ba812bfe4f6c91e0a1ca3ad0f'},
+    {'b4ed2cd7ecf61d29076169b49199371456d4f90b.tar.gz':
+     'b67e466ba659c07ac775d07dbd97af319cde449ce14abed9ae596df29d888603'},
+    {'python-mujoco-3.3.0_fix-ogl-use-after-free.patch':
+     'a0098aa9633ec3849ded3d886c957c5802a872f74970bdc5456020cd6ccc86d9'},
+    {'python-mujoco-3.3.0_use_eb_deps.patch': 'bed192acb9aab3d9dbd674c0faafc981a92791385dac300cca5ca80d7ca04991'},
 ]
 
-moduleclass = 'phys'
+local_cmake_opts = ' '.join([
+    '-DFETCHCONTENT_FULLY_DISCONNECTED=ON',
+    '-DFETCHCONTENT_BASE_DIR=%(builddir)s/_deps',
+    '-DMUJOCO_PYTHON_USE_SYSTEM_PYBIND11=ON',
+    '-DMUJOCO_SIMULATE_USE_SYSTEM_MUJOCO=ON',
+    '-DMUJOCO_SIMULATE_USE_SYSTEM_GLFW=ON',
+])
+
+prebuildopts = 'MUJOCO_PATH="$EBROOTMUJOCO" MUJOCO_PLUGIN_PATH="$EBROOTMUJOCO/bin/mujoco_plugin"'
+prebuildopts += f' MUJOCO_CMAKE_ARGS="{local_cmake_opts}"'
+preinstallopts = prebuildopts
+
+moduleclass = 'lib'

@Flamefire
Copy link
Copy Markdown
Contributor Author

Test report by @Flamefire
SUCCESS
Build succeeded for 3 out of 3 (2 easyconfigs in total)
i8026 - Linux Rocky Linux 8.9 (Green Obsidian), x86_64, AMD EPYC 7352 24-Core Processor (zen2), 8 x NVIDIA NVIDIA A100-SXM4-40GB, 555.42.06, Python 3.8.17
See https://gist.github.com/Flamefire/e10a3e109b7797a7cd4da273850eebdf for a full test report.

@Flamefire
Copy link
Copy Markdown
Contributor Author

Test report by @Flamefire
SUCCESS
Build succeeded for 3 out of 3 (2 easyconfigs in total)
login1 - Linux RHEL 8.9 (Ootpa), x86_64, Intel(R) Xeon(R) Platinum 8470 (icelake), Python 3.8.17
See https://gist.github.com/Flamefire/03333518bb52b111a06f8e144ffa5e9e for a full test report.

@Flamefire
Copy link
Copy Markdown
Contributor Author

Test report by @Flamefire
SUCCESS
Build succeeded for 2 out of 2 (2 easyconfigs in total)
c1 - Linux AlmaLinux 9.4, x86_64, AMD EPYC 9334 32-Core Processor (zen4), Python 3.9.18
See https://gist.github.com/Flamefire/4176d76b9c80def2226e58d77cc6077a for a full test report.

@Thyre Thyre added the 2023b label Aug 18, 2025
@Crivella
Copy link
Copy Markdown
Contributor

Test report by @Crivella
SUCCESS
Build succeeded for 3 out of 3 (2 easyconfigs in total)
crivella-desktop - Linux Ubuntu 22.04.5 LTS (Jammy Jellyfish), x86_64, 13th Gen Intel(R) Core(TM) i9-13900K (skylake), Python 3.11.13
See https://gist.github.com/Crivella/6bae3004128da7c7579cd641b1633297 for a full test report.

Comment on lines +66 to +68
prebuildopts = 'MUJOCO_PATH="$EBROOTMUJOCO" MUJOCO_PLUGIN_PATH="$EBROOTMUJOCO/bin/mujoco_plugin"'
prebuildopts += f' MUJOCO_CMAKE_ARGS="{local_cmake_opts}"'
preinstallopts = prebuildopts
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I think here we could define preinstallopts directly wihtout prebuildopts

Copy link
Copy Markdown
Contributor Author

@Flamefire Flamefire Oct 29, 2025

Choose a reason for hiding this comment

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

Yeah the PythonPackage easyblock is weird. IMO the best idea is to define both (to the same value) so it is clear that the value is used.

But yes, technically preinstallopts is enough

@Crivella
Copy link
Copy Markdown
Contributor

@boegelbot please test @ jsc-zen3

@boegelbot
Copy link
Copy Markdown
Collaborator

@Crivella: 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=22643 EB_ARGS= EB_CONTAINER= EB_REPO=easybuild-easyconfigs EB_BRANCH=develop /opt/software/slurm/bin/sbatch --job-name test_PR_22643 --ntasks=8 ~/boegelbot/eb_from_pr_upload_jsc-zen3.sh' executed!

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

Test results coming soon (I hope)...

Details

- notification for comment with ID 3462125951 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
Copy Markdown
Collaborator

Test report by @boegelbot
FAILED
Build succeeded for 0 out of 2 (2 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/77cbfd48d184bd8c9caf54944f7ac76f for a full test report.

@Crivella
Copy link
Copy Markdown
Contributor

@boegelbot please test @ jsc-zen3
EB_ARGS="--buildpath /tmp/$USER/pr_build-22643 --installpath /tmp/$USER/pr-22643 --from-pr 22643,24400 spdlog-1.12.0-GCCcore-13.2.0.eb MuJoCo-3.3.0-GCCcore-13.2.0.eb python-mujoco-3.3.0-gfbf-2023b.eb"

@boegelbot
Copy link
Copy Markdown
Collaborator

@Crivella: 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=22643 EB_ARGS="--buildpath /tmp/$USER/pr_build-22643 --installpath /tmp/$USER/pr-22643 --from-pr 22643,24400 spdlog-1.12.0-GCCcore-13.2.0.eb MuJoCo-3.3.0-GCCcore-13.2.0.eb python-mujoco-3.3.0-gfbf-2023b.eb" EB_CONTAINER= EB_REPO=easybuild-easyconfigs EB_BRANCH=develop /opt/software/slurm/bin/sbatch --job-name test_PR_22643 --ntasks=8 ~/boegelbot/eb_from_pr_upload_jsc-zen3.sh' executed!

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

Test results coming soon (I hope)...

Details

- notification for comment with ID 3462337071 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
Copy Markdown
Collaborator

Test report by @boegelbot
FAILED
Build succeeded for 1 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/ca8304ef1c146abca3ad168e3bd6b343 for a full test report.

@Crivella
Copy link
Copy Markdown
Contributor

#22643 (comment) did not work as it is still picking up the existing build.
Will run another test here after testing #24400 without installpath (after an installpath test succeeds)

@Crivella
Copy link
Copy Markdown
Contributor

@boegelbot please test @ jsc-zen3

@boegelbot
Copy link
Copy Markdown
Collaborator

@Crivella: 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=22643 EB_ARGS= EB_CONTAINER= EB_REPO=easybuild-easyconfigs EB_BRANCH=develop /opt/software/slurm/bin/sbatch --job-name test_PR_22643 --ntasks=8 ~/boegelbot/eb_from_pr_upload_jsc-zen3.sh' executed!

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

Test results coming soon (I hope)...

Details

- notification for comment with ID 3462685232 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
Copy Markdown
Collaborator

Test report by @boegelbot
FAILED
Build succeeded for 0 out of 2 (2 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/cbfe325defcf0f9d33c8fadb55dc9906 for a full test report.

@Crivella
Copy link
Copy Markdown
Contributor

https://gist.github.com/boegelbot/2356f829dac73b0b8cc02b7806f34ca2#file-mujoco-3-3-0-gcccore-13-2-0_partial-log-L420

Guess we are missing a libglvnd dependency (which was previously brought in by glew)?

crivella@crivella-desktop:~/.local/easybuild/software$ find . -maxdepth 5 -name "gl.h" | grep -e '13.2.0' -e '2023b'
./libglvnd/1.7.0-GCCcore-13.2.0/include/GL/gl.h
./libglvnd/1.7.0-GCCcore-13.2.0/include/GLES/gl.h
./FLTK/1.3.9-GCCcore-13.2.0/include/FL/gl.h
./libepoxy/1.5.10-GCCcore-13.2.0/include/epoxy/gl.h
./hwloc/2.9.2-GCCcore-13.2.0/include/hwloc/gl.h

Also guess it could be argued that it should be brought in by GLFW as it's headers are directly referring to it

@Flamefire
Copy link
Copy Markdown
Contributor Author

Also guess it could be argued that it should be brought in by GLFW as it's headers are directly referring to it

Agreed: GLFW is an OpenGL shim/wrangler so should "provide" the OpenGL headers. So I opened #24408 which also avoids accidentally picking up system OpenGL stuff.

What do you think? Also asked in Slack in case there are any side-effects I'm not aware of

@Crivella
Copy link
Copy Markdown
Contributor

What do you think? Also asked in Slack in case there are any side-effects I'm not aware of

Really not an expert on stacks of graphical libraries so i would see what others think in slack

@bedroge
Copy link
Copy Markdown
Contributor

bedroge commented Dec 15, 2025

@boegelbot please test @ jsc-zen3

@boegelbot
Copy link
Copy Markdown
Collaborator

@bedroge: 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=22643 EB_ARGS= EB_CONTAINER= EB_REPO=easybuild-easyconfigs EB_BRANCH=develop /opt/software/slurm/bin/sbatch --job-name test_PR_22643 --ntasks=8 ~/boegelbot/eb_from_pr_upload_jsc-zen3.sh' executed!

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

Test results coming soon (I hope)...

Details

- notification for comment with ID 3656476947 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
Copy Markdown
Collaborator

Test report by @boegelbot
SUCCESS
Build succeeded for 2 out of 2 (total: 7 mins 18 secs) (2 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/a57464928670fd2a88f05c506a8efe6b for a full test report.

Copy link
Copy Markdown
Contributor

@bedroge bedroge left a comment

Choose a reason for hiding this comment

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

Lgtm

@bedroge
Copy link
Copy Markdown
Contributor

bedroge commented Dec 15, 2025

Test report by @bedroge
SUCCESS
Build succeeded for 2 out of 2 (2 easyconfigs in total)
interactive2 - Linux Rocky Linux 8.10, x86_64, AMD EPYC-Milan Processor (zen3), Python 3.6.8
See https://gist.github.com/bedroge/99dbdfe19774f7c19895eef5555f3dd4 for a full test report.

@bedroge
Copy link
Copy Markdown
Contributor

bedroge commented Dec 15, 2025

Requires
...
Rebuild of spdlog as shared library or static with -fPIC, see e.g. #22422

Even though that PR is not merged yet, it looks like this was done in #24400.

@bedroge bedroge added this to the next release (5.2.0) milestone Dec 15, 2025
@bedroge
Copy link
Copy Markdown
Contributor

bedroge commented Dec 15, 2025

Going in, thanks @Flamefire!

@bedroge bedroge merged commit bc080ac into easybuilders:develop Dec 15, 2025
5 checks passed
@Flamefire Flamefire deleted the 20250321174718_new_pr_MuJoCo330 branch December 16, 2025 07:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants