2018-07-04 16:19:25 +02:00
|
|
|
{ lib, stdenv, fetchurl, fetchpatch, pkgconfig, libatomic_ops
|
|
|
|
, enableLargeConfig ? false # doc: https://github.com/ivmai/bdwgc/blob/v7.6.6/doc/README.macros#L179
|
2017-06-28 22:01:43 +02:00
|
|
|
}:
|
2004-11-19 15:57:43 +01:00
|
|
|
|
2012-10-03 20:06:53 +02:00
|
|
|
stdenv.mkDerivation rec {
|
2017-12-27 01:03:12 +01:00
|
|
|
name = "boehm-gc-${version}";
|
2018-12-23 23:52:07 +01:00
|
|
|
version = "8.0.2";
|
2008-09-05 10:03:44 +02:00
|
|
|
|
2011-02-02 13:17:29 +01:00
|
|
|
src = fetchurl {
|
2017-12-27 01:03:12 +01:00
|
|
|
urls = [
|
|
|
|
"https://github.com/ivmai/bdwgc/releases/download/v${version}/gc-${version}.tar.gz"
|
2018-12-23 23:52:07 +01:00
|
|
|
"http://www.hboehm.info/gc/gc_source/gc-${version}.tar.gz"
|
2017-12-27 01:03:12 +01:00
|
|
|
];
|
2018-12-23 23:52:07 +01:00
|
|
|
sha256 = "1jsixcpdwy5cgq5s9fi3bdlid9zh46vakymf3nbjffianyss932f";
|
2011-02-02 13:17:29 +01:00
|
|
|
};
|
2016-12-03 23:04:21 +01:00
|
|
|
|
|
|
|
buildInputs = [ libatomic_ops ];
|
|
|
|
nativeBuildInputs = [ pkgconfig ];
|
2009-09-18 16:30:10 +02:00
|
|
|
|
2016-08-29 02:30:01 +02:00
|
|
|
outputs = [ "out" "dev" "doc" ];
|
2017-07-05 16:04:54 +02:00
|
|
|
separateDebugInfo = stdenv.isLinux;
|
2013-08-26 12:04:19 +02:00
|
|
|
|
2018-01-12 23:18:55 +01:00
|
|
|
preConfigure = stdenv.lib.optionalString (stdenv.hostPlatform.libc == "musl") ''
|
2019-02-03 20:25:42 +01:00
|
|
|
export NIX_CFLAGS_COMPILE+=" -D_GNU_SOURCE -DUSE_MMAP -DHAVE_DL_ITERATE_PHDR"
|
2018-01-11 21:35:31 +01:00
|
|
|
'';
|
|
|
|
|
2019-01-08 16:23:32 +01:00
|
|
|
patches =
|
2018-02-18 07:40:29 +01:00
|
|
|
# https://github.com/ivmai/bdwgc/pull/208
|
2018-08-20 20:43:41 +02:00
|
|
|
lib.optional stdenv.hostPlatform.isRiscV ./riscv.patch;
|
2018-01-11 21:35:31 +01:00
|
|
|
|
2014-09-18 12:16:12 +02:00
|
|
|
configureFlags =
|
|
|
|
[ "--enable-cplusplus" ]
|
2018-01-11 21:35:31 +01:00
|
|
|
++ lib.optional enableLargeConfig "--enable-large-config"
|
2019-01-21 05:01:11 +01:00
|
|
|
++ lib.optional (stdenv.hostPlatform.libc == "musl") "--disable-static"
|
|
|
|
# Configure script can't detect whether C11 atomic intrinsics are available
|
|
|
|
# when cross-compiling, so it links to libatomic_ops, which has to be
|
|
|
|
# propagated to all dependencies. To avoid this, assume that the intrinsics
|
|
|
|
# are available.
|
|
|
|
++ lib.optional (stdenv.hostPlatform != stdenv.buildPlatform) "--with-libatomic-ops=none";
|
2012-10-03 20:06:53 +02:00
|
|
|
|
2018-01-08 08:19:47 +01:00
|
|
|
doCheck = true; # not cross;
|
2008-09-05 10:03:44 +02:00
|
|
|
|
2012-10-03 20:06:53 +02:00
|
|
|
# Don't run the native `strip' when cross-compiling.
|
2018-08-20 20:43:41 +02:00
|
|
|
dontStrip = stdenv.hostPlatform != stdenv.buildPlatform;
|
2012-10-03 20:06:53 +02:00
|
|
|
|
2017-11-21 18:58:48 +01:00
|
|
|
enableParallelBuilding = true;
|
|
|
|
|
2008-01-06 01:12:25 +01:00
|
|
|
meta = {
|
2009-09-16 14:39:57 +02:00
|
|
|
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.
|
|
|
|
'';
|
|
|
|
|
2014-11-18 01:47:23 +01:00
|
|
|
homepage = http://hboehm.info/gc/;
|
2009-09-16 14:39:57 +02:00
|
|
|
|
|
|
|
# non-copyleft, X11-style license
|
2014-11-18 01:47:23 +01:00
|
|
|
license = http://hboehm.info/gc/license.txt;
|
2009-09-16 14:39:57 +02:00
|
|
|
|
2015-01-13 22:33:24 +01:00
|
|
|
maintainers = [ ];
|
2010-02-12 15:14:40 +01:00
|
|
|
platforms = stdenv.lib.platforms.all;
|
2004-11-19 15:57:43 +01:00
|
|
|
};
|
|
|
|
}
|