croc: 10.1.1 -> 10.1.3 (#364662)
[NixPkgs.git] / pkgs / build-support / build-graalvm-native-image / default.nix
blob45680a42e9ed9e8dff5d658dc25b0e5523614bf3
2   lib,
3   stdenv,
4   apple-sdk_11,
5   darwinMinVersionHook,
6   glibcLocales,
7   # The GraalVM derivation to use
8   graalvmDrv,
9   removeReferencesTo,
10   executable ? args.pname,
11   # JAR used as input for GraalVM derivation, defaults to src
12   jar ? args.src,
13   dontUnpack ? (jar == args.src),
14   # Default native-image arguments. You probably don't want to set this,
15   # except in special cases. In most cases, use extraNativeBuildArgs instead
16   nativeImageBuildArgs ? [
17     (lib.optionalString stdenv.hostPlatform.isDarwin "-H:-CheckToolchain")
18     (lib.optionalString (
19       stdenv.hostPlatform.isLinux && stdenv.hostPlatform.isAarch64
20     ) "-H:PageSize=64K")
21     "-H:Name=${executable}"
22     "-march=compatibility"
23     "--verbose"
24   ],
25   # Extra arguments to be passed to the native-image
26   extraNativeImageBuildArgs ? [ ],
27   # XMX size of GraalVM during build
28   graalvmXmx ? "-J-Xmx6g",
29   meta ? { },
30   LC_ALL ? "en_US.UTF-8",
31   ...
32 }@args:
34 let
35   extraArgs = builtins.removeAttrs args [
36     "lib"
37     "stdenv"
38     "apple-sdk_11"
39     "darwinMinVersionHook"
40     "glibcLocales"
41     "jar"
42     "dontUnpack"
43     "LC_ALL"
44     "meta"
45     "buildPhase"
46     "nativeBuildInputs"
47     "installPhase"
48     "postInstall"
49   ];
51 stdenv.mkDerivation (
52   {
53     inherit dontUnpack jar;
55     env = { inherit LC_ALL; };
57     nativeBuildInputs = (args.nativeBuildInputs or [ ]) ++ [
58       graalvmDrv
59       glibcLocales
60       removeReferencesTo
61     ];
63     buildInputs = lib.optionals (stdenv.hostPlatform.isDarwin) [
64       apple-sdk_11
65       (darwinMinVersionHook "11.0")
66     ];
68     nativeImageBuildArgs = nativeImageBuildArgs ++ extraNativeImageBuildArgs ++ [ graalvmXmx ];
70     buildPhase =
71       args.buildPhase or ''
72         runHook preBuild
74         native-image -jar "$jar" ''${nativeImageBuildArgs[@]}
76         runHook postBuild
77       '';
79     installPhase =
80       args.installPhase or ''
81         runHook preInstall
83         install -Dm755 ${executable} -t $out/bin
85         runHook postInstall
86       '';
88     postInstall = ''
89       remove-references-to -t ${graalvmDrv} $out/bin/${executable}
90       ${args.postInstall or ""}
91     '';
93     disallowedReferences = [ graalvmDrv ];
95     passthru = { inherit graalvmDrv; };
97     meta = {
98       # default to graalvm's platforms
99       platforms = graalvmDrv.meta.platforms;
100       # default to executable name
101       mainProgram = executable;
102     } // meta;
103   }
104   // extraArgs