summaryrefslogtreecommitdiff
path: root/pkgs/gem5.nix
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--pkgs/gem5.nix64
1 files changed, 64 insertions, 0 deletions
diff --git a/pkgs/gem5.nix b/pkgs/gem5.nix
new file mode 100644
index 0000000..f9aebd7
--- /dev/null
+++ b/pkgs/gem5.nix
@@ -0,0 +1,64 @@
+{ boost
+, lib
+, fetchFromGitHub
+, gnum4
+, gperftools
+, hdf5-cpp
+, libpng
+, protobuf
+, scons
+, stdenv
+, zlib
+, enableHdf5 ? true
+, enableLibpng ? true
+, enableTrace ? true
+, enableSystemC ? true
+, enableTcmalloc ? true
+, gem5ISA
+}:
+let
+ version = "22.1.0.0";
+
+ isa = assert lib.assertMsg (lib.elem gem5ISA [ "arm" "null" "mips" "power" "x86" ])
+ "${gem5ISA} is not a valid gem5 target ISA";
+ lib.toUpper gem5ISA;
+
+ target = "build/${isa}/gem5.opt";
+in
+stdenv.mkDerivation {
+ pname = "gem5";
+ version = "${gem5ISA}-${version}";
+
+ src = fetchFromGitHub {
+ repo = "gem5";
+ owner = "gem5";
+
+ rev = "v${version}";
+ sha256 = "sha256-Yxag8emR6hf7oX4GAtQi/YYcKrpXicUoQg5+rjKyjc0=";
+ };
+
+ buildInputs = [ zlib ]
+ ++ lib.optional enableHdf5 hdf5-cpp
+ ++ lib.optional enableLibpng libpng
+ ++ lib.optional enableTrace boost
+ ++ lib.optional enableSystemC protobuf
+ ++ lib.optional enableTcmalloc gperftools;
+
+ nativeBuildInputs = [ gnum4 scons ];
+
+ sconsFlags = [ target ];
+
+ enableParallelBuilding = true;
+
+ # Without this we get "ValueError: invalid width 0 (must be > 0)"
+ COLUMNS = 80;
+
+ postPatch = ''
+ patchShebangs util/
+ '';
+
+ installPhase = ''
+ mkdir -p $out/bin/
+ cp ${target} $out/bin/
+ '';
+}