{ 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/ ''; }