summaryrefslogtreecommitdiff
path: root/pkgs/gem5.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/gem5.nix')
-rw-r--r--pkgs/gem5.nix66
1 files changed, 66 insertions, 0 deletions
diff --git a/pkgs/gem5.nix b/pkgs/gem5.nix
new file mode 100644
index 0000000..9795c0e
--- /dev/null
+++ b/pkgs/gem5.nix
@@ -0,0 +1,66 @@
+{
+ boost,
+ lib,
+ fetchFromGitHub,
+ gnum4,
+ gperftools,
+ hdf5-cpp,
+ libpng,
+ protobuf,
+ python3,
+ 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/
+ '';
+ }