This repository has been archived by the owner on Feb 22, 2024. It is now read-only.
forked from filecoin-project/ec-gpu
-
Notifications
You must be signed in to change notification settings - Fork 0
/
flake.nix
97 lines (93 loc) · 2.89 KB
/
flake.nix
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
{
description = "Neptune";
inputs = {
nixpkgs.url = github:nixos/nixpkgs;
flake-utils = {
url = github:numtide/flake-utils;
inputs.nixpkgs.follows = "nixpkgs";
};
naersk = {
url = github:nix-community/naersk;
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs =
{ self
, nixpkgs
, flake-utils
, naersk
}:
flake-utils.lib.eachDefaultSystem (system:
let
lib = nixpkgs.lib.${system};
pkgs = nixpkgs.legacyPackages.${system};
rustTools = import ./nix/rust.nix {
nixpkgs = pkgs;
};
getRust =
{ channel ? "nightly"
, date
, sha256
, targets ? [
"wasm32-unknown-unknown"
"wasm32-wasi"
# "wasm32-unknown-emscripten"
]
}: (rustTools.rustChannelOf {
inherit channel date sha256;
}).rust.override {
inherit targets;
extensions = [ "rust-src" "rust-analysis" ];
};
rust = getRust { date = "2022-04-14"; sha256 = "sha256-5sq1QCaKlh84bpGfo040f+zQriJFW7rJO9tZ4rbaQgo="; };
# Get a naersk with the input rust version
naerskWithRust = rust: naersk.lib."${system}".override {
rustc = rust;
cargo = rust;
};
# Naersk using the default rust version
buildRustProject = pkgs.makeOverridable ({ rust, naersk ? naerskWithRust rust, ... } @ args: naersk.buildPackage ({
buildInputs = with pkgs; [ cudaPackages_11_5.cudatoolkit ];
targets = [ ];
copyLibs = true;
remapPathPrefix =
true; # remove nix store references for a smaller output package
} // args));
# Convenient for running tests
testRustProject = args: buildRustProject ({ doCheck = true; inherit root rust; } // args);
# Load a nightly rust. The hash takes precedence over the date so remember to set it to
# something like `lib.fakeSha256` when changing the date.
crateName = "neptune";
root = ./.;
# This is a wrapper around naersk build
# Remember to add Cargo.lock to git for naersk to work
project = buildRustProject {
inherit root rust;
};
wasm = project.override {
targets = [ "wasm32-unknown-unknown" ];
CC = "${pkgs.emscripten}/bin/emcc";
copyBins = true;
cargoBuildOptions = opt: opt ++ [ "--features wasm" "--no-default-features" ];
};
in
{
packages = {
${crateName} = project;
"${crateName}-wasm" = wasm;
"${crateName}-test" = testRustProject {};
};
defaultPackage = self.packages.${system}.${crateName};
# `nix develop`
devShell = pkgs.mkShell {
inputsFrom = builtins.attrValues self.packages.${system};
nativeBuildInputs = [ rust ];
buildInputs = with pkgs; [
rust-analyzer
clippy
rustfmt
emscripten
];
};
});
}