From d3a1275e1ef88c9300339bcca3eed794afc359ee Mon Sep 17 00:00:00 2001 From: John Ericson Date: Thu, 23 Sep 2021 00:15:18 +0000 Subject: [PATCH 1/5] darwin.xattr: init at 61.60.1 (cherry picked from commit 283d622397539f196416657da9dc804a4ca89846) (cherry picked from commit b83620af904eb8b7e5dcd5cd8387fd1b3fc2018e) --- pkgs/os-specific/darwin/xattr/default.nix | 73 +++++++++++++++++++++++ pkgs/top-level/darwin-packages.nix | 2 + 2 files changed, 75 insertions(+) create mode 100644 pkgs/os-specific/darwin/xattr/default.nix diff --git a/pkgs/os-specific/darwin/xattr/default.nix b/pkgs/os-specific/darwin/xattr/default.nix new file mode 100644 index 000000000000..1aa8b49e88aa --- /dev/null +++ b/pkgs/os-specific/darwin/xattr/default.nix @@ -0,0 +1,73 @@ +{ lib +, stdenv +, fetchzip +, buildPythonPackage +, python +, ed +, unifdef +}: + +buildPythonPackage rec { + pname = "xattr"; + version = "61.60.1"; + + src = fetchzip rec { + url = "https://opensource.apple.com/tarballs/python_modules/python_modules-${version}.tar.gz"; + sha256 = "19kydl7w4vpdi7zmfd5z9vjkq24jfk2cv4j0pppw69j06czhdwwi"; + }; + + sourceRoot = "${src.name}/Modules/xattr-0.6.4"; + format = "other"; + + nativeBuildInputs = [ + ed + unifdef + ]; + + makeFlags = [ + "OBJROOT=$(PWD)" + "DSTROOT=${placeholder "out"}" + "OSL=${placeholder "doc"}/share/xattr/OpenSourceLicenses" + "OSV=${placeholder "doc"}/share/xattr/OpenSourceVersions" + ]; + + # need to use `out` instead of `bin` since buildPythonPackage ignores the latter + outputs = [ "out" "doc" "python" ]; + + # We need to patch a reference to gnutar in an included Makefile + postUnpack = '' + chmod u+w $sourceRoot/.. + ''; + + postPatch = '' + substituteInPlace ../Makefile.inc --replace gnutar tar + substituteInPlace Makefile --replace "/usr" "" + ''; + + preInstall = '' + # prevent setup.py from trying to download setuptools + sed -i xattr-*/setup.py -e '/ez_setup/d' + + # create our custom target dirs we patch in + mkdir -p "$doc/share/xattr/"OpenSource{Licenses,Versions} + mkdir -p "$python/lib/${python.libPrefix}" + ''; + + # move python package to its own output to reduce clutter + postInstall = '' + mv "$out/lib/python" "$python/${python.sitePackages}" + rmdir "$out/lib" + ''; + + makeWrapperArgs = [ + "--prefix" "PYTHONPATH" ":" "${placeholder "python"}/${python.sitePackages}" + ]; + + meta = with lib; { + description = "Display and manipulate extended attributes"; + license = [ licenses.psfl licenses.mit ]; # see $doc/share/xattr/OpenSourceLicenses + maintainers = [ maintainers.sternenseemann ]; + homepage = "https://opensource.apple.com/source/python_modules/"; + platforms = lib.platforms.darwin; + }; +} diff --git a/pkgs/top-level/darwin-packages.nix b/pkgs/top-level/darwin-packages.nix index affb4ae92c19..9991e12bbeca 100644 --- a/pkgs/top-level/darwin-packages.nix +++ b/pkgs/top-level/darwin-packages.nix @@ -68,6 +68,8 @@ in usr-include = callPackage ../os-specific/darwin/usr-include { }; + xattr = pkgs.python3Packages.callPackage ../os-specific/darwin/xattr { }; + inherit (callPackages ../os-specific/darwin/xcode { }) xcode_8_1 xcode_8_2 xcode_9_1 xcode_9_2 xcode_9_4 xcode_9_4_1 From c01a8de4f368c33af153164c74342dfe7eb54804 Mon Sep 17 00:00:00 2001 From: sternenseemann Date: Sun, 6 Jun 2021 10:43:36 +0000 Subject: [PATCH 2/5] ghc 8.10.6: Init Backport which adds, rather than updates, the GHC release. ---- The only big change is required for darwin since GHC 8.10.5 now runs xattr in the install phase on darwin: * https://gitlab.haskell.org/ghc/ghc/-/commit/11e1dcde0d3137a8ee5cd32697b2925ea4e84b95 * https://gitlab.haskell.org/ghc/ghc/-/commit/ec451cac39de919621c783fec809c26fb9f0d1c8 Unfortunately, it uses the host /usr/bin/xattr by default which is present in the build due to a lack of sandboxing on darwin. That xattr version however still requires Python 2.7 whereas Python 3.8 is in PATH in our build. We solve this by setting the XATTR environment variable. We can't use python3Packages.xattr since GHC expects Apple's fork of xattr which provides some extra flags to utilize. Co-authored-by: Cheng Shao (Adapted from cb330ce4f05f5a6e2da3021e9cbf4ea2eb592631) --- pkgs/development/compilers/ghc/8.10.6.nix | 276 ++++++++++++++++++ .../compilers/ghc/respect-ar-path.patch | 25 ++ pkgs/top-level/haskell-packages.nix | 19 ++ 3 files changed, 320 insertions(+) create mode 100644 pkgs/development/compilers/ghc/8.10.6.nix create mode 100644 pkgs/development/compilers/ghc/respect-ar-path.patch diff --git a/pkgs/development/compilers/ghc/8.10.6.nix b/pkgs/development/compilers/ghc/8.10.6.nix new file mode 100644 index 000000000000..9c114c9c8543 --- /dev/null +++ b/pkgs/development/compilers/ghc/8.10.6.nix @@ -0,0 +1,276 @@ +{ lib, stdenv, pkgsBuildTarget, targetPackages + +# build-tools +, bootPkgs +, autoconf, automake, coreutils, fetchpatch, fetchurl, perl, python3, m4, sphinx, xattr +, bash + +, libiconv ? null, ncurses + +, # GHC can be built with system libffi or a bundled one. + libffi ? null + +, useLLVM ? !stdenv.targetPlatform.isx86 +, # LLVM is conceptually a run-time-only depedendency, but for + # non-x86, we need LLVM to bootstrap later stages, so it becomes a + # build-time dependency too. + buildLlvmPackages, 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.any (lib.meta.platformMatch stdenv.hostPlatform) gmp.meta.platforms), gmp + +, # If enabled, use -fPIC when compiling static libs. + enableRelocatedStaticLibs ? stdenv.targetPlatform != stdenv.hostPlatform + + # aarch64 outputs otherwise exceed 2GB limit +, enableProfiledLibs ? !stdenv.targetPlatform.isAarch64 + +, # 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 + +, # 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 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.isDarwin && stdenv.targetPlatform.isAarch64 +}: + +assert !enableIntegerSimple -> gmp != null; + +let + inherit (stdenv) buildPlatform hostPlatform targetPlatform; + + inherit (bootPkgs) ghc; + + # TODO(@Ericson2314) Make unconditional + targetPrefix = lib.optionalString + (targetPlatform != hostPlatform) + "${targetPlatform.config}-"; + + buildMK = '' + BuildFlavour = ${ghcFlavour} + ifneq \"\$(BuildFlavour)\" \"\" + include mk/flavours/\$(BuildFlavour).mk + endif + 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} + HADDOCK_DOCS = NO + BUILD_SPHINX_HTML = NO + BUILD_SPHINX_PDF = NO + '' + lib.optionalString (!enableProfiledLibs) '' + GhcLibWays = "v dyn" + '' + lib.optionalString enableRelocatedStaticLibs '' + GhcLibHcOpts += -fPIC + GhcRtsHcOpts += -fPIC + '' + lib.optionalString targetPlatform.useAndroidPrebuilt '' + EXTRA_CC_OPTS += -std=gnu99 + ''; + + # Splicer will pull out correct variations + libDeps = platform: lib.optional enableTerminfo ncurses + ++ [libffi] + ++ lib.optional (!enableIntegerSimple) gmp + ++ lib.optional (platform.libc != "glibc" && !targetPlatform.isWindows) libiconv; + + toolsForTarget = [ + pkgsBuildTarget.targetPackages.stdenv.cc + ] ++ lib.optional useLLVM buildLlvmPackages.llvm; + + targetCC = builtins.head toolsForTarget; + + # ld.gold is disabled for musl libc due to https://sourceware.org/bugzilla/show_bug.cgi?id=23856 + # see #84670 and #49071 for more background. + useLdGold = targetPlatform.isLinux && !(targetPlatform.useLLVM or false) && !targetPlatform.isMusl; + + runtimeDeps = [ + targetPackages.stdenv.cc.bintools + coreutils + ] + # On darwin, we need unwrapped bintools as well (for otool) + ++ lib.optionals (stdenv.targetPlatform.isDarwin) [ + targetPackages.stdenv.cc.bintools.bintools + ]; + +in +stdenv.mkDerivation (rec { + version = "8.10.6"; + name = "${targetPrefix}ghc-${version}"; + + src = fetchurl { + url = "https://downloads.haskell.org/ghc/${version}/ghc-${version}-src.tar.xz"; + sha256 = "43afba72a533408b42c1492bd047b5e37e5f7204e41a5cedd3182cc841610ce9"; + }; + + enableParallelBuilding = true; + + outputs = [ "out" "doc" ]; + + patches = [ + # 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 + ] ++ lib.optionals stdenv.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"; + }) + ]; + + postPatch = "patchShebangs ."; + + # GHC is a bit confused on its cross terminology. + preConfigure = '' + for env in $(env | grep '^TARGET_' | sed -E 's|\+?=.*||'); do + export "''${env#TARGET_}=''${!env}" + done + # GHC is a bit confused on its cross terminology, as these would normally be + # the *host* tools. + export CC="${targetCC}/bin/${targetCC.targetPrefix}cc" + export CXX="${targetCC}/bin/${targetCC.targetPrefix}cxx" + # Use gold to work around https://sourceware.org/bugzilla/show_bug.cgi?id=16177 + export LD="${targetCC.bintools}/bin/${targetCC.bintools.targetPrefix}ld${lib.optionalString useLdGold ".gold"}" + export AS="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}as" + export AR="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}ar" + export NM="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}nm" + export RANLIB="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}ranlib" + export READELF="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}readelf" + export STRIP="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}strip" + + echo -n "${buildMK}" > mk/build.mk + sed -i -e 's|-isysroot /Developer/SDKs/MacOSX10.5.sdk||' configure + '' + lib.optionalString (!stdenv.isDarwin) '' + export NIX_LDFLAGS+=" -rpath $out/lib/ghc-${version}" + '' + lib.optionalString stdenv.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 + ''; + + # TODO(@Ericson2314): Always pass "--target" and always prefix. + configurePlatforms = [ "build" "host" ] + ++ lib.optional (targetPlatform != hostPlatform) "target"; + + # `--with` flags for libraries needed for RTS linker + configureFlags = [ + "--datadir=$doc/share/doc/ghc" + "--with-curses-includes=${ncurses.dev}/include" "--with-curses-libraries=${ncurses.out}/lib" + ] ++ lib.optionals (libffi != null) [ + "--with-system-libffi" + "--with-ffi-includes=${targetPackages.libffi.dev}/include" + "--with-ffi-libraries=${targetPackages.libffi.out}/lib" + ] ++ lib.optionals (targetPlatform == hostPlatform && !enableIntegerSimple) [ + "--with-gmp-includes=${targetPackages.gmp.dev}/include" + "--with-gmp-libraries=${targetPackages.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" + ]; + + # 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 autoconf automake m4 python3 sphinx + ghc bootPkgs.alex bootPkgs.happy bootPkgs.hscolour + ]; + + # For building runtime libs + depsBuildTarget = toolsForTarget; + + buildInputs = [ perl bash ] ++ (libDeps hostPlatform); + + propagatedBuildInputs = [ targetPackages.stdenv.cc ] + ++ lib.optional useLLVM llvmPackages.llvm; + + depsTargetTarget = map lib.getDev (libDeps targetPlatform); + depsTargetTargetPropagated = map (lib.getOutput "out") (libDeps targetPlatform); + + # 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"; + + hardeningDisable = [ "format" ] ++ lib.optional stdenv.targetPlatform.isMusl "pie"; + + postInstall = '' + # Install the bash completion file. + install -D -m 444 utils/completion/ghc.bash $out/share/bash-completion/completions/${targetPrefix}ghc + + # Patch scripts to include "readelf" and "cat" in $PATH. + for i in "$out/bin/"*; do + test ! -h $i || continue + egrep --quiet '^#!' <(head -n 1 $i) || continue + sed -i -e '2i export PATH="$PATH:${lib.makeBinPath runtimeDeps}"' $i + done + ''; + + passthru = { + inherit bootPkgs targetPrefix; + + inherit llvmPackages; + inherit enableShared; + + # Our Cabal compiler name + haskellCompilerName = "ghc-${version}"; + }; + + meta = { + homepage = "http://haskell.org/ghc"; + description = "The Glasgow Haskell Compiler"; + maintainers = with lib.maintainers; [ marcweber andres peti ]; + timeout = 24 * 3600; + inherit (ghc.meta) license platforms; + }; + +} // lib.optionalAttrs targetPlatform.useAndroidPrebuilt { + dontStrip = true; + dontPatchELF = true; + noAuditTmpdir = true; +}) diff --git a/pkgs/development/compilers/ghc/respect-ar-path.patch b/pkgs/development/compilers/ghc/respect-ar-path.patch new file mode 100644 index 000000000000..a08a802c18a0 --- /dev/null +++ b/pkgs/development/compilers/ghc/respect-ar-path.patch @@ -0,0 +1,25 @@ +diff -urd a/aclocal.m4 b/aclocal.m4 +--- a/aclocal.m4 ++++ b/aclocal.m4 +@@ -1199,7 +1199,8 @@ + # thinks that target == host so it never checks the unqualified + # tools for Windows. See #14274. + AC_DEFUN([FP_PROG_AR], +-[if test -z "$fp_prog_ar"; then ++[AC_SUBST(fp_prog_ar,$AR) ++if test -z "$fp_prog_ar"; then + if test "$HostOS" = "mingw32" + then + AC_PATH_PROG([fp_prog_ar], [ar]) +diff -urd a/configure b/configure +--- a/configure ++++ b/configure +@@ -10744,6 +10744,8 @@ + test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + + ++fp_prog_ar=$AR ++ + if test -z "$fp_prog_ar"; then + if test "$HostOS" = "mingw32" + then diff --git a/pkgs/top-level/haskell-packages.nix b/pkgs/top-level/haskell-packages.nix index fd6ec49b4c26..180c61729a26 100644 --- a/pkgs/top-level/haskell-packages.nix +++ b/pkgs/top-level/haskell-packages.nix @@ -124,6 +124,20 @@ in { buildLlvmPackages = buildPackages.llvmPackages_9; llvmPackages = pkgs.llvmPackages_9; }; + ghc8106 = callPackage ../development/compilers/ghc/8.10.6.nix { + # aarch64 ghc865Binary gets SEGVs due to haskell#15449 or similar + bootPkgs = if stdenv.isAarch64 || stdenv.isAarch32 then + packages.ghc8102BinaryMinimal + else + packages.ghc865Binary; + inherit (buildPackages.python3Packages) sphinx; + # 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; + buildLlvmPackages = buildPackages.llvmPackages_9; + llvmPackages = pkgs.llvmPackages_9; + }; ghcHEAD = callPackage ../development/compilers/ghc/head.nix { bootPkgs = packages.ghc883; # no binary yet inherit (buildPackages.python3Packages) sphinx; @@ -230,6 +244,11 @@ in { ghc = bh.compiler.ghc8104; compilerConfig = callPackage ../development/haskell-modules/configuration-ghc-8.10.x.nix { }; }; + ghc8106 = callPackage ../development/haskell-modules { + buildHaskellPackages = bh.packages.ghc8106; + ghc = bh.compiler.ghc8106; + compilerConfig = callPackage ../development/haskell-modules/configuration-ghc-8.10.x.nix { }; + }; ghcHEAD = callPackage ../development/haskell-modules { buildHaskellPackages = bh.packages.ghcHEAD; ghc = bh.compiler.ghcHEAD; From d66c9fe6c0e2bab40cce4dc9e66302baeb3cf1b1 Mon Sep 17 00:00:00 2001 From: sternenseemann <0rpkxez4ksa01gb3typccl0i@systemli.org> Date: Fri, 27 Aug 2021 00:36:49 +0200 Subject: [PATCH 3/5] ghc: 8.10.6 -> 8.10.7 https://www.haskell.org/ghc/download_ghc_8_10_7.html (cherry picked from commit 9eca744cc0484e417deb260076241efb0a6c159d) --- pkgs/development/compilers/ghc/{8.10.6.nix => 8.10.7.nix} | 4 ++-- pkgs/top-level/haskell-packages.nix | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) rename pkgs/development/compilers/ghc/{8.10.6.nix => 8.10.7.nix} (99%) diff --git a/pkgs/development/compilers/ghc/8.10.6.nix b/pkgs/development/compilers/ghc/8.10.7.nix similarity index 99% rename from pkgs/development/compilers/ghc/8.10.6.nix rename to pkgs/development/compilers/ghc/8.10.7.nix index 9c114c9c8543..f7d82e09e280 100644 --- a/pkgs/development/compilers/ghc/8.10.6.nix +++ b/pkgs/development/compilers/ghc/8.10.7.nix @@ -104,12 +104,12 @@ let in stdenv.mkDerivation (rec { - version = "8.10.6"; + version = "8.10.7"; name = "${targetPrefix}ghc-${version}"; src = fetchurl { url = "https://downloads.haskell.org/ghc/${version}/ghc-${version}-src.tar.xz"; - sha256 = "43afba72a533408b42c1492bd047b5e37e5f7204e41a5cedd3182cc841610ce9"; + sha256 = "e3eef6229ce9908dfe1ea41436befb0455fefb1932559e860ad4c606b0d03c9d"; }; enableParallelBuilding = true; diff --git a/pkgs/top-level/haskell-packages.nix b/pkgs/top-level/haskell-packages.nix index 180c61729a26..fbedaedf4df7 100644 --- a/pkgs/top-level/haskell-packages.nix +++ b/pkgs/top-level/haskell-packages.nix @@ -124,7 +124,7 @@ in { buildLlvmPackages = buildPackages.llvmPackages_9; llvmPackages = pkgs.llvmPackages_9; }; - ghc8106 = callPackage ../development/compilers/ghc/8.10.6.nix { + ghc8107 = callPackage ../development/compilers/ghc/8.10.7.nix { # aarch64 ghc865Binary gets SEGVs due to haskell#15449 or similar bootPkgs = if stdenv.isAarch64 || stdenv.isAarch32 then packages.ghc8102BinaryMinimal @@ -244,9 +244,9 @@ in { ghc = bh.compiler.ghc8104; compilerConfig = callPackage ../development/haskell-modules/configuration-ghc-8.10.x.nix { }; }; - ghc8106 = callPackage ../development/haskell-modules { - buildHaskellPackages = bh.packages.ghc8106; - ghc = bh.compiler.ghc8106; + ghc8107 = callPackage ../development/haskell-modules { + buildHaskellPackages = bh.packages.ghc8107; + ghc = bh.compiler.ghc8107; compilerConfig = callPackage ../development/haskell-modules/configuration-ghc-8.10.x.nix { }; }; ghcHEAD = callPackage ../development/haskell-modules { From 7aa891b9051790651c645efd4fff4f8100d6298a Mon Sep 17 00:00:00 2001 From: Alexandre Esteves Date: Thu, 9 Sep 2021 02:33:43 +0100 Subject: [PATCH 4/5] ghc8.10.7: fix mingw build (cherry picked from commit eea8e3eacec12fe4e46d3ecb8e3cbbd03a10b2f0) --- pkgs/development/compilers/ghc/8.10.7.nix | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/pkgs/development/compilers/ghc/8.10.7.nix b/pkgs/development/compilers/ghc/8.10.7.nix index f7d82e09e280..b6aba13b5cc3 100644 --- a/pkgs/development/compilers/ghc/8.10.7.nix +++ b/pkgs/development/compilers/ghc/8.10.7.nix @@ -75,6 +75,12 @@ let 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 @@ -91,7 +97,7 @@ let # ld.gold is disabled for musl libc due to https://sourceware.org/bugzilla/show_bug.cgi?id=23856 # see #84670 and #49071 for more background. - useLdGold = targetPlatform.isLinux && !(targetPlatform.useLLVM or false) && !targetPlatform.isMusl; + useLdGold = targetPlatform.isLinux && !(targetPlatform.useLLVM or false) && !targetPlatform.isMusl && !targetPlatform.isWindows; runtimeDeps = [ targetPackages.stdenv.cc.bintools @@ -124,6 +130,13 @@ stdenv.mkDerivation (rec { # upstream patch. Don't forget to check backport status of the upstream patch # when adding new GHC releases in nixpkgs. ./respect-ar-path.patch + + # 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"; + }) ] ++ lib.optionals stdenv.isDarwin [ # Make Block.h compile with c++ compilers. Remove with the next release (fetchpatch { From bfe8ece9d9693556f7547490998f91bf1f50bc00 Mon Sep 17 00:00:00 2001 From: Divam Date: Wed, 25 Aug 2021 19:54:49 +0900 Subject: [PATCH 5/5] ghc: add the Cabal ghcjs support patch (cherry picked from commit feac31b1f05bf8be4681b461987f26a37a47c60f) --- pkgs/development/compilers/ghc/8.10.7.nix | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pkgs/development/compilers/ghc/8.10.7.nix b/pkgs/development/compilers/ghc/8.10.7.nix index b6aba13b5cc3..4c92de0940b1 100644 --- a/pkgs/development/compilers/ghc/8.10.7.nix +++ b/pkgs/development/compilers/ghc/8.10.7.nix @@ -137,6 +137,15 @@ stdenv.mkDerivation (rec { 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/"; + }) ] ++ lib.optionals stdenv.isDarwin [ # Make Block.h compile with c++ compilers. Remove with the next release (fetchpatch {