77 lines
2.5 KiB
Nix
77 lines
2.5 KiB
Nix
{ lib,
|
|
stdenv,
|
|
fetchurl,
|
|
nixVersions,
|
|
libatomic_ops,
|
|
cmake,
|
|
ninja,
|
|
}:
|
|
|
|
stdenv.mkDerivation (finalAttrs: rec {
|
|
pname = "boehmgc";
|
|
version = "8.2.4";
|
|
|
|
src = fetchurl {
|
|
urls = [
|
|
"https://github.com/ivmai/bdwgc/releases/download/v${finalAttrs.version}/gc-${finalAttrs.version}.tar.gz"
|
|
];
|
|
sha256 = "sha256-PQ082+B3QD0xBrtA8Mu1Y0E9bv27Kn4c1ohlld7Ej8I=";
|
|
};
|
|
|
|
|
|
nativeBuildInputs = [ cmake ninja ];
|
|
buildInputs = [ libatomic_ops ];
|
|
#outputs = [ "out" "dev" "doc" ];
|
|
ninjaFlags = [ "-v" ];
|
|
cmakeFlags = [
|
|
#"-Denable_cplusplus=ON"
|
|
"-Ddefault_enable_threads=ON"
|
|
"-DBUILD_SHARED_LIBS=OFF"
|
|
"-Denable_threads=ON"
|
|
"-Denable_parallel_mark=ON"
|
|
"-Denable_thread_local_alloc=ON"
|
|
"-Denable_mmap=ON"
|
|
# TODO: Do we want to return the pages to the OS if empty for N collections?
|
|
"-Denable_munmap=ON"
|
|
"-Denable_werror=ON"
|
|
# TODO: Do we want the entire GC in a single object file?
|
|
"-Denable_single_obj_compilation=ON"
|
|
"-Dwith_libatomic_ops=OFF"
|
|
"-Dwithout_libatomic_ops=ON"
|
|
"-DCMAKE_INSTALL_LIBDIR=${placeholder "out"}/lib"
|
|
];
|
|
|
|
# `gctest` fails under emulation on aarch64-darwin
|
|
doCheck = !(stdenv.isDarwin && stdenv.isx86_64);
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
passthru.tests = nixVersions;
|
|
|
|
meta = with lib; {
|
|
homepage = "https://hboehm.info/gc/";
|
|
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.
|
|
'';
|
|
# non-copyleft, X11-style license
|
|
changelog = "https://github.com/ivmai/bdwgc/blob/v${finalAttrs.version}/ChangeLog";
|
|
license = "https://hboehm.info/gc/license.txt";
|
|
maintainers = with maintainers; [ AndersonTorres ];
|
|
platforms = platforms.all;
|
|
};
|
|
})
|