update conduit for 0.5.0 release (#13455)

* add support for static (via ~shared) and use vtk-m 1.2

* updating vtkh package to output cmake configure file and pinning it to vtkm 1.2

* trying a different cmake for vtkh

* removing problematic b

* making conduit respect ~python

* fixing ascent python logic

* update ascent package

* consistant cmake usage

* conditionally add tbb in ascent if vtkh

* applying becker fix

* adding vtkh tag

* fixing vtkh tagged version

* updating ascent and conduit for static builds

* enabling openmp

* reverting files that should not have been changed

* ascent updates

* more robust handling of variants

* fixing ascent package typo

* ascent: add optional support for mfem

* enable mfem conduit support for ascent

* add optional adios dep to conduit

* remove ver req from conduit

* ascent: remove confusing comment

* tweaks to conduit and ascent pkg recipes

* fix typo in conduit package

* pref conduit master

* fixing mfem typo for ascent

* reverting files

* adding mirror for bzip

* changing mfem to depend on conduit@master to get updated relay

* restore use of conduit 0.3.1 or greater for mfem

* set master as prefered conduit version

* allow mfem to use conduit master

* adding rover package and editing ascent

* updating vtkm cmake dep

* updates from axom

* guard ascent python support on +shared

* removing rover to simply ascent package

* add fortran variant to conduit, to allow us to turn off conduit support even when a fortran compiler is specified

* fix fortran compiler check so it can work on cray systems

* working towards cuda fix for vtkm lagrange filter

* update ascent package with more variants, and patch to avoid nvcc issue

* hdf5 flags fix for BGQ

* flake8

* extra guards for cuda patch

* conduit and ascent fortran fix

* fix patch for non cuda case

* add test variant to conduit, tweak ascent pkg

* change min ver of cmake used for ascent

* h5z-zfp package: unset FC when ~fortran

* conform to expected upstream solution

* pinning vtkm

* going back to vtkm master

* add back vtk-m variant for shared libs

* update ascent and vtkh packages

* wire up option to run tests during install

* add post install test

* add testing to ascent

* tweak for blueos xl

* add ctest output on error for run_tests

* enable ctest output on error for run_tests

* add testing of the using-with-make example

* update using-with-make examples

* typo in ascent using-with-cmake test

* fix ascent using test exe names

* more fixes, less sleep

* more fixes, less sleep ...

* remove unwired up version

* improvments suggested on review

* adding new cmake

* Update package.py

* Update package.py

* changes post cori os update

* fix cray hack

* Update package.py

Fixing 'fix'. Inconsistent variable names in conduit package

* type in spack recipes

* add zfp support to conduit

* fix indent error in conduit pkg

* move to use build phases, add sphinx rtd as dep, fix ex names in tests

* add conduit 0.5.0 release

* flake8

* remove old cray hack

* incorp feedback from review

* fix to use proper build env sig
This commit is contained in:
Cyrus Harrison 2019-10-28 15:32:16 -07:00 committed by Adam J. Stewart
parent ffb4e02a53
commit 1b3f546ba4
2 changed files with 92 additions and 25 deletions

View file

@ -72,7 +72,7 @@ class Ascent(Package):
# package dependencies # package dependencies
########################################################################### ###########################################################################
depends_on("cmake@3.9.2:3.9.999", type='build') depends_on("cmake@3.14:", type='build')
depends_on("conduit~python", when="~python") depends_on("conduit~python", when="~python")
depends_on("conduit+python", when="+python+shared") depends_on("conduit+python", when="+python+shared")
depends_on("conduit~shared~python", when="~shared") depends_on("conduit~shared~python", when="~shared")
@ -120,8 +120,8 @@ class Ascent(Package):
####################### #######################
depends_on("py-sphinx", when="+python+doc", type='build') depends_on("py-sphinx", when="+python+doc", type='build')
def setup_environment(self, spack_env, run_env): def setup_build_environment(self, env):
spack_env.set('CTEST_OUTPUT_ON_FAILURE', '1') env.set('CTEST_OUTPUT_ON_FAILURE', '1')
def install(self, spec, prefix): def install(self, spec, prefix):
""" """
@ -353,12 +353,21 @@ def create_host_config(self, spec, prefix, py_site_pkgs_dir=None):
cfg.write("# MPI Support\n") cfg.write("# MPI Support\n")
if "+mpi" in spec: if "+mpi" in spec:
mpicc_path = spec['mpi'].mpicc
mpicxx_path = spec['mpi'].mpicxx
mpifc_path = spec['mpi'].mpifc
# if we are using compiler wrappers on cray systems
# use those for mpi wrappers, b/c spec['mpi'].mpicxx
# etc make return the spack compiler wrappers
# which can trip up mpi detection in CMake 3.14
if cpp_compiler == "CC":
mpicc_path = "cc"
mpicxx_path = "CC"
mpifc_path = "ftn"
cfg.write(cmake_cache_entry("ENABLE_MPI", "ON")) cfg.write(cmake_cache_entry("ENABLE_MPI", "ON"))
cfg.write(cmake_cache_entry("MPI_C_COMPILER", spec['mpi'].mpicc)) cfg.write(cmake_cache_entry("MPI_C_COMPILER", mpicc_path))
cfg.write(cmake_cache_entry("MPI_CXX_COMPILER", cfg.write(cmake_cache_entry("MPI_CXX_COMPILER", mpicxx_path))
spec['mpi'].mpicxx)) cfg.write(cmake_cache_entry("MPI_Fortran_COMPILER", mpifc_path))
cfg.write(cmake_cache_entry("MPI_Fortran_COMPILER",
spec['mpi'].mpifc))
mpiexe_bin = join_path(spec['mpi'].prefix.bin, 'mpiexec') mpiexe_bin = join_path(spec['mpi'].prefix.bin, 'mpiexec')
if os.path.isfile(mpiexe_bin): if os.path.isfile(mpiexe_bin):
# starting with cmake 3.10, FindMPI expects MPIEXEC_EXECUTABLE # starting with cmake 3.10, FindMPI expects MPIEXEC_EXECUTABLE

View file

@ -38,6 +38,7 @@ class Conduit(Package):
git = "https://github.com/LLNL/conduit.git" git = "https://github.com/LLNL/conduit.git"
version('master', branch='master', submodules=True, preferred=True) version('master', branch='master', submodules=True, preferred=True)
version('0.5.0', sha256='7efac668763d02bd0a2c0c1b134d9f5ee27e99008183905bb0512e5502b8b4fe')
version('0.4.0', sha256='c228e6f0ce5a9c0ffb98e0b3d886f2758ace1a4b40d00f3f118542c0747c1f52') version('0.4.0', sha256='c228e6f0ce5a9c0ffb98e0b3d886f2758ace1a4b40d00f3f118542c0747c1f52')
version('0.3.1', sha256='7b358ca03bb179876291d4a55d6a1c944b7407a80a588795b9e47940b1990521') version('0.3.1', sha256='7b358ca03bb179876291d4a55d6a1c944b7407a80a588795b9e47940b1990521')
version('0.3.0', sha256='52e9cf5720560e5f7492876c39ef2ea20ae73187338361d2744bdf67567da155') version('0.3.0', sha256='52e9cf5720560e5f7492876c39ef2ea20ae73187338361d2744bdf67567da155')
@ -66,6 +67,9 @@ class Conduit(Package):
variant("silo", default=False, description="Build Conduit Silo support") variant("silo", default=False, description="Build Conduit Silo support")
variant("adios", default=False, description="Build Conduit ADIOS support") variant("adios", default=False, description="Build Conduit ADIOS support")
# zfp compression
variant("zfp", default=True, description="Build Conduit ZFP support")
# variants for dev-tools (docs, etc) # variants for dev-tools (docs, etc)
variant("doc", default=False, description="Build Conduit's documentation") variant("doc", default=False, description="Build Conduit's documentation")
# doxygen support is wip, since doxygen has several dependencies # doxygen support is wip, since doxygen has several dependencies
@ -94,6 +98,10 @@ class Conduit(Package):
####################### #######################
# I/O Packages # I/O Packages
####################### #######################
###############
# HDF5
###############
# TODO: cxx variant is disabled due to build issue Cyrus # TODO: cxx variant is disabled due to build issue Cyrus
# experienced on BGQ. When on, the static build tries # experienced on BGQ. When on, the static build tries
# to link against shared libs. # to link against shared libs.
@ -105,15 +113,26 @@ class Conduit(Package):
depends_on("hdf5~cxx~mpi~fortran", when="+hdf5~hdf5_compat+shared") depends_on("hdf5~cxx~mpi~fortran", when="+hdf5~hdf5_compat+shared")
depends_on("hdf5~shared~cxx~mpi~fortran", when="+hdf5~hdf5_compat~shared") depends_on("hdf5~shared~cxx~mpi~fortran", when="+hdf5~hdf5_compat~shared")
###############
# Silo
###############
# we are not using silo's fortran features # we are not using silo's fortran features
depends_on("silo~fortran", when="+silo+shared") depends_on("silo~fortran", when="+silo+shared")
depends_on("silo~shared~fortran", when="+silo~shared") depends_on("silo~shared~fortran", when="+silo~shared")
###############
# ADIOS
###############
depends_on("adios+mpi~hdf5+shared", when="+adios+mpi+shared") depends_on("adios+mpi~hdf5+shared", when="+adios+mpi+shared")
depends_on("adios+mpi~hdf5~shared~blosc", when="+adios+mpi~shared") depends_on("adios+mpi~hdf5~shared~blosc", when="+adios+mpi~shared")
depends_on("adios~mpi~hdf5+shared", when="+adios~mpi+shared") depends_on("adios~mpi~hdf5+shared", when="+adios~mpi+shared")
depends_on("adios~mpi~hdf5~shared~blosc", when="+adios~mpi~shared") depends_on("adios~mpi~hdf5~shared~blosc", when="+adios~mpi~shared")
#######################
# ZFP
#######################
depends_on("zfp", when="+zfp")
####################### #######################
# MPI # MPI
####################### #######################
@ -123,10 +142,14 @@ class Conduit(Package):
# Documentation related # Documentation related
####################### #######################
depends_on("py-sphinx", when="+python+doc", type='build') depends_on("py-sphinx", when="+python+doc", type='build')
depends_on("py-sphinx-rtd-theme", when="+python+doc", type='build')
depends_on("doxygen", when="+doc+doxygen") depends_on("doxygen", when="+doc+doxygen")
def setup_environment(self, spack_env, run_env): # build phases used by this package
spack_env.set('CTEST_OUTPUT_ON_FAILURE', '1') phases = ["configure", "build", "install"]
def setup_build_environment(self, env):
env.set('CTEST_OUTPUT_ON_FAILURE', '1')
def url_for_version(self, version): def url_for_version(self, version):
""" """
@ -145,9 +168,9 @@ def url_for_version(self, version):
return "https://github.com/LLNL/conduit/releases/download/v{0}/conduit-v{1}-src-with-blt.tar.gz".format(v, v) return "https://github.com/LLNL/conduit/releases/download/v{0}/conduit-v{1}-src-with-blt.tar.gz".format(v, v)
return url return url
def install(self, spec, prefix): def configure(self, spec, prefix):
""" """
Build and install Conduit. Configure Conduit.
""" """
with working_dir('spack-build', create=True): with working_dir('spack-build', create=True):
py_site_pkgs_dir = None py_site_pkgs_dir = None
@ -157,6 +180,9 @@ def install(self, spec, prefix):
host_cfg_fname = self.create_host_config(spec, host_cfg_fname = self.create_host_config(spec,
prefix, prefix,
py_site_pkgs_dir) py_site_pkgs_dir)
# save this filename for
# other package recipe steps to access
self.host_cfg_fname = host_cfg_fname
cmake_args = [] cmake_args = []
# if we have a static build, we need to avoid any of # if we have a static build, we need to avoid any of
# spack's default cmake settings related to rpaths # spack's default cmake settings related to rpaths
@ -170,17 +196,31 @@ def install(self, spec, prefix):
cmake_args.extend(["-C", host_cfg_fname, "../src"]) cmake_args.extend(["-C", host_cfg_fname, "../src"])
print("Configuring Conduit...") print("Configuring Conduit...")
cmake(*cmake_args) cmake(*cmake_args)
def build(self, spec, prefix):
"""
Build Conduit.
"""
with working_dir('spack-build'):
print("Building Conduit...") print("Building Conduit...")
make() make()
# run unit tests if requested
if "+test" in spec and self.run_tests: @run_after('build')
@on_package_attributes(run_tests=True)
def test(self):
with working_dir('spack-build'):
print("Running Conduit Unit Tests...") print("Running Conduit Unit Tests...")
make("test") make("test")
print("Installing Conduit...")
def install(self, spec, prefix):
"""
Install Conduit.
"""
with working_dir('spack-build'):
make("install") make("install")
# install copy of host config for provenance # install copy of host config for provenance
print("Installing Conduit CMake Host Config File...") print("Installing Conduit CMake Host Config File...")
install(host_cfg_fname, prefix) install(self.host_cfg_fname, prefix)
@run_after('install') @run_after('install')
@on_package_attributes(run_tests=True) @on_package_attributes(run_tests=True)
@ -203,7 +243,7 @@ def check_install(self):
example_src_dir] example_src_dir]
cmake(*cmake_args) cmake(*cmake_args)
make() make()
example = Executable('./example') example = Executable('./conduit_example')
example() example()
print("Checking using-with-make example...") print("Checking using-with-make example...")
example_src_dir = join_path(install_prefix, example_src_dir = join_path(install_prefix,
@ -216,7 +256,7 @@ def check_install(self):
for example_file in example_files: for example_file in example_files:
shutil.copy(example_file, ".") shutil.copy(example_file, ".")
make("CONDUIT_DIR={0}".format(install_prefix)) make("CONDUIT_DIR={0}".format(install_prefix))
example = Executable('./example') example = Executable('./conduit_example')
example() example()
def create_host_config(self, spec, prefix, py_site_pkgs_dir=None): def create_host_config(self, spec, prefix, py_site_pkgs_dir=None):
@ -366,12 +406,21 @@ def create_host_config(self, spec, prefix, py_site_pkgs_dir=None):
cfg.write("# MPI Support\n") cfg.write("# MPI Support\n")
if "+mpi" in spec: if "+mpi" in spec:
mpicc_path = spec['mpi'].mpicc
mpicxx_path = spec['mpi'].mpicxx
mpifc_path = spec['mpi'].mpifc
# if we are using compiler wrappers on cray systems
# use those for mpi wrappers, b/c spec['mpi'].mpicxx
# etc make return the spack compiler wrappers
# which can trip up mpi detection in CMake 3.14
if cpp_compiler == "CC":
mpicc_path = "cc"
mpicxx_path = "CC"
mpifc_path = "ftn"
cfg.write(cmake_cache_entry("ENABLE_MPI", "ON")) cfg.write(cmake_cache_entry("ENABLE_MPI", "ON"))
cfg.write(cmake_cache_entry("MPI_C_COMPILER", spec['mpi'].mpicc)) cfg.write(cmake_cache_entry("MPI_C_COMPILER", mpicc_path))
cfg.write(cmake_cache_entry("MPI_CXX_COMPILER", cfg.write(cmake_cache_entry("MPI_CXX_COMPILER", mpicxx_path))
spec['mpi'].mpicxx)) cfg.write(cmake_cache_entry("MPI_Fortran_COMPILER", mpifc_path))
cfg.write(cmake_cache_entry("MPI_Fortran_COMPILER",
spec['mpi'].mpifc))
mpiexe_bin = join_path(spec['mpi'].prefix.bin, 'mpiexec') mpiexe_bin = join_path(spec['mpi'].prefix.bin, 'mpiexec')
if os.path.isfile(mpiexe_bin): if os.path.isfile(mpiexe_bin):
# starting with cmake 3.10, FindMPI expects MPIEXEC_EXECUTABLE # starting with cmake 3.10, FindMPI expects MPIEXEC_EXECUTABLE
@ -385,6 +434,15 @@ def create_host_config(self, spec, prefix, py_site_pkgs_dir=None):
else: else:
cfg.write(cmake_cache_entry("ENABLE_MPI", "OFF")) cfg.write(cmake_cache_entry("ENABLE_MPI", "OFF"))
#######################
# ZFP
#######################
cfg.write("# zfp from spack \n")
if "+zfp" in spec:
cfg.write(cmake_cache_entry("ZFP_DIR", spec['zfp'].prefix))
else:
cfg.write("# zfp not built by spack \n")
####################################################################### #######################################################################
# I/O Packages # I/O Packages
####################################################################### #######################################################################