Skip to content

Commit

Permalink
Merge 5.0.x
Browse files Browse the repository at this point in the history
  • Loading branch information
Flamefire committed Jan 15, 2024
2 parents 1056219 + 40d1152 commit 9d32ba3
Show file tree
Hide file tree
Showing 66 changed files with 1,247 additions and 588 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/unit_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ jobs:
- name: install EasyBuild framework
run: |
# first determine which branch of easybuild-framework repo to install
BRANCH=develop
BRANCH=5.0.x
if [ "x$GITHUB_BASE_REF" = 'xmain' ]; then BRANCH=main; fi
if [ "x$GITHUB_BASE_REF" = 'x5.0.x' ]; then BRANCH=5.0.x; fi
echo "Using easybuild-framework branch $BRANCH (\$GITHUB_BASE_REF $GITHUB_BASE_REF)"
Expand Down
57 changes: 56 additions & 1 deletion RELEASE_NOTES
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,62 @@ For more detailed information, please see the git log.

These release notes can also be consulted at http://easybuild.readthedocs.org/en/latest/Release_notes.html.

The latest version of easybuild-easyblocks provides 251 software-specific easyblocks and 42 generic easyblocks.
The latest version of easybuild-easyblocks provides 254 software-specific easyblocks and 43 generic easyblocks.


v4.9.0 (30 December 2023)
-------------------------

feature release

