From de1e068b1f49a8b2b3abf9e2d1ad0b987e75841e Mon Sep 17 00:00:00 2001 From: sternenseemann Date: Tue, 9 Sep 2025 15:39:30 +0200 Subject: [PATCH 1/3] ghcWithPackages: expose targetPrefix --- pkgs/development/haskell-modules/with-packages-wrapper.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/haskell-modules/with-packages-wrapper.nix b/pkgs/development/haskell-modules/with-packages-wrapper.nix index 6fb552d22c75..b683febeaf6c 100644 --- a/pkgs/development/haskell-modules/with-packages-wrapper.nix +++ b/pkgs/development/haskell-modules/with-packages-wrapper.nix @@ -178,7 +178,7 @@ else + postBuild; preferLocalBuild = true; passthru = { - inherit (ghc) version meta; + inherit (ghc) version meta targetPrefix; hoogle = hoogleWithPackages'; From d1bc568af24346f8af5d50277c58679c9e40c71c Mon Sep 17 00:00:00 2001 From: sternenseemann Date: Tue, 9 Sep 2025 15:40:03 +0200 Subject: [PATCH 2/3] tests.haskell.ghcWithPackages: verify -fllvm works with useLLVM Note that this test also succeeds in pkgsCross though using a stdenv with cc is crucial, since its setup hooks are required for -lgmp to work. Maybe this is something we should look at for GHC again, maybe we can add extra entries to the package db, so it passes the necessary -L flags by itself? --- pkgs/test/haskell/ghcWithPackages/default.nix | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/pkgs/test/haskell/ghcWithPackages/default.nix b/pkgs/test/haskell/ghcWithPackages/default.nix index c31721b9531e..e1140ae0b482 100644 --- a/pkgs/test/haskell/ghcWithPackages/default.nix +++ b/pkgs/test/haskell/ghcWithPackages/default.nix @@ -1,6 +1,7 @@ { lib, runCommand, + runCommandCC, haskellPackages, }: @@ -45,4 +46,21 @@ lib.recurseIntoAttrs { touch $out ''; + + use-llvm = + let + ghc = (haskellPackages.ghcWithPackages.override { useLLVM = true; }) (_: [ ]); + in + runCommandCC "ghc-with-packages-use-llvm" + { + nativeBuildInputs = [ ghc ]; + } + '' + echo 'main = pure ()' > test.hs + # -ddump-llvm is unnecessary, but nice for visual feedback in the build log + ${ghc.targetPrefix}ghc --make -fllvm -keep-llvm-files -ddump-llvm test.hs + # Did we actually use the LLVM backend? + test -f test.ll + touch $out + ''; } From 49ac23d75d420c9f9d27dcfbeb30971f1a760de4 Mon Sep 17 00:00:00 2001 From: sternenseemann Date: Tue, 9 Sep 2025 15:43:29 +0200 Subject: [PATCH 3/3] tests.haskell.ghcWithPackages.regression-224542: make cross aware Obviously, we can't run GHCi of a cross-compiler, but respecting targetPrefix will give a more helpful error message: : not built for interactive use --- pkgs/test/haskell/ghcWithPackages/default.nix | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/pkgs/test/haskell/ghcWithPackages/default.nix b/pkgs/test/haskell/ghcWithPackages/default.nix index e1140ae0b482..aedcac0d2c91 100644 --- a/pkgs/test/haskell/ghcWithPackages/default.nix +++ b/pkgs/test/haskell/ghcWithPackages/default.nix @@ -22,16 +22,19 @@ lib.recurseIntoAttrs { # See: https://github.com/NixOS/nixpkgs/pull/224542 regression-224542 = + let + ghc = haskellPackages.ghcWithPackages (hsPkgs: [ + hsPkgs.hspec + ]); + in runCommand "regression-224542" { - buildInputs = [ - (haskellPackages.ghcWithPackages (hsPkgs: [ - hsPkgs.hspec - ])) + nativeBuildInputs = [ + ghc ]; } '' - ghc --interactive \ + ${ghc.targetPrefix}ghc --interactive \ -Werror=unrecognised-warning-flags \ -Werror=missed-extra-shared-lib \ 2>&1 \