Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions pkgs/development/compilers/ghc/common-hadrian.nix
Original file line number Diff line number Diff line change
Expand Up @@ -269,7 +269,9 @@
# Missing ELF symbols
++ lib.optionals stdenv.targetPlatform.isAndroid [
./ghc-define-undefined-elf-st-visibility.patch
];
]

++ (import ./common-llvm-patches.nix { inherit lib version fetchpatch; });

stdenv = stdenvNoCC;
},
Expand Down Expand Up @@ -859,8 +861,6 @@ stdenv.mkDerivation (
timeout = 24 * 3600;
platforms = lib.platforms.all;
inherit (bootPkgs.ghc.meta) license;
# To be fixed by <https://github.com/NixOS/nixpkgs/pull/440774>.
broken = useLLVM;
};

dontStrip = targetPlatform.useAndroidPrebuilt || targetPlatform.isWasm;
Expand Down
126 changes: 126 additions & 0 deletions pkgs/development/compilers/ghc/common-llvm-patches.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
{
lib,
version,
fetchpatch,
}:

# Backports for LLVM support.
#
# These primarily focus on backporting patches that are relevant to
# supporting newer LLVM versions, rather than aiming to backport every
# LLVM backend bug fix or improvement from newer GHC releases.
#
# Potentially of interest for cross‐compiling GHC 9.4.8 to LoongArch64:
#
# * <https://gitlab.haskell.org/ghc/ghc/-/merge_requests/9292>
# * <https://gitlab.haskell.org/ghc/ghc/-/merge_requests/13620>

[ ]

++ lib.optionals (lib.versionOlder version "9.6") [
# <https://gitlab.haskell.org/ghc/ghc/-/merge_requests/9857>
(fetchpatch {
name = "ghc-9.4-llvm-support-15.patch";
url = "https://gitlab.haskell.org/ghc/ghc/-/commit/0cc16aaf89d7dc3963764b7193ceac73e4e3329b.patch";
hash = "sha256-G0gqrj5iPuQ5JuC2+d151yka72XZMbrqMWPZd4EuT04=";
})

# <https://gitlab.haskell.org/ghc/ghc/-/merge_requests/13763>
./ghc-9.4-llvm-fix-version-detection.patch
]

++ lib.optionals (lib.versionOlder version "9.8") [
(
# The upstream backport of !13763 in 9.6.7 removed an unused import
# that is required by the next series.
if lib.versionOlder version "9.6" then null else ./ghc-9.6-llvm-restore-import.patch
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This versionOlder could be floated in the condition above like it used to be?!

Copy link
Member Author

@emilazy emilazy Oct 18, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I switched it because this was the only lib.optionals with a dual condition – everything else is just a plain “version is older” – and we have some existing if lib.versionOlder … then … else … cases, including another one with null, so this seemed more consistent. But I’m ambivalent.

)
]

