haskell.packages: move arm specific overrides into dedicated config
This should clean up configuration-common.nix of a lot of conditional which were a pain to write and maintain.
This commit is contained in:
parent
8cca9b1634
commit
b47b2f5ab7
71
pkgs/development/haskell-modules/configuration-arm.nix
Normal file
71
pkgs/development/haskell-modules/configuration-arm.nix
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
# ARM-SPECIFIC OVERRIDES FOR THE HASKELL PACKAGE SET IN NIXPKGS
|
||||||
|
#
|
||||||
|
# This extension is applied to all haskell package sets in nixpkgs
|
||||||
|
# if `stdenv.hostPlatform.isAarch32 || stdenv.hostPlatform.isAarch64`
|
||||||
|
# to apply arm specific workarounds or fixes.
|
||||||
|
#
|
||||||
|
# The file is split into three parts:
|
||||||
|
#
|
||||||
|
# * Overrides that are applied for all arm platforms
|
||||||
|
# * Overrides for aarch32 platforms
|
||||||
|
# * Overrides for aarch64 platforms
|
||||||
|
#
|
||||||
|
# This may be extended in the future to also include compiler-
|
||||||
|
# specific sections as compiler and linker related bugs may
|
||||||
|
# get fixed subsequently.
|
||||||
|
#
|
||||||
|
# When adding new overrides, try to research which section they
|
||||||
|
# belong into. Most likely we'll be favouring aarch64 overrides
|
||||||
|
# in practice since that is the only platform we can test on
|
||||||
|
# Hydra. Also take care to group overrides by the issue they
|
||||||
|
# solve, so refactors and updates to this file are less tedious.
|
||||||
|
{ pkgs, haskellLib }:
|
||||||
|
|
||||||
|
let
|
||||||
|
inherit (pkgs) lib;
|
||||||
|
in
|
||||||
|
|
||||||
|
with haskellLib;
|
||||||
|
|
||||||
|
self: super: {
|
||||||
|
# COMMON ARM OVERRIDES
|
||||||
|
|
||||||
|
# moved here from configuration-common.nix, no reason given.
|
||||||
|
servant-docs = dontCheck super.servant-docs;
|
||||||
|
swagger2 = dontHaddock (dontCheck super.swagger2);
|
||||||
|
|
||||||
|
# Similar to https://ghc.haskell.org/trac/ghc/ticket/13062
|
||||||
|
happy = dontCheck super.happy;
|
||||||
|
|
||||||
|
} // lib.optionalAttrs pkgs.stdenv.hostPlatform.isAarch64 {
|
||||||
|
# AARCH64-SPECIFIC OVERRIDES
|
||||||
|
|
||||||
|
# Doctests fail on aarch64 due to a GHCi linking bug
|
||||||
|
# https://gitlab.haskell.org/ghc/ghc/-/issues/15275#note_295437
|
||||||
|
# TODO: figure out if needed on aarch32 as well
|
||||||
|
language-nix = dontCheck super.language-nix;
|
||||||
|
trifecta = dontCheck super.trifecta;
|
||||||
|
ad = dontCheck super.ad;
|
||||||
|
vinyl = dontCheck super.vinyl;
|
||||||
|
BNFC = dontCheck super.BNFC;
|
||||||
|
C-structs = dontCheck super.C-structs;
|
||||||
|
accelerate = dontCheck super.accelerate;
|
||||||
|
focuslist = dontCheck super.focuslist;
|
||||||
|
flight-kml = dontCheck super.flight-kml;
|
||||||
|
exact-real = dontCheck super.exact-real;
|
||||||
|
autoapply = dontCheck super.autoapply;
|
||||||
|
hint = dontCheck super.hint;
|
||||||
|
hgeometry = dontCheck super.hgeometry;
|
||||||
|
headroom = dontCheck super.headroom;
|
||||||
|
haskell-time-range = dontCheck super.haskell-time-range;
|
||||||
|
hsakamai = dontCheck super.hsakamai;
|
||||||
|
hsemail-ns = dontCheck super.hsemail-ns;
|
||||||
|
openapi3 = dontCheck super.openapi3;
|
||||||
|
|
||||||
|
# https://github.com/ekmett/half/issues/35
|
||||||
|
half = dontCheck super.half;
|
||||||
|
|
||||||
|
} // lib.optionalAttrs pkgs.stdenv.hostPlatform.isAarch32 {
|
||||||
|
# AARCH32-SPECIFIC OVERRIDES
|
||||||
|
|
||||||
|
}
|
@ -307,7 +307,6 @@ self: super: {
|
|||||||
integer-roots = dontCheck super.integer-roots; # requires an old version of smallcheck, will be fixed in > 1.0
|
integer-roots = dontCheck super.integer-roots; # requires an old version of smallcheck, will be fixed in > 1.0
|
||||||
itanium-abi = dontCheck super.itanium-abi;
|
itanium-abi = dontCheck super.itanium-abi;
|
||||||
katt = dontCheck super.katt;
|
katt = dontCheck super.katt;
|
||||||
language-nix = if (pkgs.stdenv.hostPlatform.isAarch64 || pkgs.stdenv.hostPlatform.isi686) then dontCheck super.language-nix else super.language-nix; # aarch64: https://ghc.haskell.org/trac/ghc/ticket/15275
|
|
||||||
language-slice = dontCheck super.language-slice;
|
language-slice = dontCheck super.language-slice;
|
||||||
ldap-client = dontCheck super.ldap-client;
|
ldap-client = dontCheck super.ldap-client;
|
||||||
lensref = dontCheck super.lensref;
|
lensref = dontCheck super.lensref;
|
||||||
@ -852,16 +851,9 @@ self: super: {
|
|||||||
configureFlags = ["--ghc-option=-DU_DEFINE_FALSE_AND_TRUE=1"]; # https://github.com/haskell/text-icu/issues/49
|
configureFlags = ["--ghc-option=-DU_DEFINE_FALSE_AND_TRUE=1"]; # https://github.com/haskell/text-icu/issues/49
|
||||||
});
|
});
|
||||||
|
|
||||||
# aarch64 and armv7l fixes.
|
# jailbreak tasty < 1.2 until servant-docs > 0.11.3 is on hackage.
|
||||||
happy = if (pkgs.stdenv.hostPlatform.isAarch32 || pkgs.stdenv.hostPlatform.isAarch64) then dontCheck super.happy else super.happy; # Similar to https://ghc.haskell.org/trac/ghc/ticket/13062
|
servant-docs = doJailbreak super.servant-docs;
|
||||||
servant-docs =
|
|
||||||
let
|
|
||||||
f = if (pkgs.stdenv.hostPlatform.isAarch32 || pkgs.stdenv.hostPlatform.isAarch64)
|
|
||||||
then dontCheck
|
|
||||||
else pkgs.lib.id;
|
|
||||||
in doJailbreak (f super.servant-docs); # jailbreak tasty < 1.2 until servant-docs > 0.11.3 is on hackage.
|
|
||||||
snap-templates = doJailbreak super.snap-templates; # https://github.com/snapframework/snap-templates/issues/22
|
snap-templates = doJailbreak super.snap-templates; # https://github.com/snapframework/snap-templates/issues/22
|
||||||
swagger2 = if (pkgs.stdenv.hostPlatform.isAarch32 || pkgs.stdenv.hostPlatform.isAarch64) then dontHaddock (dontCheck super.swagger2) else super.swagger2;
|
|
||||||
|
|
||||||
# hledger-lib requires the latest version of pretty-simple
|
# hledger-lib requires the latest version of pretty-simple
|
||||||
hledger-lib = appendPatch super.hledger-lib
|
hledger-lib = appendPatch super.hledger-lib
|
||||||
@ -1526,11 +1518,6 @@ self: super: {
|
|||||||
# Due to tests restricting base in 0.8.0.0 release
|
# Due to tests restricting base in 0.8.0.0 release
|
||||||
http-media = doJailbreak super.http-media;
|
http-media = doJailbreak super.http-media;
|
||||||
|
|
||||||
# https://github.com/ekmett/half/issues/35
|
|
||||||
half = if pkgs.stdenv.isAarch64
|
|
||||||
then dontCheck super.half
|
|
||||||
else super.half;
|
|
||||||
|
|
||||||
# 2020-11-19: Jailbreaking until: https://github.com/snapframework/heist/pull/124
|
# 2020-11-19: Jailbreaking until: https://github.com/snapframework/heist/pull/124
|
||||||
heist = doJailbreak super.heist;
|
heist = doJailbreak super.heist;
|
||||||
|
|
||||||
@ -1876,58 +1863,6 @@ self: super: {
|
|||||||
'' + (drv.postPatch or "");
|
'' + (drv.postPatch or "");
|
||||||
});
|
});
|
||||||
|
|
||||||
# Doctests fail on aarch64 due to a GHCi linking bug
|
|
||||||
# https://gitlab.haskell.org/ghc/ghc/-/issues/15275#note_295437
|
|
||||||
ad = overrideCabal super.ad {
|
|
||||||
doCheck = !pkgs.stdenv.hostPlatform.isAarch64;
|
|
||||||
};
|
|
||||||
trifecta = if pkgs.stdenv.hostPlatform.isAarch64 then dontCheck super.trifecta else super.trifecta;
|
|
||||||
vinyl = overrideCabal super.vinyl {
|
|
||||||
doCheck = !pkgs.stdenv.hostPlatform.isAarch64;
|
|
||||||
};
|
|
||||||
BNFC = overrideCabal super.BNFC {
|
|
||||||
doCheck = !pkgs.stdenv.hostPlatform.isAarch64;
|
|
||||||
};
|
|
||||||
C-structs = overrideCabal super.C-structs {
|
|
||||||
doCheck = !pkgs.stdenv.hostPlatform.isAarch64;
|
|
||||||
};
|
|
||||||
accelerate = overrideCabal super.accelerate {
|
|
||||||
doCheck = !pkgs.stdenv.hostPlatform.isAarch64;
|
|
||||||
};
|
|
||||||
focuslist = overrideCabal super.focuslist {
|
|
||||||
doCheck = !pkgs.stdenv.hostPlatform.isAarch64;
|
|
||||||
};
|
|
||||||
flight-kml = overrideCabal super.flight-kml {
|
|
||||||
doCheck = !pkgs.stdenv.hostPlatform.isAarch64;
|
|
||||||
};
|
|
||||||
exact-real = overrideCabal super.exact-real {
|
|
||||||
doCheck = !pkgs.stdenv.hostPlatform.isAarch64;
|
|
||||||
};
|
|
||||||
autoapply = overrideCabal super.autoapply {
|
|
||||||
doCheck = !pkgs.stdenv.hostPlatform.isAarch64;
|
|
||||||
};
|
|
||||||
hint = overrideCabal super.hint {
|
|
||||||
doCheck = !pkgs.stdenv.hostPlatform.isAarch64;
|
|
||||||
};
|
|
||||||
hgeometry = overrideCabal super.hgeometry {
|
|
||||||
doCheck = !pkgs.stdenv.hostPlatform.isAarch64;
|
|
||||||
};
|
|
||||||
headroom = overrideCabal super.headroom {
|
|
||||||
doCheck = !pkgs.stdenv.hostPlatform.isAarch64;
|
|
||||||
};
|
|
||||||
haskell-time-range = overrideCabal super.haskell-time-range {
|
|
||||||
doCheck = !pkgs.stdenv.hostPlatform.isAarch64;
|
|
||||||
};
|
|
||||||
hsakamai = overrideCabal super.hsakamai {
|
|
||||||
doCheck = !pkgs.stdenv.hostPlatform.isAarch64;
|
|
||||||
};
|
|
||||||
hsemail-ns = overrideCabal super.hsemail-ns {
|
|
||||||
doCheck = !pkgs.stdenv.hostPlatform.isAarch64;
|
|
||||||
};
|
|
||||||
openapi3 = overrideCabal super.openapi3 {
|
|
||||||
doCheck = !pkgs.stdenv.hostPlatform.isAarch64;
|
|
||||||
};
|
|
||||||
|
|
||||||
# Tests need to lookup target triple x86_64-unknown-linux
|
# Tests need to lookup target triple x86_64-unknown-linux
|
||||||
# https://github.com/llvm-hs/llvm-hs/issues/334
|
# https://github.com/llvm-hs/llvm-hs/issues/334
|
||||||
llvm-hs = overrideCabal super.llvm-hs {
|
llvm-hs = overrideCabal super.llvm-hs {
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
, nonHackagePackages ? import ./non-hackage-packages.nix
|
, nonHackagePackages ? import ./non-hackage-packages.nix
|
||||||
, configurationCommon ? import ./configuration-common.nix
|
, configurationCommon ? import ./configuration-common.nix
|
||||||
, configurationNix ? import ./configuration-nix.nix
|
, configurationNix ? import ./configuration-nix.nix
|
||||||
|
, configurationArm ? import ./configuration-arm.nix
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
@ -19,14 +20,20 @@ let
|
|||||||
inherit stdenv haskellLib ghc buildHaskellPackages extensible-self all-cabal-hashes;
|
inherit stdenv haskellLib ghc buildHaskellPackages extensible-self all-cabal-hashes;
|
||||||
};
|
};
|
||||||
|
|
||||||
extensions = lib.composeManyExtensions [
|
isArm = with stdenv.hostPlatform; isAarch64 || isAarch32;
|
||||||
|
platformConfigurations = lib.optionals isArm [
|
||||||
|
(configurationArm { inherit pkgs haskellLib; })
|
||||||
|
];
|
||||||
|
|
||||||
|
extensions = lib.composeManyExtensions ([
|
||||||
nonHackagePackages
|
nonHackagePackages
|
||||||
(configurationNix { inherit pkgs haskellLib; })
|
(configurationNix { inherit pkgs haskellLib; })
|
||||||
(configurationCommon { inherit pkgs haskellLib; })
|
(configurationCommon { inherit pkgs haskellLib; })
|
||||||
|
] ++ platformConfigurations ++ [
|
||||||
compilerConfig
|
compilerConfig
|
||||||
packageSetConfig
|
packageSetConfig
|
||||||
overrides
|
overrides
|
||||||
];
|
]);
|
||||||
|
|
||||||
extensible-self = makeExtensible (extends extensions haskellPackages);
|
extensible-self = makeExtensible (extends extensions haskellPackages);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user