forked from mirrors/nixpkgs
afb99ad5d4
Fixes issue #214922 by not adding C libraries to the default library path of GraalVM. This should reduce the closure size of native compiled binaries in nixpkgs again, e.g.: Before: ``` $ ldd ./result/bin/bb linux-vdso.so.1 (0x00007fff2669b000) libstdc++.so.6 => /nix/store/qbgfsaviwqi2p6jr7an1g2754sv3xqhn-gcc-11.3.0-lib/lib/libstdc++.so.6 (0x00007f77fc0cf000) libm.so.6 => /nix/store/l7vp7c9z03dspbmss3gq5wdwx5c6ifcq-graalvm11-ce-22.3.0/lib/svm/clibraries/linux-amd64/libm.so.6 (0x00007f77fbfef000) libpthread.so.0 => /nix/store/l7vp7c9z03dspbmss3gq5wdwx5c6ifcq-graalvm11-ce-22.3.0/lib/svm/clibraries/linux-amd64/libpthread.so.0 (0x00007f77fbfea000) libdl.so.2 => /nix/store/l7vp7c9z03dspbmss3gq5wdwx5c6ifcq-graalvm11-ce-22.3.0/lib/svm/clibraries/linux-amd64/libdl.so.2 (0x00007f77fbfe5000) librt.so.1 => /nix/store/l7vp7c9z03dspbmss3gq5wdwx5c6ifcq-graalvm11-ce-22.3.0/lib/svm/clibraries/linux-amd64/librt.so.1 (0x00007f77fbfde000) libc.so.6 => /nix/store/l7vp7c9z03dspbmss3gq5wdwx5c6ifcq-graalvm11-ce-22.3.0/lib/svm/clibraries/linux-amd64/libc.so.6 (0x00007f77fbdd5000) /nix/store/c35hf8g5b9vksadym9dbjrd6p2y11m8h-glibc-2.35-224/lib/ld-linux-x86-64.so.2 => /nix/store/9xfad3b5z4y00mzmk2wnn4900q0qmxns-glibc-2.35-224/lib64/ld-linux-x86-64.so.2 (0x00007f77fc2e7000) libgcc_s.so.1 => /nix/store/qbgfsaviwqi2p6jr7an1g2754sv3xqhn-gcc-11.3.0-lib/lib/libgcc_s.so.1 (0x00007f77fbdbb000) ``` After: ``` $ ldd ./result/bin/bb linux-vdso.so.1 (0x00007fffdfd4e000) libstdc++.so.6 => /nix/store/qbgfsaviwqi2p6jr7an1g2754sv3xqhn-gcc-11.3.0-lib/lib/libstdc++.so.6 (0x00007fc3a5658000) libm.so.6 => /nix/store/c35hf8g5b9vksadym9dbjrd6p2y11m8h-glibc-2.35-224/lib/libm.so.6 (0x00007fc3a5578000) libpthread.so.0 => /nix/store/c35hf8g5b9vksadym9dbjrd6p2y11m8h-glibc-2.35-224/lib/libpthread.so.0 (0x00007fc3a5573000) libdl.so.2 => /nix/store/c35hf8g5b9vksadym9dbjrd6p2y11m8h-glibc-2.35-224/lib/libdl.so.2 (0x00007fc3a556e000) librt.so.1 => /nix/store/c35hf8g5b9vksadym9dbjrd6p2y11m8h-glibc-2.35-224/lib/librt.so.1 (0x00007fc3a5569000) libc.so.6 => /nix/store/c35hf8g5b9vksadym9dbjrd6p2y11m8h-glibc-2.35-224/lib/libc.so.6 (0x00007fc3a535e000) /nix/store/c35hf8g5b9vksadym9dbjrd6p2y11m8h-glibc-2.35-224/lib/ld-linux-x86-64.so.2 => /nix/store/9xfad3b5z4y00mzmk2wnn4900q0qmxns-glibc-2.35-224/lib64/ld-linux-x86-64.so.2 (0x00007fc3a5870000) libgcc_s.so.1 => /nix/store/qbgfsaviwqi2p6jr7an1g2754sv3xqhn-gcc-11.3.0-lib/lib/libgcc_s.so.1 (0x00007fc3a5344000) ``` Also improves the installCheckPhase to include more tests and improve the old onest .
63 lines
1.7 KiB
Nix
63 lines
1.7 KiB
Nix
{ lib, stdenv, graalvm, glibcLocales }:
|
|
|
|
{ name ? "${args.pname}-${args.version}"
|
|
# Final executable name
|
|
, executable ? args.pname
|
|
# JAR used as input for GraalVM derivation, defaults to src
|
|
, jar ? args.src
|
|
, dontUnpack ? (jar == args.src)
|
|
# Default native-image arguments. You probably don't want to set this,
|
|
# except in special cases. In most cases, use extraNativeBuildArgs instead
|
|
, nativeImageBuildArgs ? [
|
|
"-jar" jar
|
|
(lib.optionalString stdenv.isDarwin "-H:-CheckToolchain")
|
|
"-H:Name=${executable}"
|
|
"--verbose"
|
|
]
|
|
# Extra arguments to be passed to the native-image
|
|
, extraNativeImageBuildArgs ? [ ]
|
|
# XMX size of GraalVM during build
|
|
, graalvmXmx ? "-J-Xmx6g"
|
|
# The GraalVM derivation to use
|
|
, graalvmDrv ? graalvm
|
|
# Locale to be used by GraalVM compiler
|
|
, LC_ALL ? "en_US.UTF-8"
|
|
, meta ? { }
|
|
, ...
|
|
} @ args:
|
|
|
|
stdenv.mkDerivation (args // {
|
|
inherit dontUnpack LC_ALL;
|
|
|
|
nativeBuildInputs = (args.nativeBuildInputs or [ ]) ++ [ graalvmDrv glibcLocales ];
|
|
|
|
nativeImageBuildArgs = nativeImageBuildArgs ++ 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
|
|
'';
|
|
|
|
disallowedReferences = [ graalvmDrv ];
|
|
|
|
meta = {
|
|
# default to graalvm's platforms
|
|
platforms = graalvmDrv.meta.platforms;
|
|
# default to executable name
|
|
mainProgram = executable;
|
|
# need to have native-image-installable-svm available
|
|
broken = !(builtins.elem "native-image-installable-svm" graalvmDrv.products);
|
|
} // meta;
|
|
})
|