Skip to content

Commit

Permalink
Merge pull request #3357 from easybuilders/4.9.x
Browse files Browse the repository at this point in the history
release EasyBuild v4.9.2
  • Loading branch information
migueldiascosta authored Jun 11, 2024
2 parents 66346b5 + 91479c7 commit a336557
Show file tree
Hide file tree
Showing 25 changed files with 1,380 additions and 256 deletions.
10 changes: 2 additions & 8 deletions .github/workflows/unit_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,21 +13,19 @@ jobs:
runs-on: ubuntu-20.04
strategy:
matrix:
python: [3.5, 3.6, 3.7, 3.8, 3.9, '3.10', '3.11']
python: [3.6, 3.7, 3.8, 3.9, '3.10', '3.11']
modules_tool: [Lmod-6.6.3, Lmod-7.8.22, Lmod-8.1.14, modules-tcl-1.147, modules-3.2.10, modules-4.1.4]
module_syntax: [Lua, Tcl]
# exclude some configuration for non-Lmod modules tool:
# - don't test with Lua module syntax (only supported in Lmod)
# - don't test with Python 3.5 and 3.7+ (only with 3.6), to limit test configurations
# - don't test with Python 3.7+ (only with 3.6), to limit test configurations
exclude:
- modules_tool: modules-tcl-1.147
module_syntax: Lua
- modules_tool: modules-3.2.10
module_syntax: Lua
- modules_tool: modules-4.1.4
module_syntax: Lua
- modules_tool: modules-tcl-1.147
python: 3.5
- modules_tool: modules-tcl-1.147
python: 3.7
- modules_tool: modules-tcl-1.147
Expand All @@ -38,8 +36,6 @@ jobs:
python: '3.10'
- modules_tool: modules-tcl-1.147
python: '3.11'
- modules_tool: modules-3.2.10
python: 3.5
- modules_tool: modules-3.2.10
python: 3.7
- modules_tool: modules-3.2.10
Expand All @@ -50,8 +46,6 @@ jobs:
python: '3.10'
- modules_tool: modules-3.2.10
python: '3.11'
- modules_tool: modules-4.1.4
python: 3.5
- modules_tool: modules-4.1.4
python: 3.7
- modules_tool: modules-4.1.4
Expand Down
29 changes: 28 additions & 1 deletion RELEASE_NOTES
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,34 @@ 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 255 software-specific easyblocks and 43 generic easyblocks.
The latest version of easybuild-easyblocks provides 259 software-specific easyblocks and 43 generic easyblocks.


v4.9.2 (12 June 2024)
---------------------

update/bugfix release

