1{
2 rustPlatform,
3 lib,
4 wasm-pack,
5 binaryen,
6 wasm-bindgen-cli_0_2_104,
7 lld,
8 stdenv,
9 ...
10}:
11let
12 # First derivation: wasm-pack build
13 wasmBuild = rustPlatform.buildRustPackage {
14 pname = "faunu-wasm-build";
15 version = "main";
16
17 src = lib.fileset.toSource {
18 root = ../.;
19 fileset = lib.fileset.unions [
20 ../Cargo.toml
21 ../Cargo.lock
22 ../src
23 ../.cargo
24 ../embedded
25 ];
26 };
27
28 cargoLock = {
29 lockFile = ../Cargo.lock;
30 outputHashes = {
31 "vfs-0.12.1" = "sha256-arpgwVsBhnn/2qawTR+NeyWRJOipr0kafg7VaiISufM=";
32 "jacquard-0.9.4" = "sha256-TEu4coueWzzkmFCkGb610Xrly7n8LUGMa5tdde/OElg=";
33 "nu-cmd-base-0.109.2" = "sha256-Q+6PxSmeiV/K6QP0I9xCiqZM37+p+CRLs7LMBUWurPo=";
34 };
35 };
36
37 nativeBuildInputs = [wasm-pack wasm-bindgen-cli_0_2_104 lld];
38
39 phases = ["unpackPhase" "buildPhase"];
40
41 buildPhase = ''
42 mkdir -p $out
43 HOME=$TMPDIR wasm-pack build --target web --release --no-opt -d $out
44 '';
45 };
46
47 # Second derivation: wasm-opt
48 wasmOpt = stdenv.mkDerivation {
49 pname = "faunu-wasm";
50 version = "main";
51
52 src = wasmBuild;
53
54 nativeBuildInputs = [binaryen];
55
56 phases = ["unpackPhase" "buildPhase"];
57
58 buildPhase = ''
59 mkdir -p $out
60 cp -r --no-preserve=ownership,mode ${wasmBuild}/* $out/
61 wasm-opt $out/faunu_bg.wasm -O4 -all -o $out/faunu_bg.wasm
62 '';
63 };
64in
65 wasmOpt