++ lib.optionals (lib.versionOlder version "9.10") [
# <https://gitlab.haskell.org/ghc/ghc/-/merge_requests/11124>
(
if lib.versionOlder version "9.8" then
./ghc-9.4-llvm-add-metadata-exports.patch
else
fetchpatch {
name = "ghc-9.8-llvm-add-metadata-exports.patch";
url = "https://gitlab.haskell.org/ghc/ghc/-/commit/fcfc1777c22ad47613256c3c5e7304cfd29bc761.patch";
hash = "sha256-9rpyeH8TUVeKoW4PA6qn7DG2+P9MhBCywmbi1O/NsTQ=";
}
)
(
if lib.versionOlder version "9.8" then
./ghc-9.4-llvm-allow-llvmlits-in-metaexprs.patch
else
fetchpatch {
name = "ghc-9.8-llvm-allow-llvmlits-in-metaexprs.patch";
url = "https://gitlab.haskell.org/ghc/ghc/-/commit/5880fff6d353a14785c457999fded5a7100c9514.patch";
hash = "sha256-NDMGNc0PYpWJUW+nI2YvMsBOWRIfNix4oWHQZAIxrVY=";
}
)
(
# `GHC.Driver.DynFlags` was not split out until 9.8, so this can be
# omitted with no functional effect on the rest of the series on
# earlier versions.
if lib.versionOlder version "9.8" then
null
else
fetchpatch {
name = "ghc-9.8-move-feature-predicates-to-dynflags.patch";
url = "https://gitlab.haskell.org/ghc/ghc/-/commit/86ce92a2f81a04aa980da2891d0e300cb3cb7efd.patch";
hash = "sha256-SzJgzq4b5wAMPz+/QSa67iSOxB2enqejvV0lsF0+9L8=";
}
)
(fetchpatch {
name = "ghc-9.4-llvm-add-module-flag-metadata-infra.patch";
url = "https://gitlab.haskell.org/ghc/ghc/-/commit/a6a3874276ced1b037365c059dcd0a758e813a5b.patch";
hash = "sha256-tAYDRNXmpp5cZtyONpO8vlsDmnNEBbh4J3oSCy/uWWc=";
})
(
if lib.versionOlder version "9.8" then
./ghc-9.4-llvm-fix-stack-alignment.patch
else
fetchpatch {
name = "ghc-9.8-llvm-fix-stack-alignment.patch";
url = "https://gitlab.haskell.org/ghc/ghc/-/commit/e9af2cf3f16ab60b5c79ed91df95359b11784df6.patch";
hash = "sha256-RmYwFN3c3AgJxF9KXWQLdwOgugzepCW1wcTdJX1h0C4=";
}
)

# <https://gitlab.haskell.org/ghc/ghc/-/merge_requests/8999>
(
if lib.versionOlder version "9.6" then
./ghc-9.4-llvm-use-new-pass-manager.patch
else if lib.versionOlder version "9.8" then
./ghc-9.6-llvm-use-new-pass-manager.patch
else
./ghc-9.8-llvm-use-new-pass-manager.patch
)
]

++ lib.optionals (lib.versionOlder version "9.12") [
# <https://gitlab.haskell.org/ghc/ghc/-/merge_requests/12726>
(fetchpatch {
name = "ghc-9.4-llvm-support-16-17-18.patch";
url = "https://gitlab.haskell.org/ghc/ghc/-/commit/ae170155e82f1e5f78882f7a682d02a8e46a5823.patch";
hash = "sha256-U1znWqXZTORmAg480p5TjTL53T2Zn+1+9Fnk2V1Drfs=";
})

# <https://gitlab.haskell.org/ghc/ghc/-/merge_requests/13311>
(fetchpatch {
name = "ghc-9.4-llvm-support-19.patch";
url = "https://gitlab.haskell.org/ghc/ghc/-/commit/36bbb167f354a2fbc6c4842755f2b1e374e3580e.patch";
excludes = [ ".gitlab-ci.yml" ];
hash = "sha256-v8T/FtriDPbibcIDZmU2yotBoDVo+wU2+gw+CCdQlm0=";
})
]

++ lib.optionals (lib.versionOlder version "9.14") [
# <https://gitlab.haskell.org/ghc/ghc/-/merge_requests/14600>
(fetchpatch {
name = "ghc-9.4-llvm-support-20.patch";
url = "https://gitlab.haskell.org/ghc/ghc/-/commit/ca03226db2db2696460bfcb8035dd3268d546706.patch";
hash = "sha256-7cO049DQtJHUAhwPujoFO+zQtXsMg6VFTHtMDwenrKs=";
})
]
18 changes: 6 additions & 12 deletions pkgs/development/compilers/ghc/common-make-native-bignum.nix
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,12 @@

# build-tools
bootPkgs,
autoconf,
automake,
autoreconfHook,
coreutils,
fetchpatch,
fetchurl,
perl,
python3,
m4,
sphinx,
xattr,
autoSignDarwinBinariesHook,
Expand Down Expand Up @@ -388,7 +386,9 @@ stdenv.mkDerivation (
# elimination on aarch64-darwin. (see
# https://github.com/NixOS/nixpkgs/issues/140774 for details).
./Cabal-at-least-3.6-paths-fix-cycle-aarch64-darwin.patch
];
]

++ (import ./common-llvm-patches.nix { inherit lib version fetchpatch; });

postPatch = "patchShebangs .";

