From bcd5dd6e3e322adb02be3a571750efe848002e5c Mon Sep 17 00:00:00 2001 From: Jeremy Date: Wed, 20 May 2020 20:15:02 -0700 Subject: add SST packages and dependencies (#16618) --- .../repos/builtin/packages/dramsim2/package.py | 30 +++ .../builtin/packages/goblin-hmc-sim/package.py | 28 +++ .../repos/builtin/packages/hbm-dramsim2/package.py | 23 ++ .../builtin/packages/hybridsim/makefile.patch | 20 ++ .../repos/builtin/packages/hybridsim/package.py | 37 +++ .../repos/builtin/packages/intel-pin/package.py | 1 + .../repos/builtin/packages/nvdimmsim/package.py | 32 +++ .../repos/builtin/packages/ramulator/package.py | 35 +++ .../ramulator_sha_7d2e723_gcc48Patch.patch | 250 +++++++++++++++++++++ .../ramulator/ramulator_sha_7d2e723_libPatch.patch | 23 ++ .../repos/builtin/packages/sst-core/package.py | 79 +++++-- .../repos/builtin/packages/sst-elements/package.py | 101 +++++++++ .../repos/builtin/packages/sst-macro/package.py | 85 ++++--- .../builtin/packages/sst-transports/package.py | 25 +++ 14 files changed, 713 insertions(+), 56 deletions(-) create mode 100644 var/spack/repos/builtin/packages/dramsim2/package.py create mode 100644 var/spack/repos/builtin/packages/goblin-hmc-sim/package.py create mode 100644 var/spack/repos/builtin/packages/hbm-dramsim2/package.py create mode 100644 var/spack/repos/builtin/packages/hybridsim/makefile.patch create mode 100644 var/spack/repos/builtin/packages/hybridsim/package.py create mode 100644 var/spack/repos/builtin/packages/nvdimmsim/package.py create mode 100644 var/spack/repos/builtin/packages/ramulator/package.py create mode 100644 var/spack/repos/builtin/packages/ramulator/ramulator_sha_7d2e723_gcc48Patch.patch create mode 100644 var/spack/repos/builtin/packages/ramulator/ramulator_sha_7d2e723_libPatch.patch create mode 100644 var/spack/repos/builtin/packages/sst-elements/package.py create mode 100644 var/spack/repos/builtin/packages/sst-transports/package.py (limited to 'var') diff --git a/var/spack/repos/builtin/packages/dramsim2/package.py b/var/spack/repos/builtin/packages/dramsim2/package.py new file mode 100644 index 0000000000..df2d42af43 --- /dev/null +++ b/var/spack/repos/builtin/packages/dramsim2/package.py @@ -0,0 +1,30 @@ +# Copyright 2013-2020 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 * + + +class Dramsim2(MakefilePackage): + """ + DRAMsim is a hardware-validated, cycle-accurate + C based simulator for DRAM devices such as DDR3 + """ + + homepage = "https://github.com/umd-memsys/DRAMSim2" + git = "https://github.com/umd-memsys/DRAMSim2" + url = "https://github.com/dramninjasUMD/DRAMSim2/archive/v2.2.2.tar.gz" + + maintainers = ['jjwilke'] + + version('2.2.2', sha256="96d0257eafb41e38ffa4f13e3ef3759567bdde7fa3329403f324abd0ddf8d015") + + def build(self, spec, prefix): + if spec.satisfies("platform=darwin"): + make("libdramsim.dylib") + else: + make("libdramsim.so") + + def install(self, spec, prefix): + install_tree(".", prefix) diff --git a/var/spack/repos/builtin/packages/goblin-hmc-sim/package.py b/var/spack/repos/builtin/packages/goblin-hmc-sim/package.py new file mode 100644 index 0000000000..8b5e9ab9bd --- /dev/null +++ b/var/spack/repos/builtin/packages/goblin-hmc-sim/package.py @@ -0,0 +1,28 @@ +# Copyright 2013-2020 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 * + + +class GoblinHmcSim(MakefilePackage): + """ + The Goblin HMC-Sim is a Hybrid Memory Cube + Functional Simulation Environment + """ + + homepage = "https://github.com/tactcomplabs/gc64-hmcsim" + git = "https://github.com/tactcomplabs/gc64-hmcsim" + # The version numbers track the SST they were released with + url = "https://github.com/tactcomplabs/gc64-hmcsim/archive/sst-8.0.0-release.tar.gz" + # This works with parallel builds outside Spack + # For some reason .o files get thrashed inside Spack + parallel = False + + maintainers = ['jjwilke'] + + version('8.0.0', sha256="8a5e6b701865a581f15965d3ddd8c7d301b15f4b63543c444058e9c3688fd2c8") + + def install(self, spec, prefix): + install_tree(".", prefix) diff --git a/var/spack/repos/builtin/packages/hbm-dramsim2/package.py b/var/spack/repos/builtin/packages/hbm-dramsim2/package.py new file mode 100644 index 0000000000..6ecd8de514 --- /dev/null +++ b/var/spack/repos/builtin/packages/hbm-dramsim2/package.py @@ -0,0 +1,23 @@ +# Copyright 2013-2020 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 * + + +class HbmDramsim2(MakefilePackage): + """ + HBM Simulator based on DRAMSim2 + """ + + homepage = "https://github.com/tactcomplabs/HBM" + git = "https://github.com/tactcomplabs/HBM" + url = "https://github.com/tactcomplabs/HBM/archive/hbm-1.0.0-release.tar.gz" + + maintainers = ['jjwilke'] + + version('1.0.0', sha256="0efad11c58197edb47ad1359f8f93fb45d882c6bebcf9f2143e0df7a719689a0") + + def install(self, spec, prefix): + install_tree(".", prefix) diff --git a/var/spack/repos/builtin/packages/hybridsim/makefile.patch b/var/spack/repos/builtin/packages/hybridsim/makefile.patch new file mode 100644 index 0000000000..4512bc530f --- /dev/null +++ b/var/spack/repos/builtin/packages/hybridsim/makefile.patch @@ -0,0 +1,20 @@ +diff --git a/Makefile b/Makefile +index c43f1e2..8b3bd86 100644 +--- a/Makefile ++++ b/Makefile +@@ -14,12 +14,11 @@ endif + CXXFLAGS+=$(OPTFLAGS) + + CUR_DIRECTORY=$(shell pwd) +-DRAM_LIB=$(CUR_DIRECTORY)/../DRAMSim2 +-NV_LIB=$(CUR_DIRECTORY)/../NVDIMMSim/src +-#NV_LIB=$(CUR_DIRECTORY)/../FNVSim ++DRAM_LIB=$(CUR_DIRECTORY)/DRAMSim2 ++NV_LIB=$(CUR_DIRECTORY)/NVDIMMSim + + INCLUDES=-I$(DRAM_LIB) -I$(NV_LIB) +-LIBS=-L${DRAM_LIB} -L${NV_LIB} -ldramsim -lnvdsim -Wl,-rpath ${DRAM_LIB} -Wl,-rpath ${NV_LIB} ++LIBS=-L${DRAM_LIB} -L${NV_LIB} -ldramsim -lnvdsim -Wl,-rpath -Wl,${DRAM_LIB} -Wl,-rpath -Wl,${NV_LIB} + + EXE_NAME=HybridSim + LIB_NAME=libhybridsim.so diff --git a/var/spack/repos/builtin/packages/hybridsim/package.py b/var/spack/repos/builtin/packages/hybridsim/package.py new file mode 100644 index 0000000000..089181ca0b --- /dev/null +++ b/var/spack/repos/builtin/packages/hybridsim/package.py @@ -0,0 +1,37 @@ +# Copyright 2013-2020 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 * + + +class Hybridsim(MakefilePackage): + """ + HybridSim provides cycle-accurate simulation of a non-volatile + memory system augmented with a DRAM based cache. It uses DRAMSim2 + for the DRAM model and NVDIMMSim for the non-volatile memory model + """ + + homepage = "https://github.com/jimstevens2001/HybridSim" + git = "https://github.com/jimstevens2001/HybridSim" + url = "https://github.com/jimstevens2001/HybridSim/archive/v2.0.1.tar.gz" + + maintainers = ['jjwilke'] + + version('2.0.1', sha256="57b82ac929acd36de84525e4d61358f1ab6532f5b635ca3f560e563479921937") + + depends_on("dramsim2") + depends_on("nvdimmsim") + patch("makefile.patch", when="@2.0.1") + + def build(self, spec, prefix): + symlink(spec["dramsim2"].prefix, "DRAMSim2") + symlink(spec["nvdimmsim"].prefix, "NVDIMMSim") + if spec.satisfies("platform=darwin"): + make("libhybridsim.dylib") + else: + make("libhybridsim.so") + + def install(self, spec, prefix): + install_tree(".", prefix) diff --git a/var/spack/repos/builtin/packages/intel-pin/package.py b/var/spack/repos/builtin/packages/intel-pin/package.py index e886ba0784..4378d8e7dd 100644 --- a/var/spack/repos/builtin/packages/intel-pin/package.py +++ b/var/spack/repos/builtin/packages/intel-pin/package.py @@ -19,6 +19,7 @@ class IntelPin(Package): version('3.11', sha256='aa5abca475a6e106a75e6ed4ba518fb75a57549a59f00681e6bd6e3f221bd23a', url='https://software.intel.com/sites/landingpage/pintool/downloads/pin-3.11-97998-g7ecce2dac-gcc-linux.tar.gz') version('3.10', sha256='7c8f14c3a0654bab662b58aba460403138fa44517bd40052501e8e0075b2702a', url='https://software.intel.com/sites/landingpage/pintool/downloads/pin-3.10-97971-gc5e41af74-gcc-linux.tar.gz') version('3.7', sha256='4730328795be61f1addb0e505a3792a4b4ca80b1b9405acf217beec6b5b90fb8', url='https://software.intel.com/sites/landingpage/pintool/downloads/pin-3.7-97619-g0d0c92f4f-gcc-linux.tar.gz') + version('2.14', sha256="1c29f589515772411a699a82fc4a3156cad95863a29741dfa6522865d4d281a1", url="https://software.intel.com/sites/landingpage/pintool/downloads/pin-2.14-71313-gcc.4.4.7-linux.tar.gz") def install(self, spec, prefix): install_tree('.', prefix) diff --git a/var/spack/repos/builtin/packages/nvdimmsim/package.py b/var/spack/repos/builtin/packages/nvdimmsim/package.py new file mode 100644 index 0000000000..0d0a0964d4 --- /dev/null +++ b/var/spack/repos/builtin/packages/nvdimmsim/package.py @@ -0,0 +1,32 @@ +# Copyright 2013-2020 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 * + + +class Nvdimmsim(MakefilePackage): + """ + NVDIMMSim is a cycle-accurate non-volatile memory simulator + for devices such as NAND flash + """ + + homepage = "https://github.com/slunk/NVDIMMSim" + git = "https://github.com/slunk/NVDIMMSim" + url = "https://github.com/jimstevens2001/NVDIMMSim/archive/v2.0.0.tar.gz" + + maintainers = ['jjwilke'] + + version('2.0.0', sha256="2a621ef10be5e52a1f543985d08354a2e6ee6532b5720e5f17ad6362cfd4adef") + + def build(self, spec, prefix): + with working_dir("src"): + if spec.satisfies("platform=darwin"): + make("libnvdsim.dylib") + else: + make("libnvdsim.so") + + def install(self, spec, prefix): + with working_dir("src"): + install_tree(".", prefix) diff --git a/var/spack/repos/builtin/packages/ramulator/package.py b/var/spack/repos/builtin/packages/ramulator/package.py new file mode 100644 index 0000000000..a103d4b68d --- /dev/null +++ b/var/spack/repos/builtin/packages/ramulator/package.py @@ -0,0 +1,35 @@ +# Copyright 2013-2020 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 * + + +class Ramulator(MakefilePackage): + """ + Ramulator is a fast and cycle-accurate DRAM simulator that supports + a wide array of commercial, as well as academic, DRAM standards. + """ + + homepage = "https://github.com/CMU-SAFARI/ramulator" + git = "https://github.com/CMU-SAFARI/ramulator" + + maintainers = ['jjwilke'] + + version('sst', commit="7d2e72306c6079768e11a1867eb67b60cee34a1c") + + patch('ramulator_sha_7d2e723_gcc48Patch.patch', when="@sst") + patch('ramulator_sha_7d2e723_libPatch.patch', when="@sst") + + def patch(self): + filter_file('-fpic', self.compiler.cxx_pic_flag, "Makefile") + + def build(self, spec, prefix): + if spec.satisfies("platform=darwin"): + make("libramulator.a") + else: + make("libramulator.so") + + def install(self, spec, prefix): + install_tree(".", prefix) diff --git a/var/spack/repos/builtin/packages/ramulator/ramulator_sha_7d2e723_gcc48Patch.patch b/var/spack/repos/builtin/packages/ramulator/ramulator_sha_7d2e723_gcc48Patch.patch new file mode 100644 index 0000000000..6e8b31aeb5 --- /dev/null +++ b/var/spack/repos/builtin/packages/ramulator/ramulator_sha_7d2e723_gcc48Patch.patch @@ -0,0 +1,250 @@ +diff --git a/src/Scheduler.h b/src/Scheduler.h +index c8561c1..38f924d 100644 +--- a/src/Scheduler.h ++++ b/src/Scheduler.h +@@ -9,8 +9,10 @@ + #include + #include + #include ++#include + + using namespace std; ++using namespace std::placeholders; + + namespace ramulator + { +@@ -22,18 +24,66 @@ template + class Scheduler + { + public: +- Controller* ctrl; +- +- enum class Type { +- FCFS, FRFCFS, FRFCFS_Cap, FRFCFS_PriorHit, MAX +- } type = Type::FRFCFS_Cap; +- //} type = Type::FCFS; +- +- long cap = 16; ++ Controller* ctrl; ++ ++ enum class Type { ++ FCFS, FRFCFS, FRFCFS_Cap, FRFCFS_PriorHit, MAX ++ } type = Type::FRFCFS_Cap; ++ //} type = Type::FCFS; ++ ++ long cap = 16; ++ ++ Scheduler(Controller* _ctrl) : ctrl(_ctrl) { + +- Scheduler(Controller* ctrl) : ctrl(ctrl) {} +- +- list::iterator get_head(list& q) ++ // FCFS ++ compare[0] = std::bind([] (ReqIter req1, ReqIter req2, Scheduler *obj) -> ReqIter { ++ if (req1->arrive <= req2->arrive) return req1; ++ return req2;}, _1, _2, std::move(this)); ++ ++ // FRFCFS ++ compare[1] = std::bind([] (ReqIter req1, ReqIter req2, Scheduler *obj) -> ReqIter { ++ bool ready1 = obj->ctrl->is_ready(req1); ++ bool ready2 = obj->ctrl->is_ready(req2); ++ ++ if (ready1 ^ ready2) { ++ if (ready1) return req1; ++ return req2; ++ } ++ ++ if (req1->arrive <= req2->arrive) return req1; ++ return req2;}, _1, _2, std::move(this)); ++ ++ // FRFCFS_CAP ++ compare[2] = std::bind([] (ReqIter req1, ReqIter req2, Scheduler *obj) -> ReqIter { ++ bool ready1 = obj->ctrl->is_ready(req1); ++ bool ready2 = obj->ctrl->is_ready(req2); ++ ++ ready1 = ready1 && (obj->ctrl->rowtable->get_hits(req1->addr_vec) <= obj->cap); ++ ready2 = ready2 && (obj->ctrl->rowtable->get_hits(req2->addr_vec) <= obj->cap); ++ ++ if (ready1 ^ ready2) { ++ if (ready1) return req1; ++ return req2; ++ } ++ ++ if (req1->arrive <= req2->arrive) return req1; ++ return req2;}, _1, _2, this); ++ ++ // FRFCFS_PriorHit ++ compare[3] = std::bind([] (ReqIter req1, ReqIter req2, Scheduler *obj) -> ReqIter { ++ bool ready1 = obj->ctrl->is_ready(req1) && obj->ctrl->is_row_hit(req1); ++ bool ready2 = obj->ctrl->is_ready(req2) && obj->ctrl->is_row_hit(req2); ++ ++ if (ready1 ^ ready2) { ++ if (ready1) return req1; ++ return req2; ++ } ++ ++ if (req1->arrive <= req2->arrive) return req1; ++ return req2;}, _1, _2, this); ++ } ++ ++ list::iterator get_head(list& q) + { + // TODO make the decision at compile time + if (type != Type::FRFCFS_PriorHit) { +@@ -106,55 +156,8 @@ public: + + private: + typedef list::iterator ReqIter; +- function compare[int(Type::MAX)] = { +- // FCFS +- [this] (ReqIter req1, ReqIter req2) { +- if (req1->arrive <= req2->arrive) return req1; +- return req2;}, +- +- // FRFCFS +- [this] (ReqIter req1, ReqIter req2) { +- bool ready1 = this->ctrl->is_ready(req1); +- bool ready2 = this->ctrl->is_ready(req2); +- +- if (ready1 ^ ready2) { +- if (ready1) return req1; +- return req2; +- } +- +- if (req1->arrive <= req2->arrive) return req1; +- return req2;}, +- +- // FRFCFS_CAP +- [this] (ReqIter req1, ReqIter req2) { +- bool ready1 = this->ctrl->is_ready(req1); +- bool ready2 = this->ctrl->is_ready(req2); +- +- ready1 = ready1 && (this->ctrl->rowtable->get_hits(req1->addr_vec) <= this->cap); +- ready2 = ready2 && (this->ctrl->rowtable->get_hits(req2->addr_vec) <= this->cap); +- +- if (ready1 ^ ready2) { +- if (ready1) return req1; +- return req2; +- } +- +- if (req1->arrive <= req2->arrive) return req1; +- return req2;}, +- // FRFCFS_PriorHit +- [this] (ReqIter req1, ReqIter req2) { +- bool ready1 = this->ctrl->is_ready(req1) && this->ctrl->is_row_hit(req1); +- bool ready2 = this->ctrl->is_ready(req2) && this->ctrl->is_row_hit(req2); +- +- if (ready1 ^ ready2) { +- if (ready1) return req1; +- return req2; +- } +- +- if (req1->arrive <= req2->arrive) return req1; +- return req2;} +- }; +-}; +- ++ function compare[int(Type::MAX)]; ++ }; + + template + class RowPolicy +@@ -168,50 +171,52 @@ public: + + int timeout = 50; + +- RowPolicy(Controller* ctrl) : ctrl(ctrl) {} +- +- vector get_victim(typename T::Command cmd) +- { +- return policy[int(type)](cmd); +- } +- +-private: +- function(typename T::Command)> policy[int(Type::MAX)] = { +- // Closed +- [this] (typename T::Command cmd) -> vector { +- for (auto& kv : this->ctrl->rowtable->table) { +- if (!this->ctrl->is_ready(cmd, kv.first)) ++ RowPolicy(Controller* _ctrl) : ctrl(_ctrl) { ++ // Closed ++ policy[0] = std::bind([] (typename T::Command cmd, RowPolicy *obj) -> vector { ++ for (auto& kv : obj->ctrl->rowtable->table) { ++ if (!obj->ctrl->is_ready(cmd, kv.first)) + continue; + return kv.first; + } +- return vector();}, ++ return vector();}, _1, this); + + // ClosedAP +- [this] (typename T::Command cmd) -> vector { +- for (auto& kv : this->ctrl->rowtable->table) { +- if (!this->ctrl->is_ready(cmd, kv.first)) +- continue; +- return kv.first; +- } +- return vector();}, ++ policy[1] = std::bind([] (typename T::Command cmd, RowPolicy *obj) -> vector { ++ for (auto& kv : obj->ctrl->rowtable->table) { ++ if (!obj->ctrl->is_ready(cmd, kv.first)) ++ continue; ++ return kv.first; ++ } ++ return vector();}, _1, this); + + // Opened +- [this] (typename T::Command cmd) { +- return vector();}, +- +- // Timeout +- [this] (typename T::Command cmd) -> vector { +- for (auto& kv : this->ctrl->rowtable->table) { +- auto& entry = kv.second; +- if (this->ctrl->clk - entry.timestamp < timeout) +- continue; +- if (!this->ctrl->is_ready(cmd, kv.first)) +- continue; +- return kv.first; +- } +- return vector();} +- }; ++ policy[2] = std::bind([] (typename T::Command cmd, RowPolicy *obj) -> vector { ++ return vector();}, _1, this); ++ ++ // Timeout ++ policy[3] = std::bind([] (typename T::Command cmd, RowPolicy *obj) -> vector { ++ for (auto& kv : obj->ctrl->rowtable->table) { ++ auto& entry = kv.second; ++ if (obj->ctrl->clk - entry.timestamp < obj->timeout) ++ continue; ++ if (!obj->ctrl->is_ready(cmd, kv.first)) ++ continue; ++ return kv.first; ++ } ++ return vector();}, _1, this); + ++ ++ ++ } ++ ++ vector get_victim(typename T::Command cmd) ++ { ++ return policy[int(type)](cmd); ++ } ++ ++private: ++ function(typename T::Command)> policy[int(Type::MAX)]; + }; + + +@@ -304,7 +309,8 @@ public: + + return itr->second.row; + } +-}; ++ }; ++ + + } /*namespace ramulator*/ + diff --git a/var/spack/repos/builtin/packages/ramulator/ramulator_sha_7d2e723_libPatch.patch b/var/spack/repos/builtin/packages/ramulator/ramulator_sha_7d2e723_libPatch.patch new file mode 100644 index 0000000000..20225bb54d --- /dev/null +++ b/var/spack/repos/builtin/packages/ramulator/ramulator_sha_7d2e723_libPatch.patch @@ -0,0 +1,23 @@ +diff --git a/Makefile b/Makefile +index ea340c8..314113d 100644 +--- a/Makefile ++++ b/Makefile +@@ -9,7 +9,7 @@ OBJS := $(patsubst $(SRCDIR)/%.cpp, $(OBJDIR)/%.o, $(SRCS)) + # g++ 4.x due to an internal compiler error when processing lambda functions. + CXX := clang++ + # CXX := g++-5 +-CXXFLAGS := -O3 -std=c++11 -g -Wall ++CXXFLAGS := -O3 -std=c++11 -g -Wall -fpic + + .PHONY: all clean depend + +@@ -38,6 +38,9 @@ ramulator: $(MAIN) $(OBJS) $(SRCDIR)/*.h | depend + libramulator.a: $(OBJS) $(OBJDIR)/Gem5Wrapper.o + libtool -static -o $@ $(OBJS) $(OBJDIR)/Gem5Wrapper.o + ++libramulator.so: $(OBJS) $(OBJDIR)/Gem5Wrapper.o ++ $(CXX) -shared -o $@ $(OBJS) $(OBJDIR)/Gem5Wrapper.o ++ + $(OBJS): | $(OBJDIR) + + $(OBJDIR): diff --git a/var/spack/repos/builtin/packages/sst-core/package.py b/var/spack/repos/builtin/packages/sst-core/package.py index b28ae4cea0..4c6dbff0b3 100644 --- a/var/spack/repos/builtin/packages/sst-core/package.py +++ b/var/spack/repos/builtin/packages/sst-core/package.py @@ -7,38 +7,71 @@ from spack import * class SstCore(AutotoolsPackage): - """The Structural Simulation Toolkit (SST) was developed to explore - innovations in highly concurrent systems where the ISA, microarchitecture, - and memory interact with the programming model and communications system""" + """The Structural Simulation Toolkit (SST) core + provides a parallel discrete event simulation (PDES) + framework for performing architecture simulations + of existing and proposed HPC systems""" - homepage = "http://sst-simulator.org/" - url = "https://github.com/sstsimulator/sst-core/releases/download/v8.0.0_Final/sstcore-8.0.0.tar.gz" - git = "https://github.com/sstsimulator/sst-core.git" + homepage = "https://github.com/sstsimulator" + git = "https://github.com/sstsimulator/sst-core.git" + url = "https://github.com/sstsimulator/sst-core/releases/download/v10.0.0_Final/sstcore-10.0.0.tar.gz" - version('develop', branch='devel') - version('8.0.0', sha256='34a62425c3209cf80b6bca99cb0dcc328b67fb84ed92d5e6d6c975ad9319ba8a') + maintainers = ['jjwilke'] - variant('mpi', default=True, description='Support multi-node simulations using MPI') - variant('boost', default=False, description='Use boost') + version('10.0.0', sha256="64cf93a46dfab011fba49244bf0e0efe25ef928c6fbde1d49003220d0eb7735a") + version('9.1.0', sha256="cfeda39bb2ce9f32032480427517df62e852c0b3713797255e3b838075f3614d") + version('develop', branch='devel') + version('master', branch='master') - depends_on('autoconf@1.68:', type='build', when='@develop') - depends_on('automake@1.11.1:', type='build', when='@develop') - depends_on('libtool@1.2.4:', type='build', when='@develop') - depends_on('m4', type='build', when='@develop') + variant("pdes_mpi", default=True, + description="Build support for parallel discrete event simulation") + variant("zoltan", default=False, + description="Use Zoltan for partitioning parallel runs") + variant("hdf5", default=False, + description="Build support for HDF5 statistic output") + variant("zlib", default=False, + description="Build support for ZLIB compression") + variant("preview", default=False, + description="Preview build with deprecated features removed") - depends_on('python@:2') - depends_on('zlib', type='build') - depends_on('mpi', when='+mpi') - depends_on('boost@1.56.0:', type='build', when='+boost') + depends_on("python", type=('build', 'run')) + depends_on("mpi", when="+pdes_mpi") + depends_on("zoltan", when="+zoltan") + depends_on("hdf5", when="+hdf5") + depends_on("zlib", when="+zlib") + + depends_on('autoconf@1.68:', type='build', when='@master:') + depends_on('automake@1.11.1:', type='build', when='@master:') + depends_on('libtool@1.2.4:', type='build', when='@master:') + depends_on('m4', type='build', when='@master:') + + # force out-of-source builds + build_directory = 'spack-build' + + def autoreconf(self, spec, prefix): + bash = which('bash') + bash('autogen.sh') def configure_args(self): args = [] - spec = self.spec + if "+zoltan" in self.spec: + args.append("--with-zoltan=%s" % self.spec["zoltan"].prefix) + if "+hdf5" in self.spec: + args.append("--with-hdf5=%s" % self.spec["hdf5"].prefix) + if "+zlib" in self.spec: + args.append("--with-zlib=%s" % self.spec["zlib"].prefix) - if '~mpi' in spec: - args.append('--disable-mpi') + if "+pdes_mpi" in self.spec: + args.append("--enable-mpi") + env['CC'] = self.spec['mpi'].mpicc + env['CXX'] = self.spec['mpi'].mpicxx + env['F77'] = self.spec['mpi'].mpif77 + env['FC'] = self.spec['mpi'].mpifc + else: + args.append("--disable-mpi") - if '+boost' in spec: - args.append('--with-boost=%s' % spec['boost'].prefix) + if "+preview" in self.spec: + args.append("--enable-preview-build") + args.append("--with-python=%s" % self.spec["python"].prefix) return args diff --git a/var/spack/repos/builtin/packages/sst-elements/package.py b/var/spack/repos/builtin/packages/sst-elements/package.py new file mode 100644 index 0000000000..89af49373a --- /dev/null +++ b/var/spack/repos/builtin/packages/sst-elements/package.py @@ -0,0 +1,101 @@ +# Copyright 2013-2020 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 * + + +class SstElements(AutotoolsPackage): + """SST Elements implements a range of components for performing + architecture simulation from node-level to system-level using + the SST discrete event core + """ + + homepage = "https://github.com/sstsimulator" + git = "https://github.com/sstsimulator/sst-elements.git" + url = "https://github.com/sstsimulator/sst-elements/releases/download/v10.0.0_Final/sstelements-10.0.0.tar.gz" + + maintainers = ['jjwilke'] + + version('10.0.0', sha256="ecf28ef97b27ea75be7e64cb0acb99d36773a888c1b32ba16034c62174b02693") + version('9.1.0', sha256="e19b05aa6e59728995fc059840c79e476ba866b67887ccde7eaf52a18a1f52ca") + + version('develop', branch='devel') + version('master', branch='master') + + variant("pin", default=False, + description="Enable the Ariel CPU model") + variant("dramsim2", default=False, + description="Build with DRAMSim2 support") + variant("nvdimmsim", default=False, + description="Build with NVDimmSim support") + variant("hybridsim", default=False, + description="Build with HybridSim support") + variant("goblin", default=False, + description="Build with GoblinHMCSim support") + variant("hbm", default=False, + description="Build with HBM DRAMSim2 support") + variant("ramulator", default=False, + description="Build with Ramulator support") + + depends_on("python", type=('build', 'run')) + depends_on("sst-core") + depends_on("sst-core@develop", when="@develop") + depends_on("sst-core@master", when="@master") + + depends_on("intel-pin@2.14", when="+pin") + depends_on("dramsim2@2.2", when="+dramsim2") + depends_on("hybridsim@2.0.1", when="+hybridsim") + depends_on("nvdimmsim@2.0.0", when="+nvdimmsim") + depends_on("goblin-hmc-sim", when="+goblin") + depends_on("ramulator@sst", when="+ramulator") + depends_on("hbm-dramsim2", when="+hbm") + depends_on("dramsim2@2.2.2", when="+hybridsim") + depends_on("nvdimmsim@2.0.0", when="+hybridsim") + + depends_on('autoconf@1.68:', type='build', when='@master:') + depends_on('automake@1.11.1:', type='build', when='@master:') + depends_on('libtool@1.2.4:', type='build', when='@master:') + depends_on('m4', type='build', when='@master:') + + # force out-of-source builds + build_directory = 'spack-build' + + def autoreconf(self, spec, prefix): + bash = which('bash') + bash('autogen.sh') + + def configure_args(self): + args = [] + if '+pdes_mpi' in self.spec["sst-core"]: + env['CC'] = self.spec['mpi'].mpicc + env['CXX'] = self.spec['mpi'].mpicxx + env['F77'] = self.spec['mpi'].mpif77 + env['FC'] = self.spec['mpi'].mpifc + + if "+pin" in self.spec: + args.append("--with-pin=%s" % self.spec["intel-pin"].prefix) + + if "+dramsim2" in self.spec or "+hybridsim" in self.spec: + args.append("--with-dramsim=%s" % self.spec["dramsim2"].prefix) + + if "+nvdimmsim" in self.spec or "+hybridsim" in self.spec: + args.append("--with-nvdimmsim=%s" % self.spec["nvdimmsim"].prefix) + + if "+hybridsim" in self.spec: + args.append("--with-hybridsim=%s" % self.spec["hybridsim"].prefix) + + if "+goblin" in self.spec: + args.append("--with-goblin-hmcsim=%s" % + self.spec["goblin-hmc-sim"].prefix) + + if "+hbm" in self.spec: + args.append("--with-hbmdramsim=%s" % + self.spec["hbm-dramsim2"].prefix) + + if "+ramulator" in self.spec: + args.append("--with-ramulator=%s" % self.spec["ramulator"].prefix) + + args.append("--with-sst-core=%s" % self.spec["sst-core"].prefix) + return args diff --git a/var/spack/repos/builtin/packages/sst-macro/package.py b/var/spack/repos/builtin/packages/sst-macro/package.py index e7333c9a5b..6a04e44dba 100644 --- a/var/spack/repos/builtin/packages/sst-macro/package.py +++ b/var/spack/repos/builtin/packages/sst-macro/package.py @@ -16,48 +16,56 @@ class SstMacro(AutotoolsPackage): """ homepage = "http://sst.sandia.gov/about_sstmacro.html" - url = "https://github.com/sstsimulator/sst-macro/releases/download/v6.1.0_Final/sstmacro-6.1.0.tar.gz" - git = "https://github.com/sstsimulator/sst-macro.git" + git = "https://github.com/sstsimulator/sst-macro.git" + url = "https://github.com/sstsimulator/sst-macro/releases/download/v10.0.0_Final/sstmacro-10.0.0.tar.gz" - version('develop', branch='devel') - version('8.0.0', sha256='8618a259e98ede9a1a2ce854edd4930628c7c5a770c3915858fa840556c1861f') - version('6.1.0', sha256='930b67313b594148d6356e550ca370214a9283858235321d3ef974191eb028d6') + maintainers = ['jjwilke'] - depends_on('boost@1.59:', when='@:6.1.0') + version('10.0.0', sha256='064b732256f3bec9b553e00bcbc9a1d82172ec194f2b69c8797f585200b12566') + version('master', branch='master') + version('develop', branch='devel') - depends_on('autoconf@1.68:', type='build', when='@develop') - depends_on('automake@1.11.1:', type='build', when='@develop') - depends_on('libtool@1.2.4:', type='build', when='@develop') - depends_on('m4', type='build', when='@develop') + depends_on('autoconf@1.68:', type='build', when='@master:') + depends_on('automake@1.11.1:', type='build', when='@master:') + depends_on('libtool@1.2.4:', type='build', when='@master:') + depends_on('m4', type='build', when='@master:') depends_on('binutils', type='build') depends_on('zlib', type=('build', 'link')) depends_on('otf2', when='+otf2') - depends_on('llvm+clang@:5.99.99', when='+skeletonizer') - depends_on('mpi', when='+mpi') - depends_on('sst-core@8.0.0', when='@8.0.0 +core') - depends_on('sst-core@develop', when='@develop +core') - - variant('core', default=False, description='Use SST Core for PDES') - variant('mpi', default=True, description='Enable distributed PDES simulation') - variant('otf2', default=False, description='Enable OTF2 trace emission and replay support') - variant('shared', default=True, description='Build shared libraries') - variant('skeletonizer', default=False, description='Enable Clang source-to-source autoskeletonization') + depends_on('llvm+clang@5:9', when='+skeletonizer') + depends_on('mpi', when='+pdes_mpi') + depends_on('sst-core@develop', when='@develop+core') + depends_on('sst-core@master', when='@master+core') + + variant('pdes_threads', default=True, + description='Enable thread-parallel PDES simulation') + variant('pdes_mpi', default=False, + description='Enable distributed PDES simulation') + variant('core', default=False, description='Use SST Core for PDES') + variant('otf2', default=False, + description='Enable OTF2 trace emission and replay support') + variant('skeletonizer', default=False, + description='Enable Clang source-to-source autoskeletonization') + variant('static', default=True, description='Build static libraries') - variant('threaded', default=False, description='Enable thread-parallel PDES simulation') + variant('shared', default=True, description='Build shared libraries') - @run_before('autoreconf') - def bootstrap(self): - if '@develop' in self.spec: - Executable('./bootstrap.sh')() + variant('werror', default=False, + description='Build with all warnings as errors') + variant('warnings', default=False, + description='Build with all possible warnings') + + # force out-of-source builds + build_directory = 'spack-build' + + def autoreconf(self, spec, prefix): + bash = which('bash') + bash('./bootstrap.sh') def configure_args(self): args = ['--disable-regex'] - # Set CFLAGS and CXXFLAGS so they won't automatically insert '-g' - env['CFLAGS'] = '-O2' - env['CXXFLAGS'] = '-O2' - spec = self.spec args.append( '--enable-static=%s' % ('yes' if '+static' in spec else 'no')) @@ -66,19 +74,30 @@ class SstMacro(AutotoolsPackage): if spec.satisfies("@8.0.0:"): args.extend([ - '--%sable-otf2' % ('en' if '+otf2' in spec else 'dis'), - '--%sable-multithread' % ( - 'en' if '+threaded' in spec else 'dis') + '--%sable-otf2' % + ('en' if '+otf2' in spec else 'dis'), + '--%sable-multithread' % + ('en' if '+pdes_threads' in spec else 'dis') ]) if '+skeletonizer' in spec: args.append('--with-clang=' + spec['llvm'].prefix) + if spec.satisfies("@10:"): + if "+warnings" in spec: + args.append("--with-warnings") + if "+werror" in spec: + args.append("--with-werror") + if '+core' in spec: args.append('--with-sst-core=%s' % spec['sst-core'].prefix) # Optional MPI support - if '+mpi' in spec: + need_core_mpi = False + if "+core" in spec: + if "+pdes_mpi" in spec["sst-core"]: + need_core_mpi = True + if '+pdes_mpi' in spec or need_core_mpi: env['CC'] = spec['mpi'].mpicc env['CXX'] = spec['mpi'].mpicxx env['F77'] = spec['mpi'].mpif77 diff --git a/var/spack/repos/builtin/packages/sst-transports/package.py b/var/spack/repos/builtin/packages/sst-transports/package.py new file mode 100644 index 0000000000..39a6e99d05 --- /dev/null +++ b/var/spack/repos/builtin/packages/sst-transports/package.py @@ -0,0 +1,25 @@ +# Copyright 2013-2020 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 * + + +class SstTransports(CMakePackage): + """Provides transports like uGNI and verbs + that run in the simulator""" + + homepage = "https://github.com/sstsimulator" + git = "https://github.com/jjwilke/sst-transports.git" + + maintainers = ['jjwilke'] + + version('master', branch='master') + + depends_on("sst-macro") + + def cmake_args(self): + args = [] + args.append("-DSSTMacro_ROOT=%s" % self.spec["sst-macro"].prefix) + return args -- cgit v1.2.3-70-g09d2