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