aboutsummaryrefslogtreecommitdiff
path: root/infra/libkookie/nixpkgs/pkgs/development/compilers/ghc/8.10.2-binary.nix
diff options
context:
space:
mode:
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.nix70
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 ];
+ };
}