ghc:8.10.2Binary bootstrap for 8.8 on aarch64 (NixOS#97407)
This commit is contained in:
parent
b50ef4e3f2
commit
1c2ee215ab
|
@ -82,7 +82,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 +90,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 +133,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
|
||||
|
@ -169,6 +195,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 ];
|
||||
};
|
||||
}
|
||||
|
|
|
@ -119,7 +119,11 @@ stdenv.mkDerivation (rec {
|
|||
postPatch = "patchShebangs .";
|
||||
|
||||
# GHC is a bit confused on its cross terminology.
|
||||
preConfigure = ''
|
||||
preConfigure = stdenv.lib.optionalString stdenv.isAarch64 ''
|
||||
# Aarch64 allow backward bootstrapping since earlier versions are unstable.
|
||||
find . -name \*\.cabal\* -exec sed -i -e 's/\(base.*\)4.14/\14.16/' {} \; \
|
||||
-exec sed -i -e 's/\(prim.*\)0.6/\10.8/' {} \;
|
||||
'' + ''
|
||||
for env in $(env | grep '^TARGET_' | sed -E 's|\+?=.*||'); do
|
||||
export "''${env#TARGET_}=''${!env}"
|
||||
done
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{ buildPackages, pkgs, newScope }:
|
||||
{ buildPackages, pkgs, newScope, stdenv }:
|
||||
|
||||
let
|
||||
# These are attributes in compiler and packages that don't support integer-simple.
|
||||
|
@ -73,7 +73,11 @@ in {
|
|||
llvmPackages = pkgs.llvmPackages_7;
|
||||
};
|
||||
ghc884 = callPackage ../development/compilers/ghc/8.8.4.nix {
|
||||
bootPkgs = packages.ghc865Binary;
|
||||
# aarch64 ghc865Binary gets SEGVs due to haskell#15449 or similar
|
||||
bootPkgs = if stdenv.isAarch64 then
|
||||
packages.ghc8102Binary
|
||||
else
|
||||
packages.ghc865Binary;
|
||||
inherit (buildPackages.python3Packages) sphinx;
|
||||
buildLlvmPackages = buildPackages.llvmPackages_7;
|
||||
llvmPackages = pkgs.llvmPackages_7;
|
||||
|
@ -85,7 +89,11 @@ in {
|
|||
llvmPackages = pkgs.llvmPackages_9;
|
||||
};
|
||||
ghc8102 = callPackage ../development/compilers/ghc/8.10.2.nix {
|
||||
bootPkgs = packages.ghc865Binary;
|
||||
# aarch64 ghc865Binary gets SEGVs due to haskell#15449 or similar
|
||||
bootPkgs = if stdenv.isAarch64 then
|
||||
packages.ghc8102Binary
|
||||
else
|
||||
packages.ghc865Binary;
|
||||
inherit (buildPackages.python3Packages) sphinx;
|
||||
buildLlvmPackages = buildPackages.llvmPackages_9;
|
||||
llvmPackages = pkgs.llvmPackages_9;
|
||||
|
|
Loading…
Reference in New Issue