build: Nix environment
authorKosyrev Serge <skosyrev@ptsecurity.com>
Tue, 20 Dec 2016 19:48:24 +0000 (22:48 +0300)
committerKosyrev Serge <skosyrev@ptsecurity.com>
Tue, 20 Dec 2016 19:48:58 +0000 (22:48 +0300)
Signed-off-by: Kosyrev Serge <skosyrev@ptsecurity.com>

default.nix [new file with mode: 0644]
shell.nix [new file with mode: 0644]

diff --git a/default.nix b/default.nix
new file mode 100644 (file)
index 0000000..0ae16f4
--- /dev/null
@@ -0,0 +1,72 @@
+{ stdenv, fetchgit, haskell
+
+, autoconf
+, automake
+, binutils
+, coreutils
+, curl
+, gcc5
+, git
+, gmp
+, gnugrep
+, gnused
+, m4
+
+, ghc-version ? "ghc801"
+
+, propagate-deps ? false
+, use-repo-source ? false
+, repo-url ? ""
+, repo-commit-id ? ""
+, repo-commit-sha256 ? ""
+}:
+
+let src-repo = fetchgit {
+      url    = repo-url;
+      rev    = repo-commit-id;
+      sha256 = repo-commit-sha256;
+    };
+    ghc        = haskell.packages."${ghc-version}".ghcWithPackages
+                     (haskellPackages: with haskellPackages; [
+                       async
+                       bytestring-trie
+                       ghc-paths
+                       ghc-mtl
+                       haskell-src-exts
+                       parsec
+                       random
+                     ]);
+    deps       = [
+       autoconf
+       automake
+       binutils
+       coreutils
+       curl
+       gcc5
+       git
+       gmp
+       gnugrep
+       gnused
+       m4
+
+       # custom GHC
+       ghc
+    ];
+in
+stdenv.mkDerivation {
+       version = "2016-11-09";
+       name    = "barrelfish";
+       src     = if use-repo-source
+                 then src-repo
+                 else builtins.filterSource
+                      (path: type: baseNameOf path != ".git" && baseNameOf path != "build")
+                      ./.;
+
+       buildInputs = deps;
+       propagatedBuildInputs = if propagate-deps
+                               then deps
+                               else [];
+
+       description = "The Barrelfish OS";
+       license = "MIT";
+}
diff --git a/shell.nix b/shell.nix
new file mode 100644 (file)
index 0000000..65a3f2d
--- /dev/null
+++ b/shell.nix
@@ -0,0 +1,43 @@
+# How to employ Nix to compose/deploy the build environment:
+#
+# 1. Get derivation path:
+#
+# $ STOREDRVPATH=$(nix-instantiate --no-build-output --cores 4 -E 'import ./shell.nix { closure-generation-mode = true; repo-commit-id="commit-id"; repo-commit-sha256="nix-hash"; }')
+#
+# 2. Export closure on the source host:
+#
+# $ nix-store --export $(nix-store --query --requisites --include-outputs ${STOREDRVPATH}) > ~/barrelfish.closure
+#
+# 3. Import closure on the target host (and transfer the value of STOREDRVPATH):
+#
+# $ nix-store --import barrelfish.closure
+#
+# 4. Enter shell :
+#
+# $ nix-shell ${STOREDRVPATH}
+
+{ nixpkgs ? import <nixpkgs> {}
+, ghc-version ? "ghc801"
+
+, closure-generation-mode ? false
+, propagate-deps ? closure-generation-mode
+, use-repo-source ? closure-generation-mode
+, repo-url ? ""
+, repo-commit-id ? ""
+, repo-commit-sha256 ? ""
+}:
+
+let
+
+  inherit (nixpkgs) pkgs;
+
+  f = import ./.; # your default.nix
+
+in
+
+  pkgs.callPackage f {
+    haskell = pkgs.haskell;
+
+    inherit ghc-version;
+    inherit propagate-deps use-repo-source repo-url repo-commit-id repo-commit-sha256;
+  }