anvil-editor: init at 0.4
[NixPkgs.git] / pkgs / build-support / build-graalvm-native-image / default.nix
blobd2f3aef8860ccca7feeabd96e7783c960885a957
1 { lib
2 , stdenv
3 , glibcLocales
4   # The GraalVM derivation to use
5 , graalvmDrv
6 , removeReferencesTo
7 , executable ? args.pname
8   # JAR used as input for GraalVM derivation, defaults to src
9 , jar ? args.src
10 , dontUnpack ? (jar == args.src)
11   # Default native-image arguments. You probably don't want to set this,
12   # except in special cases. In most cases, use extraNativeBuildArgs instead
13 , nativeImageBuildArgs ? [
14     (lib.optionalString stdenv.hostPlatform.isDarwin "-H:-CheckToolchain")
15     (lib.optionalString (stdenv.hostPlatform.isLinux && stdenv.hostPlatform.isAarch64) "-H:PageSize=64K")
16     "-H:Name=${executable}"
17     "-march=compatibility"
18     "--verbose"
19   ]
20   # Extra arguments to be passed to the native-image
21 , extraNativeImageBuildArgs ? [ ]
22   # XMX size of GraalVM during build
23 , graalvmXmx ? "-J-Xmx6g"
24 , meta ? { }
25 , LC_ALL ? "en_US.UTF-8"
26 , ...
27 } @ args:
29 let
30   extraArgs = builtins.removeAttrs args [
31     "lib"
32     "stdenv"
33     "glibcLocales"
34     "jar"
35     "dontUnpack"
36     "LC_ALL"
37     "meta"
38     "buildPhase"
39     "nativeBuildInputs"
40     "installPhase"
41     "postInstall"
42   ];
44 stdenv.mkDerivation ({
45   inherit dontUnpack jar;
47   env = { inherit LC_ALL; };
49   nativeBuildInputs = (args.nativeBuildInputs or [ ]) ++ [ graalvmDrv glibcLocales removeReferencesTo ];
51   nativeImageBuildArgs = nativeImageBuildArgs ++ extraNativeImageBuildArgs ++ [ graalvmXmx ];
53   buildPhase = args.buildPhase or ''
54     runHook preBuild
56     native-image -jar "$jar" ''${nativeImageBuildArgs[@]}
58     runHook postBuild
59   '';
61   installPhase = args.installPhase or ''
62     runHook preInstall
64     install -Dm755 ${executable} -t $out/bin
66     runHook postInstall
67   '';
69   postInstall = ''
70     remove-references-to -t ${graalvmDrv} $out/bin/${executable}
71     ${args.postInstall or ""}
72   '';
74   disallowedReferences = [ graalvmDrv ];
76   passthru = { inherit graalvmDrv; };
78   meta = {
79     # default to graalvm's platforms
80     platforms = graalvmDrv.meta.platforms;
81     # default to executable name
82     mainProgram = executable;
83   } // meta;
84 } // extraArgs)