haskell.compiler.ghc8107{,Binary}: drop

Also, rearrange the GHC‐related release notes to be in order of
most likely to matter to anyone.

Co-authored-by: Wolfgang Walther <walther@technowledgy.de>

Emily c0243276 08129b69

Changed files
+10 -2047
doc
release-notes
maintainers
scripts
nixos
modules
services
x11
window-managers
pkgs
+1 -1
doc/release-notes/rl-2511.section.md
···
- GHCJS 8.10, exposed via `haskell.compiler.ghcjs` and `haskell.compiler.ghcjs810`, has been removed. Downstream users should migrate their projects to the new JavaScript backend of GHC proper which can be used via `pkgsCross.ghcjs` from Nixpkgs. Haskell packaging code, like `haskellPackages.mkDerivation`, `ghcWithPackages` and `hoogleWithPackages`, also no longer supports GHCJS.
-
- GHC 8.6, 9.0, and their package sets have been removed.
+
- GHC 8.6, 8.10, 9.0, and their package sets have been removed.
- Support for bootstrapping native GHC compilers on 32‐bit ARM and little‐endian 64‐bit PowerPC has been dropped.
The latter was probably broken anyway.
+2 -2
maintainers/scripts/haskell/test-configurations.nix
···
and builds all derivations (or at least a reasonable subset) affected by
these overrides.
-
By default, it checks `configuration-{common,nix,ghc-8.10.x}.nix`. You can
+
By default, it checks `configuration-{common,nix,ghc-9.8.x}.nix`. You can
invoke it like this:
nix-build maintainers/scripts/haskell/test-configurations.nix --keep-going
···
files ? [
"configuration-common.nix"
"configuration-nix.nix"
-
"configuration-ghc-8.10.x.nix"
+
"configuration-ghc-9.8.x.nix"
],
nixpkgsPath ? ../../..,
config ? {
+1 -1
nixos/modules/services/x11/window-managers/xmonad.nix
···
haskellPackages = mkOption {
default = pkgs.haskellPackages;
defaultText = literalExpression "pkgs.haskellPackages";
-
example = literalExpression "pkgs.haskell.packages.ghc810";
+
example = literalExpression "pkgs.haskell.packages.ghc910";
type = types.attrs;
description = ''
haskellPackages used to build Xmonad and other packages.
-546
pkgs/development/compilers/ghc/8.10.7-binary.nix
···
-
{
-
lib,
-
stdenv,
-
fetchurl,
-
perl,
-
gcc,
-
ncurses5,
-
ncurses6,
-
gmp,
-
libiconv,
-
numactl,
-
llvmPackages,
-
coreutils,
-
rcodesign,
-
targetPackages,
-
-
# 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
-
assert stdenv.targetPlatform == stdenv.hostPlatform;
-
-
let
-
downloadsUrl = "https://downloads.haskell.org/ghc";
-
-
# Copy sha256 from https://downloads.haskell.org/~ghc/8.10.7/SHA256SUMS
-
version = "8.10.7";
-
-
# Information about available bindists that we use in the build.
-
#
-
# # Bindist library checking
-
#
-
# The field `archSpecificLibraries` also provides a way for us get notified
-
# early when the upstream bindist changes its dependencies (e.g. because a
-
# newer Debian version is used that uses a new `ncurses` version).
-
#
-
# Usage:
-
#
-
# * You can find the `fileToCheckFor` of libraries by running `readelf -d`
-
# on the compiler binary (`exePathForLibraryCheck`).
-
# * To skip library checking for an architecture,
-
# set `exePathForLibraryCheck = null`.
-
# * To skip file checking for a specific arch specific library,
-
# set `fileToCheckFor = null`.
-
ghcBinDists = {
-
# Binary distributions for the default libc (e.g. glibc, or libSystem on Darwin)
-
# nixpkgs uses for the respective system.
-
defaultLibc = {
-
i686-linux = {
-
variantSuffix = "";
-
src = {
-
url = "${downloadsUrl}/${version}/ghc-${version}-i386-deb9-linux.tar.xz";
-
sha256 = "fbfc1ef194f4e7a4c0da8c11cc69b17458a4b928b609b3622c97acc4acd5c5ab";
-
};
-
exePathForLibraryCheck = "ghc/stage2/build/tmp/ghc-stage2";
-
archSpecificLibraries = [
-
{
-
nixPackage = gmp;
-
fileToCheckFor = null;
-
}
-
# The i686-linux bindist provided by GHC HQ is currently built on Debian 9,
-
# which link it against `libtinfo.so.5` (ncurses 5).
-
# Other bindists are linked `libtinfo.so.6` (ncurses 6).
-
{
-
nixPackage = ncurses5;
-
fileToCheckFor = "libtinfo.so.5";
-
}
-
];
-
};
-
x86_64-linux = {
-
variantSuffix = "";
-
src = {
-
url = "${downloadsUrl}/${version}/ghc-${version}-x86_64-deb10-linux.tar.xz";
-
sha256 = "a13719bca87a0d3ac0c7d4157a4e60887009a7f1a8dbe95c4759ec413e086d30";
-
};
-
exePathForLibraryCheck = "ghc/stage2/build/tmp/ghc-stage2";
-
archSpecificLibraries = [
-
{
-
nixPackage = gmp;
-
fileToCheckFor = null;
-
}
-
{
-
nixPackage = ncurses6;
-
fileToCheckFor = "libtinfo.so.6";
-
}
-
];
-
};
-
armv7l-linux = {
-
variantSuffix = "";
-
src = {
-
url = "${downloadsUrl}/${version}/ghc-${version}-armv7-deb10-linux.tar.xz";
-
sha256 = "3949c31bdf7d3b4afb765ea8246bca4ca9707c5d988d9961a244f0da100956a2";
-
};
-
exePathForLibraryCheck = "ghc/stage2/build/tmp/ghc-stage2";
-
archSpecificLibraries = [
-
{
-
nixPackage = gmp;
-
fileToCheckFor = null;
-
}
-
{
-
nixPackage = ncurses6;
-
fileToCheckFor = "libtinfo.so.6";
-
}
-
];
-
};
-
aarch64-linux = {
-
variantSuffix = "";
-
src = {
-
url = "${downloadsUrl}/${version}/ghc-${version}-aarch64-deb10-linux.tar.xz";
-
sha256 = "fad2417f9b295233bf8ade79c0e6140896359e87be46cb61cd1d35863d9d0e55";
-
};
-
exePathForLibraryCheck = "ghc/stage2/build/tmp/ghc-stage2";
-
archSpecificLibraries = [
-
{
-
nixPackage = gmp;
-
fileToCheckFor = null;
-
}
-
{
-
nixPackage = ncurses6;
-
fileToCheckFor = "libtinfo.so.6";
-
}
-
{
-
nixPackage = numactl;
-
fileToCheckFor = null;
-
}
-
];
-
};
-
x86_64-darwin = {
-
variantSuffix = "";
-
src = {
-
url = "${downloadsUrl}/${version}/ghc-${version}-x86_64-apple-darwin.tar.xz";
-
sha256 = "287db0f9c338c9f53123bfa8731b0996803ee50f6ee847fe388092e5e5132047";
-
};
-
exePathForLibraryCheck = null; # we don't have a library check for darwin yet
-
archSpecificLibraries = [
-
{
-
nixPackage = gmp;
-
fileToCheckFor = null;
-
}
-
{
-
nixPackage = ncurses6;
-
fileToCheckFor = null;
-
}
-
{
-
nixPackage = libiconv;
-
fileToCheckFor = null;
-
}
-
];
-
};
-
aarch64-darwin = {
-
variantSuffix = "";
-
src = {
-
url = "${downloadsUrl}/${version}/ghc-${version}-aarch64-apple-darwin.tar.xz";
-
sha256 = "dc469fc3c35fd2a33a5a575ffce87f13de7b98c2d349a41002e200a56d9bba1c";
-
};
-
exePathForLibraryCheck = null; # we don't have a library check for darwin yet
-
archSpecificLibraries = [
-
{
-
nixPackage = gmp;
-
fileToCheckFor = null;
-
}
-
{
-
nixPackage = ncurses6;
-
fileToCheckFor = null;
-
}
-
{
-
nixPackage = libiconv;
-
fileToCheckFor = null;
-
}
-
];
-
};
-
};
-
# Binary distributions for the musl libc for the respective system.
-
musl = {
-
x86_64-linux = {
-
variantSuffix = "-musl-integer-simple";
-
src = {
-
url = "${downloadsUrl}/${version}/ghc-${version}-x86_64-alpine3.10-linux-integer-simple.tar.xz";
-
sha256 = "16903df850ef73d5246f2ff169cbf57ecab76c2ac5acfa9928934282cfad575c";
-
};
-
exePathForLibraryCheck = "bin/ghc";
-
archSpecificLibraries = [
-
# No `gmp` here, since this is an `integer-simple` bindist.
-
-
# In contrast to glibc builds, the musl-bindist uses `libncursesw.so.*`
-
# instead of `libtinfo.so.*.`
-
{
-
nixPackage = ncurses6;
-
fileToCheckFor = "libncursesw.so.6";
-
}
-
];
-
isHadrian = true;
-
};
-
};
-
};
-
-
distSetName = if stdenv.hostPlatform.isMusl then "musl" else "defaultLibc";
-
-
binDistUsed =
-
ghcBinDists.${distSetName}.${stdenv.hostPlatform.system}
-
or (throw "cannot bootstrap GHC on this platform ('${stdenv.hostPlatform.system}' with libc '${distSetName}')");
-
-
useLLVM = !(import ./common-have-ncg.nix { inherit lib stdenv version; });
-
-
libPath = lib.makeLibraryPath (
-
# Add arch-specific libraries.
-
map ({ nixPackage, ... }: nixPackage) binDistUsed.archSpecificLibraries
-
);
-
-
libEnvVar = lib.optionalString stdenv.hostPlatform.isDarwin "DY" + "LD_LIBRARY_PATH";
-
-
runtimeDeps = [
-
targetPackages.stdenv.cc
-
targetPackages.stdenv.cc.bintools
-
coreutils # for cat
-
]
-
++ lib.optionals useLLVM [
-
(lib.getBin llvmPackages.llvm)
-
]
-
# On darwin, we need unwrapped bintools as well (for otool)
-
++ lib.optionals (stdenv.targetPlatform.linker == "cctools") [
-
targetPackages.stdenv.cc.bintools.bintools
-
];
-
-
in
-
-
stdenv.mkDerivation {
-
inherit version;
-
pname = "ghc-binary${binDistUsed.variantSuffix}";
-
-
src = fetchurl binDistUsed.src;
-
-
# Note that for GHC 8.10 versions >= 8.10.6, the GHC HQ musl bindist
-
# uses `integer-simple` and has no `gmp` dependency:
-
# https://gitlab.haskell.org/ghc/ghc/-/commit/8306501020cd66f683ad9c215fa8e16c2d62357d
-
# Related nixpkgs issues:
-
# * https://github.com/NixOS/nixpkgs/pull/130441#issuecomment-922452843
-
# TODO: When this file is copied to `ghc-9.*-binary.nix`, determine whether
-
# the GHC 9 branch also switched from `gmp` to `integer-simple` via the
-
# currently-open issue:
-
# https://gitlab.haskell.org/ghc/ghc/-/issues/20059
-
# and update this comment accordingly.
-
-
nativeBuildInputs = [
-
perl
-
]
-
# Upstream binaries may not be linker-signed, which invalidates their signatures
-
# because `install_name_tool` will only replace a signature if it is both
-
# an ad hoc signature and the signature is flagged as linker-signed.
-
#
-
# rcodesign is used to replace the signature instead of sigtool because it
-
# supports setting the linker-signed flag, which will ensure future processing
-
# of the binaries does not invalidate their signatures.
-
++ lib.optionals (stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isAarch64) [ rcodesign ];
-
-
# Set LD_LIBRARY_PATH or equivalent so that the programs running as part
-
# of the bindist installer can find the libraries they expect.
-
# Cannot patchelf beforehand due to relative RPATHs that anticipate
-
# the final install location.
-
${libEnvVar} = libPath;
-
-
postUnpack =
-
# Verify our assumptions of which `libtinfo.so` (ncurses) version is used,
-
# so that we know when ghc bindists upgrade that and we need to update the
-
# version used in `libPath`.
-
lib.optionalString (binDistUsed.exePathForLibraryCheck != null)
-
# Note the `*` glob because some GHCs have a suffix when unpacked, e.g.
-
# the musl bindist has dir `ghc-VERSION-x86_64-unknown-linux/`.
-
# As a result, don't shell-quote this glob when splicing the string.
-
(
-
let
-
buildExeGlob = ''ghc-${version}*/"${binDistUsed.exePathForLibraryCheck}"'';
-
in
-
lib.concatStringsSep "\n" [
-
(''
-
shopt -u nullglob
-
echo "Checking that ghc binary exists in bindist at ${buildExeGlob}"
-
if ! test -e ${buildExeGlob}; then
-
echo >&2 "GHC binary ${binDistUsed.exePathForLibraryCheck} could not be found in the bindist build directory (at ${buildExeGlob}) for arch ${stdenv.hostPlatform.system}, please check that ghcBinDists correctly reflect the bindist dependencies!"; exit 1;
-
fi
-
'')
-
(lib.concatMapStringsSep "\n" (
-
{ fileToCheckFor, nixPackage }:
-
lib.optionalString (fileToCheckFor != null) ''
-
echo "Checking bindist for ${fileToCheckFor} to ensure that is still used"
-
if ! readelf -d ${buildExeGlob} | grep "${fileToCheckFor}"; then
-
echo >&2 "File ${fileToCheckFor} could not be found in ${binDistUsed.exePathForLibraryCheck} for arch ${stdenv.hostPlatform.system}, please check that ghcBinDists correctly reflect the bindist dependencies!"; exit 1;
-
fi
-
-
echo "Checking that the nix package ${nixPackage} contains ${fileToCheckFor}"
-
if ! test -e "${lib.getLib nixPackage}/lib/${fileToCheckFor}"; then
-
echo >&2 "Nix package ${nixPackage} did not contain ${fileToCheckFor} for arch ${stdenv.hostPlatform.system}, please check that ghcBinDists correctly reflect the bindist dependencies!"; exit 1;
-
fi
-
''
-
) binDistUsed.archSpecificLibraries)
-
]
-
)
-
# GHC has dtrace probes, which causes ld to try to open /usr/lib/libdtrace.dylib
-
# during linking
-
+ lib.optionalString stdenv.hostPlatform.isDarwin (
-
''
-
export NIX_LDFLAGS+=" -no_dtrace_dof"
-
# not enough room in the object files for the full path to libiconv :(
-
for exe in $(find . -type f -executable); do
-
isScript $exe && continue
-
ln -fs ${libiconv}/lib/libiconv.dylib $(dirname $exe)/libiconv.dylib
-
install_name_tool -change /usr/lib/libiconv.2.dylib @executable_path/libiconv.dylib $exe
-
''
-
+ lib.optionalString stdenv.hostPlatform.isAarch64 ''
-
# Resign the binary and set the linker-signed flag. Ignore failures when the file is an object file.
-
# Object files don’t have signatures, so ignoring the failures is harmless.
-
rcodesign sign --code-signature-flags linker-signed $exe || true
-
''
-
+ ''
-
done
-
''
-
)
-
+
-
-
# Some scripts used during the build need to have their shebangs patched
-
''
-
patchShebangs ghc-${version}/utils/
-
patchShebangs ghc-${version}/configure
-
test -d ghc-${version}/inplace/bin && \
-
patchShebangs ghc-${version}/inplace/bin
-
''
-
+
-
# We have to patch the GMP paths for the integer-gmp package.
-
# Note that musl bindists do not contain them,
-
# see: https://gitlab.haskell.org/ghc/ghc/-/issues/20073#note_363231
-
# However, musl bindists >= 8.10.6 use `integer-simple`, not `gmp`.
-
''
-
find . -name integer-gmp.buildinfo \
-
-exec sed -i "s@extra-lib-dirs: @extra-lib-dirs: ${gmp.out}/lib@" {} \;
-
''
-
+ lib.optionalString stdenv.hostPlatform.isDarwin ''
-
find . -name base.buildinfo \
-
-exec sed -i "s@extra-lib-dirs: @extra-lib-dirs: ${libiconv}/lib@" {} \;
-
''
-
+
-
# Some platforms do 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.
-
lib.optionalString
-
(
-
lib.meta.availableOn stdenv.hostPlatform numactl
-
&& builtins.any ({ nixPackage, ... }: nixPackage == numactl) binDistUsed.archSpecificLibraries
-
)
-
''
-
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
-
lib.optionalString stdenv.hostPlatform.isLinux ''
-
find . -type f -executable -exec patchelf \
-
--interpreter ${stdenv.cc.bintools.dynamicLinker} {} \;
-
''
-
+
-
# The hadrian install Makefile uses 'xxx' as a temporary placeholder in path
-
# substitution. Which can break the build if the store path / prefix happens
-
# to contain this string. This will be fixed with 9.4 bindists.
-
# https://gitlab.haskell.org/ghc/ghc/-/issues/21402
-
''
-
# Detect hadrian Makefile by checking for the target that has the problem
-
if grep '^update_package_db' ghc-${version}*/Makefile > /dev/null; then
-
echo Hadrian bindist, applying workaround for xxx path substitution.
-
# based on https://gitlab.haskell.org/ghc/ghc/-/commit/dd5fecb0e2990b192d92f4dfd7519ecb33164fad.patch
-
substituteInPlace ghc-${version}*/Makefile --replace 'xxx' '\0xxx\0'
-
else
-
echo Not a hadrian bindist, not applying xxx path workaround.
-
fi
-
'';
-
-
# fix for `configure: error: Your linker is affected by binutils #16177`
-
preConfigure = lib.optionalString stdenv.targetPlatform.isAarch32 "LD=ld.gold";
-
-
configurePlatforms = [ ];
-
configureFlags = [
-
"--with-gmp-includes=${lib.getDev gmp}/include"
-
# Note `--with-gmp-libraries` does nothing for GHC bindists:
-
# https://gitlab.haskell.org/ghc/ghc/-/merge_requests/6124
-
]
-
++ lib.optional stdenv.hostPlatform.isDarwin "--with-gcc=${./gcc-clang-wrapper.sh}"
-
# From: https://github.com/NixOS/nixpkgs/pull/43369/commits
-
++ lib.optional stdenv.hostPlatform.isMusl "--disable-ld-override";
-
-
# No building is necessary, but calling make without flags ironically
-
# calls install-strip ...
-
dontBuild = true;
-
-
# GHC tries to remove xattrs when installing to work around Gatekeeper
-
# (see https://gitlab.haskell.org/ghc/ghc/-/issues/17418). This step normally
-
# succeeds in nixpkgs because xattrs are not allowed in the store, but it
-
# can fail when a file has the `com.apple.provenance` xattr, and it can’t be
-
# modified (such as target of the symlink to `libiconv.dylib`).
-
# The `com.apple.provenance` xattr is a new feature of macOS as of macOS 13.
-
# See: https://eclecticlight.co/2023/03/13/ventura-has-changed-app-quarantine-with-a-new-xattr/
-
makeFlags = lib.optionals stdenv.buildPlatform.isDarwin [ "XATTR=/does-not-exist" ];
-
-
# Patch scripts to include runtime dependencies in $PATH.
-
postInstall = ''
-
for i in "$out/bin/"*; do
-
test ! -h "$i" || continue
-
isScript "$i" || continue
-
sed -i -e '2i export PATH="${lib.makeBinPath runtimeDeps}:$PATH"' "$i"
-
done
-
'';
-
-
# Apparently necessary for the ghc Alpine (musl) bindist:
-
# When we strip, and then run the
-
# patchelf --set-rpath "${libPath}:$(patchelf --print-rpath $p)" $p
-
# below, running ghc (e.g. during `installCheckPhase)` gives some apparently
-
# corrupted rpath or whatever makes the loader work on nonsensical strings:
-
# running install tests
-
# Error relocating /nix/store/...-ghc-8.10.2-binary/lib/ghc-8.10.5/bin/ghc: : symbol not found
-
# Error relocating /nix/store/...-ghc-8.10.2-binary/lib/ghc-8.10.5/bin/ghc: ir6zf6c9f86pfx8sr30n2vjy-ghc-8.10.2-binary/lib/ghc-8.10.5/bin/../lib/x86_64-linux-ghc-8.10.5/libHSexceptions-0.10.4-ghc8.10.5.so: symbol not found
-
# Error relocating /nix/store/...-ghc-8.10.2-binary/lib/ghc-8.10.5/bin/ghc: y/lib/ghc-8.10.5/bin/../lib/x86_64-linux-ghc-8.10.5/libHStemplate-haskell-2.16.0.0-ghc8.10.5.so: symbol not found
-
# Error relocating /nix/store/...-ghc-8.10.2-binary/lib/ghc-8.10.5/bin/ghc: 8.10.5/libHStemplate-haskell-2.16.0.0-ghc8.10.5.so: symbol not found
-
# Error relocating /nix/store/...-ghc-8.10.2-binary/lib/ghc-8.10.5/bin/ghc: �: symbol not found
-
# Error relocating /nix/store/...-ghc-8.10.2-binary/lib/ghc-8.10.5/bin/ghc: �?: symbol not found
-
# Error relocating /nix/store/...-ghc-8.10.2-binary/lib/ghc-8.10.5/bin/ghc: 64-linux-ghc-8.10.5/libHSexceptions-0.10.4-ghc8.10.5.so: symbol not found
-
# This is extremely bogus and should be investigated.
-
dontStrip = if stdenv.hostPlatform.isMusl then true else false; # `if` for explicitness
-
-
# On Linux, use patchelf to modify the executables so that they can
-
# find editline/gmp.
-
postFixup =
-
lib.optionalString stdenv.hostPlatform.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
-
''
-
)
-
+ lib.optionalString stdenv.hostPlatform.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
-
ln -fs ${libiconv}/lib/libiconv.dylib $(dirname $exe)/libiconv.dylib
-
install_name_tool -change /usr/lib/libiconv.2.dylib @executable_path/libiconv.dylib $exe
-
done
-
-
for file in $(find "$out" -name setup-config); do
-
substituteInPlace $file --replace /usr/bin/ranlib "$(type -P ranlib)"
-
done
-
''
-
+ 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
-
# `-f` because e.g. musl bindist does not have this file.
-
rm -f $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}.
-
'';
-
-
# GHC cannot currently produce outputs that are ready for `-pie` linking.
-
# Thus, disable `pie` hardening, otherwise `recompile with -fPIE` errors appear.
-
# See:
-
# * https://github.com/NixOS/nixpkgs/issues/129247
-
# * https://gitlab.haskell.org/ghc/ghc/-/issues/19580
-
hardeningDisable = [ "pie" ];
-
-
doInstallCheck = true;
-
installCheckPhase = ''
-
# Sanity check, can ghc create executables?
-
cd $TMP
-
mkdir test-ghc; cd test-ghc
-
cat > main.hs << EOF
-
{-# LANGUAGE TemplateHaskell #-}
-
module Main where
-
main = putStrLn \$([|"yes"|])
-
EOF
-
env -i $out/bin/ghc --make main.hs || exit 1
-
echo compilation ok
-
[ $(./main) == "yes" ]
-
'';
-
-
passthru = {
-
targetPrefix = "";
-
enableShared = true;
-
-
inherit llvmPackages;
-
-
# Our Cabal compiler name
-
haskellCompilerName = "ghc-${version}";
-
}
-
# We duplicate binDistUsed here since we have a sensible default even if no bindist is available,
-
# this makes sure that getting the `meta` attribute doesn't throw even on unsupported platforms.
-
// lib.optionalAttrs (ghcBinDists.${distSetName}.${stdenv.hostPlatform.system}.isHadrian or false) {
-
# Normal GHC derivations expose the hadrian derivation used to build them
-
# here. In the case of bindists we just make sure that the attribute exists,
-
# as it is used for checking if a GHC derivation has been built with hadrian.
-
# The isHadrian mechanism will become obsolete with GHCs that use hadrian
-
# exclusively, i.e. 9.6 (and 9.4?).
-
hadrian = null;
-
};
-
-
meta = rec {
-
homepage = "http://haskell.org/ghc";
-
description = "Glasgow Haskell Compiler";
-
license = lib.licenses.bsd3;
-
# HACK: since we can't encode the libc / abi in platforms, we need
-
# to make the platform list dependent on the evaluation platform
-
# in order to avoid eval errors with musl which supports less
-
# platforms than the default libcs (i. e. glibc / libSystem).
-
# This is done for the benefit of Hydra, so `packagePlatforms`
-
# won't return any platforms that would cause an evaluation
-
# failure for `pkgsMusl.haskell.compiler.ghc8107Binary`, as
-
# long as the evaluator runs on a platform that supports
-
# `pkgsMusl`.
-
platforms = builtins.attrNames ghcBinDists.${distSetName};
-
maintainers = with lib.maintainers; [ ];
-
teams = [ lib.teams.haskell ];
-
};
-
}
-681
pkgs/development/compilers/ghc/8.10.7.nix
···
-
let
-
version = "8.10.7";
-
in
-
-
{
-
lib,
-
stdenv,
-
pkgsBuildTarget,
-
pkgsHostTarget,
-
buildPackages,
-
targetPackages,
-
-
# build-tools
-
bootPkgs,
-
autoreconfHook,
-
autoconf,
-
automake,
-
coreutils,
-
fetchpatch,
-
fetchurl,
-
perl,
-
python3,
-
m4,
-
sphinx,
-
xattr,
-
autoSignDarwinBinariesHook,
-
bash,
-
-
libiconv ? null,
-
ncurses,
-
-
# GHC can be built with system libffi or a bundled one.
-
# we explicitly use libffi-3.3 here because 3.4 removes a flag that causes
-
# problems for ghc-8.10.7's RTS. See #324384.
-
# Save for aarch_darwin since libffi-3.3 is broken there but the issue isn't present anyway
-
libffi ? null,
-
libffi_3_3 ? null,
-
-
useLLVM ? !(import ./common-have-ncg.nix { inherit lib stdenv version; }),
-
# LLVM is conceptually a run-time-only dependency, but for
-
# non-x86, we need LLVM to bootstrap later stages, so it becomes a
-
# build-time dependency too.
-
buildTargetLlvmPackages,
-
llvmPackages,
-
-
# If enabled, GHC will be built with the GPL-free but slower integer-simple
-
# library instead of the faster but GPLed integer-gmp library.
-
enableIntegerSimple ?
-
!(lib.meta.availableOn stdenv.hostPlatform gmp && lib.meta.availableOn stdenv.targetPlatform gmp),
-
gmp,
-
-
# If enabled, use -fPIC when compiling static libs.
-
enableRelocatedStaticLibs ? stdenv.targetPlatform != stdenv.hostPlatform,
-
-
# Exceeds Hydra output limit (at the time of writing ~3GB) when cross compiled to riscv64.
-
# A riscv64 cross-compiler fits into the limit comfortably.
-
enableProfiledLibs ? !stdenv.hostPlatform.isRiscV64,
-
-
# Whether to build dynamic libs for the standard library (on the target
-
# platform). Static libs are always built.
-
enableShared ? !stdenv.targetPlatform.isWindows && !stdenv.targetPlatform.useiOSPrebuilt,
-
-
# Whether to build terminfo.
-
enableTerminfo ?
-
!(
-
stdenv.targetPlatform.isWindows
-
# terminfo can't be built for cross
-
|| (stdenv.buildPlatform != stdenv.hostPlatform)
-
|| (stdenv.hostPlatform != stdenv.targetPlatform)
-
),
-
-
# Enable NUMA support in RTS
-
enableNuma ? lib.meta.availableOn stdenv.targetPlatform numactl,
-
numactl,
-
-
# What flavour to build. An empty string indicates no
-
# specific flavour and falls back to ghc default values.
-
ghcFlavour ? lib.optionalString (stdenv.targetPlatform != stdenv.hostPlatform) (
-
if useLLVM then "perf-cross" else "perf-cross-ncg"
-
),
-
-
# Whether to build sphinx documentation.
-
enableDocs ? (
-
# Docs disabled if we are building on musl because it's a large task to keep
-
# all `sphinx` dependencies building in this environment.
-
!stdenv.buildPlatform.isMusl
-
),
-
-
enableHaddockProgram ?
-
# Disabled for cross; see note [HADDOCK_DOCS].
-
(stdenv.buildPlatform == stdenv.hostPlatform && stdenv.targetPlatform == stdenv.hostPlatform),
-
-
# Whether to disable the large address space allocator
-
# necessary fix for iOS: https://www.reddit.com/r/haskell/comments/4ttdz1/building_an_osxi386_to_iosarm64_cross_compiler/d5qvd67/
-
disableLargeAddressSpace ? stdenv.targetPlatform.isiOS,
-
-
# Whether to build an unregisterised version of GHC.
-
# GHC will normally auto-detect whether it can do a registered build, but this
-
# option will force it to do an unregistered build when set to true.
-
# See https://gitlab.haskell.org/ghc/ghc/-/wikis/building/unregisterised
-
enableUnregisterised ? false,
-
}@args:
-
-
assert !enableIntegerSimple -> gmp != null;
-
-
# Cross cannot currently build the `haddock` program for silly reasons,
-
# see note [HADDOCK_DOCS].
-
assert
-
(stdenv.buildPlatform != stdenv.hostPlatform || stdenv.targetPlatform != stdenv.hostPlatform)
-
-> !enableHaddockProgram;
-
-
# GHC does not support building when all 3 platforms are different.
-
assert stdenv.buildPlatform == stdenv.hostPlatform || stdenv.hostPlatform == stdenv.targetPlatform;
-
-
let
-
inherit (stdenv) buildPlatform hostPlatform targetPlatform;
-
-
# TODO(@Ericson2314) Make unconditional
-
targetPrefix = lib.optionalString (targetPlatform != hostPlatform) "${targetPlatform.config}-";
-
-
buildMK = ''
-
BuildFlavour = ${ghcFlavour}
-
ifneq \"\$(BuildFlavour)\" \"\"
-
include mk/flavours/\$(BuildFlavour).mk
-
endif
-
BUILD_SPHINX_HTML = ${if enableDocs then "YES" else "NO"}
-
BUILD_SPHINX_PDF = NO
-
-
WITH_TERMINFO = ${if enableTerminfo then "YES" else "NO"}
-
''
-
+
-
# Note [HADDOCK_DOCS]:
-
# Unfortunately currently `HADDOCK_DOCS` controls both whether the `haddock`
-
# program is built (which we generally always want to have a complete GHC install)
-
# and whether it is run on the GHC sources to generate hyperlinked source code
-
# (which is impossible for cross-compilation); see:
-
# https://gitlab.haskell.org/ghc/ghc/-/issues/20077
-
# This implies that currently a cross-compiled GHC will never have a `haddock`
-
# program, so it can never generate haddocks for any packages.
-
# If this is solved in the future, we'd like to unconditionally
-
# build the haddock program (removing the `enableHaddockProgram` option).
-
''
-
HADDOCK_DOCS = ${if enableHaddockProgram then "YES" else "NO"}
-
# Build haddocks for boot packages with hyperlinking
-
EXTRA_HADDOCK_OPTS += --hyperlinked-source --quickjump
-
-
DYNAMIC_GHC_PROGRAMS = ${if enableShared then "YES" else "NO"}
-
INTEGER_LIBRARY = ${if enableIntegerSimple then "integer-simple" else "integer-gmp"}
-
''
-
+ lib.optionalString (targetPlatform != hostPlatform) ''
-
Stage1Only = ${if targetPlatform.system == hostPlatform.system then "NO" else "YES"}
-
CrossCompilePrefix = ${targetPrefix}
-
''
-
+ lib.optionalString (!enableProfiledLibs) ''
-
BUILD_PROF_LIBS = NO
-
''
-
+ lib.optionalString enableRelocatedStaticLibs ''
-
GhcLibHcOpts += -fPIC
-
GhcRtsHcOpts += -fPIC
-
''
-
+ lib.optionalString targetPlatform.useAndroidPrebuilt ''
-
EXTRA_CC_OPTS += -std=gnu99
-
''
-
# While split sections are now enabled by default in ghc 8.8 for windows,
-
# they seem to lead to `too many sections` errors when building base for
-
# profiling.
-
+ lib.optionalString targetPlatform.isWindows ''
-
SplitSections = NO
-
'';
-
-
# Splicer will pull out correct variations
-
libDeps =
-
platform:
-
lib.optional enableTerminfo ncurses
-
++ [ args.${libffi_name} ]
-
++ lib.optional (!enableIntegerSimple) gmp
-
++ lib.optional (platform.libc != "glibc" && !targetPlatform.isWindows) libiconv;
-
-
# TODO(@sternenseemann): is buildTarget LLVM unnecessary?
-
# GHC doesn't seem to have {LLC,OPT}_HOST
-
toolsForTarget = [
-
pkgsBuildTarget.targetPackages.stdenv.cc
-
]
-
++ lib.optional useLLVM buildTargetLlvmPackages.llvm;
-
-
buildCC = buildPackages.stdenv.cc;
-
targetCC = builtins.head toolsForTarget;
-
installCC = pkgsHostTarget.targetPackages.stdenv.cc;
-
-
# toolPath calculates the absolute path to the name tool associated with a
-
# given `stdenv.cc` derivation, i.e. it picks the correct derivation to take
-
# the tool from (cc, cc.bintools, cc.bintools.bintools) and adds the correct
-
# subpath of the tool.
-
toolPath =
-
name: cc:
-
let
-
tools =
-
{
-
"cc" = cc;
-
"c++" = cc;
-
as = cc.bintools;
-
-
ar = cc.bintools;
-
ranlib = cc.bintools;
-
nm = cc.bintools;
-
readelf = cc.bintools;
-
objdump = cc.bintools;
-
-
ld = cc.bintools;
-
"ld.gold" = cc.bintools;
-
-
otool = cc.bintools.bintools;
-
-
# GHC needs install_name_tool on all darwin platforms. The same one can
-
# be used on both platforms. It is safe to use with linker-generated
-
# signatures because it will update the signatures automatically after
-
# modifying the target binary.
-
install_name_tool = cc.bintools.bintools;
-
-
# strip on darwin is wrapped to enable deterministic mode.
-
strip =
-
# TODO(@sternenseemann): also use wrapper if linker == "bfd" or "gold"
-
if stdenv.targetPlatform.isDarwin then cc.bintools else cc.bintools.bintools;
-
-
# clang is used as an assembler on darwin with the LLVM backend
-
clang = cc;
-
}
-
.${name};
-
in
-
"${tools}/bin/${tools.targetPrefix}${name}";
-
-
# Use gold either following the default, or to avoid the BFD linker due to some bugs / perf issues.
-
# But we cannot avoid BFD when using musl libc due to https://sourceware.org/bugzilla/show_bug.cgi?id=23856
-
# see #84670 and #49071 for more background.
-
useLdGold =
-
targetPlatform.linker == "gold"
-
|| (
-
targetPlatform.linker == "bfd"
-
&& (targetCC.bintools.bintools.hasGold or false)
-
&& !targetPlatform.isMusl
-
);
-
-
# Makes debugging easier to see which variant is at play in `nix-store -q --tree`.
-
variantSuffix = lib.concatStrings [
-
(lib.optionalString stdenv.hostPlatform.isMusl "-musl")
-
(lib.optionalString enableIntegerSimple "-integer-simple")
-
];
-
-
libffi_name =
-
if stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isAarch64 then "libffi" else "libffi_3_3";
-
-
# These libraries are library dependencies of the standard libraries bundled
-
# by GHC (core libs) users will link their compiled artifacts again. Thus,
-
# they should be taken from targetPackages.
-
#
-
# We need to use pkgsHostTarget if we are cross compiling a native GHC compiler,
-
# though (when native compiling GHC, pkgsHostTarget == targetPackages):
-
#
-
# 1. targetPackages would be empty(-ish) in this situation since we can't
-
# execute cross compiled compilers in order to obtain the libraries
-
# that would be in targetPackages.
-
# 2. pkgsHostTarget is fine to use since hostPlatform == targetPlatform in this
-
# situation.
-
# 3. The core libs used by the final GHC (stage 2) for user artifacts are also
-
# used to build stage 2 GHC itself, i.e. the core libs are both host and
-
# target.
-
targetLibs =
-
let
-
basePackageSet = if hostPlatform != targetPlatform then targetPackages else pkgsHostTarget;
-
in
-
{
-
inherit (basePackageSet) gmp ncurses numactl;
-
# dynamic inherits are not possible in Nix
-
libffi = basePackageSet.${libffi_name};
-
};
-
-
in
-
-
stdenv.mkDerivation (
-
rec {
-
inherit version;
-
pname = "${targetPrefix}ghc${variantSuffix}";
-
-
src = fetchurl {
-
url = "https://downloads.haskell.org/ghc/${version}/ghc-${version}-src.tar.xz";
-
sha256 = "e3eef6229ce9908dfe1ea41436befb0455fefb1932559e860ad4c606b0d03c9d";
-
};
-
-
enableParallelBuilding = true;
-
-
outputs = [
-
"out"
-
"doc"
-
];
-
-
patches = [
-
# Fix docs build with sphinx >= 6.0
-
# https://gitlab.haskell.org/ghc/ghc/-/issues/22766
-
(fetchpatch {
-
name = "ghc-docs-sphinx-6.0.patch";
-
url = "https://gitlab.haskell.org/ghc/ghc/-/commit/10e94a556b4f90769b7fd718b9790d58ae566600.patch";
-
sha256 = "0kmhfamr16w8gch0lgln2912r8aryjky1hfcda3jkcwa5cdzgjdv";
-
})
-
-
# Determine size of time related types using hsc2hs instead of assuming CLong.
-
# Prevents failures when e.g. stat(2)ing on 32bit systems with 64bit time_t etc.
-
# https://github.com/haskell/ghcup-hs/issues/1107
-
# https://gitlab.haskell.org/ghc/ghc/-/issues/25095
-
# Note that in normal situations this shouldn't be the case since nixpkgs
-
# doesn't set -D_FILE_OFFSET_BITS=64 and friends (yet).
-
(fetchpatch {
-
name = "unix-fix-ctimeval-size-32-bit.patch";
-
url = "https://github.com/haskell/unix/commit/8183e05b97ce870dd6582a3677cc82459ae566ec.patch";
-
sha256 = "17q5yyigqr5kxlwwzb95sx567ysfxlw6bp3j4ji20lz0947aw6gv";
-
stripLen = 1;
-
extraPrefix = "libraries/unix/";
-
})
-
-
# See upstream patch at
-
# https://gitlab.haskell.org/ghc/ghc/-/merge_requests/4885. Since we build
-
# from source distributions, the auto-generated configure script needs to be
-
# patched as well, therefore we use an in-tree patch instead of pulling the
-
# upstream patch. Don't forget to check backport status of the upstream patch
-
# when adding new GHC releases in nixpkgs.
-
./respect-ar-path.patch
-
-
# fix hyperlinked haddock sources: https://github.com/haskell/haddock/pull/1482
-
(fetchpatch {
-
url = "https://patch-diff.githubusercontent.com/raw/haskell/haddock/pull/1482.patch";
-
sha256 = "sha256-8w8QUCsODaTvknCDGgTfFNZa8ZmvIKaKS+2ZJZ9foYk=";
-
extraPrefix = "utils/haddock/";
-
stripLen = 1;
-
})
-
-
# cabal passes incorrect --host= when cross-compiling
-
# https://github.com/haskell/cabal/issues/5887
-
(fetchpatch {
-
url = "https://raw.githubusercontent.com/input-output-hk/haskell.nix/122bd81150386867da07fdc9ad5096db6719545a/overlays/patches/ghc/cabal-host.patch";
-
sha256 = "sha256:0yd0sajgi24sc1w5m55lkg2lp6kfkgpp3lgija2c8y3cmkwfpdc1";
-
})
-
-
# In order to build ghcjs packages, the Cabal of the ghc used for the ghcjs
-
# needs to be patched. Ref https://github.com/haskell/cabal/pull/7575
-
(fetchpatch {
-
url = "https://github.com/haskell/cabal/commit/369c4a0a54ad08a9e6b0d3bd303fedd7b5e5a336.patch";
-
sha256 = "120f11hwyaqa0pq9g5l1300crqij49jg0rh83hnp9sa49zfdwx1n";
-
stripLen = 3;
-
extraPrefix = "libraries/Cabal/Cabal/";
-
})
-
-
# We need to be able to set AR_STAGE0 and LD_STAGE0 when cross-compiling
-
(fetchpatch {
-
url = "https://gitlab.haskell.org/ghc/ghc/-/commit/8f7dd5710b80906ea7a3e15b7bb56a883a49fed8.patch";
-
hash = "sha256-C636Nq2U8YOG/av7XQmG3L1rU0bmC9/7m7Hty5pm5+s=";
-
})
-
-
# Backport part of <https://gitlab.haskell.org/ghc/ghc/-/merge_requests/7111> to 8.10.7
-
# The change we are interested in is that Cabal no longer sets include-dirs
-
# for the GHCi library delegating to the system search path or (in our case)
-
# cc-wrapper. Without this patch, the target libffi ends up in there (which
-
# we provide via --with-ffi-includes) which breaks bootstrapping e.g. when
-
# cross compiling GHC. Without include-dirs, cc-wrapper and splicing will
-
# correctly pick the suitable libffi out of the build environment.
-
(fetchpatch {
-
name = "ghci-no-libffi-include.patch";
-
url = "https://gitlab.haskell.org/ghc/ghc/-/commit/b2721819f391ab49871271283f32df54810c4387.patch";
-
sha256 = "1rmv3132xhxbka97v0rx7r6larx5f5nnvs4mgm9q3rmgpjyd1vf9";
-
includes = [ "libraries/ghci/ghci.cabal.in" ];
-
})
-
-
# Correctly record libnuma's library and include directories in the
-
# package db. This fixes linking whenever stdenv and propagation won't
-
# quite pass the correct -L flags to the linker, e.g. when using GHC
-
# outside of stdenv/nixpkgs or build->build compilation in pkgsStatic.
-
./ghc-8.10-9.2-rts-package-db-libnuma-dirs.patch
-
]
-
++ lib.optionals stdenv.hostPlatform.isDarwin [
-
# Make Block.h compile with c++ compilers. Remove with the next release
-
(fetchpatch {
-
url = "https://gitlab.haskell.org/ghc/ghc/-/commit/97d0b0a367e4c6a52a17c3299439ac7de129da24.patch";
-
sha256 = "0r4zjj0bv1x1m2dgxp3adsf2xkr94fjnyj1igsivd9ilbs5ja0b5";
-
})
-
]
-
++ lib.optionals (stdenv.targetPlatform.isDarwin && stdenv.targetPlatform.isAarch64) [
-
# Prevent the paths module from emitting symbols that we don't use
-
# when building with separate outputs.
-
#
-
# These cause problems as they're not eliminated by GHC's dead code
-
# elimination on aarch64-darwin. (see
-
# https://github.com/NixOS/nixpkgs/issues/140774 for details).
-
./Cabal-3.2-3.4-paths-fix-cycle-aarch64-darwin.patch
-
];
-
-
postPatch = "patchShebangs .";
-
-
# GHC is a bit confused on its cross terminology.
-
# TODO(@sternenseemann): investigate coreutils dependencies and pass absolute paths
-
preConfigure = ''
-
for env in $(env | grep '^TARGET_' | sed -E 's|\+?=.*||'); do
-
export "''${env#TARGET_}=''${!env}"
-
done
-
# Stage0 (build->build) which builds stage 1
-
export GHC="${bootPkgs.ghc}/bin/ghc"
-
# GHC is a bit confused on its cross terminology, as these would normally be
-
# the *host* tools.
-
export CC="${toolPath "cc" targetCC}"
-
export CXX="${toolPath "c++" targetCC}"
-
# Use gold to work around https://sourceware.org/bugzilla/show_bug.cgi?id=16177
-
export LD="${toolPath "ld${lib.optionalString useLdGold ".gold"}" targetCC}"
-
export AS="${toolPath "as" targetCC}"
-
export AR="${toolPath "ar" targetCC}"
-
export NM="${toolPath "nm" targetCC}"
-
export RANLIB="${toolPath "ranlib" targetCC}"
-
export READELF="${toolPath "readelf" targetCC}"
-
export STRIP="${toolPath "strip" targetCC}"
-
export OBJDUMP="${toolPath "objdump" targetCC}"
-
''
-
+ lib.optionalString (stdenv.targetPlatform.linker == "cctools") ''
-
export OTOOL="${toolPath "otool" targetCC}"
-
export INSTALL_NAME_TOOL="${toolPath "install_name_tool" targetCC}"
-
''
-
+ lib.optionalString useLLVM ''
-
export LLC="${lib.getBin buildTargetLlvmPackages.llvm}/bin/llc"
-
export OPT="${lib.getBin buildTargetLlvmPackages.llvm}/bin/opt"
-
''
-
+ lib.optionalString (useLLVM && stdenv.targetPlatform.isDarwin) ''
-
# LLVM backend on Darwin needs clang: https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/codegens.html#llvm-code-generator-fllvm
-
# The executable we specify via $CLANG is used as an assembler (exclusively, it seems, but this isn't
-
# clarified in any user facing documentation). As such, it'll be called on assembly produced by $CC
-
# which usually comes from the darwin stdenv. To prevent a situation where $CLANG doesn't understand
-
# the assembly it is given, we need to make sure that it matches the LLVM version of $CC if possible.
-
# It is unclear (at the time of writing 2024-09-01) whether $CC should match the LLVM version we use
-
# for llc and opt which would require using a custom darwin stdenv for targetCC.
-
export CLANG="${
-
if targetCC.isClang then
-
toolPath "clang" targetCC
-
else
-
"${buildTargetLlvmPackages.clang}/bin/${buildTargetLlvmPackages.clang.targetPrefix}clang"
-
}"
-
''
-
+ ''
-
# No need for absolute paths since these tools only need to work during the build
-
export CC_STAGE0="$CC_FOR_BUILD"
-
export LD_STAGE0="$LD_FOR_BUILD"
-
export AR_STAGE0="$AR_FOR_BUILD"
-
-
echo -n "${buildMK}" > mk/build.mk
-
sed -i -e 's|-isysroot /Developer/SDKs/MacOSX10.5.sdk||' configure
-
''
-
+ lib.optionalString (!stdenv.hostPlatform.isDarwin) ''
-
export NIX_LDFLAGS+=" -rpath $out/lib/ghc-${version}"
-
''
-
+ lib.optionalString stdenv.hostPlatform.isDarwin ''
-
export NIX_LDFLAGS+=" -no_dtrace_dof"
-
-
# GHC tries the host xattr /usr/bin/xattr by default which fails since it expects python to be 2.7
-
export XATTR=${lib.getBin xattr}/bin/xattr
-
''
-
+ lib.optionalString targetPlatform.useAndroidPrebuilt ''
-
sed -i -e '5i ,("armv7a-unknown-linux-androideabi", ("e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64", "cortex-a8", ""))' llvm-targets
-
''
-
+ lib.optionalString targetPlatform.isMusl ''
-
echo "patching llvm-targets for musl targets..."
-
echo "Cloning these existing '*-linux-gnu*' targets:"
-
grep linux-gnu llvm-targets | sed 's/^/ /'
-
echo "(go go gadget sed)"
-
sed -i 's,\(^.*linux-\)gnu\(.*\)$,\0\n\1musl\2,' llvm-targets
-
echo "llvm-targets now contains these '*-linux-musl*' targets:"
-
grep linux-musl llvm-targets | sed 's/^/ /'
-
-
echo "And now patching to preserve '-musleabi' as done with '-gnueabi'"
-
# (aclocal.m4 is actual source, but patch configure as well since we don't re-gen)
-
for x in configure aclocal.m4; do
-
substituteInPlace $x \
-
--replace '*-android*|*-gnueabi*)' \
-
'*-android*|*-gnueabi*|*-musleabi*)'
-
done
-
'';
-
-
# Although it is usually correct to pass --host, we don't do that here because
-
# GHC's usage of build, host, and target is non-standard.
-
# See https://gitlab.haskell.org/ghc/ghc/-/wikis/building/cross-compiling
-
# TODO(@Ericson2314): Always pass "--target" and always prefix.
-
configurePlatforms = [
-
"build"
-
]
-
++ lib.optional (buildPlatform != hostPlatform || targetPlatform != hostPlatform) "target";
-
-
# `--with` flags for libraries needed for RTS linker
-
configureFlags = [
-
"--datadir=$doc/share/doc/ghc"
-
]
-
++ lib.optionals enableTerminfo [
-
"--with-curses-includes=${lib.getDev targetLibs.ncurses}/include"
-
"--with-curses-libraries=${lib.getLib targetLibs.ncurses}/lib"
-
]
-
++ lib.optionals (args.${libffi_name} != null) [
-
"--with-system-libffi"
-
"--with-ffi-includes=${targetLibs.libffi.dev}/include"
-
"--with-ffi-libraries=${targetLibs.libffi.out}/lib"
-
]
-
++ lib.optionals (targetPlatform == hostPlatform && !enableIntegerSimple) [
-
"--with-gmp-includes=${targetLibs.gmp.dev}/include"
-
"--with-gmp-libraries=${targetLibs.gmp.out}/lib"
-
]
-
++
-
lib.optionals
-
(targetPlatform == hostPlatform && hostPlatform.libc != "glibc" && !targetPlatform.isWindows)
-
[
-
"--with-iconv-includes=${libiconv}/include"
-
"--with-iconv-libraries=${libiconv}/lib"
-
]
-
++ lib.optionals (targetPlatform != hostPlatform) [
-
"--enable-bootstrap-with-devel-snapshot"
-
]
-
++ lib.optionals useLdGold [
-
"CFLAGS=-fuse-ld=gold"
-
"CONF_GCC_LINKER_OPTS_STAGE1=-fuse-ld=gold"
-
"CONF_GCC_LINKER_OPTS_STAGE2=-fuse-ld=gold"
-
]
-
++ lib.optionals (disableLargeAddressSpace) [
-
"--disable-large-address-space"
-
]
-
++ lib.optionals enableNuma [
-
"--enable-numa"
-
"--with-libnuma-includes=${lib.getDev targetLibs.numactl}/include"
-
"--with-libnuma-libraries=${lib.getLib targetLibs.numactl}/lib"
-
]
-
++ lib.optionals enableUnregisterised [
-
"--enable-unregisterised"
-
];
-
-
# Make sure we never relax`$PATH` and hooks support for compatibility.
-
strictDeps = true;
-
-
# Don’t add -liconv to LDFLAGS automatically so that GHC will add it itself.
-
dontAddExtraLibs = true;
-
-
nativeBuildInputs = [
-
perl
-
autoreconfHook
-
autoconf
-
automake
-
m4
-
python3
-
bootPkgs.alex
-
bootPkgs.happy
-
bootPkgs.hscolour
-
bootPkgs.ghc-settings-edit
-
]
-
++ lib.optionals (stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isAarch64) [
-
autoSignDarwinBinariesHook
-
]
-
++ lib.optionals enableDocs [
-
sphinx
-
];
-
-
# Everything the stage0 compiler needs to build stage1: CC, bintools, extra libs.
-
# See also GHC, {CC,LD,AR}_STAGE0 in preConfigure.
-
depsBuildBuild = [
-
# N.B. We do not declare bootPkgs.ghc in any of the stdenv.mkDerivation
-
# dependency lists to prevent the bintools setup hook from adding ghc's
-
# lib directory to the linker flags. Instead we tell configure about it
-
# via the GHC environment variable.
-
buildCC
-
# stage0 builds terminfo unconditionally, so we always need ncurses
-
ncurses
-
];
-
# For building runtime libs
-
depsBuildTarget = toolsForTarget;
-
-
# Prevent stage0 ghc from leaking into the final result. This was an issue
-
# with GHC 9.6.
-
disallowedReferences = [
-
bootPkgs.ghc
-
];
-
-
buildInputs = [ bash ] ++ (libDeps hostPlatform);
-
-
# stage1 GHC doesn't need to link against libnuma, so it's target specific
-
depsTargetTarget = map lib.getDev (
-
libDeps targetPlatform ++ lib.optionals enableNuma [ targetLibs.numactl ]
-
);
-
depsTargetTargetPropagated = map (lib.getOutput "out") (
-
libDeps targetPlatform ++ lib.optionals enableNuma [ targetLibs.numactl ]
-
);
-
-
# required, because otherwise all symbols from HSffi.o are stripped, and
-
# that in turn causes GHCi to abort
-
stripDebugFlags = [ "-S" ] ++ lib.optional (!targetPlatform.isDarwin) "--keep-file-symbols";
-
-
checkTarget = "test";
-
-
# GHC cannot currently produce outputs that are ready for `-pie` linking.
-
# Thus, disable `pie` hardening, otherwise `recompile with -fPIE` errors appear.
-
# See:
-
# * https://github.com/NixOS/nixpkgs/issues/129247
-
# * https://gitlab.haskell.org/ghc/ghc/-/issues/19580
-
hardeningDisable = [
-
"format"
-
"pie"
-
];
-
-
# big-parallel allows us to build with more than 2 cores on
-
# Hydra which already warrants a significant speedup
-
requiredSystemFeatures = [ "big-parallel" ];
-
-
postInstall = ''
-
settingsFile="$out/lib/${targetPrefix}${passthru.haskellCompilerName}/settings"
-
-
# Make the installed GHC use the host->target tools.
-
ghc-settings-edit "$settingsFile" \
-
"C compiler command" "${toolPath "cc" installCC}" \
-
"Haskell CPP command" "${toolPath "cc" installCC}" \
-
"C++ compiler command" "${toolPath "c++" installCC}" \
-
"ld command" "${toolPath "ld${lib.optionalString useLdGold ".gold"}" installCC}" \
-
"Merge objects command" "${toolPath "ld${lib.optionalString useLdGold ".gold"}" installCC}" \
-
"ar command" "${toolPath "ar" installCC}" \
-
"ranlib command" "${toolPath "ranlib" installCC}"
-
''
-
+ lib.optionalString (stdenv.targetPlatform.linker == "cctools") ''
-
ghc-settings-edit "$settingsFile" \
-
"otool command" "${toolPath "otool" installCC}" \
-
"install_name_tool command" "${toolPath "install_name_tool" installCC}"
-
''
-
+ lib.optionalString useLLVM ''
-
ghc-settings-edit "$settingsFile" \
-
"LLVM llc command" "${lib.getBin llvmPackages.llvm}/bin/llc" \
-
"LLVM opt command" "${lib.getBin llvmPackages.llvm}/bin/opt"
-
''
-
+ lib.optionalString (useLLVM && stdenv.targetPlatform.isDarwin) ''
-
ghc-settings-edit "$settingsFile" \
-
"LLVM clang command" "${
-
# See comment for CLANG in preConfigure
-
if installCC.isClang then
-
toolPath "clang" installCC
-
else
-
"${llvmPackages.clang}/bin/${llvmPackages.clang.targetPrefix}clang"
-
}"
-
''
-
+ ''
-
-
# Install the bash completion file.
-
install -D -m 444 utils/completion/ghc.bash $out/share/bash-completion/completions/${targetPrefix}ghc
-
'';
-
-
passthru = {
-
inherit bootPkgs targetPrefix;
-
-
inherit llvmPackages;
-
inherit enableShared;
-
-
# This is used by the haskell builder to query
-
# the presence of the haddock program.
-
hasHaddock = enableHaddockProgram;
-
-
# Our Cabal compiler name
-
haskellCompilerName = "ghc-${version}";
-
-
bootstrapAvailable = lib.meta.availableOn stdenv.buildPlatform bootPkgs.ghc;
-
};
-
-
meta = {
-
homepage = "http://haskell.org/ghc";
-
description = "Glasgow Haskell Compiler";
-
maintainers = with lib.maintainers; [
-
guibou
-
];
-
teams = [ lib.teams.haskell ];
-
timeout = 24 * 3600;
-
platforms = lib.platforms.all;
-
inherit (bootPkgs.ghc.meta) license;
-
};
-
-
}
-
// lib.optionalAttrs targetPlatform.useAndroidPrebuilt {
-
dontStrip = true;
-
dontPatchELF = true;
-
noAuditTmpdir = true;
-
}
-
)
-99
pkgs/development/compilers/ghc/Cabal-3.2-3.4-paths-fix-cycle-aarch64-darwin.patch
···
-
diff --git a/Cabal/Distribution/Simple/Build/PathsModule.hs b/Cabal/Distribution/Simple/Build/PathsModule.hs
-
index 5e660e8d6..1ae603c94 100644
-
--- a/libraries/Cabal/Cabal/Distribution/Simple/Build/PathsModule.hs
-
+++ b/libraries/Cabal/Cabal/Distribution/Simple/Build/PathsModule.hs
-
@@ -37,6 +37,9 @@ import System.FilePath ( pathSeparator )
-
-- * Building Paths_<pkg>.hs
-
-- ------------------------------------------------------------
-
-
+splitPath :: FilePath -> [ String ]
-
+splitPath = unintersperse pathSeparator
-
+
-
generatePathsModule :: PackageDescription -> LocalBuildInfo -> ComponentLocalBuildInfo -> String
-
generatePathsModule pkg_descr lbi clbi =
-
let pragmas =
-
@@ -78,12 +81,44 @@ generatePathsModule pkg_descr lbi clbi =
-
"import System.Environment (getExecutablePath)\n"
-
| otherwise = ""
-
-
+ dirs = [ (flat_libdir, "LibDir")
-
+ , (flat_dynlibdir, "DynLibDir")
-
+ , (flat_datadir, "DataDir")
-
+ , (flat_libexecdir, "LibexecDir")
-
+ , (flat_sysconfdir, "SysconfDir") ];
-
+
-
+ shouldEmitPath p
-
+ | (splitPath flat_prefix) `isPrefixOf` (splitPath flat_bindir) = True
-
+ | (splitPath flat_prefix) `isPrefixOf` (splitPath p) = False
-
+ | otherwise = True
-
+
-
+ shouldEmitDataDir = shouldEmitPath flat_datadir
-
+
-
+ nixEmitPathFn (path, name) = let
-
+ varName = toLower <$> name
-
+ fnName = "get"++name
-
+ in if shouldEmitPath path then
-
+ varName ++ " :: FilePath\n"++
-
+ varName ++ " = " ++ show path ++
-
+ "\n" ++ fnName ++ " :: IO FilePath" ++
-
+ "\n" ++ fnName ++ " = " ++ mkGetEnvOr varName ("return " ++ varName)++"\n"
-
+ else ""
-
+
-
+ absBody = intercalate "\n" $ nixEmitPathFn <$> dirs
-
+
-
+ warnPragma = case filter (not . shouldEmitPath . fst) dirs of
-
+ [] -> ""
-
+ omittedDirs -> "{-# WARNING \"The functions: "++omittedFns++" Have been omitted by the Nix build system.\" #-}"
-
+ where omittedFns = intercalate ", " $ map snd omittedDirs
-
+
-
+ importList = intercalate ", " $ ("get" ++) . snd <$> filter (shouldEmitPath . fst) dirs
-
+
-
header =
-
pragmas++
-
- "module " ++ prettyShow paths_modulename ++ " (\n"++
-
- " version,\n"++
-
- " getBinDir, getLibDir, getDynLibDir, getDataDir, getLibexecDir,\n"++
-
- " getDataFileName, getSysconfDir\n"++
-
+ "module " ++ prettyShow paths_modulename ++ " " ++ warnPragma ++ " (\n"++
-
+ " version, getBinDir,\n"++
-
+ (if shouldEmitDataDir then " getDataFileName, \n" else "\n")++
-
+ " " ++ importList ++"\n"++
-
" ) where\n"++
-
"\n"++
-
foreign_imports++
-
@@ -136,26 +171,18 @@ generatePathsModule pkg_descr lbi clbi =
-
"\n"++
-
filename_stuff
-
| absolute =
-
- "\nbindir, libdir, dynlibdir, datadir, libexecdir, sysconfdir :: FilePath\n"++
-
+ "\nbindir :: FilePath\n"++
-
"\nbindir = " ++ show flat_bindir ++
-
- "\nlibdir = " ++ show flat_libdir ++
-
- "\ndynlibdir = " ++ show flat_dynlibdir ++
-
- "\ndatadir = " ++ show flat_datadir ++
-
- "\nlibexecdir = " ++ show flat_libexecdir ++
-
- "\nsysconfdir = " ++ show flat_sysconfdir ++
-
"\n"++
-
- "\ngetBinDir, getLibDir, getDynLibDir, getDataDir, getLibexecDir, getSysconfDir :: IO FilePath\n"++
-
+ "\ngetBinDir :: IO FilePath\n"++
-
"getBinDir = "++mkGetEnvOr "bindir" "return bindir"++"\n"++
-
- "getLibDir = "++mkGetEnvOr "libdir" "return libdir"++"\n"++
-
- "getDynLibDir = "++mkGetEnvOr "dynlibdir" "return dynlibdir"++"\n"++
-
- "getDataDir = "++mkGetEnvOr "datadir" "return datadir"++"\n"++
-
- "getLibexecDir = "++mkGetEnvOr "libexecdir" "return libexecdir"++"\n"++
-
- "getSysconfDir = "++mkGetEnvOr "sysconfdir" "return sysconfdir"++"\n"++
-
- "\n"++
-
- "getDataFileName :: FilePath -> IO FilePath\n"++
-
- "getDataFileName name = do\n"++
-
- " dir <- getDataDir\n"++
-
- " return (dir ++ "++path_sep++" ++ name)\n"
-
+ absBody ++ "\n"++
-
+ (if shouldEmitDataDir then
-
+ "getDataFileName :: FilePath -> IO FilePath\n"++
-
+ "getDataFileName name = do\n"++
-
+ " dir <- getDataDir\n"++
-
+ " return (dir ++ "++path_sep++" ++ name)\n"
-
+ else "\n")
-
| otherwise =
-
"\nprefix, bindirrel :: FilePath" ++
-
"\nprefix = " ++ show flat_prefix ++
-27
pkgs/development/haskell-modules/configuration-common.nix
···
# https://github.com/serokell/haskell-crypto/issues/25
crypto-sodium = dontCheck super.crypto-sodium;
-
# Polyfill for GHCs from the integer-simple days that don't bundle ghc-bignum
-
ghc-bignum = super.ghc-bignum or self.mkDerivation {
-
pname = "ghc-bignum";
-
version = "1.0";
-
sha256 = "0xl848q8z6qx2bi6xil0d35lra7wshwvysyfblki659d7272b1im";
-
description = "GHC BigNum library";
-
license = lib.licenses.bsd3;
-
# ghc-bignum is not buildable if none of the three backends
-
# is explicitly enabled. We enable Native for now as it doesn't
-
# depend on anything else as opposed to GMP and FFI.
-
# Apply patch which fixes a compilation failure we encountered.
-
# Will need to be kept until we can drop ghc-bignum entirely,
-
# i. e. if GHC 8.10.* and 8.8.* have been removed.
-
configureFlags = [
-
"-f"
-
"Native"
-
];
-
patches = [
-
(fetchpatch {
-
url = "https://gitlab.haskell.org/ghc/ghc/-/commit/08d1588bf38d83140a86817a7a615db486357d4f.patch";
-
sha256 = "sha256-Y9WW0KDQ/qY2L9ObPvh1i/6lxXIlprbxzdSBDfiaMtE=";
-
relative = "libraries/ghc-bignum";
-
})
-
];
-
};
-
# 2021-04-09: too strict time bound
# PR pending https://github.com/zohl/cereal-time/pull/2
cereal-time = doJailbreak super.cereal-time;
···
# 2025-02-06: Allow tasty-quickcheck == 0.11.*
# https://github.com/google/ghc-source-gen/issues/120
ghc-source-gen = doJailbreak super.ghc-source-gen;
-
ghc-source-gen_0_4_5_0 = doJailbreak super.ghc-source-gen_0_4_5_0;
# https://github.com/byteverse/bytebuild/issues/20#issuecomment-2652113837
bytebuild = doJailbreak super.bytebuild;
# https://github.com/haskellari/lattices/issues/132
-230
pkgs/development/haskell-modules/configuration-ghc-8.10.x.nix
···
-
{ pkgs, haskellLib }:
-
-
with haskellLib;
-
-
let
-
inherit (pkgs.stdenv.hostPlatform) isDarwin;
-
inherit (pkgs) lib;
-
in
-
-
self: super: {
-
llvmPackages = pkgs.lib.dontRecurseIntoAttrs self.ghc.llvmPackages;
-
-
# Disable GHC 8.10.x core libraries.
-
array = null;
-
base = null;
-
binary = null;
-
bytestring = null;
-
Cabal = null;
-
containers = null;
-
deepseq = null;
-
directory = null;
-
exceptions = null;
-
filepath = null;
-
ghc-boot = null;
-
ghc-boot-th = null;
-
ghc-compact = null;
-
ghc-heap = null;
-
ghc-prim = null;
-
ghci = null;
-
haskeline = null;
-
hpc = null;
-
integer-gmp = null;
-
libiserv = null;
-
mtl = null;
-
parsec = null;
-
pretty = null;
-
process = null;
-
rts = null;
-
stm = null;
-
template-haskell = null;
-
# GHC only builds terminfo if it is a native compiler
-
terminfo =
-
if pkgs.stdenv.hostPlatform == pkgs.stdenv.buildPlatform then
-
null
-
else
-
doDistribute self.terminfo_0_4_1_7;
-
text = null;
-
time = null;
-
transformers = null;
-
unix = null;
-
# GHC only bundles the xhtml library if haddock is enabled, check if this is
-
# still the case when updating: https://gitlab.haskell.org/ghc/ghc/-/blob/0198841877f6f04269d6050892b98b5c3807ce4c/ghc.mk#L463
-
xhtml = if self.ghc.hasHaddock or true then null else doDistribute self.xhtml_3000_4_0_0;
-
-
# Need the Cabal-syntax-3.6.0.0 fake package for Cabal < 3.8 to allow callPackage and the constraint solver to work
-
Cabal-syntax = self.Cabal-syntax_3_6_0_0;
-
# These core package only exist for GHC >= 9.4. The best we can do is feign
-
# their existence to callPackages, but their is no shim for lower GHC versions.
-
system-cxx-std-lib = null;
-
-
# Becomes a core package in GHC >= 9.8
-
semaphore-compat = doDistribute self.semaphore-compat_1_0_0;
-
-
# only broken for >= 9.6
-
calligraphy = doDistribute (unmarkBroken super.calligraphy);
-
-
# Only required for ghc >= 9.2
-
nothunks = super.nothunks.override {
-
wherefrom-compat = null;
-
};
-
-
# Tests require nothunks < 0.3 (conflicting with Stackage) for GHC < 9.8
-
aeson = dontCheck super.aeson;
-
-
# For GHC < 9.4, some packages need data-array-byte as an extra dependency
-
# For GHC < 9.2, os-string is not required.
-
primitive = addBuildDepends [ self.data-array-byte ] super.primitive;
-
hashable =
-
addBuildDepends
-
[
-
self.data-array-byte
-
self.base-orphans
-
]
-
(
-
super.hashable.override {
-
os-string = null;
-
}
-
);
-
hashable-time = doDistribute (unmarkBroken super.hashable-time);
-
-
# Needs base-orphans for GHC < 9.8 / base < 4.19
-
some = addBuildDepend self.base-orphans super.some;
-
-
# Too strict lower bounds on base
-
primitive-addr = doJailbreak super.primitive-addr;
-
-
# Pick right versions for GHC-specific packages
-
ghc-api-compat = doDistribute (unmarkBroken self.ghc-api-compat_8_10_7);
-
-
# Needs to use ghc-lib due to incompatible GHC
-
ghc-tags = doDistribute self.ghc-tags_1_5;
-
-
# Jailbreak to fix the build.
-
base-noprelude = doJailbreak super.base-noprelude;
-
unliftio-core = doJailbreak super.unliftio-core;
-
-
# Jailbreak to fix the build.
-
brick = doJailbreak super.brick;
-
exact-pi = doJailbreak super.exact-pi;
-
serialise = doJailbreak super.serialise;
-
setlocale = doJailbreak super.setlocale;
-
shellmet = doJailbreak super.shellmet;
-
shower = doJailbreak super.shower;
-
-
# hnix 0.9.0 does not provide an executable for ghc < 8.10, so define completions here for now.
-
hnix = self.generateOptparseApplicativeCompletions [ "hnix" ] (
-
overrideCabal (drv: {
-
# executable is allowed for ghc >= 8.10 and needs repline
-
executableHaskellDepends = drv.executableToolDepends or [ ] ++ [ self.repline ];
-
}) super.hnix
-
);
-
-
haskell-language-server = throw "haskell-language-server dropped support for ghc 8.10 in version 2.3.0.0 please use a newer ghc version or an older nixpkgs version";
-
-
ghc-lib-parser = doDistribute self.ghc-lib-parser_9_2_8_20230729;
-
ghc-lib-parser-ex = doDistribute self.ghc-lib-parser-ex_9_2_1_1;
-
ghc-lib = doDistribute self.ghc-lib_9_2_8_20230729;
-
-
path-io = doJailbreak super.path-io;
-
-
hlint = self.hlint_3_4_1;
-
-
# test suite depends on vcr since hpack >= 0.38.1 which requires GHC2021
-
hpack_0_38_1 = dontCheck super.hpack_0_38_1;
-
-
mime-string = disableOptimization super.mime-string;
-
-
# weeder 2.3.* no longer supports GHC 8.10
-
weeder = doDistribute (doJailbreak self.weeder_2_2_0);
-
# Unnecessarily strict upper bound on lens
-
weeder_2_2_0 = doJailbreak (
-
super.weeder_2_2_0.override {
-
# weeder < 2.6 only supports algebraic-graphs < 0.7
-
# We no longer have matching test deps for algebraic-graphs 0.6.1 in the set
-
algebraic-graphs = dontCheck self.algebraic-graphs_0_6_1;
-
}
-
);
-
-
# Uses haddock placement that isn't supported by the versions of haddock
-
# bundled with GHC < 9.0.
-
wai-extra = dontHaddock super.wai-extra;
-
-
# tar > 0.6 requires os-string which can't be built with bytestring < 0.11
-
tar = overrideCabal (drv: {
-
jailbreak = true;
-
buildDepends = drv.buildDepends or [ ] ++ [
-
self.bytestring-handle
-
];
-
}) self.tar_0_6_0_0;
-
# text-metrics >= 0.3.3 requires GHC2021
-
text-metrics = doDistribute (doJailbreak self.text-metrics_0_3_2);
-
bytestring-handle = unmarkBroken (doDistribute super.bytestring-handle);
-
-
# Doesn't build with 9.0, see https://github.com/yi-editor/yi/issues/1125
-
yi-core = doDistribute (markUnbroken super.yi-core);
-
-
# Temporarily disabled blaze-textual for GHC >= 9.0 causing hackage2nix ignoring it
-
# https://github.com/paul-rouse/mysql-simple/blob/872604f87044ff6d1a240d9819a16c2bdf4ed8f5/Database/MySQL/Internal/Blaze.hs#L4-L10
-
mysql-simple = addBuildDepends [
-
self.blaze-textual
-
] super.mysql-simple;
-
-
taffybar = markUnbroken (doDistribute super.taffybar);
-
-
# https://github.com/fpco/inline-c/issues/127 (recommend to upgrade to Nixpkgs GHC >=9.0)
-
inline-c-cpp = (if isDarwin then dontCheck else x: x) super.inline-c-cpp;
-
-
# Depends on OneTuple for GHC < 9.0
-
universe-base = addBuildDepends [ self.OneTuple ] super.universe-base;
-
-
# Not possible to build in the main GHC 9.0 package set
-
# https://github.com/awakesecurity/spectacle/issues/49
-
spectacle = doDistribute (markUnbroken super.spectacle);
-
-
# doctest-parallel dependency requires newer Cabal
-
regex-tdfa = dontCheck super.regex-tdfa;
-
-
# Unnecessarily strict lower bound on base
-
# https://github.com/mrkkrp/megaparsec/pull/485#issuecomment-1250051823
-
megaparsec = doJailbreak super.megaparsec;
-
-
retrie = dontCheck self.retrie_1_1_0_0;
-
-
# Later versions only support GHC >= 9.2
-
ghc-exactprint = self.ghc-exactprint_0_6_4;
-
-
apply-refact = self.apply-refact_0_9_3_0;
-
-
# Needs OneTuple for ghc < 9.2
-
binary-orphans = addBuildDepends [ self.OneTuple ] super.binary-orphans;
-
-
# 0.4.6.0 only supports >= 9.0
-
ghc-source-gen = doDistribute self.ghc-source-gen_0_4_5_0;
-
-
# No instance for (Show B.Builder) arising from a use of ‘print’
-
http-types = dontCheck super.http-types;
-
-
# Packages which need compat library for GHC < 9.6
-
inherit (lib.mapAttrs (_: addBuildDepends [ self.foldable1-classes-compat ]) super)
-
indexed-traversable
-
these
-
;
-
base-compat-batteries = addBuildDepends [
-
self.foldable1-classes-compat
-
self.OneTuple
-
] super.base-compat-batteries;
-
-
# OneTuple needs hashable (instead of ghc-prim) and foldable1-classes-compat for GHC < 9
-
OneTuple =
-
addBuildDepends
-
[
-
self.foldable1-classes-compat
-
self.base-orphans
-
]
-
(
-
super.OneTuple.override {
-
ghc-prim = self.hashable;
-
}
-
);
-
}
-8
pkgs/development/haskell-modules/configuration-hackage2nix/main.yaml
···
# 2024-12-23: last version to be compatible with Stackage LTS 22/23 (due to data-default)
- diagrams-input < 0.1.4
- extensions < 0.1.0.2 # Incompatible with Cabal < 3.12, the newest extensions version is only needed on ghc 9.10
-
# 2021-11-09: ghc-bignum is bundled starting with 9.0.1; only 1.0 builds with GHCs prior to 9.2.1
-
- ghc-bignum == 1.0
# 2025-07-26: HLS doesn't support hiedb >= 0.7 yet
- hiedb < 0.7
# 2024-08-17: Stackage doesn't contain hnix-store-core >= 0.8 yet, so we need to restrict hnix-store-remote
···
- algebraic-graphs < 0.7 # 2023-08-14: Needed for building weeder < 2.6.0
- ansi-wl-pprint >= 0.6 && < 0.7 # 2025-07-07: used by gren <= 0.5.4
- attoparsec == 0.13.* # 2022-02-23: Needed to compile elm for now
-
- Cabal == 3.2.* # Used for packages needing newer Cabal on ghc 8.6 and 8.8
- Cabal == 3.10.*
- Cabal == 3.12.* # version required for cabal-install and other packages
- Cabal-syntax == 3.6.* # Dummy package that ensures packages depending on Cabal-syntax can work for Cabal < 3.8
···
- fourmolu == 0.16.0.0 # 2025-01-27: for ghc 9.10 compat
- fsnotify < 0.4 # 2024-04-22: required by spago-0.21
- fuzzyset == 0.2.4 # 2023-12-20: Needed for building postgrest > 10
-
- ghc-api-compat == 8.10.7 # 2022-02-17: preserve for GHC 8.10.7
- ghc-exactprint == 0.6.* # 2022-12-12: needed for GHC < 9.2
- ghc-exactprint == 1.5.* # 2023-03-30: needed for GHC == 9.2
- ghc-exactprint == 1.6.* # 2023-03-30: needed for GHC == 9.4
···
- ghc-lib-parser-ex == 9.2.* # 2022-07-13: preserve for GHC 8.10, 9.0
- ghc-lib-parser-ex == 9.6.* # 2024-05-19: preserve for GHC 9.2, 9.4
- ghc-lib-parser-ex == 9.10.* # 2024-12-26: preserve for 9.10 HLS
-
- ghc-source-gen < 0.4.6.0 # 2024-12-31: support GHC < 9.0
- ghc-tags == 1.5.* # 2023-02-18: preserve for ghc-lib == 9.2.*
- ghc-tags == 1.7.* # 2023-02-18: preserve for ghc-lib == 9.6.*
- ghc-tags == 1.8.* # 2023-02-18: preserve for ghc-lib == 9.8.*
···
- hasql-notifications < 0.2.3 # 2025-01-19: Needed for building postgrest
- hasql-pool < 1.1 # 2025-01-19: Needed for building postgrest
- hasql-transaction < 1.1.1 # 2025-01-19: Needed for building postgrest
-
- hlint == 3.4.1 # 2022-09-21: preserve for ghc 8.10
- hlint == 3.6.* # 2025-04-14: needed for hls with ghc-lib-parser 9.6
- hnix-store-core < 0.7 # 2023-12-11: required by hnix-store-remote 0.6
- hspec-megaparsec == 2.2.0 # 2023-11-18: Latest version compatible with ghc 9.0
···
- stylish-haskell == 0.14.5.0 # 2025-04-14: needed for hls with ghc-lib 9.6
- stylish-haskell == 0.15.0.1 # 2025-04-14: needed for hls with ghc-lib 9.10
- tar == 0.6.0.0 # 2025-02-08: last version to not require os-string (which can't be built with GHC < 9.2)
-
- text == 2.0.2 # 2023-09-14: Needed for elm (which is currently on ghc-8.10)
- text-metrics < 0.3.3 # 2025-02-08: >= 0.3.3 uses GHC2021
- versions < 6 # 2024-04-22: required by spago-0.21
-
- weeder == 2.2.* # 2022-02-21: preserve for GHC 8.10.7
- weeder == 2.3.* # 2022-05-31: preserve for GHC 9.0.2
- weeder == 2.4.* # 2023-02-02: preserve for GHC 9.2.*
# keep-sorted end
+1 -363
pkgs/development/haskell-modules/hackage-packages.nix
···
opencv_video = null;
};
-
"Cabal_3_2_1_0" = callPackage (
-
{
-
mkDerivation,
-
array,
-
base,
-
base-compat,
-
base-orphans,
-
binary,
-
bytestring,
-
containers,
-
deepseq,
-
Diff,
-
directory,
-
filepath,
-
integer-logarithms,
-
mtl,
-
optparse-applicative,
-
parsec,
-
pretty,
-
process,
-
QuickCheck,
-
stm,
-
tagged,
-
tar,
-
tasty,
-
tasty-golden,
-
tasty-hunit,
-
tasty-quickcheck,
-
temporary,
-
text,
-
time,
-
transformers,
-
tree-diff,
-
unix,
-
}:
-
mkDerivation {
-
pname = "Cabal";
-
version = "3.2.1.0";
-
sha256 = "1xfn9q6jnbp3jc6swn4hapa83f5m66pjz8fqbqmffydagf36fkzy";
-
revision = "1";
-
editedCabalFile = "07brbxkjlf1yqs9bjdwcwq1gx853kh600qnrf6bnya92q1p0fhw7";
-
setupHaskellDepends = [
-
mtl
-
parsec
-
];
-
libraryHaskellDepends = [
-
array
-
base
-
binary
-
bytestring
-
containers
-
deepseq
-
directory
-
filepath
-
mtl
-
parsec
-
pretty
-
process
-
text
-
time
-
transformers
-
unix
-
];
-
testHaskellDepends = [
-
array
-
base
-
base-compat
-
base-orphans
-
binary
-
bytestring
-
containers
-
deepseq
-
Diff
-
directory
-
filepath
-
integer-logarithms
-
optparse-applicative
-
pretty
-
process
-
QuickCheck
-
stm
-
tagged
-
tar
-
tasty
-
tasty-golden
-
tasty-hunit
-
tasty-quickcheck
-
temporary
-
text
-
tree-diff
-
];
-
doCheck = false;
-
description = "A framework for packaging Haskell software";
-
license = lib.licenses.bsd3;
-
hydraPlatforms = lib.platforms.none;
-
}
-
) { };
-
"Cabal_3_10_3_0" = callPackage (
mkDerivation,
···
genprimopcode = null;
-
"ghc-api-compat_8_10_7" = callPackage (
-
{
-
mkDerivation,
-
base,
-
ghc,
-
}:
-
mkDerivation {
-
pname = "ghc-api-compat";
-
version = "8.10.7";
-
sha256 = "1swsly340pj4inmk1l57q4s0dpw8iibl192y1zayvkgc43zky62a";
-
libraryHaskellDepends = [
-
base
-
ghc
-
];
-
doHaddock = false;
-
description = "GHC-API compatibility helpers";
-
license = lib.licenses.bsd3;
-
hydraPlatforms = lib.platforms.none;
-
broken = true;
-
}
-
) { };
-
"ghc-api-compat" = callPackage (
mkDerivation,
···
license = lib.licenses.mit;
hydraPlatforms = lib.platforms.none;
broken = true;
-
}
-
) { };
-
-
"ghc-source-gen_0_4_5_0" = callPackage (
-
{
-
mkDerivation,
-
base,
-
ghc,
-
ghc-paths,
-
QuickCheck,
-
tasty,
-
tasty-hunit,
-
tasty-quickcheck,
-
}:
-
mkDerivation {
-
pname = "ghc-source-gen";
-
version = "0.4.5.0";
-
sha256 = "18v6i0a6j72brwr7zq0j0igmkzigx3w4a6rdhq8cn768vflpflvv";
-
libraryHaskellDepends = [
-
base
-
ghc
-
];
-
testHaskellDepends = [
-
base
-
ghc
-
ghc-paths
-
QuickCheck
-
tasty
-
tasty-hunit
-
tasty-quickcheck
-
];
-
description = "Constructs Haskell syntax trees for the GHC API";
-
license = lib.licenses.bsd3;
-
hydraPlatforms = lib.platforms.none;
) { };
···
description = "manage files with git, without checking their contents into git";
license = lib.licenses.agpl3Only;
mainProgram = "git-annex";
-
maintainers = [
-
lib.maintainers.peti
-
lib.maintainers.roosemberth
-
];
+
maintainers = [ lib.maintainers.peti ];
) { };
···
) { inherit (pkgs) libsass; };
-
"hlint_3_4_1" = callPackage (
-
{
-
mkDerivation,
-
aeson,
-
ansi-terminal,
-
base,
-
bytestring,
-
cmdargs,
-
containers,
-
cpphs,
-
data-default,
-
deriving-aeson,
-
directory,
-
extra,
-
file-embed,
-
filepath,
-
filepattern,
-
ghc-lib-parser,
-
ghc-lib-parser-ex,
-
hscolour,
-
process,
-
refact,
-
text,
-
transformers,
-
uniplate,
-
unordered-containers,
-
utf8-string,
-
vector,
-
yaml,
-
}:
-
mkDerivation {
-
pname = "hlint";
-
version = "3.4.1";
-
sha256 = "0bkk03c9hacvfd73dk89g4r81b50g7pjgw5pavldali4qwss34cz";
-
revision = "1";
-
editedCabalFile = "1rdaffg5n179yfcn5zjwjb0bki09qy13gz2ijky455y9pbaz8yz9";
-
isLibrary = true;
-
isExecutable = true;
-
enableSeparateDataOutput = true;
-
libraryHaskellDepends = [
-
aeson
-
ansi-terminal
-
base
-
bytestring
-
cmdargs
-
containers
-
cpphs
-
data-default
-
deriving-aeson
-
directory
-
extra
-
file-embed
-
filepath
-
filepattern
-
ghc-lib-parser
-
ghc-lib-parser-ex
-
hscolour
-
process
-
refact
-
text
-
transformers
-
uniplate
-
unordered-containers
-
utf8-string
-
vector
-
yaml
-
];
-
executableHaskellDepends = [ base ];
-
description = "Source code suggestions";
-
license = lib.licenses.bsd3;
-
hydraPlatforms = lib.platforms.none;
-
mainProgram = "hlint";
-
maintainers = [ lib.maintainers.maralorn ];
-
}
-
) { };
-
"hlint_3_6_1" = callPackage (
mkDerivation,
···
) { };
-
"text_2_0_2" = callPackage (
-
{
-
mkDerivation,
-
array,
-
base,
-
binary,
-
bytestring,
-
containers,
-
deepseq,
-
directory,
-
filepath,
-
ghc-prim,
-
QuickCheck,
-
system-cxx-std-lib,
-
tasty,
-
tasty-bench,
-
tasty-hunit,
-
tasty-inspection-testing,
-
tasty-quickcheck,
-
template-haskell,
-
transformers,
-
}:
-
mkDerivation {
-
pname = "text";
-
version = "2.0.2";
-
sha256 = "1bggb4gq15r7z685w7c7hbm3w4n6day451ickz70d1l919jvwdf7";
-
revision = "1";
-
editedCabalFile = "1k25ba7hxgsj155yjmi218lhhyw640r4d4zr105gvhfkcj6gmdbi";
-
libraryHaskellDepends = [
-
array
-
base
-
binary
-
bytestring
-
deepseq
-
ghc-prim
-
system-cxx-std-lib
-
template-haskell
-
];
-
testHaskellDepends = [
-
base
-
bytestring
-
deepseq
-
directory
-
ghc-prim
-
QuickCheck
-
tasty
-
tasty-hunit
-
tasty-inspection-testing
-
tasty-quickcheck
-
template-haskell
-
transformers
-
];
-
benchmarkHaskellDepends = [
-
base
-
bytestring
-
containers
-
deepseq
-
directory
-
filepath
-
tasty-bench
-
transformers
-
];
-
doCheck = false;
-
description = "An efficient packed Unicode text type";
-
license = lib.licenses.bsd2;
-
hydraPlatforms = lib.platforms.none;
-
}
-
) { };
-
"text_2_1_2" = callPackage (
mkDerivation,
···
hydraPlatforms = lib.platforms.none;
mainProgram = "wedged";
broken = true;
-
}
-
) { };
-
-
"weeder_2_2_0" = callPackage (
-
{
-
mkDerivation,
-
algebraic-graphs,
-
base,
-
bytestring,
-
containers,
-
dhall,
-
directory,
-
filepath,
-
generic-lens,
-
ghc,
-
lens,
-
mtl,
-
optparse-applicative,
-
regex-tdfa,
-
text,
-
transformers,
-
}:
-
mkDerivation {
-
pname = "weeder";
-
version = "2.2.0";
-
sha256 = "07ylcq8mza4429snaklhfszpg2c0xcp75hyf0jxhi32mpiz7a5v2";
-
isLibrary = true;
-
isExecutable = true;
-
libraryHaskellDepends = [
-
algebraic-graphs
-
base
-
bytestring
-
containers
-
dhall
-
directory
-
filepath
-
generic-lens
-
ghc
-
lens
-
mtl
-
optparse-applicative
-
regex-tdfa
-
text
-
transformers
-
];
-
executableHaskellDepends = [
-
base
-
bytestring
-
containers
-
directory
-
filepath
-
ghc
-
optparse-applicative
-
transformers
-
];
-
description = "Detect dead code";
-
license = lib.licenses.bsd3;
-
hydraPlatforms = lib.platforms.none;
-
mainProgram = "weeder";
-
maintainers = [ lib.maintainers.maralorn ];
) { };
+5 -70
pkgs/top-level/haskell-packages.nix
···
}:
let
-
# These are attributes in compiler that support integer-simple.
-
integerSimpleIncludes = [
-
"ghc810"
-
"ghc8107"
-
];
-
-
nativeBignumExcludes = integerSimpleIncludes ++ [
+
nativeBignumExcludes = [
# haskell.compiler sub groups
-
"integer-simple"
"native-bignum"
# Binary GHCs
-
"ghc8107Binary"
"ghc902Binary"
"ghc924Binary"
"ghc963Binary"
···
bb = pkgsBuildBuild.haskell;
in
{
-
ghc8107Binary = callPackage ../development/compilers/ghc/8.10.7-binary.nix {
-
llvmPackages = pkgs.llvmPackages_12;
-
};
-
ghc902Binary = callPackage ../development/compilers/ghc/9.0.2-binary.nix {
llvmPackages = pkgs.llvmPackages_12;
};
···
llvmPackages = pkgs.llvmPackages_15;
};
-
ghc8107 = callPackage ../development/compilers/ghc/8.10.7.nix {
-
bootPkgs = bb.packages.ghc8107Binary;
-
inherit (buildPackages.python311Packages) sphinx; # a distutils issue with 3.12
-
python3 = buildPackages.python311; # so that we don't have two of them
-
# Need to use apple's patched xattr until
-
# https://github.com/xattr/xattr/issues/44 and
-
# https://github.com/xattr/xattr/issues/55 are solved.
-
inherit (buildPackages.darwin) xattr autoSignDarwinBinariesHook;
-
buildTargetLlvmPackages = pkgsBuildTarget.llvmPackages_12;
-
llvmPackages = pkgs.llvmPackages_12;
-
};
-
ghc810 = compiler.ghc8107;
ghc928 = callPackage ../development/compilers/ghc/9.2.8.nix {
bootPkgs = bb.packages.ghc902Binary;
inherit (buildPackages.python311Packages) sphinx; # a distutils issue with 3.12
···
llvmPackages = pkgs.llvmPackages_18;
};
-
# The integer-simple attribute set contains all the GHC compilers
-
# build with integer-simple instead of integer-gmp.
-
integer-simple =
-
let
-
integerSimpleGhcNames = pkgs.lib.filter (name: builtins.elem name integerSimpleIncludes) (
-
pkgs.lib.attrNames compiler
-
);
-
in
-
pkgs.recurseIntoAttrs (
-
pkgs.lib.genAttrs integerSimpleGhcNames (
-
name: compiler.${name}.override { enableIntegerSimple = true; }
-
)
-
);
-
# Starting from GHC 9, integer-{simple,gmp} is replaced by ghc-bignum
# with "native" and "gmp" backends.
native-bignum =
···
);
}
// pkgs.lib.optionalAttrs config.allowAliases {
+
ghc810 = throw "'haskell.compiler.ghc810' has been removed."; # Added 2025-09-07
ghc90 = throw "'haskell.compiler.ghc90' has been removed."; # Added 2025-09-07
ghcjs = throw "'haskell.compiler.ghcjs' has been removed. Please use 'pkgsCross.ghcjs' instead."; # Added 2025-09-06
ghcjs810 = throw "'haskell.compiler.ghcjs810' has been removed. Please use 'pkgsCross.ghcjs' instead."; # Added 2025-09-06
+
integer-simple = throw "All GHC versions with integer-simple support have been removed."; # Added 2025-09-07
}
);
···
bh = buildPackages.haskell;
in
{
-
ghc8107Binary = callPackage ../development/haskell-modules {
-
buildHaskellPackages = bh.packages.ghc8107Binary;
-
ghc = bh.compiler.ghc8107Binary;
-
compilerConfig = callPackage ../development/haskell-modules/configuration-ghc-8.10.x.nix { };
-
packageSetConfig = bootstrapPackageSet;
-
};
ghc902Binary = callPackage ../development/haskell-modules {
buildHaskellPackages = bh.packages.ghc902Binary;
ghc = bh.compiler.ghc902Binary;
···
compilerConfig = callPackage ../development/haskell-modules/configuration-ghc-9.8.x.nix { };
packageSetConfig = bootstrapPackageSet;
};
-
ghc8107 = callPackage ../development/haskell-modules {
-
buildHaskellPackages = bh.packages.ghc8107;
-
ghc = bh.compiler.ghc8107;
-
compilerConfig = callPackage ../development/haskell-modules/configuration-ghc-8.10.x.nix { };
-
};
-
ghc810 = packages.ghc8107;
ghc928 = callPackage ../development/haskell-modules {
buildHaskellPackages = bh.packages.ghc928;
ghc = bh.compiler.ghc928;
···
compilerConfig = callPackage ../development/haskell-modules/configuration-ghc-9.14.x.nix { };
};
-
# The integer-simple attribute set contains package sets for all the GHC compilers
-
# using integer-simple instead of integer-gmp.
-
integer-simple =
-
let
-
integerSimpleGhcNames = pkgs.lib.filter (name: builtins.elem name integerSimpleIncludes) (
-
pkgs.lib.attrNames packages
-
);
-
in
-
pkgs.lib.genAttrs integerSimpleGhcNames (
-
name:
-
packages.${name}.override (oldAttrs: {
-
ghc = bh.compiler.integer-simple.${name};
-
buildHaskellPackages = bh.packages.integer-simple.${name};
-
overrides = pkgs.lib.composeExtensions (oldAttrs.overrides or (_: _: { })) (
-
_: _: { integer-simple = null; }
-
);
-
})
-
);
-
native-bignum =
let
nativeBignumGhcNames = pkgs.lib.filter (name: !(builtins.elem name nativeBignumExcludes)) (
···
);
}
// pkgs.lib.optionalAttrs config.allowAliases {
+
ghc810 = throw "'haskell.packages.ghc810' has been removed."; # Added 2025-09-07
ghc90 = throw "'haskell.packages.ghc90' has been removed."; # Added 2025-09-07
ghcjs = throw "'haskell.packages.ghcjs' has been removed. Please use 'pkgsCross.ghcjs' instead."; # Added 2025-09-06
ghcjs810 = throw "'haskell.packages.ghcjs810' has been removed. Please use 'pkgsCross.ghcjs' instead."; # Added 2025-09-06
+
integer-simple = throw "All GHC versions with integer-simple support have been removed."; # Added 2025-09-07
};
}
-19
pkgs/top-level/release-haskell.nix
···
# list of all compilers to test specific packages on
released = with compilerNames; [
-
ghc8107
ghc928
ghc948
ghc963
···
# Cross compilation of GHC
haskell.compiler = {
inherit (packagePlatforms pkgs.pkgsCross.riscv64.haskell.compiler)
-
# Our oldest GHC which still uses its own expression. 8.10.7 can
-
# theoretically be used to chain bootstrap all GHCs on riscv64
-
# which doesn't have official bindists.
-
ghc8107
# Latest GHC we are able to cross-compile.
ghc948
;
···
# Cross compilation of GHC
haskell.compiler = {
inherit (packagePlatforms pkgs.pkgsCross.aarch64-multiplatform.haskell.compiler)
-
# Uses a separate expression and LLVM backend for aarch64.
-
ghc8107
# Latest GHC we are able to cross-compile. Uses NCG backend.
ghc948
;
···
# from the package sets. Due to (transitively) requiring recent versions
# of core packages, it is not always reasonable to get cabal-install to
# work with older compilers.
-
compilerNames.ghc8107
compilerNames.ghc928
compilerNames.ghc948
] released;
···
compilerNames.ghc9102
];
haskell-language-server = lib.subtractLists [
-
# Support ceased as of 2.3.0.0
-
compilerNames.ghc8107
# Support ceased as of 2.10.0.0
compilerNames.ghc928
] released;
···
language-nix = released;
nix-paths = released;
titlecase = released;
-
ghc-api-compat = [
-
compilerNames.ghc8107
-
];
-
ghc-bignum = [
-
compilerNames.ghc8107
-
];
ghc-lib = released;
ghc-lib-parser = released;
ghc-lib-parser-ex = released;
···
];
};
constituents = accumulateDerivations [
-
jobs.pkgsMusl.haskell.compiler.ghc8107Binary
-
jobs.pkgsMusl.haskell.compiler.ghc8107
jobs.pkgsMusl.haskell.compiler.ghc928
jobs.pkgsMusl.haskell.compiler.ghcHEAD
-
jobs.pkgsMusl.haskell.compiler.integer-simple.ghc8107
jobs.pkgsMusl.haskell.compiler.native-bignum.ghc928
jobs.pkgsMusl.haskell.compiler.native-bignum.ghcHEAD
];