48 lines
2.1 KiB
Markdown
48 lines
2.1 KiB
Markdown
# WASM build reproducibility
|
||
|
||
v23では、`src/`を監査可能なkernel source、`src/abi.json`を公開ABI、
|
||
`toolchain.lock.json`を固定toolchain契約として扱います。
|
||
|
||
## 互換payloadを展開する
|
||
|
||
```powershell
|
||
powershell -NoProfile -ExecutionPolicy Bypass -File scripts/extract-wasm.ps1
|
||
```
|
||
|
||
現在配布している8 payloadを`dist/wasm/`へ展開し、byte数とSHA-256を
|
||
`manifest.json`へ記録します。COLOR SIMD/scalarがbyte単位で同一ならStandaloneでは
|
||
Base64文字列を1本へ自動集約し、異なる場合は各payloadを保持します。どちらの場合もmanifest上の2 ABI名は維持します。
|
||
|
||
## sourceから再生成する
|
||
|
||
clang 17.0.6をPATHへ置き、次を実行します。
|
||
|
||
```powershell
|
||
powershell -NoProfile -ExecutionPolicy Bypass -File scripts/build-wasm.ps1
|
||
```
|
||
|
||
生成先は`build/wasm-v23/`です。`src/shallow_kernel.c`、
|
||
`src/deep_kernel.c`、`src/bla_kernel_v18.c`、`src/color_kernel.c`をそれぞれ
|
||
SIMD/scalarでcompileし、timestampを含まないsource manifestを生成します。
|
||
|
||
配布payloadへ昇格するときだけ`-Promote`を指定します。昇格前に
|
||
`tests/kernel-golden.mjs`が、画素中心座標、escape iteration、magnitude、
|
||
smooth補正、SIMD/scalar同値性を検査します。golden失敗時はコピーも
|
||
`kernels.js`再生成も行いません。
|
||
|
||
```powershell
|
||
powershell -NoProfile -ExecutionPolicy Bypass -File scripts/build-wasm.ps1 -Promote
|
||
```
|
||
|
||
## 信頼境界
|
||
|
||
公式配布物のSHA-256を照合したclang 17.0.6とNode.js v22.18.0を作業領域内で使用し、
|
||
復元sourceのcompile、generated-WASM golden、SIMD/scalar同値性、画素中心契約を実行済みです。
|
||
golden合格後に8 payloadと`kernels.js`を昇格し、Hosted/Standalone成果物も再生成しました。
|
||
実測結果と生成manifestのSHA-256は`audit/v23-source-baseline.json`へ記録しています。
|
||
|
||
省略なしの再検証は、toolchainをPATHへ追加した状態で次を実行します。
|
||
|
||
```powershell
|
||
powershell -NoProfile -ExecutionPolicy Bypass -File scripts/test-all.ps1 -RequireToolchain
|
||
```
|