summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCyrus Harrison <cyrush@llnl.gov>2021-03-18 18:44:29 -0700
committerGitHub <noreply@github.com>2021-03-18 18:44:29 -0700
commit4df1f62fd3accb418aecd75fbcc6ab70ff7cbf82 (patch)
tree02f72774f5ba5d2357c3df23446b7ce9ba1e547f
parent4f1a76a0d161223a5eff21662e4d87176f2b7e4e (diff)
downloadspack-4df1f62fd3accb418aecd75fbcc6ab70ff7cbf82.tar.gz
spack-4df1f62fd3accb418aecd75fbcc6ab70ff7cbf82.tar.bz2
spack-4df1f62fd3accb418aecd75fbcc6ab70ff7cbf82.tar.xz
spack-4df1f62fd3accb418aecd75fbcc6ab70ff7cbf82.zip
updates to conduit to add hostcfg and use cmake base (#22233)
-rw-r--r--var/spack/repos/builtin/packages/conduit/package.py124
1 files changed, 52 insertions, 72 deletions
diff --git a/var/spack/repos/builtin/packages/conduit/package.py b/var/spack/repos/builtin/packages/conduit/package.py
index 0efe5e6f8a..3a245b6d79 100644
--- a/var/spack/repos/builtin/packages/conduit/package.py
+++ b/var/spack/repos/builtin/packages/conduit/package.py
@@ -27,7 +27,7 @@ def cmake_cache_entry(name, value, vtype=None):
return 'set({0} "{1}" CACHE {2} "")\n\n'.format(name, value, vtype)
-class Conduit(Package):
+class Conduit(CMakePackage):
"""Conduit is an open source project from Lawrence Livermore National
Laboratory that provides an intuitive model for describing hierarchical
scientific data in C++, C, Fortran, and Python. It is used for data
@@ -90,8 +90,8 @@ class Conduit(Package):
#######################
# CMake
#######################
- # cmake 3.8.2 or newer
- depends_on("cmake@3.8.2:", type='build')
+ # cmake 3.14.1 or newer
+ depends_on("cmake@3.14.1:", type='build')
#######################
# Python
@@ -108,7 +108,7 @@ class Conduit(Package):
###############
# HDF5
###############
- # TODO: cxx variant is disabled due to build issue Cyrus
+ # Note: cxx variant is disabled due to build issue Cyrus
# experienced on BGQ. When on, the static build tries
# to link against shared libs.
#
@@ -137,7 +137,10 @@ class Conduit(Package):
#######################
# ZFP
#######################
- depends_on("zfp", when="+zfp")
+ depends_on("zfp bsws=8", when="+zfp")
+
+ # hdf5 zfp plugin when both hdf5 and zfp are on
+ depends_on("h5z-zfp~fortran", when="+hdf5+zfp")
#######################
# MPI
@@ -155,8 +158,10 @@ class Conduit(Package):
# Cmake will support fj compiler and this patch will be removed
patch('fj_flags.patch', when='%fj')
+ ###################################
# build phases used by this package
- phases = ["configure", "build", "install"]
+ ###################################
+ phases = ['hostconfig', 'cmake', 'build', 'install']
def flag_handler(self, name, flags):
if name in ('cflags', 'cxxflags', 'fflags'):
@@ -184,42 +189,16 @@ class Conduit(Package):
return "https://github.com/LLNL/conduit/releases/download/v{0}/conduit-v{1}-src-with-blt.tar.gz".format(v, v)
return url
- def configure(self, spec, prefix):
- """
- Configure Conduit.
- """
- with working_dir('spack-build', create=True):
- py_site_pkgs_dir = None
- if "+python" in spec:
- py_site_pkgs_dir = site_packages_dir
-
- host_cfg_fname = self.create_host_config(spec,
- prefix,
- py_site_pkgs_dir)
- # save this filename for
- # other package recipe steps to access
- self.host_cfg_fname = host_cfg_fname
- cmake_args = []
- # if we have a static build, we need to avoid any of
- # spack's default cmake settings related to rpaths
- # (see: https://github.com/spack/spack/issues/2658)
- if "+shared" in spec:
- cmake_args.extend(std_cmake_args)
- else:
- for arg in std_cmake_args:
- if arg.count("RPATH") == 0:
- cmake_args.append(arg)
- cmake_args.extend(["-C", host_cfg_fname, "../src"])
- print("Configuring Conduit...")
- cmake(*cmake_args)
+ ####################################################################
+ # Note: cmake, build, and install stages are handled by CMakePackage
+ ####################################################################
- def build(self, spec, prefix):
- """
- Build Conduit.
- """
- with working_dir('spack-build'):
- print("Building Conduit...")
- make()
+ # provide cmake args (pass host config as cmake cache file)
+ def cmake_args(self):
+ host_config = self._get_host_config_path(self.spec)
+ options = []
+ options.extend(['-C', host_config, "../spack-src/src/"])
+ return options
@run_after('build')
@on_package_attributes(run_tests=True)
@@ -228,16 +207,6 @@ class Conduit(Package):
print("Running Conduit Unit Tests...")
make("test")
- def install(self, spec, prefix):
- """
- Install Conduit.
- """
- with working_dir('spack-build'):
- make("install")
- # install copy of host config for provenance
- print("Installing Conduit CMake Host Config File...")
- install(self.host_cfg_fname, prefix)
-
@run_after('install')
@on_package_attributes(run_tests=True)
def check_install(self):
@@ -275,24 +244,30 @@ class Conduit(Package):
example = Executable('./conduit_example')
example()
- def create_host_config(self, spec, prefix, py_site_pkgs_dir=None):
+ def _get_host_config_path(self, spec):
+ sys_type = spec.architecture
+ # if on llnl systems, we can use the SYS_TYPE
+ if "SYS_TYPE" in env:
+ sys_type = env["SYS_TYPE"]
+ host_config_path = "{0}-{1}-{2}-conduit-{3}.cmake".format(socket.gethostname(),
+ sys_type,
+ spec.compiler,
+ spec.dag_hash())
+ dest_dir = spec.prefix
+ host_config_path = os.path.abspath(join_path(dest_dir,
+ host_config_path))
+ return host_config_path
+
+ def hostconfig(self, spec, prefix):
"""
This method creates a 'host-config' file that specifies
all of the options used to configure and build conduit.
For more details about 'host-config' files see:
http://software.llnl.gov/conduit/building.html
-
- Note:
- The `py_site_pkgs_dir` arg exists to allow a package that
- subclasses this package provide a specific site packages
- dir when calling this function. `py_site_pkgs_dir` should
- be an absolute path or `None`.
-
- This is necessary because the spack `site_packages_dir`
- var will not exist in the base class. For more details
- on this issue see: https://github.com/spack/spack/issues/6261
"""
+ if not os.path.isdir(spec.prefix):
+ os.mkdir(spec.prefix)
#######################
# Compiler Info
@@ -308,8 +283,7 @@ class Conduit(Package):
f_compiler = env["SPACK_FC"]
#######################################################################
- # By directly fetching the names of the actual compilers we appear
- # to doing something evil here, but this is necessary to create a
+ # Directly fetch the names of the actual compilers to create a
# 'host config' file that works outside of the spack install env.
#######################################################################
@@ -326,9 +300,9 @@ class Conduit(Package):
##############################################
cmake_exe = spec['cmake'].command.path
- host_cfg_fname = "%s-%s-%s-conduit.cmake" % (socket.gethostname(),
- sys_type,
- spec.compiler)
+
+ # get hostconfig name
+ host_cfg_fname = self._get_host_config_path(spec)
cfg = open(host_cfg_fname, "w")
cfg.write("##################################\n")
@@ -448,10 +422,6 @@ class Conduit(Package):
cfg.write("# python from spack \n")
cfg.write(cmake_cache_entry("PYTHON_EXECUTABLE",
spec['python'].command.path))
- # only set dest python site packages dir if passed
- if py_site_pkgs_dir:
- cfg.write(cmake_cache_entry("PYTHON_MODULE_INSTALL_PREFIX",
- py_site_pkgs_dir))
else:
cfg.write(cmake_cache_entry("ENABLE_PYTHON", "OFF"))
@@ -536,6 +506,17 @@ class Conduit(Package):
cfg.write("# hdf5 not built by spack \n")
#######################
+ # h5z-zfp
+ #######################
+
+ cfg.write("# h5z-zfp from spack \n")
+
+ if "+hdf5+zfp" in spec:
+ cfg.write(cmake_cache_entry("H5ZZFP_DIR", spec['h5z-zfp'].prefix))
+ else:
+ cfg.write("# h5z-zfp not built by spack \n")
+
+ #######################
# Silo
#######################
@@ -564,4 +545,3 @@ class Conduit(Package):
host_cfg_fname = os.path.abspath(host_cfg_fname)
tty.info("spack generated conduit host-config file: " + host_cfg_fname)
- return host_cfg_fname