on iko/ghcjs-patch-master help sign in
Add projectCross to projects (like pkgsCross) (#946)

This change adds a `projectCross` attribute to the return value of the project functions. It is similar to `pkgs.pkgsCross` and makes it easier to build cross compiled versions of project (or get a cross compile with `p.projectCross.${platform}.shellFor`).

commita9584f36e26f58f7fe116cbebac11a37a72e577c authorHamish Mackenzie <Hamish.Mackenzie@iohk.io> dateMon 30 Nov 2020, 15:42 (6 years ago) parent112816b
3 files changed+16
docs/reference/library.md+1 docs/tutorials/getting-started.md+7 overlays/haskell.nix+8
docs/reference/library.md+1
@@ -165,6 +165,7 @@ Then feeding its result into [mkCabalProjectPkgSet](#mkcabalprojectpkgset) passi
165165| `shellFor` | Function | [`shellFor`](#shellfor) |
166166| `ghcWithHoogle` | Function | [`ghcWithHoogle`](#ghcwithhoogle) |
167167| `ghcWithPackages` | Function | [`ghcWithPackages`](#ghcwithpackages) |
168+| `projectCross` | Attrset | Like `pkgs.pkgsCross.X` from nixpkgs `p.projectCross.X` returns the project results for cross compilation to X. So `p.projectCross.ghcjs.hsPkgs` is the same as `hsPkgs` but compiled with ghcjs |
168169
169170## project, cabalProject and stackProject
170171
docs/tutorials/getting-started.md+7
@@ -77,6 +77,13 @@ To build an executable:
7777nix-build -A your-package-name.components.exes.your-exe-name
7878```
7979
80+To cross compile use the `projectCross` attribute:
81+
82+```
83+nix-build -A projectCross.ghcjs.hsPkgs.your-package-name.components.exes.your-exe-name
84+nix-build -A projectCross.mingwW64.hsPkgs.your-package-name.components.exes.your-exe-name
85+```
86+
8087To open a shell for use with `cabal` run:
8188
8289```shell
overlays/haskell.nix+8
@@ -520,6 +520,8 @@ final: prev: {
520520 tool = final.buildPackages.haskell-nix.tool pkg-set.config.compiler.nix-name;
521521 tools = final.buildPackages.haskell-nix.tools pkg-set.config.compiler.nix-name;
522522 roots = final.haskell-nix.roots pkg-set.config.compiler.nix-name;
523+ projectFunction = haskell-nix: haskell-nix.cabalProject';
524+ projectArgs = args';
523525 };
524526 in project;
525527
@@ -560,6 +562,10 @@ final: prev: {
560562
561563 projectCoverageReport = haskellLib.projectCoverageReport (map (pkg: pkg.coverageReport) (final.lib.attrValues (haskellLib.selectProjectPackages hsPkgs)));
562564
565+ projectCross = (final.lib.mapAttrs (_: pkgs:
566+ rawProject.projectFunction pkgs.haskell-nix rawProject.projectArgs
567+ ) final.pkgsCross) // { recurseForDerivations = false; };
568+
563569 inherit (rawProject.hsPkgs) makeConfigFiles ghcWithHoogle ghcWithPackages shellFor;
564570 });
565571
@@ -592,6 +598,8 @@ final: prev: {
592598 tool = final.buildPackages.haskell-nix.tool pkg-set.config.compiler.nix-name;
593599 tools = final.buildPackages.haskell-nix.tools pkg-set.config.compiler.nix-name;
594600 roots = final.haskell-nix.roots pkg-set.config.compiler.nix-name;
601+ projectFunction = haskell-nix: haskell-nix.stackProject';
602+ projectArgs = args;
595603 };
596604 in project;
597605