Expand Down Expand Up @@ -444,7 +444,6 @@ stdenv.mkDerivation (
export AR_STAGE0="$AR_FOR_BUILD"

echo -n "${buildMK}" > mk/build.mk
sed -i -e 's|-isysroot /Developer/SDKs/MacOSX10.5.sdk||' configure
''
# Haddock and sphinx need a working locale
+ lib.optionalString (enableDocs || enableHaddockProgram) (
Expand Down Expand Up @@ -479,8 +478,7 @@ stdenv.mkDerivation (
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
for x in aclocal.m4; do
substituteInPlace $x \
--replace '*-android*|*-gnueabi*)' \
'*-android*|*-gnueabi*|*-musleabi*)'
Expand Down Expand Up @@ -547,10 +545,8 @@ stdenv.mkDerivation (
dontAddExtraLibs = true;

nativeBuildInputs = [
autoreconfHook
perl
autoconf
automake
m4
python3
bootPkgs.alex
bootPkgs.happy
Expand Down Expand Up @@ -677,8 +673,6 @@ stdenv.mkDerivation (
timeout = 24 * 3600;
platforms = lib.platforms.all;
inherit (bootPkgs.ghc.meta) license;
# To be fixed by <https://github.com/NixOS/nixpkgs/pull/440774>.
broken = useLLVM;
};

}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
From 701154fdbceff2edb121768eb660713a98580af8 Mon Sep 17 00:00:00 2001
From: Ben Gamari <ben@smart-cactus.org>
Date: Tue, 22 Aug 2023 12:23:26 -0400
Subject: [PATCH] llvmGen: Add export list to GHC.Llvm.MetaData

(cherry picked from commit fcfc1777c22ad47613256c3c5e7304cfd29bc761)
---
compiler/GHC/Llvm/MetaData.hs | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/compiler/GHC/Llvm/MetaData.hs b/compiler/GHC/Llvm/MetaData.hs
index f46ae0a101..3526c11bc3 100644
--- a/compiler/GHC/Llvm/MetaData.hs
+++ b/compiler/GHC/Llvm/MetaData.hs
@@ -1,6 +1,12 @@
{-# LANGUAGE GeneralizedNewtypeDeriving #-}

-module GHC.Llvm.MetaData where
+module GHC.Llvm.MetaData
+ ( MetaId(..)
+ , ppr
+ , MetaExpr(..)
+ , MetaAnnot(..)
+ , MetaDecl(..)
+ ) where

import GHC.Prelude

--
2.50.1

Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
From 51765e343e9829f1d3e95d1d7303fa3594ae91cc Mon Sep 17 00:00:00 2001
From: Ben Gamari <ben@smart-cactus.org>
Date: Tue, 22 Aug 2023 12:24:53 -0400
Subject: [PATCH] llvmGen: Allow LlvmLits in MetaExprs

This omission appears to be an oversight.

(cherry picked from commit 5880fff6d353a14785c457999fded5a7100c9514)
---
compiler/GHC/Llvm/MetaData.hs | 1 +
compiler/GHC/Llvm/Ppr.hs | 1 +
2 files changed, 2 insertions(+)

diff --git a/compiler/GHC/Llvm/MetaData.hs b/compiler/GHC/Llvm/MetaData.hs
index f46ae0a101..121cdd5788 100644
--- a/compiler/GHC/Llvm/MetaData.hs
+++ b/compiler/GHC/Llvm/MetaData.hs
@@ -68,6 +68,7 @@ instance Outputable MetaId where

-- | LLVM metadata expressions
data MetaExpr = MetaStr !LMString
+ | MetaLit !LlvmLit
| MetaNode !MetaId
| MetaVar !LlvmVar
| MetaStruct [MetaExpr]
diff --git a/compiler/GHC/Llvm/Ppr.hs b/compiler/GHC/Llvm/Ppr.hs
index f48e7aa034..bc88a13439 100644
--- a/compiler/GHC/Llvm/Ppr.hs
+++ b/compiler/GHC/Llvm/Ppr.hs
@@ -256,6 +256,7 @@ ppMetaExpr :: LlvmCgConfig -> MetaExpr -> SDoc
ppMetaExpr opts = \case
MetaVar (LMLitVar (LMNullLit _)) -> text "null"
MetaStr s -> char '!' <> doubleQuotes (ftext s)
+ MetaLit l -> ppTypeLit opts l
MetaNode n -> ppr n
MetaVar v -> ppVar opts v
MetaStruct es -> char '!' <> braces (ppCommaJoin (map (ppMetaExpr opts) es))
--
2.50.1

Loading
Loading