diff options
author | Cameron Smith <cwsmith@users.noreply.github.com> | 2019-12-03 13:07:27 -0500 |
---|---|---|
committer | Adam J. Stewart <ajstewart426@gmail.com> | 2019-12-03 12:07:27 -0600 |
commit | 5ddf5e2e7b6d7cd8e2f8a3c2e09cbed4b3fa8e6f (patch) | |
tree | e529e121aee082daff9e3d133680aa8b68d738ee /var | |
parent | 111dc8f823104bb6cf14675fb8d6387e1b8610b0 (diff) | |
download | spack-5ddf5e2e7b6d7cd8e2f8a3c2e09cbed4b3fa8e6f.tar.gz spack-5ddf5e2e7b6d7cd8e2f8a3c2e09cbed4b3fa8e6f.tar.bz2 spack-5ddf5e2e7b6d7cd8e2f8a3c2e09cbed4b3fa8e6f.tar.xz spack-5ddf5e2e7b6d7cd8e2f8a3c2e09cbed4b3fa8e6f.zip |
new package: Simmetrix SimModSuite (#8730)
* package for Simmetrix SimModSuite
* simmodsuite: passes flake8
* simmetrix: add version, set cmake prefix path
A given install will either use the libs built on rhel7 or rhel6.
For now, I'm sticking with the non-spack install convention of
placing the libraries into sub-directories named according to their
build process (os + compiler).
* simmetrix: add older version
* simmetrix: set build env paths
easier to build pumi using CMAKE_PREFIX_PATH
* simmetrix: address review comments
* simmetrix: add new version and remove old one
* simmetrix: flake8 fixes
* simmodsuite: oslib var is in self
* simmodsuite: update version and checksum
* simodsuite: set LD_LIBRARY_PATH for cad kernels
* update license
* update setup_environment calls
* increase indentation for flake8
* python3.8 flake8 fixes
* use spack consistent naming
Co-Authored-By: Adam J. Stewart <ajstewart426@gmail.com>
* sha256 required, update versions and hashes
Diffstat (limited to 'var')
-rw-r--r-- | var/spack/repos/builtin/packages/simmetrix-simmodsuite/package.py | 242 |
1 files changed, 242 insertions, 0 deletions
diff --git a/var/spack/repos/builtin/packages/simmetrix-simmodsuite/package.py b/var/spack/repos/builtin/packages/simmetrix-simmodsuite/package.py new file mode 100644 index 0000000000..c37454b33b --- /dev/null +++ b/var/spack/repos/builtin/packages/simmetrix-simmodsuite/package.py @@ -0,0 +1,242 @@ +# Copyright 2013-2019 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) + +from spack import * +import os + + +def simmodsuite_releases(): + releases = [ + { + 'version': '14.0-191122', + 'components': { + 'gmadv': ['01cea5f7aff5e442ea544df054969740ad33e2ff4097cf02de31874d16a0c7c2', 'advmodel'], + 'msadapt': ['69839698f24969f97963869fd212bdcff0b5d52dd40ec3fdc710d878e43b527a', 'base'], + 'gmvoxel': ['bfea15e1fc5d258ed9db69132042a848ca81995e92bf265215e4b88d08a308a8', 'voxel'], + 'gmabstract': ['dccdcd4b71758e4110cd69b0befa7875e5c1f3871f87478410c6676da3f39092', 'abstract'], + 'fdcore': ['6981b2eb0c0143e6abc3ec29918fc3552f81018755770bf922d2491275984e1a', 'base'], + 'msparallelmesh': ['1e1a431ec9dd85354ff42c6a2a41df7fbe3dfe5d296f40105c4d3aa372639dc3', 'parallelmesh'], + 'mscore': ['bca80fcb2c86e7b6dc0259681ccd73197ce85c47f00f1910bd6b518fa0b3a092', 'base'], + 'discrete': ['430e5f2270864b1ab9c8dff75d2510147a0c5cde8af0828975d9e38661be3a35', 'discrete'], + 'gmimport': ['e83b3c43b7c695fa96ed42253a4b317a2882bcb8987fd3225c09492e353e49aa', 'import'], + 'pskrnl': ['31455cfce746b2339b3644f3890d4444014fb839654a9f576ec747d28ff6c1c4', 'parasolid'], + 'gmcore': ['af5d89b9ce266cac5b45f2bf96e1324e87e54c6e2f568bd5b6a85c41122d39e4', 'base'], + 'aciskrnl': ['764e5633e6d502951788accfb8c34ed59430a4779a44d1775fd67f9aab8a654a', 'acis'], + 'msparalleladapt': ['8ae607112958f6b9d319736c71a6597cf99a8a59ceed733f2a939cb9cfa6dd67', 'paralleladapt'], + 'psint': ['f6c90b2fe87e690b2cba20f357d03c5962fed91541d6b79e01dc25cb8f01d1e0', 'parasolid'], + 'msadv': ['f18a8285d539cb07b00fde06fe970d958eceabf2a10182bcca6c8ad1c074c395', 'adv'], + }, + 'docs': { + 'MeshSim': ['f3c475072f270ff49ac2f6639ca1cddb0642889648cbea7df1a3f1b85f7cac36', 'base'], + 'GeomSimVoxel': ['9f4ee5a8204fee1d899cb912e0379f8be7a826e81ca0a0d8a670a4b804ca1276', 'voxel'], + 'MeshSimAdvanced': ['8c8bc3709238e600e8938c7c345588f8947d89eae98a228b0d0e3d46f5f4c0d9', 'adv'], + 'GeomSimDiscreteModeling': ['4e8e26a88e8a5ad396a637597a52f5973d8f77abc0a5b99fa737caf37226d6cc', 'discrete'], + 'GeomSimAdvanced': ['5efb38317d6be7862ce34024922ca372b30691a30af820474e2e26e4c3055278', 'advmodel'], + 'GeomSimParasolid': ['6851bdaf6d96e7b2335fce3394825e9876800f0aba0a42644758dc1bd06f60fe', 'parasolid'], + 'GeomSimImport': ['d931ecfc332460c825b473c0950c7ae8ff9f845e0d1565f85bfd7698da5e6d26', 'import'], + 'ParallelMeshSim': ['0f0d235b25a660271e401488e412220f574b341dadb827f7b82f0e93172b5cdb', 'parallelmesh'], + 'ParallelMeshSimAdapt': ['7964ebbd7e8d971ea85fc5260e44f7e876da5ad474dc67d8d6fc939bfa5ba454', 'paralleladapt'], + 'GeomSimAcis': ['dea82efbc4e3043ecda163be792ef295057e08be17654a7783ce7ca5e786f950', 'acis'], + 'MeshSimAdapt': ['ee4d5595572c1fe1a0d78bd9b85c774a55e994c48170450d6c5f34b05fcf2411', 'base'], + 'FieldSim': ['6b09b4ab278911d3e9229fd4cd8dc92ba188f151d42d9d7b96d542aad2af1fac', 'base'], + 'GeomSim': ['0673823d649998367c0e427055911eae971bb6e8c76625882e7a7901f4d18c44', 'base'], + 'GeomSimDiscrete': ['58dfd33fc5cdd2ab24e9084377943f28d5ba68b8c017b11b71cde64c5e4f2113', 'discrete'], + 'GeomSimAbstract': ['16248cd2a0d133029eb4b79d61397da008e4d5b5c3eaf0161a0a44148b0bc519', 'abstract'], + } + }, + { + 'version': '12.0-191027', + 'components': { + 'gmadv': ['1a133523062974c4d9acb1d52baa3893dc891482aebaaeb79a7dc907461d5dbc', 'advmodel'], + 'fdcore': ['c3a89093f811cb489698d203dbe68ca910e6c67ea75c0a7aba73dd369508b9ec', 'base'], + 'mscore': ['a2f043278d45d8729020b663c66c57960fcec33dafd3d90db55f0a9e32723bce', 'base'], + 'msparallelmesh': ['2f6fd47d3c5c2f1ece4634985a522ac599d3cee20ad8a4623f252cc75aa32c4c', 'parallelmesh'], + 'msparalleladapt': ['8d288730b1300215a32f3b21624bd2e0e2d8a684fe928459757fcec7e0aeb7d3', 'paralleladapt'], + 'gmabstract': ['3b608f21e6c11db5bb48e49f9cd7e9d88aeec4feadebd778529a5c9d506d08c6', 'abstract'], + 'gmimport': ['fc1626c7b1522b90eaa3926e1253b84d28440c7df8634decdedb79b5229be800', 'import'], + 'discrete': ['a15ead08138f0c59c7ee46cd0d348d4f26e1b021d2580a134cf2b84a7337bcf9', 'discrete'], + 'aciskrnl': ['8773f00e08d237052c877e79d1a869214f59891e812d70df938b2a5e5423a96f', 'acis'], + 'msadv': ['41bdb9555ab9feb0891f0832a49fc29777d40957473f315e1c33e1c0077cba7d', 'adv'], + 'psint': ['b040ab48833eb2a748f757e2de6929f3002aa98db459ba92bd9a88e443e5cb07', 'parasolid'], + 'gmvoxel': ['19fba83c9c7eac20d9613236530fbae652dc8edef35233214f0f92b81c91a877', 'voxel'], + 'msadapt': ['1a752adb6724c3328fffb26f1aebed007d3c2a5df725cd29aa0cf0fdfda1f39a', 'base'], + 'gmcore': ['ec95bae84b36644e6e04cf0a6b4e813a51990d0a30519176ebb8a05f681af7f2', 'base'], + 'pskrnl': ['7b7b4952513e06c8c23aa8f7c1748f5c199d9af70ea06c4a359412237ed8ac1d', 'parasolid'], + }, + 'docs': { + 'FieldSim': ['5109d91fe61ccdaf0af5aa869aea9c38ec98760746ec3983d100f870cbb1cb63', 'base'], + 'ParallelMeshSim': ['a1e6618a77022a9580beac4c698dd4b9aa70f617a27db9ce13ab1f2388475290', 'parallelmesh'], + 'GeomSimAcis': ['f0319b32eb417fa9b237575d9b2dc1c061848888c36fd4da97d97cdbb3cf19c3', 'acis'], + 'GeomSimAbstract': ['c44023e6944522057c47925db49089031c7de9b67938ca6a987e04fadfeda9b7', 'abstract'], + 'GeomSimDiscrete': ['ad648752fa7d2dc1ce234a612e28ce84eb1f064a1decadf17b42e9fe56967350', 'discrete'], + 'MeshSimAdapt': ['dcb7d6ec74c910b41b5ae707d9fd4664fcb3a0fdb2c876caaa28a6f1cf701024', 'base'], + 'MeshSim': ['e5a8cb300b1e13b9f2733bf8b738872ffb37d9df15836a6ab264483c10000696', 'base'], + 'GeomSimParasolid': ['2bf33cc5b3879716437d45fde0a02caaa165e37d248d05b4b00708e76573a15e', 'parasolid'], + 'GeomSimImport': ['5309433dcdce660e062412f070719eefcc6299764e9b0169533ff343c9c9c406', 'import'], + 'ParallelMeshSimAdapt': ['2e8e0ceede3107b85dba9536f3bbf5e6959793073a5147548cfb01ca568c8da2', 'paralleladapt'], + 'GeomSimDiscreteModeling': ['ff88ec234b890315cc36539e3f73f4f977dab94160860950e7b7ee0303c9b55e', 'discrete'], + 'GeomSim': ['62ae33372f999d5e62a1b7b161ddd7de04c055adc85cfd258e088c95b76d5fef', 'base'], + 'GeomSimVoxel': ['7a624ddaebd833077511acac3efd4b4c1dab09bd9feff40aba0813182eeb262f', 'voxel'], + 'GeomSimAdvanced': ['f0ab801ddf3d701a4ac3f8c47900cc858a4488eb0fe2f663504ba260cd270d20', 'advmodel'], + 'MeshSimAdvanced': ['bb532027e4fcc311a7c376383da010aed5ee133a9122b186a4e5c7d0cf1d976b', 'adv'], + } + } + ] + return releases + + +def simmetrix_makecomponenturl(name): + """only supporting the linux libraries""" + prefix = "file://{0}/".format(os.getcwd()) + suffix = "-" + "linux64.tgz" + return prefix + name + suffix + + +def simmetrix_makedocurl(name): + """doc zip files are not os/arch specific""" + prefix = "file://{0}/".format(os.getcwd()) + suffix = '.zip' + return prefix + name + suffix + + +def simmetrix_setkernelcmakeprefixpath(spec, path, env): + if '+acis' in spec: + env.append_path('CMAKE_PREFIX_PATH', join_path(path, 'acisKrnl')) + env.append_path('LD_LIBRARY_PATH', join_path(path, 'acisKrnl')) + if '+parasolid' in spec: + env.append_path('CMAKE_PREFIX_PATH', join_path(path, 'psKrnl')) + env.append_path('LD_LIBRARY_PATH', join_path(path, 'psKrnl')) + + +def simmetrix_resource(name, url, sha256, condition): + # The tarballs/zips each have the same directory structure. Because of + # this, and the bug in spack described here: + # https://github.com/spack/spack/pull/3553#issuecomment-391424244 + # , they cannot be expanded into the source root directory. + # Once this is fixed the 'destination=name' argument can be removed. + resource( + name=name, + url=url, + sha256=sha256, + destination=name, + when=condition + ) + + +class SimmetrixSimmodsuite(Package): + """Simmetrix' Simulation Modeling Suite is a set of component software + toolkits that allow developers to easily implement geometry-based + simulation applications. + Each component of the Simulation Modeling Suite is designed to address + specific capabilities: + | MeshSim - automatic mesh generation + | FieldSim - simulation data management + | GeomSim - direct, untranslated access to geometry from a wide variety + of sources + """ + + homepage = "http://www.simmetrix.com/products/SimulationModelingSuite/main.html" + + license_required = True + license_vars = ['SIM_LICENSE_FILE'] + + variant('base', default=True, description='enable the base components') + variant('advmodel', default=False, description='enable advaced modeling') + variant('abstract', default=False, description='enable abstract modeling') + variant('voxel', default=False, description='enable voxel modeling') + variant('discrete', default=False, description='enable discrete modeling') + variant('acis', default=False, description='enable acis modeling') + variant('parasolid', default=False, description='enable parasolid modeling') + variant('granite', default=False, description='enable granite modeling') + variant('import', default=False, description='enable import modeling') + variant('adv', default=False, description='enable advanced meshing') + variant('parallelmesh', default=False, description='enable parallel meshing') + variant('paralleladapt', default=False, description='enable parallel adaptation') + + depends_on('mpi') + + oslib = 'x64_rhel7_gcc48' + + releases = simmodsuite_releases() + for release in releases: + # define the version using the mscore tarball + sim_version = release['version'] + main_pkg_name = 'mscore' + url = simmetrix_makecomponenturl(main_pkg_name) + sha256 = release['components'][main_pkg_name][0] + version(sim_version, sha256=sha256, url=url) + # define resources for the other tarballs + for name, atts in release['components'].items(): + # skip the tarball used for the version(...) call + if name == 'mscore': + continue + sha256 = atts[0] + feature = atts[1] + url = simmetrix_makecomponenturl(name) + condition = "@{0}+{1}".format(sim_version, feature) + simmetrix_resource(name, url, sha256, condition) + # define resources for the document zip files + for name, atts in release['docs'].items(): + sha256 = atts[0] + feature = atts[1] + url = simmetrix_makedocurl(name) + condition = "@{0}+{1}".format(sim_version, feature) + simmetrix_resource(name, url, sha256, condition) + + def setup_dependent_build_environment(self, env, dependent_spec): + archlib = join_path(prefix.lib, self.oslib) + env.append_path('CMAKE_PREFIX_PATH', archlib) + simmetrix_setkernelcmakeprefixpath(self.spec, archlib, env) + + def setup_run_environment(self, env): + archlib = join_path(prefix.lib, self.oslib) + env.append_path('CMAKE_PREFIX_PATH', archlib) + simmetrix_setkernelcmakeprefixpath(self.spec, archlib, env) + + def install(self, spec, prefix): + if not spec.satisfies('platform=linux'): + raise InstallError('Only the linux platform is supported') + source_path = self.stage.source_path + for release in simmodsuite_releases(): + simversion = release['version'] + if simversion != spec.version.string: + continue + for name, atts in release['components'].items(): + feature = atts[1] + if '+' + feature in spec: + if name == 'mscore': + install_tree(join_path(source_path, 'lib'), prefix.lib) + install_tree( + join_path(source_path, 'include'), + prefix.include) + else: + path = join_path( + source_path, + name, + self.version.string) + install_tree(path, prefix) + for name, atts in release['docs'].items(): + feature = atts[1] + if '+' + feature in spec: + path = join_path( + source_path, + name, + self.version.string) + install_tree(path, prefix) + + workdir = prefix.code.PartitionWrapper + if '+parallelmesh' in spec: + with working_dir(workdir): + mpi_id = spec['mpi'].name + spec['mpi'].version.string + # build the wrapper lib + make("-f", "Makefile.custom", + "CC=%s" % spec['mpi'].mpicc, + "CXX=%s" % spec['mpi'].mpicxx, + "PARALLEL=%s" % mpi_id, + "PQUAL=-%s" % mpi_id, + "OPTFLAGS=-O2 -DNDEBUG " + self.compiler.pic_flag) + libname = 'libSimPartitionWrapper-' + mpi_id + '.a' + wrapperlibpath = join_path(workdir, 'lib', libname) + install(wrapperlibpath, join_path(prefix.lib, self.oslib)) |