- 4 new software-specific easyblocks: QuantumESPRESSO with CMake (#3257), AEDT (#3281), optiSLang (#3300), MetalWalls (#3311, #3331)
- minor enhancements and updates, including:
- refactor GAMESS-US easyblock to directly write install.info (#3047)
- add ABAQUS license server to generated module (#3277)
- allow 'nosource: True' in PythonPackage extensions (#3305)
- auto-disable FFTW quad precision on RISC-V (#3314)
- use regular 'configure' instead of wrapper script in easyblock for UCX plugins (#3315)
- add libjpeg-turbo to include dir for torchvision easyblock (#3322, #3353)
- add RISC-V support to custom easyblocks for Clang (#3325), Java (#3323), Mesa (#3324)
- add a sanity check for OpenFOAM's 'wmake' to make sure it finds the compiler commands (#3328)
- always override the compiler version check for CUDA installations (#3329)
- allow version mismatchs between OpenSSL components in host system as long as they fulfill version requirements (#3340)
- allow external PRRTE in OpenMPI easyblock (#3347)
- various bug fixes, including:
- don't manipulate setup.py for Python 3.12+ when using alternate sysroot (#3313)
- do not run unit tests on Python 3.5 (#3326)
- avoid sanity check on the software itself for CargoPythonBundle easyblock (#3341)
- fix malformed '$CPATH' for intel-compilers on Debian/Ubuntu (#3346)
- other changes:
- Binary easyblock already adds top level directory to PATH, so no need to do it in the Stata easyblock (#3307)


v4.9.1 (5 April 2024)
Expand Down
2 changes: 1 addition & 1 deletion easybuild/easyblocks/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
# recent setuptools versions will *TRANSFORM* something like 'X.Y.Zdev' into 'X.Y.Z.dev0', with a warning like
# UserWarning: Normalizing '2.4.0dev' to '2.4.0.dev0'
# This causes problems further up the dependency chain...
VERSION = LooseVersion('4.9.1')
VERSION = LooseVersion('4.9.2')
UNKNOWN = 'UNKNOWN'


Expand Down
9 changes: 9 additions & 0 deletions easybuild/easyblocks/a/abaqus.py
Original file line number Diff line number Diff line change
Expand Up @@ -366,3 +366,12 @@ def make_module_req_guess(self):
})

return guesses

def make_module_extra(self):
"""Add LM_LICENSE_FILE path if specified"""
txt = super(EB_ABAQUS, self).make_module_extra()
license_file = os.getenv('EB_ABAQUS_LICENSE_FILE', None)
if license_file is not None:
txt += self.module_generator.prepend_paths('ABAQUSLM_LICENSE_FILE', [license_file], allow_abs=True)

return txt
127 changes: 127 additions & 0 deletions easybuild/easyblocks/a/aedt.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
##
# Copyright 2009-2024 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 installing Ansys Electronics Desktop
@author: Chia-Jung Hsu (Chalmers University of Technology)
"""
import os
import glob
import tempfile

from easybuild.easyblocks.generic.packedbinary import PackedBinary
from easybuild.tools.build_log import EasyBuildError
from easybuild.tools.run import run_cmd


class EB_AEDT(PackedBinary):
"""Support for installing Ansys Electronics Desktop."""

def __init__(self, *args, **kwargs):
"""Initialize Ansys Electronics Desktop specific variables."""
super(EB_AEDT, self).__init__(*args, **kwargs)
self.subdir = None

def _set_subdir(self):
idirs = glob.glob(os.path.join(self.installdir, 'v*/Linux*/'))
if len(idirs) == 1:
self.subdir = os.path.relpath(idirs[0], self.installdir)
else:
raise EasyBuildError("Failed to locate single install subdirectory v*/Linux*/")

def install_step(self):
"""Install Ansys Electronics Desktop using its setup tool."""
licserv = os.getenv('EB_AEDT_LICENSE_SERVER')
licport = os.getenv('EB_AEDT_LICENSE_SERVER_PORT')
licservs = licserv.split(',')
licservopt = ["-DLICENSE_SERVER%d=%s" % (i, serv) for i, serv in enumerate(licservs, 1)]
redundant = len(licservs) > 1
options = " ".join([
"-i silent",
"-DUSER_INSTALL_DIR=%s" % self.installdir,
"-DTMP_DIR=%s" % tempfile.TemporaryDirectory().name,
"-DLIBRARY_COMMON_INSTALL=1",
"-DSPECIFY_LIC_CFG=1",
"-DREDUNDANT_SERVERS=%d" % redundant,
*licservopt,
"-DSPECIFY_PORT=1",
"-DLICENSE_PORT=%s" % licport,
])
cmd = "./Linux/AnsysEM/Disk1/InstData/setup.exe %s" % options
run_cmd(cmd, log_all=True, simple=True)

def post_install_step(self):
"""Disable OS check and set LC_ALL/LANG for runtime"""
if not self.subdir:
self._set_subdir()

# Clean script file to disable over restrict OS checking
with open(os.path.join(self.installdir, self.subdir, "VerifyOS.bash"), "w") as f:
f.write("")

# Follow the settings in .setup_runtime and .setup_runtime_mpi to set LC_ALL and LANG
# If LC_ALL is not set properly, AEDT throws the following runtime error:
# what(): locale::facet::_S_create_c_locale name not valid
for fname in [".setup_runtime", ".setup_runtime_mpi"]:
with open(os.path.join(self.installdir, self.subdir, fname), "r") as f:
orig = f.read()
with open(os.path.join(self.installdir, self.subdir, fname), "w") as f:
f.write("export LC_ALL=C\n")
f.write("export LANG=C\n")
f.write(orig)

def make_module_extra(self):
"""Extra module entries for Ansys Electronics Desktop."""

txt = super(EB_AEDT, self).make_module_extra()
version = self.version[2:].replace('R', '')

idirs = glob.glob(os.path.join(self.installdir, 'v*/Linux*/'))
if len(idirs) == 1:
subdir = os.path.relpath(idirs[0], self.installdir)
# PyAEDT and other tools use the variable to find available AEDT versions
txt += self.module_generator.set_environment('ANSYSEM_ROOT%s' % version,
os.path.join(self.installdir, self.subdir))

txt += self.module_generator.prepend_paths('PATH', subdir)
txt += self.module_generator.prepend_paths('LD_LIBRARY_PATH', subdir)
txt += self.module_generator.prepend_paths('LIBRARY_PATH', subdir)

return txt

def sanity_check_step(self):
"""Custom sanity check for Ansys Electronics Desktop."""
if not self.subdir:
self._set_subdir()

custom_paths = {
'files': [os.path.join(self.subdir, 'ansysedt')],
'dirs': [self.subdir],
}

inpfile = os.path.join(self.subdir, 'Examples', 'RMxprt', 'lssm', 'sm-1.aedt')
custom_commands = ['ansysedt -ng -BatchSolve -Distributed %s' % inpfile]

super(EB_AEDT, self).sanity_check_step(custom_paths=custom_paths, custom_commands=custom_commands)
5 changes: 3 additions & 2 deletions easybuild/easyblocks/c/clang.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,20 +49,21 @@
from easybuild.tools.filetools import apply_regex_substitutions, change_dir, mkdir, symlink, which
from easybuild.tools.modules import get_software_root
from easybuild.tools.run import run_cmd
from easybuild.tools.systemtools import AARCH32, AARCH64, POWER, X86_64
from easybuild.tools.systemtools import AARCH32, AARCH64, POWER, RISCV64, X86_64
from easybuild.tools.systemtools import get_cpu_architecture, get_os_name, get_os_version, get_shared_lib_ext
from easybuild.tools.environment import setvar

# List of all possible build targets for Clang
CLANG_TARGETS = ["all", "AArch64", "AMDGPU", "ARM", "CppBackend", "Hexagon", "Mips",
"MBlaze", "MSP430", "NVPTX", "PowerPC", "R600", "Sparc",
"MBlaze", "MSP430", "NVPTX", "PowerPC", "R600", "RISCV", "Sparc",
"SystemZ", "X86", "XCore"]

# Mapping of EasyBuild CPU architecture names to list of default LLVM target names
DEFAULT_TARGETS_MAP = {
AARCH32: ['ARM'],
AARCH64: ['AArch64'],
POWER: ['PowerPC'],
RISCV64: ['RISCV'],
X86_64: ['X86'],
}

Expand Down
8 changes: 8 additions & 0 deletions easybuild/easyblocks/c/cuda.py
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,14 @@ def install_step(self):
# Use C locale to avoid localized questions and crash on CUDA 10.1
self.cfg.update('preinstallopts', "export LANG=C && ")

# As a CUDA recipe gets older and the OS gets updated, it is
# likely that the system GCC becomes too new for the CUDA version.
# Since in EasyBuild we know/expect that CUDA will only ever get used
# as a dependency within the context of a toolchain, we can override
# the compiler version check that would cause the installation to
# fail.
self.cfg.update('installopts', "--override")

cmd = "%(preinstallopts)s %(interpreter)s %(script)s %(installopts)s" % {
'preinstallopts': self.cfg['preinstallopts'],
'interpreter': install_interpreter,
Expand Down
4 changes: 2 additions & 2 deletions easybuild/easyblocks/f/fftw.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
from easybuild.tools.build_log import EasyBuildError
from easybuild.tools.config import build_option
from easybuild.tools.modules import get_software_version
from easybuild.tools.systemtools import AARCH32, AARCH64, POWER, X86_64
from easybuild.tools.systemtools import AARCH32, AARCH64, POWER, RISCV32, RISCV64, X86_64
from easybuild.tools.systemtools import get_cpu_architecture, get_cpu_features, get_shared_lib_ext
from easybuild.tools.toolchain.compiler import OPTARCH_GENERIC
from easybuild.tools.utilities import nub
Expand Down Expand Up @@ -141,7 +141,7 @@ def __init__(self, *args, **kwargs):
setattr(self, flag, True)

# Auto-disable quad-precision on ARM and POWER, as it is unsupported
if self.cfg['with_quad_prec'] and cpu_arch in [AARCH32, AARCH64, POWER]:
if self.cfg['with_quad_prec'] and cpu_arch in [AARCH32, AARCH64, POWER, RISCV32, RISCV64]:
self.cfg['with_quad_prec'] = False
self.log.debug("Quad-precision automatically disabled; not supported on %s.", cpu_arch)

Expand Down
Loading

0 comments on commit a336557

Please sign in to comment.