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