Loading pkgs/development/compilers/ghc/9.0.2-binary.nix +15 −0 Original line number Diff line number Diff line Loading @@ -11,6 +11,7 @@ numactl, libffi, llvmPackages, replaceVarsWith, coreutils, targetPackages, Loading Loading @@ -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) Loading pkgs/development/compilers/ghc/9.2.4-binary.nix +3 −7 Original line number Diff line number Diff line Loading @@ -10,7 +10,6 @@ libiconv, numactl, libffi, llvmPackages, coreutils, targetPackages, Loading Loading @@ -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 Loading @@ -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 Loading @@ -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}"; Loading Loading @@ -470,7 +466,7 @@ stdenv.mkDerivation { targetPrefix = ""; enableShared = true; inherit llvmPackages; llvmPackages = null; # Our Cabal compiler name haskellCompilerName = "ghc-${version}"; Loading pkgs/development/compilers/ghc/9.6.3-binary.nix +3 −7 Original line number Diff line number Diff line Loading @@ -10,7 +10,6 @@ libiconv, numactl, libffi, llvmPackages, coreutils, targetPackages, Loading Loading @@ -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 Loading @@ -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 Loading @@ -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}"; Loading Loading @@ -449,7 +445,7 @@ stdenv.mkDerivation { targetPrefix = ""; enableShared = true; inherit llvmPackages; llvmPackages = null; # Our Cabal compiler name haskellCompilerName = "ghc-${version}"; Loading pkgs/development/compilers/ghc/9.8.4-binary.nix +3 −7 Original line number Diff line number Diff line Loading @@ -9,7 +9,6 @@ libiconv, numactl, libffi, llvmPackages, coreutils, targetPackages, Loading Loading @@ -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 Loading @@ -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 Loading @@ -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}"; Loading Loading @@ -464,7 +460,7 @@ stdenv.mkDerivation { targetPrefix = ""; enableShared = true; inherit llvmPackages; llvmPackages = null; # Our Cabal compiler name haskellCompilerName = "ghc-${version}"; Loading pkgs/development/compilers/ghc/subopt.bash 0 → 100644 +80 −0 Original line number Diff line number Diff line #!@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[@]}" Loading
pkgs/development/compilers/ghc/9.0.2-binary.nix +15 −0 Original line number Diff line number Diff line Loading @@ -11,6 +11,7 @@ numactl, libffi, llvmPackages, replaceVarsWith, coreutils, targetPackages, Loading Loading @@ -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) Loading
pkgs/development/compilers/ghc/9.2.4-binary.nix +3 −7 Original line number Diff line number Diff line Loading @@ -10,7 +10,6 @@ libiconv, numactl, libffi, llvmPackages, coreutils, targetPackages, Loading Loading @@ -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 Loading @@ -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 Loading @@ -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}"; Loading Loading @@ -470,7 +466,7 @@ stdenv.mkDerivation { targetPrefix = ""; enableShared = true; inherit llvmPackages; llvmPackages = null; # Our Cabal compiler name haskellCompilerName = "ghc-${version}"; Loading
pkgs/development/compilers/ghc/9.6.3-binary.nix +3 −7 Original line number Diff line number Diff line Loading @@ -10,7 +10,6 @@ libiconv, numactl, libffi, llvmPackages, coreutils, targetPackages, Loading Loading @@ -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 Loading @@ -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 Loading @@ -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}"; Loading Loading @@ -449,7 +445,7 @@ stdenv.mkDerivation { targetPrefix = ""; enableShared = true; inherit llvmPackages; llvmPackages = null; # Our Cabal compiler name haskellCompilerName = "ghc-${version}"; Loading
pkgs/development/compilers/ghc/9.8.4-binary.nix +3 −7 Original line number Diff line number Diff line Loading @@ -9,7 +9,6 @@ libiconv, numactl, libffi, llvmPackages, coreutils, targetPackages, Loading Loading @@ -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 Loading @@ -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 Loading @@ -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}"; Loading Loading @@ -464,7 +460,7 @@ stdenv.mkDerivation { targetPrefix = ""; enableShared = true; inherit llvmPackages; llvmPackages = null; # Our Cabal compiler name haskellCompilerName = "ghc-${version}"; Loading
pkgs/development/compilers/ghc/subopt.bash 0 → 100644 +80 −0 Original line number Diff line number Diff line #!@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[@]}"