diff options
Diffstat (limited to 'infra/libkookie/nixpkgs/pkgs/development/compilers/ghc/8.10.2-binary.nix')
-rw-r--r-- | infra/libkookie/nixpkgs/pkgs/development/compilers/ghc/8.10.2-binary.nix | 70 |
1 files changed, 59 insertions, 11 deletions
diff --git a/infra/libkookie/nixpkgs/pkgs/development/compilers/ghc/8.10.2-binary.nix b/infra/libkookie/nixpkgs/pkgs/development/compilers/ghc/8.10.2-binary.nix index baa1d879b53e..1a1a9ca0160e 100644 --- a/infra/libkookie/nixpkgs/pkgs/development/compilers/ghc/8.10.2-binary.nix +++ b/infra/libkookie/nixpkgs/pkgs/development/compilers/ghc/8.10.2-binary.nix @@ -2,6 +2,12 @@ , fetchurl, perl, gcc , ncurses6, gmp, glibc, libiconv, numactl , llvmPackages + + # minimal = true; will remove files that aren't strictly necessary for + # regular builds and GHC bootstrapping. + # This is "useful" for staying within hydra's output limits for at least the + # aarch64-linux architecture. +, minimal ? false }: # Prebuilt only does native @@ -82,7 +88,6 @@ stdenv.mkDerivation rec { patchShebangs ghc-${version}/utils/ patchShebangs ghc-${version}/configure '' + - # We have to patch the GMP paths for the integer-gmp package. '' find . -name integer-gmp.buildinfo \ @@ -91,6 +96,12 @@ stdenv.mkDerivation rec { find . -name base.buildinfo \ -exec sed -i "s@extra-lib-dirs: @extra-lib-dirs: ${libiconv}/lib@" {} \; '' + + # aarch64 does HAVE_NUMA so -lnuma requires it in library-dirs in rts/package.conf.in + # FFI_LIB_DIR is a good indication of places it must be needed. + stdenv.lib.optionalString stdenv.hostPlatform.isAarch64 '' + find . -name package.conf.in \ + -exec sed -i "s@FFI_LIB_DIR@FFI_LIB_DIR ${numactl.out}/lib@g" {} \; + '' + # Rename needed libraries and binaries, fix interpreter stdenv.lib.optionalString stdenv.isLinux '' find . -type f -perm -0100 -exec patchelf \ @@ -128,14 +139,35 @@ stdenv.mkDerivation rec { # On Linux, use patchelf to modify the executables so that they can # find editline/gmp. - postFixup = stdenv.lib.optionalString stdenv.isLinux '' - for p in $(find "$out" -type f -executable); do - if isELF "$p"; then - echo "Patchelfing $p" - patchelf --set-rpath "${libPath}:$(patchelf --print-rpath $p)" $p - fi - done - '' + stdenv.lib.optionalString stdenv.isDarwin '' + postFixup = stdenv.lib.optionalString stdenv.isLinux + (if stdenv.hostPlatform.isAarch64 then + # Keep rpath as small as possible on aarch64 for patchelf#244. All Elfs + # are 2 directories deep from $out/lib, so pooling symlinks there makes + # a short rpath. + '' + (cd $out/lib; ln -s ${ncurses6.out}/lib/libtinfo.so.6) + (cd $out/lib; ln -s ${gmp.out}/lib/libgmp.so.10) + (cd $out/lib; ln -s ${numactl.out}/lib/libnuma.so.1) + for p in $(find "$out/lib" -type f -name "*\.so*"); do + (cd $out/lib; ln -s $p) + done + + for p in $(find "$out/lib" -type f -executable); do + if isELF "$p"; then + echo "Patchelfing $p" + patchelf --set-rpath "\$ORIGIN:\$ORIGIN/../.." $p + fi + done + '' + else + '' + for p in $(find "$out" -type f -executable); do + if isELF "$p"; then + echo "Patchelfing $p" + patchelf --set-rpath "${libPath}:$(patchelf --print-rpath $p)" $p + fi + done + '') + stdenv.lib.optionalString stdenv.isDarwin '' # not enough room in the object files for the full path to libiconv :( for exe in $(find "$out" -type f -executable); do isScript $exe && continue @@ -146,6 +178,17 @@ stdenv.mkDerivation rec { for file in $(find "$out" -name setup-config); do substituteInPlace $file --replace /usr/bin/ranlib "$(type -P ranlib)" done + '' + + stdenv.lib.optionalString minimal '' + # Remove profiling files + find $out -type f -name '*.p_o' -delete + find $out -type f -name '*.p_hi' -delete + find $out -type f -name '*_p.a' -delete + rm $out/lib/ghc-*/bin/ghc-iserv-prof + # Hydra will redistribute this derivation, so we have to keep the docs for + # legal reasons (retaining the legal notices etc) + # As a last resort we could unpack the docs separately and symlink them in. + # They're in $out/share/{doc,man}. ''; doInstallCheck = true; @@ -169,6 +212,11 @@ stdenv.mkDerivation rec { enableShared = true; }; - meta.license = stdenv.lib.licenses.bsd3; - meta.platforms = ["x86_64-linux" "armv7l-linux" "aarch64-linux" "i686-linux" "x86_64-darwin"]; + meta = { + homepage = "http://haskell.org/ghc"; + description = "The Glasgow Haskell Compiler"; + license = stdenv.lib.licenses.bsd3; + platforms = ["x86_64-linux" "armv7l-linux" "aarch64-linux" "i686-linux" "x86_64-darwin"]; + maintainers = with stdenv.lib.maintainers; [ lostnet ]; + }; } |