Skip to content

Commit

Permalink
Merge pull request #2785 from easybuilders/4.6.x
Browse files Browse the repository at this point in the history
release EasyBuild 4.6.1
  • Loading branch information
migueldiascosta authored Sep 12, 2022
2 parents daeed8d + ff299e2 commit 880eb1f
Show file tree
Hide file tree
Showing 17 changed files with 540 additions and 144 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/linting.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: Static Analysis
on: [push, pull_request]
jobs:
python-linting:
runs-on: ubuntu-18.04
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/unit_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: easyblocks unit tests
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-18.04
runs-on: ubuntu-20.04
strategy:
matrix:
python: [2.7, 3.5, 3.6, 3.7, 3.8, 3.9, '3.10']
Expand Down
27 changes: 27 additions & 0 deletions RELEASE_NOTES
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,33 @@ These release notes can also be consulted at http://easybuild.readthedocs.org/en
The latest version of easybuild-easyblocks provides 246 software-specific easyblocks and 37 generic easyblocks.


v4.6.1 (September 12th 2022)
----------------------------

update/bugfix release

- minor enhancements and updates, including:
- update LAMMPS easyblock for LAMMPS/23Jun22 (#2213)
- reduce the number of command line options for 'cmake' command in CMakeMake generic easyblock (#2514)
- update libQGLViewer easyblock to take into account changes in the shared library names depending on Qt versions they are compiled with (#2730)
- improve PLUMED detection in GROMACS easyblock (#2749)
- make `$LD_LIBRARY_PATH` detection more robust for LAMMPS (#2765)
- enhance NVHPC easyblock to avoid superfluous warning (#2767)
- enhance PyTorch easyblock to also capture tests failing with signal (#2768)
- enhance PythonPackage easyblock to make sure all test command output makes it to the EasyBuild log, also when return_output_ec=True (#2770)
- set $NVHPC_CUDA_HOME for NVHPC 22.7+ (#2776)
- various bug fixes, including:
- make Amber easyblock aware of FlexiBLAS (#2720)
- update PyTorch easyblock to configure without breakpad support on POWER (#2763)
- use lib* in post_install step of FFTW.MPI easyblock to fix paths not being found on Linux distros favouring lib64 (like Suse/SLES) (#2771)
- use det_cmake_version function to determine CMake version in CMakeMake generic easyblock (#2772)
- don't enable building of ld.gold when installing binutils on a RISC-V system + don't configure GCC to use gold as default linker on a RISC-V system (#2780)
- tweak Amber(Tools) easyblock to run tests from top-level directory (#2781)
- fix version check for NVPTX library in sanity check of Clang easyblock (#2783)
- other changes:
- update CI workflows to use Ubuntu 20.04 (since Ubuntu 18.04 is deprecated) (#2779)


v4.6.0 (July 8th 2022)
----------------------

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.6.0')
VERSION = LooseVersion('4.6.1')
UNKNOWN = 'UNKNOWN'


Expand Down
24 changes: 18 additions & 6 deletions easybuild/easyblocks/a/amber.py
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,17 @@ def configure_step(self):
if self.toolchain.options.get('openmp', None):
self.cfg.update('configopts', '-DOPENMP=TRUE')

# note: for Amber 20, a patch is required to fix the CMake scripts so they're aware of FlexiBLAS:
# - cmake/patched-cmake-modules/FindBLASFixed.cmake
# - cmake/patched-cmake-modules/FindLAPACKFixed.cmake
flexiblas_root = get_software_root('FlexiBLAS')
if flexiblas_root:
self.cfg.update('configopts', '-DBLA_VENDOR=FlexiBLAS')
else:
openblas_root = get_software_root('OpenBLAS')
if openblas_root:
self.cfg.update('configopts', '-DBLA_VENDOR=OpenBLAS')

cudaroot = get_software_root('CUDA')
if cudaroot:
self.with_cuda = True
Expand Down Expand Up @@ -213,13 +224,14 @@ def configuremake_install_step(self):

# define environment variables for MPI, BLAS/LAPACK & dependencies
mklroot = get_software_root('imkl')
openblasroot = get_software_root('OpenBLAS')
flexiblas_root = get_software_root('FlexiBLAS')
openblas_root = get_software_root('OpenBLAS')
if mklroot:
env.setvar('MKL_HOME', os.getenv('MKLROOT'))
elif openblasroot:
elif flexiblas_root or openblas_root:
lapack = os.getenv('LIBLAPACK')
if lapack is None:
raise EasyBuildError("LIBLAPACK (from OpenBLAS) not found in environment.")
raise EasyBuildError("$LIBLAPACK for OpenBLAS or FlexiBLAS not defined in build environment!")
else:
env.setvar('GOTO', lapack)

Expand Down Expand Up @@ -317,12 +329,12 @@ def install_step(self):

# Run the tests located in the build directory
if self.cfg['runtest']:
pretestcommands = 'source %s/amber.sh && cd %s/test' % (self.installdir, self.builddir)
pretestcommands = 'source %s/amber.sh && cd %s' % (self.installdir, self.builddir)

# serial tests
run_cmd("%s && make test" % pretestcommands, log_all=True, simple=True)
run_cmd("%s && make test.serial" % pretestcommands, log_all=True, simple=True)
if self.with_cuda:
(out, ec) = run_cmd("%s && make test.cuda.serial" % pretestcommands, log_all=True, simple=False)
(out, ec) = run_cmd("%s && make test.cuda_serial" % pretestcommands, log_all=True, simple=False)
if ec > 0:
self.log.warning("Check the output of the Amber cuda tests for possible failures")

Expand Down
16 changes: 13 additions & 3 deletions easybuild/easyblocks/b/binutils.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
from easybuild.tools.filetools import apply_regex_substitutions, copy_file
from easybuild.tools.modules import get_software_libdir, get_software_root
from easybuild.tools.run import run_cmd
from easybuild.tools.systemtools import get_shared_lib_ext
from easybuild.tools.systemtools import RISCV, get_cpu_family, get_shared_lib_ext
from easybuild.tools.utilities import nub


Expand All @@ -56,6 +56,13 @@ def extra_options(extra_vars=None):
})
return extra_vars

def __init__(self, *args, **kwargs):
"""Easyblock constructor"""
super(EB_binutils, self).__init__(*args, **kwargs)

# ld.gold linker is not supported on RISC-V
self.use_gold = get_cpu_family() != RISCV

def determine_used_library_paths(self):
"""Check which paths are used to search for libraries"""

Expand Down Expand Up @@ -158,7 +165,9 @@ def configure_step(self):

# enable gold linker with plugin support, use ld as default linker (for recent versions of binutils)
if LooseVersion(self.version) > LooseVersion('2.24'):
self.cfg.update('configopts', "--enable-gold --enable-plugins --enable-ld=default")
self.cfg.update('configopts', "--enable-plugins --enable-ld=default")
if self.use_gold:
self.cfg.update('configopts', '--enable-gold')

if LooseVersion(self.version) >= LooseVersion('2.34'):
if self.cfg['use_debuginfod']:
Expand Down Expand Up @@ -221,8 +230,9 @@ def sanity_check_step(self):
shlib_ext = get_shared_lib_ext()

if LooseVersion(self.version) > LooseVersion('2.24'):
binaries.append('ld.gold')
lib_exts.append(shlib_ext)
if self.use_gold:
binaries.append('ld.gold')

bin_paths = [os.path.join('bin', b) for b in binaries]
inc_paths = [os.path.join('include', h) for h in headers]
Expand Down
2 changes: 1 addition & 1 deletion easybuild/easyblocks/c/clang.py
Original file line number Diff line number Diff line change
Expand Up @@ -554,7 +554,7 @@ def sanity_check_step(self):
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('11.0') < LooseVersion(self.version) < LooseVersion('13.0'):
if LooseVersion('12.0') < LooseVersion(self.version) < LooseVersion('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:
Expand Down
8 changes: 5 additions & 3 deletions easybuild/easyblocks/f/fftwmpi.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,9 +63,11 @@ def post_install_step(self):
"""Custom post install step for FFTW.MPI"""

# remove everything except include files that are already in non-MPI FFTW dependency.
remove(glob.glob(os.path.join(self.installdir, 'lib', 'libfftw.*')) +
glob.glob(os.path.join(self.installdir, 'lib', 'libfftw[lf].*')) +
[os.path.join(self.installdir, p) for p in ['bin', 'lib/pkgconfig', 'lib/cmake', 'share']])
remove(glob.glob(os.path.join(self.installdir, 'lib*', 'libfftw.*')) +
glob.glob(os.path.join(self.installdir, 'lib*', 'libfftw[lf].*')) +
glob.glob(os.path.join(self.installdir, 'lib*/pkgconfig')) +
glob.glob(os.path.join(self.installdir, 'lib*/cmake')) +
[os.path.join(self.installdir, p) for p in ['bin', 'share']])
super(EB_FFTW_period_MPI, self).post_install_step()

def sanity_check_step(self):
Expand Down
12 changes: 7 additions & 5 deletions easybuild/easyblocks/g/gcc.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,8 @@
from easybuild.tools.filetools import which, write_file
from easybuild.tools.modules import get_software_root
from easybuild.tools.run import run_cmd
from easybuild.tools.systemtools import check_os_dependency, get_os_name, get_os_type
from easybuild.tools.systemtools import get_cpu_architecture, get_gcc_version, get_shared_lib_ext
from easybuild.tools.systemtools import RISCV, check_os_dependency, get_cpu_architecture, get_cpu_family
from easybuild.tools.systemtools import get_gcc_version, get_shared_lib_ext, get_os_name, get_os_type
from easybuild.tools.toolchain.compiler import OPTARCH_GENERIC
from easybuild.tools.utilities import nub

Expand Down Expand Up @@ -90,7 +90,7 @@ def extra_options():
'prefer_lib_subdir': [False, "Configure GCC to prefer 'lib' subdirs over 'lib64' when linking", CUSTOM],
'profiled': [False, "Bootstrap GCC with profile-guided optimizations", CUSTOM],
'use_gold_linker': [None, "Configure GCC to use GOLD as default linker "
"(default: True for GCC < 11.3.0)", CUSTOM],
"(default: enable automatically for GCC < 11.3.0, except on RISC-V)", CUSTOM],
'withcloog': [False, "Build GCC with CLooG support", CUSTOM],
'withisl': [False, "Build GCC with ISL support", CUSTOM],
'withlibiberty': [False, "Enable installing of libiberty", CUSTOM],
Expand Down Expand Up @@ -526,8 +526,10 @@ def configure_step(self):
# enable plugin support
self.configopts += " --enable-plugins "

# use GOLD as default linker
if self.cfg['use_gold_linker']:
# use GOLD as default linker, except on RISC-V (since it's not supported there)
if get_cpu_family() == RISCV:
self.configopts += " --disable-gold --enable-ld=default"
elif self.cfg['use_gold_linker']:
self.configopts += " --enable-gold=default --enable-ld --with-plugin-ld=ld.gold"
else:
self.configopts += " --enable-gold --enable-ld=default"
Expand Down
15 changes: 14 additions & 1 deletion easybuild/easyblocks/g/gromacs.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,8 @@ def extra_options():
'mpiexec_numproc_flag': ['-np', "Flag to introduce the number of MPI tasks when running tests", CUSTOM],
'mpi_numprocs': [0, "Number of MPI tasks to use when running tests", CUSTOM],
'ignore_plumed_version_check': [False, "Ignore the version compatibility check for PLUMED", CUSTOM],
'plumed': [None, "Try to apply PLUMED patches. None (default) is auto-detect. " +
"True or False forces behaviour.", CUSTOM],
})
extra_vars['separate_build_dir'][0] = True
return extra_vars
Expand Down Expand Up @@ -201,9 +203,20 @@ def configure_step(self):
# to avoid that GROMACS finds and uses a system-wide CUDA compiler
self.cfg.update('configopts', "-DGMX_GPU=OFF")

# check whether PLUMED is loaded as a dependency
# PLUMED detection
# enable PLUMED support if PLUMED is listed as a dependency
# and PLUMED support is either explicitly enabled (plumed = True) or unspecified ('plumed' not defined)
plumed_root = get_software_root('PLUMED')
if self.cfg['plumed'] and not plumed_root:
msg = "PLUMED support has been requested but PLUMED is not listed as a dependency."
raise EasyBuildError(msg)
elif plumed_root and self.cfg['plumed'] is False:
self.log.info('PLUMED was found, but compilation without PLUMED has been requested.')
plumed_root = None

if plumed_root:
self.log.info('PLUMED support has been enabled.')

# Need to check if PLUMED has an engine for this version
engine = 'gromacs-%s' % self.version

Expand Down
Loading

0 comments on commit 880eb1f

Please sign in to comment.