Skip to content

Instantly share code, notes, and snippets.

@kuuote
Created March 11, 2025 16:25
Show Gist options
  • Save kuuote/22fe7f63ceba9ebbb3e0b9bd72bc4174 to your computer and use it in GitHub Desktop.
Save kuuote/22fe7f63ceba9ebbb3e0b9bd72bc4174 to your computer and use it in GitHub Desktop.
  • 日報
  • 最近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 でビルドかけて installPhasetarget に圧縮かけてビルドステップを打ち切り
      • 次の段のどこか(私は 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
          ''
                    
        • 余計な物入ってるけど実際に使った定義はこれ
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment