From 5ea114083c0362f8d58f967fccb7e4916f02cf06 Mon Sep 17 00:00:00 2001 From: sternenseemann Date: Mon, 9 Oct 2023 23:10:53 +0200 Subject: 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. --- .../haskell-modules/configuration-ghc-9.6.x.nix | 4 +--- pkgs/development/haskell-modules/make-package-set.nix | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) (limited to 'pkgs/development/haskell-modules') 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 ]; + }); } -- cgit 1.4.1