about summary refs log tree commit diff
path: root/pkgs/build-support/build-graalvm-native-image/default.nix
diff options
context:
space:
mode:
authorThiago Kenji Okada <thiagokokada@gmail.com>2021-11-23 11:56:37 -0300
committerThiago Kenji Okada <thiagokokada@gmail.com>2021-11-24 10:37:32 -0300
commit1415e30830e9fae776cbd08a4934a4cdc66e1a02 (patch)
tree6a05e65d382ea812215e0c98b2b9a1ef2f72bd1d /pkgs/build-support/build-graalvm-native-image/default.nix
parent4ec0d5209fd24b7f02773bafd35327a56dff7668 (diff)
buildGraalvmNativeImage: init
For now it only takes care of the single Jar <-> single Executable case.
This will take care of the majority (all?) use cases we have in nixpkgs
currently.
Diffstat (limited to 'pkgs/build-support/build-graalvm-native-image/default.nix')
-rw-r--r--pkgs/build-support/build-graalvm-native-image/default.nix53
1 files changed, 53 insertions, 0 deletions
diff --git a/pkgs/build-support/build-graalvm-native-image/default.nix b/pkgs/build-support/build-graalvm-native-image/default.nix
new file mode 100644
index 0000000000000..d6c07f0d69d76
--- /dev/null
+++ b/pkgs/build-support/build-graalvm-native-image/default.nix
@@ -0,0 +1,53 @@
+{ lib, stdenv, graalvmCEPackages, glibcLocales }:
+
+{ name ? "${args.pname}-${args.version}"
+  # Final executable name
+, executable
+  # JAR used as input for GraalVM derivation, defaults to src
+, jar ? args.src
+, dontUnpack ? (jar == args.src)
+  # Extra arguments to be passed to the native-image
+, extraNativeImageBuildArgs ? [ ]
+  # XMX size of GraalVM during build
+, graalvmXmx ? "-J-Xmx6g"
+  # The GraalVM to use
+, graalvm ? graalvmCEPackages.graalvm11-ce
+, ...
+} @ args:
+
+stdenv.mkDerivation (args // {
+  inherit dontUnpack;
+
+  nativeBuildInputs = (args.nativeBuildInputs or [ ]) ++ [ graalvm glibcLocales ];
+
+  nativeImageBuildArgs = lib.flatten ([
+    "-jar"
+    jar
+    "-H:CLibraryPath=${lib.getLib graalvm}/lib"
+    "${lib.optionalString stdenv.isDarwin "-H:-CheckToolchain"}"
+    "-H:Name=${executable}"
+    extraNativeImageBuildArgs
+    graalvmXmx
+  ]);
+
+  buildPhase = args.buildPhase or ''
+    runHook preBuild
+
+    native-image ''${nativeImageBuildArgs[@]}
+
+    runHook postBuild
+  '';
+
+  installPhase = args.installPhase or ''
+    runHook preInstall
+
+    install -Dm755 ${executable} -t $out/bin
+
+    runHook postInstall
+  '';
+
+  meta = {
+    platforms = lib.attrByPath [ "meta" "platforms" ] graalvm.meta.platforms args;
+    mainProgram = lib.attrByPath [ "meta" "mainProgram" ] executable args;
+  };
+})