- 日報
- 最近Emacs周りに変更入ってるらしく妙に不安定なんだけど、Nixだととりあえずロールバックで回避できて最高だな
- nucleoをdduで動かそう計画、wasm-bindgenの使い方覚えたのでやるだけになった
- structのfieldにpub付けられるの知らなくてしばらくハマっていた
- nucleoの使い方もちょっと迷ったけど、最低限の例がリポジトリに載っていたのでなんとかなった
- NixのrustPlatformで軽微な修正を高速コンパイルする方法編み出したのでどこかで共有したい
- 雑に言うと以下のステップをやっている
- Cargo.lockとCargo.tomlだけ複製して
src/lib.rs
なりsrc/main.rs
なり生やして空のプロジェクトを作る- これはlinkFarmで達成できた
- これを
rustPlatform.buildRustPackage
でビルドかけてinstallPhase
でtarget
に圧縮かけてビルドステップを打ち切り - 次の段のどこか(私は
postPatch
を選んだ)で展開をかけて/build
以下のタイムスタンプを一律にする(これしないとリビルドされる){ pkgs ? import <nixpkgs> { }, }: let rustPlatform = pkgs.makeRustPlatform { inherit (pkgs) rustc cargo; stdenv = pkgs.lib.recursiveUpdate pkgs.stdenv { targetPlatform.rust = { cargoShortTarget = "wasm32-unknown-unknown"; rustcTarget = "wasm32-unknown-unknown"; }; }; }; common = { cargoLock = { lockFile = ./Cargo.lock; }; doCheck = false; nativeBuildInputs = [ pkgs.lld pkgs.nix ]; }; deps = rustPlatform.buildRustPackage ( { name = "deps.xz"; src = pkgs.linkFarm "src" { "flake.nix" = pkgs.emptyFile; "Cargo.lock" = ./Cargo.lock; "Cargo.toml" = ./Cargo.toml; "src/lib.rs" = pkgs.emptyFile; }; installPhase = '' nix-store --dump target | xz -c > $out exit 0 ''; dontStrip = true; } // common ); wasm = rustPlatform.buildRustPackage ( { name = "hoge"; src = ./.; postPatch = '' xz -d -c ${deps} | nix-store --restore target find /build | xargs touch -d @0 ''; cargoLock = { lockFile = ./Cargo.lock; }; } // common ); in pkgs.runCommandLocal "hoge" { nativeBuildInputs = [ pkgs.wasm-bindgen-cli ]; } '' wasm-bindgen --out-dir $out --target deno ${wasm}/bin/fuzzy_match.wasm ''
- 余計な物入ってるけど実際に使った定義はこれ
- Cargo.lockとCargo.tomlだけ複製して
- 雑に言うと以下のステップをやっている