mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-12-15 02:03:01 +00:00
61 lines
1.9 KiB
Nix
61 lines
1.9 KiB
Nix
{ lib
|
|
, stdenv
|
|
, graalvmCEPackages
|
|
, gcc
|
|
, glibc
|
|
, javaVersion
|
|
, musl
|
|
, src
|
|
, version
|
|
, writeShellScriptBin
|
|
, zlib
|
|
, useMusl ? false
|
|
, extraCLibs ? [ ]
|
|
}:
|
|
|
|
assert useMusl -> stdenv.isLinux;
|
|
let
|
|
cLibs = [ glibc zlib.static ]
|
|
++ lib.optionals (!useMusl) [ glibc.static ]
|
|
++ lib.optionals useMusl [ musl ]
|
|
++ extraCLibs;
|
|
# GraalVM 21.3.0+ expects musl-gcc as <system>-musl-gcc
|
|
musl-gcc = (writeShellScriptBin "${stdenv.hostPlatform.system}-musl-gcc" ''${lib.getDev musl}/bin/musl-gcc "$@"'');
|
|
binPath = lib.makeBinPath ([ gcc ] ++ lib.optionals useMusl [ musl-gcc ]);
|
|
in
|
|
graalvmCEPackages.buildGraalvmProduct rec {
|
|
inherit src javaVersion version;
|
|
product = "native-image-installable-svm";
|
|
|
|
graalvmPhases.postInstall = lib.optionalString stdenv.isLinux ''
|
|
wrapProgram $out/bin/native-image \
|
|
--prefix PATH : ${binPath} \
|
|
${lib.concatStringsSep " "
|
|
(map (l: "--add-flags '-H:CLibraryPath=${l}/lib'") cLibs)}
|
|
'';
|
|
|
|
graalvmPhases.installCheckPhase = ''
|
|
echo "Ahead-Of-Time compilation"
|
|
$out/bin/native-image -H:-CheckToolchain -H:+ReportExceptionStackTraces HelloWorld
|
|
./helloworld | fgrep 'Hello World'
|
|
|
|
${# --static is only available in Linux
|
|
lib.optionalString (stdenv.isLinux && !useMusl) ''
|
|
echo "Ahead-Of-Time compilation with -H:+StaticExecutableWithDynamicLibC"
|
|
$out/bin/native-image -H:+StaticExecutableWithDynamicLibC HelloWorld
|
|
./helloworld | fgrep 'Hello World'
|
|
|
|
echo "Ahead-Of-Time compilation with --static"
|
|
$out/bin/native-image --static HelloWorld
|
|
./helloworld | fgrep 'Hello World'
|
|
''}
|
|
|
|
${# --static is only available in Linux
|
|
lib.optionalString (stdenv.isLinux && useMusl) ''
|
|
echo "Ahead-Of-Time compilation with --static and --libc=musl"
|
|
$out/bin/native-image --static HelloWorld --libc=musl
|
|
./helloworld | fgrep 'Hello World'
|
|
''}
|
|
'';
|
|
}
|