diff --git a/easybuild/easyconfigs/c/CUDA-Python/CUDA-Python-12.8.0-gfbf-2025a-CUDA-12.8.0.eb b/easybuild/easyconfigs/c/CUDA-Python/CUDA-Python-12.8.0-gfbf-2025a-CUDA-12.8.0.eb index e9a49caee5e..e92ebec2223 100644 --- a/easybuild/easyconfigs/c/CUDA-Python/CUDA-Python-12.8.0-gfbf-2025a-CUDA-12.8.0.eb +++ b/easybuild/easyconfigs/c/CUDA-Python/CUDA-Python-12.8.0-gfbf-2025a-CUDA-12.8.0.eb @@ -20,16 +20,53 @@ dependencies = [ ('SciPy-bundle', '2025.06'), ] +exts_default_options = { + 'source_urls': ['https://github.com/%(github_account)s/cuda-python/archive'], + 'sources': [{ + 'download_filename': f'v{version}.tar.gz', + 'filename': '%(name)s-%(version)s.tar.gz' + }], +} exts_list = [ ('pyclibrary', '0.2.2', { + 'source_urls': ['https://pypi.python.org/packages/source/%(nameletter)s/%(name)s'], + 'sources': ['%(namelower)s-%(version)s.tar.gz'], 'checksums': ['9902fffe361bb86f57ab62aa4195ec4dd382b63c5c6892be6d9784ec0a3575f7'], }), + ('cuda-bindings', version, { + 'modulename': 'cuda.bindings', + 'start_dir': 'cuda_bindings', + 'checksums': ['9c3d6c9792e0c295d06bbc35b7ef91405dba465f78495e552223d2ddb9f61048'], + }), + ('cuda-core', '0.3.1', { + 'modulename': 'cuda.core', + 'patches': [ + 'cuda-core-%(version)s_old_license_syntax.patch', + 'cuda-core-%(version)s_disable_nvjitlink.patch', + ], + 'start_dir': 'cuda_core', + 'checksums': [ + {'cuda-core-0.3.1.tar.gz': '14ed346e848f796929516ebce1e3b33567c4f285abf44aa767ec8e9542ca6a68'}, + {'cuda-core-0.3.1_old_license_syntax.patch': + '45569ff248af5a8da780d9a029e533dcd810b9c70528f08a423c8ca307342813'}, + {'cuda-core-0.3.1_disable_nvjitlink.patch': + 'b17e87b67afd16bf403cbbaccf75dc2a5af79eccd7b3cac56342e888c9f68664'}, + ], + }), + ('cuda-pathfinder', '1.1.0', { + 'modulename': 'cuda.pathfinder', + 'patches': ['cuda-pathfinder-%(version)s_old_license_syntax.patch'], + 'start_dir': 'cuda_pathfinder', + 'checksums': [ + {'cuda-pathfinder-1.1.0.tar.gz': '14ed346e848f796929516ebce1e3b33567c4f285abf44aa767ec8e9542ca6a68'}, + {'cuda-pathfinder-1.1.0_old_license_syntax.patch': + 'bd17d1b1fe7f8bce540e4e3a603320bdb6be166e339bfb9638c2f9663163f6e6'}, + ], + }), ('cuda-python', version, { 'modulename': 'cuda', - 'source_urls': [GITHUB_LOWER_SOURCE], - 'sources': [{'download_filename': 'v%(version)s.tar.gz', 'filename': SOURCE_TAR_GZ}], - 'checksums': ['9c3d6c9792e0c295d06bbc35b7ef91405dba465f78495e552223d2ddb9f61048'], 'start_dir': 'cuda_bindings', + 'checksums': ['9c3d6c9792e0c295d06bbc35b7ef91405dba465f78495e552223d2ddb9f61048'], }), ] diff --git a/easybuild/easyconfigs/c/CUDA-Python/cuda-core-0.3.1_disable_nvjitlink.patch b/easybuild/easyconfigs/c/CUDA-Python/cuda-core-0.3.1_disable_nvjitlink.patch new file mode 100644 index 00000000000..020ff937daa --- /dev/null +++ b/easybuild/easyconfigs/c/CUDA-Python/cuda-core-0.3.1_disable_nvjitlink.patch @@ -0,0 +1,21 @@ +Forces use of "driver" backend instead of nvjitlink. +nvjitlink will refuse to run on newer OS drivers, and causes failures for anything +that even attempts to check the nvjitlink version, failing many tests + +author: micketeer@gmail.com +--- cuda_core/cuda/core/experimental/_linker.py.orig 2025-11-25 16:39:21.800595009 +0100 ++++ cuda_core/cuda/core/experimental/_linker.py 2025-11-25 16:41:51.391382463 +0100 +@@ -37,6 +37,12 @@ + + _driver_ver = handle_return(driver.cuDriverGetVersion()) + _driver_ver = (_driver_ver // 1000, (_driver_ver % 1000) // 10) ++ # Shortcut this function to always use driver, nvjitlink is to picky about OS driver versions ++ # and will refuse to run later. This is only required for older CUDA-Python as this is handled ++ # differently in newer versions ++ _driver = driver ++ return True ++ + try: + from cuda.bindings import nvjitlink as _nvjitlink + from cuda.bindings._internal import nvjitlink as inner_nvjitlink + diff --git a/easybuild/easyconfigs/c/CUDA-Python/cuda-core-0.3.1_old_license_syntax.patch b/easybuild/easyconfigs/c/CUDA-Python/cuda-core-0.3.1_old_license_syntax.patch new file mode 100644 index 00000000000..696d75b1b23 --- /dev/null +++ b/easybuild/easyconfigs/c/CUDA-Python/cuda-core-0.3.1_old_license_syntax.patch @@ -0,0 +1,14 @@ +Revert to old license syntax for compatability with older setuptools + +author: micketeer@gmail.com +--- cuda-python-12.9.2/cuda_core/pyproject.toml.orig 2025-11-24 19:04:14.119960608 +0100 ++++ cuda-python-12.9.2/cuda_core/pyproject.toml 2025-11-24 19:04:31.218888277 +0100 +@@ -18,7 +18,7 @@ + authors = [ + { name = "NVIDIA Corporation" } + ] +-license = "Apache-2.0" ++license = { text = "Apache-2.0" } + classifiers = [ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", diff --git a/easybuild/easyconfigs/c/CUDA-Python/cuda-pathfinder-1.1.0_old_license_syntax.patch b/easybuild/easyconfigs/c/CUDA-Python/cuda-pathfinder-1.1.0_old_license_syntax.patch new file mode 100644 index 00000000000..7cebe1eddfb --- /dev/null +++ b/easybuild/easyconfigs/c/CUDA-Python/cuda-pathfinder-1.1.0_old_license_syntax.patch @@ -0,0 +1,14 @@ +Revert to old license syntax for compatability with older setuptools + +author: micketeer@gmail.com +--- cuda-python-12.9.2/cuda_pathfinder/pyproject.toml.orig 2025-11-24 18:50:05.930512331 +0100 ++++ cuda-python-12.9.2/cuda_pathfinder/pyproject.toml 2025-11-24 18:50:24.683434246 +0100 +@@ -5,7 +5,7 @@ + name = "cuda-pathfinder" + description = "Pathfinder for CUDA components" + authors = [{ name = "NVIDIA Corporation", email = "cuda-python-conduct@nvidia.com" }] +-license = "Apache-2.0" ++license = { text = "Apache-2.0" } + requires-python = ">=3.9" + dynamic = ["version"] + dependencies = [] diff --git a/easybuild/easyconfigs/f/filecheck-python/filecheck-python-1.0.3-GCCcore-14.2.0.eb b/easybuild/easyconfigs/f/filecheck-python/filecheck-python-1.0.3-GCCcore-14.2.0.eb new file mode 100644 index 00000000000..2e2f9dd4679 --- /dev/null +++ b/easybuild/easyconfigs/f/filecheck-python/filecheck-python-1.0.3-GCCcore-14.2.0.eb @@ -0,0 +1,26 @@ +easyblock = 'PythonBundle' + +name = 'filecheck-python' +version = '1.0.3' + +homepage = 'https://github.com/AntonLydike/filecheck' +description = """This tries to be as close a clone of LLVMs FileCheck as possible, without going crazy.""" + +toolchain = {'name': 'GCCcore', 'version': '14.2.0'} + +builddependencies = [ + ('binutils', '2.42'), + ('poetry', '2.1.2'), +] + +dependencies = [ + ('Python', '3.13.1'), +] + +exts_list = [ + ('filecheck', version, { + 'checksums': ['ccb70500858e8f362f06d5c3e33c9c133785543ade50ddbeb9390681991f1b05'], + }), +] + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/n/numba-cuda/numba-cuda-0.20.0-foss-2025a-CUDA-12.8.0.eb b/easybuild/easyconfigs/n/numba-cuda/numba-cuda-0.20.0-foss-2025a-CUDA-12.8.0.eb new file mode 100644 index 00000000000..42383a77783 --- /dev/null +++ b/easybuild/easyconfigs/n/numba-cuda/numba-cuda-0.20.0-foss-2025a-CUDA-12.8.0.eb @@ -0,0 +1,54 @@ +easyblock = 'PythonBundle' + +name = 'numba-cuda' +version = '0.20.0' +versionsuffix = '-CUDA-%(cudaver)s' + +homepage = 'https://numba.pydata.org/' +description = """Numba-CUDA provides a CUDA target for the Numba Python JIT +Compiler. It is used for writing SIMT kernels in Python, for providing +Python bindings for accelerated device libraries, and as a compiler for +user-defined functions in accelerated libraries like RAPIDS.""" + +toolchain = {'name': 'foss', 'version': '2025a'} +toolchainopts = {'pic': True} + +builddependencies = [ + ('poetry', '2.1.2'), # required for tests + ('ml_dtypes', '0.5.1'), # required for tests + ('filecheck-python', '1.0.3'), # required for tests +] + +dependencies = [ + ('Python', '3.13.1'), + ('Python-bundle-PyPI', '2025.04'), # for pytest + ('CUDA', '12.8.0', '', SYSTEM), + ('CUDA-Python', '12.8.0', versionsuffix), + ('numba', '0.62.0'), +] + +exts_list = [ + ('numba_cuda', version, { + 'source_urls': ['https://github.com/NVIDIA/numba-cuda/archive/refs/tags/'], + 'sources': ['v%(version)s.tar.gz'], + 'patches': ['numba-cuda-%(version)s_old_license_syntax.patch'], + 'checksums': [ + {'v0.20.0.tar.gz': '17e6803ed07589c37b5fa0757f9c0fc850146dbc24302fcea93497676f3a21fb'}, + {'numba-cuda-0.20.0_old_license_syntax.patch': + '3924e9ea64e7ac6281a883de896b4d1f8c281b72e82cb8521a233f26854b1854'}, + ], + 'testinstall': True, + 'runtest': 'pytest --pyargs numba.cuda.tests -v', + }), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +sanity_check_commands = [ + 'python -c "from numba import cuda; print(cuda.__file__)" | grep %(installdir)s', +] + +moduleclass = 'lang' diff --git a/easybuild/easyconfigs/n/numba-cuda/numba-cuda-0.20.0_old_license_syntax.patch b/easybuild/easyconfigs/n/numba-cuda/numba-cuda-0.20.0_old_license_syntax.patch new file mode 100644 index 00000000000..1aa9ec056be --- /dev/null +++ b/easybuild/easyconfigs/n/numba-cuda/numba-cuda-0.20.0_old_license_syntax.patch @@ -0,0 +1,15 @@ +Revert to old license syntax for compatability with older setuptools + +author: micketeer@gmail.com +--- pyproject.toml.orig 2025-11-24 17:05:04.676821398 +0100 ++++ pyproject.toml 2025-11-24 17:06:05.494564425 +0100 +@@ -17,8 +17,7 @@ + { name = "Anaconda Inc." }, + { name = "NVIDIA Corporation" } + ] +-license = "BSD-2-clause" +-license-files = ["LICENSE", "LICENSE.numba"] ++license = { file = "BSD-2-clause" } + requires-python = ">=3.9" + dependencies = ["numba>=0.60.0"] +