2022-02-25 19:10:55 -05:00
|
|
|
{pkgs? (import <nixpkgs>) {},
|
2023-01-07 19:01:11 -05:00
|
|
|
version,
|
2023-01-07 17:48:46 -05:00
|
|
|
features ? "",
|
2022-03-06 15:16:30 -05:00
|
|
|
rust-wasm,
|
2023-03-22 17:54:04 -04:00
|
|
|
wasm-bindgen,
|
2022-02-25 19:10:55 -05:00
|
|
|
}:
|
|
|
|
with pkgs;
|
|
|
|
let
|
|
|
|
pname = "kitchen-wasm";
|
2022-02-28 14:28:21 -05:00
|
|
|
src = ./../..;
|
2022-08-25 20:35:26 -04:00
|
|
|
lockFile = ./../../Cargo.lock;
|
|
|
|
# NOTE(jwall): Because we use wasm-pack directly below we need
|
|
|
|
# the cargo dependencies to already be installed.
|
2022-10-11 16:49:12 -04:00
|
|
|
cargoDeps = (pkgs.rustPlatform.importCargoLock { inherit lockFile; outputHashes = {
|
|
|
|
# I'm maintaining some patches for these so the lockfile hashes are a little
|
|
|
|
# incorrect. We override those here.
|
2023-11-25 09:37:29 -05:00
|
|
|
"wasm-web-component-0.2.0" = "sha256-quuPgzGb2F96blHmD3BAUjsWQYbSyJGZl27PVrwL92k=";
|
2022-11-10 18:20:26 -05:00
|
|
|
"sycamore-0.8.2" = "sha256-D968+8C5EelGGmot9/LkAlULZOf/Cr+1WYXRCMwb1nQ=";
|
2022-10-11 16:49:12 -04:00
|
|
|
"sqlx-0.6.2" = "sha256-X/LFvtzRfiOIEZJiVzmFvvULPpjhqvI99pSwH7a//GM=";
|
|
|
|
};
|
|
|
|
});
|
2022-02-25 19:10:55 -05:00
|
|
|
in
|
|
|
|
stdenv.mkDerivation {
|
|
|
|
inherit src pname;
|
|
|
|
version = version;
|
2022-11-19 19:18:02 -05:00
|
|
|
# we need wasmb-bindgen v0.2.83 exactly
|
2023-03-22 17:54:04 -04:00
|
|
|
buildInputs = [ rust-wasm wasm-bindgen wasm-pack binaryen];
|
|
|
|
propagatedBuildInputs = [ rust-wasm wasm-bindgen wasm-pack binaryen];
|
2022-03-06 15:16:30 -05:00
|
|
|
phases = [ "postUnpackPhase" "buildPhase"];
|
2022-02-25 19:10:55 -05:00
|
|
|
postUnpackPhase = ''
|
2022-08-25 20:35:26 -04:00
|
|
|
ln -s ${cargoDeps} ./cargo-vendor-dir
|
2022-02-25 19:10:55 -05:00
|
|
|
cp -r ./cargo-vendor-dir/.cargo ./
|
|
|
|
cp -r $src/* ./
|
|
|
|
'';
|
2022-02-28 14:28:21 -05:00
|
|
|
# TODO(jwall): Build this from the root rather than the src.
|
2022-02-25 19:10:55 -05:00
|
|
|
buildPhase = ''
|
2024-06-23 12:50:24 -04:00
|
|
|
set -x
|
2022-06-14 18:25:05 -04:00
|
|
|
echo building with wasm-pack
|
2024-02-20 17:48:17 -05:00
|
|
|
wasm-pack --version
|
2022-02-25 19:10:55 -05:00
|
|
|
mkdir -p $out
|
2022-03-06 15:16:30 -05:00
|
|
|
cd web
|
2022-06-14 18:25:05 -04:00
|
|
|
cp -r static $out
|
2024-06-23 12:50:24 -04:00
|
|
|
cargo build --lib --release --target wasm32-unknown-unknown --target-dir $out --offline
|
|
|
|
wasm-bindgen $out/wasm32-unknown-unknown/release/kitchen_wasm.wasm --out-dir $out --typescript --target web
|
|
|
|
wasm-opt $out/kitchen_wasm_bg.wasm -o $out/kitchen_wasm_bg-opt.wasm -O
|
|
|
|
rm -f $out/kitchen_wasm_bg.wasm
|
|
|
|
mv $out/kitchen_wasm_bg-opt.wasm $out/kitchen_wasm_bg.wasm
|
2022-06-14 18:25:05 -04:00
|
|
|
cp -r index.html $out
|
2023-01-07 17:48:46 -05:00
|
|
|
cp -r favicon.ico $out
|
2024-06-23 12:50:24 -04:00
|
|
|
rm -rf $out/release
|
|
|
|
rm -rf $out/wasm32-unknown-unknown
|
2022-02-25 19:10:55 -05:00
|
|
|
'';
|
2023-11-25 09:37:29 -05:00
|
|
|
}
|