diff options
author | Thiago Kenji Okada <thiagokokada@gmail.com> | 2021-11-23 11:56:37 -0300 |
---|---|---|
committer | Thiago Kenji Okada <thiagokokada@gmail.com> | 2021-11-24 10:37:32 -0300 |
commit | 1415e30830e9fae776cbd08a4934a4cdc66e1a02 (patch) | |
tree | 6a05e65d382ea812215e0c98b2b9a1ef2f72bd1d /pkgs/build-support/build-graalvm-native-image/default.nix | |
parent | 4ec0d5209fd24b7f02773bafd35327a56dff7668 (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.nix | 53 |
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; + }; +}) |