- add generic `CargoPythonBundle` easyblock (#2964)
- 3 new software-specific easyblocks: flook (#3034), HPCC (#3009), PALM (#3020)
- minor enhancements and updates, including:
- add custom easyconfig parameter `cmake_options` to SuiteSparse easyblock (#3031)
- update custom intel-compilers easyblock for versions >= 2024 (#3037)
- update custom easyblock for Intel MPI easyblock for v2021.11 (#3039)
- update numpy easyblock for v1.26+ (#3041)
- update custom easyblock for Intel MKL for v2024.x (#3042)
- update Ferret easyblock to be compatible with v7.6.0 (#3052)
- various bug fixes, including:
- add support for allowing version mismatch + consider versionsuffix when creating `.modulerc` in `ModuleRC` easyblock (#3028)
- update error detection for PyTorch tests (#3033)
- disable LLVM build downloads from CI in Rust (#3038)
- add requirement for EULA acceptance to CUDA easyblock (#3045)
- make various fixes and enhancements to NWChem easyblock (#3049)
- add binutils symlinks when building TensorFlow with `--rpath` (#3054, #3058)
- fix specifying path to SuiteSparse header files and libraries in numpy, Trilinos, PETSc easyblocks (#3056)
- fix `det_pylibdir` provided by `PythonPackage` easyblock for Python 3.12+ (#3057)
- fix nvptx sanity check for Clang >= 14.x (#3059)
- other changes:
- update SuiteSparse easyblock to only install SuiteSparse libraries with `make install` (#3004)
- also consider `$EB_COMSOL_LICENSE_FILE` environment variable in custom easyblock for COMSOL (#3044)
- import `LooseVersion` from `easybuild.tools` instead of `distutils.version` in easyblocks (#3048)


v4.8.2 (29 October 2023)
------------------------

update/bugfix release

- minor enhancements and updates, including:
- allow use of `test_cmd` without `runtest` for `ConfigureMake` (#2837)
- enhance `CMakeMake` easyblock to run `ctest` command if `runtest` is `True` (#2838)
- enhance `Conda` easyblock: add support for using custom `conda` command (like `mamba`), and clean up after installation (#2996)
- update WRF easyblock to correctly determine `WRF*` subdirectory for WRF versions >= 4.5.1 (#2997)
- update numpy easyblock to be able to use FlexiBLAS with MKL as dependency (#2999)
- add error regexp for PyTorch tests run in subprocess and enhance error message (#3003, #3005)
- don't blindly overwrite `-Dccflags` + honour `preconfigopts` in Perl easyblock (#3010)
- use more test programs in sanity check step of OpenMPI easyblock (#3016)
- fix `CMAKE_PREFIX_PATH` in imkl easyblock (#3021)
- update sanity check in wxPython easyblock for version 4.2.0 (#3023)
- various bug fixes, including:
- fix creation of symlink for libraries in TBB easyblock (#2927)
- fix `--sanity-check-only` and `--module-only` for UCX plugins (#3007)
- replace umlaut in docstring of PerlBundle easyblock (to fix Non-ASCII character error when using Python 2.7) (#3008)
- enhance TensorFlow easyblock to avoid use of `-mcpu=native` for XNNPACK component when building on aarch64 (#3011)
- only use `-DCMAKE_SKIP_RPATH=ON` for CMake < 3.5.0 (#3012)
- fix the blas/lapack name passed to meson when building recent scipy versions (>= 1.9.0) on top of Intel MKL (#3024)


v4.8.1 (11 September 2023)
Expand Down
2 changes: 1 addition & 1 deletion easybuild/easyblocks/a/abaqus.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,11 @@
import glob
import os
from collections import OrderedDict
from easybuild.tools import LooseVersion

from easybuild.easyblocks.generic.binary import Binary
from easybuild.framework.easyblock import EasyBlock
from easybuild.framework.easyconfig import CUSTOM
from easybuild.tools import LooseVersion
from easybuild.tools.build_log import EasyBuildError
from easybuild.tools.environment import setvar
from easybuild.tools.filetools import change_dir, symlink, write_file
Expand Down
3 changes: 3 additions & 0 deletions easybuild/easyblocks/a/aocc.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,9 @@ def __init__(self, *args, **kwargs):

self.clangversion = self.cfg['clangversion']

# Bypass the .mod file check for GCCcore installs
self.cfg['skip_mod_files_sanity_check'] = True

def _aocc_guess_clang_version(self):
map_aocc_to_clang_ver = {
'2.3.0': '11.0.0',
Expand Down
2 changes: 2 additions & 0 deletions easybuild/easyblocks/a/aomp.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,8 @@ def __init__(self, *args, **kwargs):
super(EB_AOMP, self).__init__(*args, **kwargs)
self.cfg['extract_sources'] = True
self.cfg['dontcreateinstalldir'] = True
# Bypass the .mod file check for GCCcore installs
self.cfg['skip_mod_files_sanity_check'] = True

def configure_step(self):
"""Configure AOMP build and let 'Binary' install"""
Expand Down
3 changes: 2 additions & 1 deletion easybuild/easyblocks/b/berkeleygw.py
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,8 @@ def test_step(self):
"""Custom test step for BerkeleyGW."""
if self.cfg['runtest'] is not False:
self.cfg['runtest'] = 'check'
setvar('OMP_NUM_THREADS', '4')
setvar('BGW_TEST_MPI_NPROCS', '2')
setvar('OMP_NUM_THREADS', '2')
setvar('TEMPDIRPATH', os.path.join(self.builddir, 'tmp'))
super(EB_BerkeleyGW, self).test_step()

Expand Down
33 changes: 20 additions & 13 deletions easybuild/easyblocks/c/clang.py
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,9 @@ def __init__(self, *args, **kwargs):
self.make_parallel_opts = ""
self.runtime_lib_path = "lib"

# Bypass the .mod file check for GCCcore installs
self.cfg['skip_mod_files_sanity_check'] = True

if not self.cfg['llvm_projects']:
self.cfg['llvm_projects'] = []
if not self.cfg['llvm_runtimes']:
Expand Down Expand Up @@ -622,9 +625,11 @@ def sanity_check_step(self):
custom_commands = ['clang --help', 'clang++ --help', 'llvm-config --cxxflags']
shlib_ext = get_shared_lib_ext()

version = LooseVersion(self.version)

# Clang v16+ only use the major version number for the resource dir
resdir_version = self.version
if LooseVersion(self.version) >= LooseVersion('16'):
if version >= '16':
resdir_version = self.version.split('.')[0]

# Detect OpenMP support for CPU architecture
Expand All @@ -640,7 +645,7 @@ def sanity_check_step(self):
else:
print_warning("Unknown CPU architecture (%s) for OpenMP and runtime libraries check!" % arch)

if LooseVersion(self.version) >= LooseVersion('14'):
if version >= '14':
glob_pattern = os.path.join(self.installdir, 'lib', '%s-*' % arch)
matches = glob.glob(glob_pattern)
if matches:
Expand All @@ -663,7 +668,7 @@ def sanity_check_step(self):
if self.cfg['static_analyzer']:
custom_paths['files'].extend(["bin/scan-build", "bin/scan-view"])

if 'clang-tools-extra' in self.cfg['llvm_projects'] and LooseVersion(self.version) >= LooseVersion('3.4'):
if 'clang-tools-extra' in self.cfg['llvm_projects'] and version >= '3.4':
custom_paths['files'].extend(["bin/clang-tidy"])

if 'polly' in self.cfg['llvm_projects']:
Expand All @@ -685,15 +690,15 @@ def sanity_check_step(self):
if 'libcxxabi' in self.cfg['llvm_runtimes']:
custom_paths['files'].extend([os.path.join(self.runtime_lib_path, "libc++abi.%s" % shlib_ext)])

if 'flang' in self.cfg['llvm_projects'] and LooseVersion(self.version) >= LooseVersion('15'):
if 'flang' in self.cfg['llvm_projects'] and version >= '15':
flang_compiler = 'flang-new'
custom_paths['files'].extend(["bin/%s" % flang_compiler])
custom_commands.extend(["%s --help" % flang_compiler])

if LooseVersion(self.version) >= LooseVersion('3.8'):
if version >= '3.8':
custom_paths['files'].extend(["lib/libomp.%s" % shlib_ext, "lib/clang/%s/include/omp.h" % resdir_version])

if LooseVersion(self.version) >= LooseVersion('12'):
if version >= '12':
omp_target_libs = ["lib/libomptarget.%s" % shlib_ext, "lib/libomptarget.rtl.%s.%s" % (arch, shlib_ext)]
else:
omp_target_libs = ["lib/libomptarget.%s" % shlib_ext]
Expand All @@ -703,24 +708,26 @@ def sanity_check_step(self):
if 'NVPTX' in self.cfg['build_targets']:
custom_paths['files'].append("lib/libomptarget.rtl.cuda.%s" % shlib_ext)
# The static 'nvptx.a' library is not built from version 12 onwards
if LooseVersion(self.version) < LooseVersion('12.0'):
if version < '12.0':
custom_paths['files'].append("lib/libomptarget-nvptx.a")
ec_cuda_cc = self.cfg['cuda_compute_capabilities']
cfg_cuda_cc = build_option('cuda_compute_capabilities')
cuda_cc = cfg_cuda_cc or ec_cuda_cc or []
# We need the CUDA capability in the form of '75' and not '7.5'
cuda_cc = [cc.replace('.', '') for cc in cuda_cc]
if LooseVersion('12.0') < LooseVersion(self.version) < LooseVersion('13.0'):
if '12.0' < version < '13.0':
custom_paths['files'].extend(["lib/libomptarget-nvptx-cuda_%s-sm_%s.bc" % (x, y)
for x in CUDA_TOOLKIT_SUPPORT for y in cuda_cc])
else:
# libomptarget-nvptx-sm*.bc is not there for Clang 14.x;
elif version < '14.0' or version >= '15.0':
custom_paths['files'].extend(["lib/libomptarget-nvptx-sm_%s.bc" % cc
for cc in cuda_cc])
# From version 13, and hopefully onwards, the naming of the CUDA
# '.bc' files became a bit simpler and now we don't need to take
# into account the CUDA version Clang was compiled with, making it
# easier to check for the bitcode files we expect
if LooseVersion(self.version) >= LooseVersion('13.0'):
# easier to check for the bitcode files we expect;
# libomptarget-new-nvptx-sm*.bc is only there in Clang 13.x and 14.x;
if version >= '13.0' and version < '15.0':
custom_paths['files'].extend(["lib/libomptarget-new-nvptx-sm_%s.bc" % cc
for cc in cuda_cc])
# If building for AMDGPU check that OpenMP target library was created
Expand All @@ -729,12 +736,12 @@ def sanity_check_step(self):
# OpenMP offloading support to AMDGPU was not added until version
# 13, however, building for the AMDGPU target predates this and so
# doesn't necessarily mean that the AMDGPU target failed
if LooseVersion(self.version) >= LooseVersion('13.0'):
if version >= '13.0':
custom_paths['files'].append("lib/libomptarget.rtl.amdgpu.%s" % shlib_ext)
custom_paths['files'].extend(["lib/libomptarget-amdgcn-%s.bc" % gfx
for gfx in self.cfg['amd_gfx_list']])
custom_paths['files'].append("bin/amdgpu-arch")
if LooseVersion(self.version) >= LooseVersion('14.0'):
if version >= '14.0':
custom_paths['files'].extend(["lib/libomptarget-new-amdgpu-%s.bc" % gfx
for gfx in self.cfg['amd_gfx_list']])

Expand Down
8 changes: 4 additions & 4 deletions easybuild/easyblocks/c/comsol.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,22 +59,22 @@ def extract_step(self):
def configure_step(self):
"""Configure COMSOL installation: create license file."""

default_lic_env_var = 'LMCOMSOL_LICENSE_FILE'
lic_specs, self.license_env_var = find_flexlm_license(custom_env_vars=[default_lic_env_var],
comsol_lic_env_vars = ['EB_COMSOL_LICENSE_FILE', 'LMCOMSOL_LICENSE_FILE']
lic_specs, self.license_env_var = find_flexlm_license(custom_env_vars=comsol_lic_env_vars,
lic_specs=[self.cfg['license_file']])

if lic_specs:
if self.license_env_var is None:
self.log.info("Using COMSOL license specifications from 'license_file': %s", lic_specs)
self.license_env_var = default_lic_env_var
self.license_env_var = comsol_lic_env_vars[0]
else:
self.log.info("Using COMSOL license specifications from $%s: %s", self.license_env_var, lic_specs)

self.license_file = os.pathsep.join(lic_specs)
env.setvar(self.license_env_var, self.license_file)
else:
msg = "No viable license specifications found; "
msg += "specify 'license_file', or define $%s" % default_lic_env_var
msg += "specify 'license_file', or define %s" % (', '.join('$%s' % x for x in comsol_lic_env_vars))
raise EasyBuildError(msg)

copy_file(os.path.join(self.start_dir, 'setupconfig.ini'), self.configfile)
Expand Down
3 changes: 3 additions & 0 deletions easybuild/easyblocks/c/cplex.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,9 @@ def __init__(self, *args, **kwargs):
self.with_python = False
self.multi_python = 'Python' in self.cfg['multi_deps']

# Bypass the .mod file check for GCCcore installs
self.cfg['skip_mod_files_sanity_check'] = True

def prepare_step(self, *args, **kwargs):
"""Prepare build environment."""
super(EB_CPLEX, self).prepare_step(*args, **kwargs)
Expand Down
10 changes: 10 additions & 0 deletions easybuild/easyblocks/c/cuda.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,16 @@ def __init__(self, *args, **kwargs):
self.cfg.template_values['cudaarch'] = cudaarch
self.cfg.generate_template_values()

def fetch_step(self, *args, **kwargs):
"""Check for EULA acceptance prior to getting sources."""
# EULA for CUDA must be accepted via --accept-eula-for EasyBuild configuration option,
# or via 'accept_eula = True' in easyconfig file
self.check_accepted_eula(
name='CUDA',
more_info='https://docs.nvidia.com/cuda/eula/index.html'
)
return super(EB_CUDA, self).fetch_step(*args, **kwargs)

def extract_step(self):
"""Extract installer to have more control, e.g. options, patching Perl scripts, etc."""
execpath = self.src[0]['path']
Expand Down
Loading

0 comments on commit 9d32ba3

Please sign in to comment.