diff options
author | Greg Sjaardema <gsjaardema@gmail.com> | 2018-12-17 11:57:31 -0700 |
---|---|---|
committer | Adam J. Stewart <ajstewart426@gmail.com> | 2018-12-17 12:57:31 -0600 |
commit | ccce3b79ab22952becc946d953dab0f501d47afd (patch) | |
tree | 1cb2bb6f46966e8c252b47c04e6b43ac362aa5ec /var | |
parent | f979b974a5521e4595ea910e189668dbcab49c59 (diff) | |
download | spack-ccce3b79ab22952becc946d953dab0f501d47afd.tar.gz spack-ccce3b79ab22952becc946d953dab0f501d47afd.tar.bz2 spack-ccce3b79ab22952becc946d953dab0f501d47afd.tar.xz spack-ccce3b79ab22952becc946d953dab0f501d47afd.zip |
SEACAS: Add preliminary support for seacas package (#9972)
* SEACAS: Add preliminary support for seacas package
* Eliminate leftover from package I copied from.
* And remove another stray line
Sorry, thought I had checked this better...
* SEACAS: Shorten long lines; fixup indentation
* SEACAS: Remove unused os import
* Add PLASMA version 18.11.0 and Lua variant (#9689)
* Add PLASMA 18.11.1 with optional Lua and test for headers
* New versions for a few python modules (#9969)
* py-jupyter-console: Add version 5.2.0
* py-jupyter-core: add version 4.4.0
* py-lxml: add version 4.2.5
* py-zmq: add version 17.1.2
* py-terminado: add version 0.8.1
* py-pexpect: add version 4.6.0
* py-pytables: add version 3.4.4
* SEACAS: Default to mpi on
* SEACAS: Modify to reduce variants
Instead of using an `allpkgs` or explicitly specifying each individual subset,
changed to minimize variants:
* By default, the exodus and IOSS libraries are built and a few
executables directly related to the IOSS library.
* variant `common` defaults to True and builds the "common" seacas
applications. This is based on my definition, so there may be
could be some discussion on what belongs here.
* variant `legacy` defaults to True and builds the remainder of the
seacas applications. These are still used, but mainly in more
esoteric areas. Might be better to default to False, but I wanted
default to just build everything which is what other SEACAS builds
always do...
Removed the `kokkos` variants for now as I need to do some more
thinking on how best to support this. Not often used currently,
so shouldn't be an issue.
Cleaned up other issues raised by Adam and found by me.
* SEACAS: Address flake8 issues
* SEACAS: Clean up variant package logic
Fixed package variant logic.
Consolidated some other variant handling logic
Other minor refactors for hopefully better readability
* SEACAS: Fix flake8 error
Missing whitespace around operator fixed.
Diffstat (limited to 'var')
-rw-r--r-- | var/spack/repos/builtin/packages/seacas/package.py | 249 |
1 files changed, 249 insertions, 0 deletions
diff --git a/var/spack/repos/builtin/packages/seacas/package.py b/var/spack/repos/builtin/packages/seacas/package.py new file mode 100644 index 0000000000..fae91e9809 --- /dev/null +++ b/var/spack/repos/builtin/packages/seacas/package.py @@ -0,0 +1,249 @@ +# Copyright 2013-2018 Lawrence Livermore National Security, LLC and other +# Spack Project Developers. See the top-level COPYRIGHT file for details. +# +# SPDX-License-Identifier: (Apache-2.0 OR MIT) + +import sys +from spack import * +from spack.operating_systems.mac_os import macos_version + +# +# Need to add: +# KOKKOS support using an external (i.e. spack-supplied) kokkos library. +# Data Warehouse (FAODEL) enable/disable + + +class Seacas(CMakePackage): + """The SEACAS Project contains the Exodus and IOSS libraries and a + collection of applications which create, query, modify, or + translate exodus databases. Default is to build the exodus and + IOSS libraries and the io_shell, io_info, struc_to_unstruc apps. + """ + homepage = "http://gsjaardema.github.io/seacas/" + git = "https://github.com/gsjaardema/seacas.git" + + maintainers = ['gsjaardema'] + + # ###################### Versions ########################## + version('master', branch='master') + + # ###################### Variants ########################## + # Package options + # The I/O libraries (exodus, IOSS) are always built + # -- required of both applications and legacy variants. + variant('applications', default=True, + description='Build all "current" SEACAS applications. This' + ' includes a debatable list of essential applications: ' + 'aprepro, conjoin, ejoin, epu, exo2mat, mat2exo, ' + 'exo_format, exodiff, explore, grepos, ' + 'nemslice, nemspread') + variant('legacy', default=True, + description='Build all "legacy" SEACAS applications. This includes' + ' a debatable list of "legacy" applications: algebra, blot, ' + 'exomatlab, exotxt, fastq, gen3d, genshell, gjoin, mapvar, ' + 'mapvar-kd, numbers, txtexo, nemesis') + + # Build options + variant('fortran', default=True, + description='Compile with Fortran support') + variant('shared', default=True, + description='Enables the build of shared libraries') + variant('mpi', default=True, description='Enables MPI parallelism.') + + variant('thread_safe', default=False, + description='Enable thread-safe exodus and IOSS libraries') + + # TPLs (alphabet order) + variant('cgns', default=True, + description='Enable CGNS') + variant('matio', default=True, + description='Compile with matio (MatLab) support') + variant('metis', default=False, + description='Compile with METIS and ParMETIS') + variant('x11', default=True, + description='Compile with X11') + + # ###################### Dependencies ########################## + + # Everything should be compiled position independent (-fpic) + + depends_on('netcdf@4.6.2+mpi+parallel-netcdf', when='+mpi') + depends_on('netcdf@4.6.2~mpi', when='~mpi') + depends_on('cgns@develop+mpi+scoping', when='+cgns +mpi') + depends_on('cgns@develop~mpi+scoping', when='+cgns ~mpi') + depends_on('matio', when='+matio') + depends_on('metis+int64+real64', when='+metis ~mpi') + depends_on('parmetis+int64+real64', when='+metis +mpi') + + # MPI related dependencies + depends_on('mpi', when='+mpi') + + depends_on('cmake@3.1:', type='build') + + def cmake_args(self): + spec = self.spec + + options = [] + + # #################### Base Settings ####################### + + if '+mpi' in spec: + options.extend([ + '-DCMAKE_C_COMPILER=%s' % spec['mpi'].mpicc, + '-DCMAKE_CXX_COMPILER=%s' % spec['mpi'].mpicxx, + '-DCMAKE_Fortran_COMPILER=%s' % spec['mpi'].mpifc, + '-DTPL_ENABLE_MPI:BOOL=ON', + '-DMPI_BASE_DIR:PATH=%s' % spec['mpi'].prefix, + ]) + + options.extend([ + '-DSEACASProj_ENABLE_TESTS:BOOL=ON', + '-DSEACASProj_ENABLE_CXX11:BOOL=ON', + '-DCMAKE_INSTALL_RPATH_USE_LINK_PATH:BOOL=%s' % ( + 'ON' if '+shared' in spec else 'OFF'), + '-DBUILD_SHARED_LIBS:BOOL=%s' % ( + 'ON' if '+shared' in spec else 'OFF'), + '-DSEACASProj_ENABLE_Kokkos:BOOL=OFF', + '-DSEACASProj_HIDE_DEPRECATED_CODE:BOOL=OFF', + '-DSEACASExodus_ENABLE_THREADSAFE:BOOL=%s' % ( + 'ON' if '+thread_safe' in spec else 'OFF'), + '-DSEACASIoss_ENABLE_THREADSAFE:BOOL=%s' % ( + 'ON' if '+thread_safe' in spec else 'OFF'), + '-DSEACASProj_ENABLE_Fortran:BOOL=%s' % ( + 'ON' if '+fortran' in spec else 'OFF'), + '-DTPL_ENABLE_X11:BOOL=%s' % ( + 'ON' if '+x11' in spec else 'OFF'), + ]) + + # ########## What applications should be built ############# + # Check whether they want everything; if so, do the easy way... + if '+applications' in spec and '+legacy' in spec: + options.extend([ + '-DSEACASProj_ENABLE_ALL_PACKAGES:BOOL=ON', + '-DSEACASProj_ENABLE_ALL_OPTIONAL_PACKAGES:BOOL=ON', + '-DSEACASProj_ENABLE_SECONDARY_TESTED_CODE:BOOL=ON', + ]) + else: + # Don't want everything; handle the subsets: + options.extend([ + '-DSEACASProj_ENABLE_ALL_PACKAGES:BOOL=OFF', + '-DSEACASProj_ENABLE_ALL_OPTIONAL_PACKAGES:BOOL=OFF', + '-DSEACASProj_ENABLE_SECONDARY_TESTED_CODE:BOOL=OFF', + '-DSEACASProj_ENABLE_SEACASIoss:BOOL=ON', + '-DSEACASProj_ENABLE_SEACASExodus:BOOL=ON', + '-DSEACASProj_ENABLE_SEACASExodus_for:BOOL=%s' % ( + 'ON' if '+fortran' in spec else 'OFF'), + '-DSEACASProj_ENABLE_SEACASExoIIv2for32:BOOL=%s' % ( + 'ON' if '+fortran' in spec else 'OFF'), + ]) + + if '+applications' in spec: + options.extend([ + '-DSEACASProj_ENABLE_SEACASAprepro:BOOL=ON', + '-DSEACASProj_ENABLE_SEACASAprepro_lib:BOOL=ON', + '-DSEACASProj_ENABLE_SEACASConjoin:BOOL=ON', + '-DSEACASProj_ENABLE_SEACASEjoin:BOOL=ON', + '-DSEACASProj_ENABLE_SEACASEpu:BOOL=ON', + '-DSEACASProj_ENABLE_SEACASExo2mat:BOOL=ON', + '-DSEACASProj_ENABLE_SEACASExo_format:BOOL=ON', + '-DSEACASProj_ENABLE_SEACASExodiff:BOOL=ON', + '-DSEACASProj_ENABLE_SEACASExplore:BOOL=%s' % ( + 'ON' if '+fortran' in spec else 'OFF'), + '-DSEACASProj_ENABLE_SEACASGrepos:BOOL=%s' % ( + 'ON' if '+fortran' in spec else 'OFF'), + '-DSEACASProj_ENABLE_SEACASMat2exo:BOOL=ON', + '-DSEACASProj_ENABLE_SEACASNemslice:BOOL=ON', + '-DSEACASProj_ENABLE_SEACASNemspread:BOOL=ON', + ]) + + if '+legacy' in spec: + options.extend([ + '-DSEACASProj_ENABLE_SEACASAlgebra:BOOL=%s' % ( + 'ON' if '+fortran' in spec else 'OFF'), + '-DSEACASProj_ENABLE_SEACASBlot:BOOL=%s' % ( + 'ON' if '+fortran' in spec else 'OFF'), + '-DSEACASProj_ENABLE_SEACASEx1ex2v2:BOOL=%s' % ( + 'ON' if '+fortran' in spec else 'OFF'), + '-DSEACASProj_ENABLE_SEACASEx2ex1v2:BOOL=%s' % ( + 'ON' if '+fortran' in spec else 'OFF'), + '-DSEACASProj_ENABLE_SEACASExomatlab:BOOL=%s' % ( + 'ON' if '+fortran' in spec else 'OFF'), + '-DSEACASProj_ENABLE_SEACASExotec2:BOOL=%s' % ( + 'ON' if '+fortran' in spec else 'OFF'), + '-DSEACASProj_ENABLE_SEACASExotxt:BOOL=%s' % ( + 'ON' if '+fortran' in spec else 'OFF'), + '-DSEACASProj_ENABLE_SEACASFastq:BOOL=%s' % ( + 'ON' if '+fortran' in spec else 'OFF'), + '-DSEACASProj_ENABLE_SEACASGen3D:BOOL=%s' % ( + 'ON' if '+fortran' in spec else 'OFF'), + '-DSEACASProj_ENABLE_SEACASGenshell:BOOL=%s' % ( + 'ON' if '+fortran' in spec else 'OFF'), + '-DSEACASProj_ENABLE_SEACASGjoin:BOOL=%s' % ( + 'ON' if '+fortran' in spec else 'OFF'), + '-DSEACASProj_ENABLE_SEACASMapvar:BOOL=%s' % ( + 'ON' if '+fortran' in spec else 'OFF'), + '-DSEACASProj_ENABLE_SEACASMapvar-kd:BOOL=%s' % ( + 'ON' if '+fortran' in spec else 'OFF'), + '-DSEACASProj_ENABLE_SEACASNemesis:BOOL=ON', + '-DSEACASProj_ENABLE_SEACASNumbers:BOOL=%s' % ( + 'ON' if '+fortran' in spec else 'OFF'), + '-DSEACASProj_ENABLE_SEACASTxtexo:BOOL=%s' % ( + 'ON' if '+fortran' in spec else 'OFF'), + ]) + + # ##################### Dependencies ########################## + # Always need NetCDF + options.extend([ + '-DTPL_ENABLE_Netcdf:BOOL=ON', + '-DNetCDF_ROOT:PATH=%s' % spec['netcdf'].prefix, + ]) + + if '+metis' in spec: + options.extend([ + '-DTPL_ENABLE_METIS:BOOL=ON', + '-DMETIS_LIBRARY_DIRS=%s' % spec['metis'].prefix.lib, + '-DMETIS_LIBRARY_NAMES=metis', + '-DTPL_METIS_INCLUDE_DIRS=%s' % spec['metis'].prefix.include, + '-DTPL_ENABLE_ParMETIS:BOOL=ON', + '-DParMETIS_LIBRARY_DIRS=%s;%s' % ( + spec['parmetis'].prefix.lib, spec['metis'].prefix.lib), + '-DParMETIS_LIBRARY_NAMES=parmetis;metis', + '-DTPL_ParMETIS_INCLUDE_DIRS=%s;%s' % ( + spec['parmetis'].prefix.include, + spec['metis'].prefix.include) + ]) + else: + options.extend([ + '-DTPL_ENABLE_METIS:BOOL=OFF', + '-DTPL_ENABLE_ParMETIS:BOOL=OFF', + ]) + + if '+matio' in spec: + options.extend([ + '-DTPL_ENABLE_Matio:BOOL=ON', + '-DMatio_ROOT:PATH=%s' % spec['matio'].prefix + ]) + else: + options.extend([ + '-DTPL_ENABLE_Matio:BOOL=OFF' + ]) + + if '+cgns' in spec: + options.extend([ + '-DTPL_ENABLE_CGNS:BOOL=ON', + '-DCGNS_ROOT:PATH=%s' % spec['cgns'].prefix, + ]) + else: + options.extend([ + '-DTPL_ENABLE_CGNS:BOOL=OFF' + ]) + + # ################# RPath Handling ###################### + if sys.platform == 'darwin' and macos_version() >= Version('10.12'): + # use @rpath on Sierra due to limit of dynamic loader + options.append('-DCMAKE_MACOSX_RPATH:BOOL=ON') + else: + options.append('-DCMAKE_INSTALL_NAME_DIR:PATH=%s' % + self.prefix.lib) + + return options |