summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Omni/Bild/Builder.nix58
1 files changed, 28 insertions, 30 deletions
diff --git a/Omni/Bild/Builder.nix b/Omni/Bild/Builder.nix
index 6610a27..3328b7d 100644
--- a/Omni/Bild/Builder.nix
+++ b/Omni/Bild/Builder.nix
@@ -185,28 +185,33 @@ with bild; let
name = "hs-mod-${sanitize modName}";
src = mkModuleSrc node.nodePath;
inherit CODEROOT;
- buildInputs = sysdeps_ ++ [ghcPkg] ++ depDrvs;
- buildPhase = let
- copyDeps =
- lib.strings.concatMapStringsSep "\n" (d: ''
- cp -rL ${d}/hidir/. hidir/ 2>/dev/null || true
- '')
- depDrvs;
- in ''
- mkdir -p hidir odir
- ${copyDeps}
- chmod -R +w hidir || true
- ghc -c \
- -Wall -Werror -haddock -Winvalid-haddock \
- -i. -ihidir \
- -odir odir -hidir hidir \
- ${node.nodePath}
- '';
- installPhase = ''
- mkdir -p $out/hidir $out/odir
- cp -r hidir/* $out/hidir/ || true
- cp -r odir/* $out/odir/ || true
- '';
+ nativeBuildInputs = [];
+ buildInputs = sysdeps_ ++ depDrvs;
+ builder = "${stdenv.shell}";
+ args = [
+ "-c"
+ (let
+ copyDeps =
+ lib.strings.concatMapStringsSep "\n" (d: ''
+ cp -rL ${d}/hidir/. hidir/ 2>/dev/null || true
+ '')
+ depDrvs;
+ in ''
+ set -eu
+ cd $sourceRoot
+ mkdir -p hidir odir
+ ${copyDeps}
+ chmod -R +w hidir || true
+ ${ghcPkg}/bin/ghc -c \
+ -Wall -Werror -haddock -Winvalid-haddock \
+ -i. -ihidir \
+ -odir odir -hidir hidir \
+ ${node.nodePath}
+ mkdir -p $out/hidir $out/odir
+ cp -r hidir/* $out/hidir/ || true
+ cp -r odir/* $out/odir/ || true
+ '')
+ ];
};
# Recursive attrset of all module derivations
@@ -215,11 +220,6 @@ with bild; let
(modName: node:
mkModuleDrv modName node (map (dep: builtins.getAttr dep self) node.nodeImports))
graph.graphModules);
-
- # Compute exact object paths at eval time
- moduleToObjPath = modName: drv: "${drv}/odir/${lib.strings.replaceStrings ["."] ["/"] modName}.o";
- objectPaths =
- lib.attrsets.mapAttrsToList moduleToObjPath modules;
in
# Final link derivation
stdenv.mkDerivation rec {
@@ -230,8 +230,7 @@ with bild; let
pkgFlags = lib.strings.concatMapStringsSep " " (p: "-package ${p}") target.langdeps;
copyHiFiles = lib.strings.concatMapStringsSep "\n" (drv: "cp -rL ${drv}/hidir/. . 2>/dev/null || true") (lib.attrsets.attrValues modules);
in ''
- set -eux
- echo "Starting custom link phase with ${builtins.toString (builtins.length objectPaths)} object files"
+ set -eu
${copyHiFiles}
chmod -R +w . || true
${ghcPkg}/bin/ghc --make \
@@ -241,7 +240,6 @@ with bild; let
-threaded \
-o ${name} \
${lib.optionalString (target.mainModule != "Main") "-main-is ${target.mainModule}"}
- echo "Link completed successfully"
'';
installPhase = ''
install -D ${name} $out/bin/${name}