nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1{ stdenv, fetchFromGitHub, cmake, ninja
2, secureBuild ? false
3}:
4
5let
6 soext = stdenv.hostPlatform.extensions.sharedLibrary;
7in
8stdenv.mkDerivation rec {
9 pname = "mimalloc";
10 version = "1.6.4";
11
12 src = fetchFromGitHub {
13 owner = "microsoft";
14 repo = pname;
15 rev = "v${version}";
16 sha256 = "0b6ymi2a9is2q6n49dvlnjxknikj0rfff5ygbc4n7894h5mllvvr";
17 };
18
19 nativeBuildInputs = [ cmake ninja ];
20 enableParallelBuilding = true;
21 cmakeFlags = stdenv.lib.optional secureBuild [ "-DMI_SECURE=ON" ];
22
23 postInstall = let
24 rel = stdenv.lib.versions.majorMinor version;
25 in ''
26 # first, install headers, that's easy
27 mkdir -p $dev
28 mv $out/lib/*/include $dev/include
29
30 # move .a and .o files into place
31 find $out/lib
32 mv $out/lib/mimalloc-${rel}/libmimalloc*.a $out/lib/libmimalloc.a
33 mv $out/lib/mimalloc-${rel}/mimalloc*.o $out/lib/mimalloc.o
34
35 '' + (if secureBuild then ''
36 mv $out/lib/mimalloc-${rel}/libmimalloc-secure${soext}.${rel} $out/lib/libmimalloc-secure${soext}.${rel}
37 ln -sfv $out/lib/libmimalloc-secure${soext}.${rel} $out/lib/libmimalloc-secure${soext}
38 ln -sfv $out/lib/libmimalloc-secure${soext}.${rel} $out/lib/libmimalloc${soext}
39 '' else ''
40 mv $out/lib/mimalloc-${rel}/libmimalloc${soext}.${rel} $out/lib/libmimalloc${soext}.${rel}
41 ln -sfv $out/lib/libmimalloc${soext}.${rel} $out/lib/libmimalloc${soext}
42 '') + ''
43 # remote duplicate dir. FIXME: try to fix the .cmake file distribution
44 # so we can re-use it for dependencies...
45 rm -rf $out/lib/mimalloc-${rel}
46 '';
47
48 outputs = [ "out" "dev" ];
49
50 meta = with stdenv.lib; {
51 description = "Compact, fast, general-purpose memory allocator";
52 homepage = "https://github.com/microsoft/mimalloc";
53 license = licenses.bsd2;
54 platforms = platforms.unix;
55 maintainers = with maintainers; [ thoughtpolice ];
56 badPlatforms = platforms.darwin;
57 };
58}