about summary refs log tree commit diff
path: root/pkgs/development/haskell-modules
diff options
context:
space:
mode:
authorsternenseemann <sternenseemann@systemli.org>2023-10-09 23:10:53 +0200
committersternenseemann <sternenseemann@systemli.org>2023-10-22 19:18:13 +0200
commit5ea114083c0362f8d58f967fccb7e4916f02cf06 (patch)
treef177d8ee4c36b7b936b6e4a5274ed56c017e1312 /pkgs/development/haskell-modules
parent4a47fc9395f2dc6577a2f637debc1518236592c6 (diff)
downloadnixlib-5ea114083c0362f8d58f967fccb7e4916f02cf06.tar
nixlib-5ea114083c0362f8d58f967fccb7e4916f02cf06.tar.gz
nixlib-5ea114083c0362f8d58f967fccb7e4916f02cf06.tar.bz2
nixlib-5ea114083c0362f8d58f967fccb7e4916f02cf06.tar.lz
nixlib-5ea114083c0362f8d58f967fccb7e4916f02cf06.tar.xz
nixlib-5ea114083c0362f8d58f967fccb7e4916f02cf06.tar.zst
nixlib-5ea114083c0362f8d58f967fccb7e4916f02cf06.zip
haskell.packages.ghc96.tls: fix missing LLVM tools on aarch64
The original change missed that we used to erroneously provide LLVM on
aarch64-linux, but not on aarch64-darwin which was later fixed
in #246045. Since the change was tested on aarch64-linux prior to this,
tls ended up being broken on both aarch64-linux and aarch64-darwin.

This commit resolves the situation by introducing a helper function to
achieve the effect of passing -fllvm while ensuring LLVM is provided.

Resolves #260013.
Diffstat (limited to 'pkgs/development/haskell-modules')
-rw-r--r--pkgs/development/haskell-modules/configuration-ghc-9.6.x.nix4
-rw-r--r--pkgs/development/haskell-modules/make-package-set.nix14
2 files changed, 15 insertions, 3 deletions
diff --git a/pkgs/development/haskell-modules/configuration-ghc-9.6.x.nix b/pkgs/development/haskell-modules/configuration-ghc-9.6.x.nix
index e14ad08b9263..0c6320e4f77b 100644
--- a/pkgs/development/haskell-modules/configuration-ghc-9.6.x.nix
+++ b/pkgs/development/haskell-modules/configuration-ghc-9.6.x.nix
@@ -272,7 +272,5 @@ self: super: {
   # the workaround on 9.6 is to revert to the LLVM backend (which is used
   # for these sorts of situations even on 9.2 and 9.4).
   # https://gitlab.haskell.org/ghc/ghc/-/issues/23746#note_525318
-  tls = appendConfigureFlags
-    (lib.optionals pkgs.stdenv.hostPlatform.isAarch64 [ "--ghc-option=-fllvm" ])
-    super.tls;
+  tls = if pkgs.stdenv.hostPlatform.isAarch64 then self.forceLlvmCodegenBackend super.tls else super.tls;
 }
diff --git a/pkgs/development/haskell-modules/make-package-set.nix b/pkgs/development/haskell-modules/make-package-set.nix
index 753945ea6fc1..c39c934bed64 100644
--- a/pkgs/development/haskell-modules/make-package-set.nix
+++ b/pkgs/development/haskell-modules/make-package-set.nix
@@ -625,4 +625,18 @@ in package-set { inherit pkgs lib callPackage; } self // {
         else pkg
       ) { };
 
+    /*
+      Modify given Haskell package to force GHC to employ the LLVM
+      codegen backend when compiling. Useful when working around bugs
+      in a native codegen backend GHC defaults to.
+
+      Example:
+        forceLlvmCodegenBackend tls
+
+      Type: drv -> drv
+    */
+    forceLlvmCodegenBackend = haskellLib.overrideCabal (drv: {
+      configureFlags = drv.configureFlags or [ ] ++ [ "--ghc-option=-fllvm" ];
+      buildTools = drv.buildTools or [ ] ++ [ self.llvmPackages.llvm ];
+    });
   }