forked from mirrors/nixpkgs
1bdb138710
Fixes #43015 for me and hopefully also similar issues. == Resource consumption == TL;DR: no change for small-memory cases, less CPU for large-memory cases. I assume almost all of the large memory usage is just the expression evaluation and managed by the GC, so I used just `nix-env -q...` to test. Old and new lines for each command follow. I tried to run each several times, but the values were very stable (<1% difference on re-runs), so only one line for each command-version pair is provided. $ time nix-env -f . -qaP --description -A nix >/dev/null - 0.06user 0.01system 0:00.07elapsed 101%CPU (0avgtext+0avgdata 29036maxresident)k + 0.06user 0.01system 0:00.07elapsed 102%CPU (0avgtext+0avgdata 29864maxresident)k $ time nix-env -f . -qaP --description >/dev/null - 6.45user 0.36system 0:06.82elapsed 99%CPU (0avgtext+0avgdata 1021024maxresident)k + 6.23user 0.33system 0:06.57elapsed 100%CPU (0avgtext+0avgdata 938408maxresident)k $ time nix-env -f . --show-trace -qa --drv-path --system --meta --xml 2>&1 >/dev/null - 56.35user 0.96system 0:31.03elapsed 184%CPU (0avgtext+0avgdata 3207708maxresident)k + 44.80user 0.91system 0:26.12elapsed 175%CPU (0avgtext+0avgdata 3192696maxresident)k $ time ./result-nix-large/bin/nix-instantiate --dry-run --eval --strict \ --show-trace ./maintainers/scripts/eval-release.nix > /dev/null - Too many heap sections: Increase MAXHINCR or MAX_HEAP_SECTS - Command terminated by signal 6 - 175.18user 2.68system 1:17.42elapsed 229%CPU (0avgtext+0avgdata 8468440maxresident)k + 178.48user 2.78system 1:15.11elapsed 241%CPU (0avgtext+0avgdata 8460572maxresident)k
76 lines
2.6 KiB
Nix
76 lines
2.6 KiB
Nix
{ lib, stdenv, fetchurl, fetchpatch, pkgconfig, libatomic_ops
|
|
, enableLargeConfig ? false # doc: https://github.com/ivmai/bdwgc/blob/v7.6.6/doc/README.macros#L179
|
|
, buildPlatform, hostPlatform
|
|
}:
|
|
|
|
stdenv.mkDerivation rec {
|
|
name = "boehm-gc-${version}";
|
|
version = "7.6.6";
|
|
|
|
src = fetchurl {
|
|
urls = [
|
|
"http://www.hboehm.info/gc/gc_source/gc-${version}.tar.gz"
|
|
"https://github.com/ivmai/bdwgc/releases/download/v${version}/gc-${version}.tar.gz"
|
|
];
|
|
sha256 = "1p1r015a7jbpvkkbgzv1y8nxrbbp6dg0mq3ksi6ji0qdz3wfss79";
|
|
};
|
|
|
|
buildInputs = [ libatomic_ops ];
|
|
nativeBuildInputs = [ pkgconfig ];
|
|
|
|
outputs = [ "out" "dev" "doc" ];
|
|
separateDebugInfo = stdenv.isLinux;
|
|
|
|
preConfigure = stdenv.lib.optionalString (stdenv.hostPlatform.libc == "musl") ''
|
|
export NIX_CFLAGS_COMPILE+="-D_GNU_SOURCE -DUSE_MMAP -DHAVE_DL_ITERATE_PHDR"
|
|
'';
|
|
|
|
patches = [ (fetchpatch {
|
|
url = "https://gitweb.gentoo.org/proj/musl.git/plain/dev-libs/boehm-gc/files/boehm-gc-7.6.0-sys_select.patch";
|
|
sha256 = "1gydwlklvci30f5dpp5ccw2p2qpph5y41r55wx9idamjlq66fbb3";
|
|
}) ] ++
|
|
# https://github.com/ivmai/bdwgc/pull/208
|
|
lib.optional hostPlatform.isRiscV ./riscv.patch;
|
|
|
|
configureFlags =
|
|
[ "--enable-cplusplus" ]
|
|
++ lib.optional enableLargeConfig "--enable-large-config"
|
|
++ lib.optional (stdenv.hostPlatform.libc == "musl") "--disable-static";
|
|
|
|
doCheck = true; # not cross;
|
|
|
|
# Don't run the native `strip' when cross-compiling.
|
|
dontStrip = hostPlatform != buildPlatform;
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
meta = {
|
|
description = "The Boehm-Demers-Weiser conservative garbage collector for C and C++";
|
|
|
|
longDescription = ''
|
|
The Boehm-Demers-Weiser conservative garbage collector can be used as a
|
|
garbage collecting replacement for C malloc or C++ new. It allows you
|
|
to allocate memory basically as you normally would, without explicitly
|
|
deallocating memory that is no longer useful. The collector
|
|
automatically recycles memory when it determines that it can no longer
|
|
be otherwise accessed.
|
|
|
|
The collector is also used by a number of programming language
|
|
implementations that either use C as intermediate code, want to
|
|
facilitate easier interoperation with C libraries, or just prefer the
|
|
simple collector interface.
|
|
|
|
Alternatively, the garbage collector may be used as a leak detector for
|
|
C or C++ programs, though that is not its primary goal.
|
|
'';
|
|
|
|
homepage = http://hboehm.info/gc/;
|
|
|
|
# non-copyleft, X11-style license
|
|
license = http://hboehm.info/gc/license.txt;
|
|
|
|
maintainers = [ ];
|
|
platforms = stdenv.lib.platforms.all;
|
|
};
|
|
}
|