mirror of
https://github.com/CHN-beta/nixpkgs.git
synced 2026-01-11 18:32:23 +08:00
haskell.compiler.ghc902Binary: bump LLVM by wrapping opt(1) (#440271)
This commit is contained in:
@@ -11,6 +11,7 @@
|
||||
numactl,
|
||||
libffi,
|
||||
llvmPackages,
|
||||
replaceVarsWith,
|
||||
coreutils,
|
||||
targetPackages,
|
||||
|
||||
@@ -214,6 +215,20 @@ let
|
||||
coreutils # for cat
|
||||
]
|
||||
++ lib.optionals useLLVM [
|
||||
# Allow the use of newer LLVM versions; see the script for details.
|
||||
(replaceVarsWith {
|
||||
name = "subopt";
|
||||
src = ./subopt.bash;
|
||||
dir = "bin";
|
||||
isExecutable = true;
|
||||
preBuild = ''
|
||||
name=opt
|
||||
'';
|
||||
replacements = {
|
||||
inherit (stdenv) shell;
|
||||
opt = lib.getExe' llvmPackages.llvm "opt";
|
||||
};
|
||||
})
|
||||
(lib.getBin llvmPackages.llvm)
|
||||
]
|
||||
# On darwin, we need unwrapped bintools as well (for otool)
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
libiconv,
|
||||
numactl,
|
||||
libffi,
|
||||
llvmPackages,
|
||||
coreutils,
|
||||
targetPackages,
|
||||
|
||||
@@ -193,8 +192,6 @@ let
|
||||
) binDistUsed.archSpecificLibraries
|
||||
)).nixPackage;
|
||||
|
||||
useLLVM = !(import ./common-have-ncg.nix { inherit lib stdenv version; });
|
||||
|
||||
libPath = lib.makeLibraryPath (
|
||||
# Add arch-specific libraries.
|
||||
map ({ nixPackage, ... }: nixPackage) binDistUsed.archSpecificLibraries
|
||||
@@ -207,9 +204,6 @@ let
|
||||
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
|
||||
@@ -217,6 +211,8 @@ let
|
||||
|
||||
in
|
||||
|
||||
assert import ./common-have-ncg.nix { inherit lib stdenv version; };
|
||||
|
||||
stdenv.mkDerivation {
|
||||
inherit version;
|
||||
pname = "ghc-binary${binDistUsed.variantSuffix}";
|
||||
@@ -470,7 +466,7 @@ stdenv.mkDerivation {
|
||||
targetPrefix = "";
|
||||
enableShared = true;
|
||||
|
||||
inherit llvmPackages;
|
||||
llvmPackages = null;
|
||||
|
||||
# Our Cabal compiler name
|
||||
haskellCompilerName = "ghc-${version}";
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
libiconv,
|
||||
numactl,
|
||||
libffi,
|
||||
llvmPackages,
|
||||
coreutils,
|
||||
targetPackages,
|
||||
|
||||
@@ -192,8 +191,6 @@ let
|
||||
) binDistUsed.archSpecificLibraries
|
||||
)).nixPackage;
|
||||
|
||||
useLLVM = !(import ./common-have-ncg.nix { inherit lib stdenv version; });
|
||||
|
||||
libPath = lib.makeLibraryPath (
|
||||
# Add arch-specific libraries.
|
||||
map ({ nixPackage, ... }: nixPackage) binDistUsed.archSpecificLibraries
|
||||
@@ -206,9 +203,6 @@ let
|
||||
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
|
||||
@@ -216,6 +210,8 @@ let
|
||||
|
||||
in
|
||||
|
||||
assert import ./common-have-ncg.nix { inherit lib stdenv version; };
|
||||
|
||||
stdenv.mkDerivation {
|
||||
inherit version;
|
||||
pname = "ghc-binary${binDistUsed.variantSuffix}";
|
||||
@@ -449,7 +445,7 @@ stdenv.mkDerivation {
|
||||
targetPrefix = "";
|
||||
enableShared = true;
|
||||
|
||||
inherit llvmPackages;
|
||||
llvmPackages = null;
|
||||
|
||||
# Our Cabal compiler name
|
||||
haskellCompilerName = "ghc-${version}";
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
libiconv,
|
||||
numactl,
|
||||
libffi,
|
||||
llvmPackages,
|
||||
coreutils,
|
||||
targetPackages,
|
||||
|
||||
@@ -206,8 +205,6 @@ let
|
||||
) binDistUsed.archSpecificLibraries
|
||||
)).nixPackage;
|
||||
|
||||
useLLVM = !(import ./common-have-ncg.nix { inherit lib stdenv version; });
|
||||
|
||||
libPath = lib.makeLibraryPath (
|
||||
# Add arch-specific libraries.
|
||||
map ({ nixPackage, ... }: nixPackage) binDistUsed.archSpecificLibraries
|
||||
@@ -220,9 +217,6 @@ let
|
||||
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
|
||||
@@ -230,6 +224,8 @@ let
|
||||
|
||||
in
|
||||
|
||||
assert import ./common-have-ncg.nix { inherit lib stdenv version; };
|
||||
|
||||
stdenv.mkDerivation {
|
||||
inherit version;
|
||||
pname = "ghc-binary${binDistUsed.variantSuffix}";
|
||||
@@ -464,7 +460,7 @@ stdenv.mkDerivation {
|
||||
targetPrefix = "";
|
||||
enableShared = true;
|
||||
|
||||
inherit llvmPackages;
|
||||
llvmPackages = null;
|
||||
|
||||
# Our Cabal compiler name
|
||||
haskellCompilerName = "ghc-${version}";
|
||||
|
||||
80
pkgs/development/compilers/ghc/subopt.bash
Normal file
80
pkgs/development/compilers/ghc/subopt.bash
Normal file
@@ -0,0 +1,80 @@
|
||||
#!@shell@
|
||||
|
||||
# This script wraps the LLVM `opt(1)` executable and maps the options
|
||||
# passed by old versions of GHC to the equivalents passed by newer
|
||||
# versions that support recent versions of LLVM.
|
||||
#
|
||||
# It achieves the same effect as the following GHC change externally:
|
||||
# <https://gitlab.haskell.org/ghc/ghc/-/merge_requests/8999>.
|
||||
#
|
||||
# This is used solely for bootstrapping newer GHCs from the GHC 9.0.2
|
||||
# binary on AArch64, as that is the only architecture supported by that
|
||||
# binary distribution that requires LLVM, and our later binary packages
|
||||
# all use the native code generator for all supported platforms.
|
||||
#
|
||||
# No attempt is made to support custom LLVM optimization flags, or the
|
||||
# undocumented flag to disable TBAA, or avoid
|
||||
# <https://gitlab.haskell.org/ghc/ghc/-/issues/23870>, as these are not
|
||||
# required to bootstrap GHC and at worst will produce an error message.
|
||||
#
|
||||
# It is called `subopt` to reflect the fact that it uses `opt(1)` as a
|
||||
# subprocess, and the fact that the GHC build system situation
|
||||
# requiring this hack is suboptimal.
|
||||
|
||||
set -e
|
||||
|
||||
expect() {
|
||||
if [[ $1 != $2 ]]; then
|
||||
printf >&2 'subopt: got %q; expected %q\n' "$1" "$2"
|
||||
return 2
|
||||
fi
|
||||
}
|
||||
|
||||
if [[ $NIX_DEBUG -ge 1 ]]; then
|
||||
printf >&2 'subopt: before:'
|
||||
printf >&2 ' %q' "$@"
|
||||
printf >&2 '\n'
|
||||
fi
|
||||
|
||||
args=()
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
-enable-new-pm=0)
|
||||
shift 1
|
||||
;;
|
||||
-mem2reg)
|
||||
expect "$2" -globalopt
|
||||
expect "$3" -lower-expect
|
||||
expect "$4" -enable-tbaa
|
||||
expect "$5" -tbaa
|
||||
args+=('-passes=function(require<tbaa>),function(mem2reg),globalopt,function(lower-expect)')
|
||||
shift 5
|
||||
;;
|
||||
-O1)
|
||||
expect "$2" -globalopt
|
||||
expect "$3" -enable-tbaa
|
||||
expect "$4" -tbaa
|
||||
args+=('-passes=default<O1>')
|
||||
shift 4
|
||||
;;
|
||||
-O2)
|
||||
expect "$2" -enable-tbaa
|
||||
expect "$3" -tbaa
|
||||
args+=('-passes=default<O2>')
|
||||
shift 3
|
||||
;;
|
||||
*)
|
||||
args+=("$1")
|
||||
shift 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ $NIX_DEBUG -ge 1 ]]; then
|
||||
printf >&2 'subopt: after:'
|
||||
printf >&2 ' %q' "${args[@]}"
|
||||
printf >&2 '\n'
|
||||
fi
|
||||
|
||||
exec @opt@ "${args[@]}"
|
||||
@@ -70,21 +70,16 @@ in
|
||||
bb = pkgsBuildBuild.haskell;
|
||||
in
|
||||
{
|
||||
# Required to bootstrap 9.4.8.
|
||||
ghc902Binary = callPackage ../development/compilers/ghc/9.0.2-binary.nix {
|
||||
llvmPackages = pkgs.llvmPackages_12;
|
||||
llvmPackages = pkgs.llvmPackages_20;
|
||||
};
|
||||
|
||||
ghc924Binary = callPackage ../development/compilers/ghc/9.2.4-binary.nix {
|
||||
llvmPackages = pkgs.llvmPackages_12;
|
||||
};
|
||||
ghc924Binary = callPackage ../development/compilers/ghc/9.2.4-binary.nix { };
|
||||
|
||||
ghc963Binary = callPackage ../development/compilers/ghc/9.6.3-binary.nix {
|
||||
llvmPackages = pkgs.llvmPackages_15;
|
||||
};
|
||||
ghc963Binary = callPackage ../development/compilers/ghc/9.6.3-binary.nix { };
|
||||
|
||||
ghc984Binary = callPackage ../development/compilers/ghc/9.8.4-binary.nix {
|
||||
llvmPackages = pkgs.llvmPackages_15;
|
||||
};
|
||||
ghc984Binary = callPackage ../development/compilers/ghc/9.8.4-binary.nix { };
|
||||
|
||||
ghc948 = callPackage ../development/compilers/ghc/9.4.8.nix {
|
||||
bootPkgs =
|
||||
|
||||
Reference in New Issue
Block a user