tricu

An interpreted language for exploring Tree Calculus
Log | Files | Refs | README | LICENSE

browser.nix (2246B)


      1 { pkgs, toolchain, shimSource, probe }:
      2 pkgs.runCommand "tricu-haskell-wasm-browser" {
      3   nativeBuildInputs = [ toolchain pkgs.typescript pkgs.python3 ];
      4 } ''
      5   export HOME=$TMPDIR
      6   mkdir -p $out/shim objects
      7   cp -r ${shimSource}/src shim-src
      8   tsc --target es2022 --module es2022 --lib esnext,dom --skipLibCheck \
      9     --outDir $out/shim shim-src/*.ts
     10   cp ${shimSource}/LICENSE-* $out/shim/
     11   cp ${./CompilerProbe.hs} CompilerProbe.hs
     12   cp ${./BrowserRuntime.hs} BrowserRuntime.hs
     13   cp ${./BrowserModules.hs} BrowserModules.hs
     14   wasm32-wasi-ghc -O2 -rtsopts -i${../../src} -i. -outputdir objects \
     15     ${./Reactor.hs} ${./reactor-init.c} -no-hs-main -optl-mexec-model=reactor \
     16     -optl-Wl,--max-memory=536870912 \
     17     -optl-Wl,--export=tricu_rts_init,--export=malloc,--export=free \
     18     -optl-Wl,--export=tricu_initialize,--export=tricu_compile,--export=tricu_observe \
     19     -optl-Wl,--export=tricu_request,--export=tricu_initialize_empty \
     20     -optl-Wl,--export=tricu_dump,--export=tricu_reset,--export=tricu_collect \
     21     -optl-Wl,--export=tricu_response_size,--export=tricu_response_copy \
     22     -o $out/reactor.wasm
     23   cp -r ${../demo-site/dist} $out/site
     24   chmod -R u+w $out/site
     25   rm -r $out/site/conformance
     26   cp ${./browser-bridge.mjs} $out/bridge.mjs
     27   cp ${./browser-worker.mjs} $out/worker.mjs
     28   cp ${./browser-client.mjs} $out/client.mjs
     29   node ${./prepare-parity.mjs} ${../demo-site} $out/parity ${../../test/fixtures}
     30   cp ${./browser-parity.mjs} $out/parity.mjs
     31   cp ${./browser-page.mjs} $out/page.mjs
     32   cp -r ${probe}/compiler-data $out/data
     33   cp ${../demo-site/test/compiler-conformance.json} $out/goldens.json
     34   python3 - "$out" <<'PY'
     35 import hashlib,json,pathlib,sys
     36 p=pathlib.Path(sys.argv[1])
     37 pins={name:hashlib.sha256((p/'data'/name).read_bytes()).hexdigest() for name in ['compiler.dag','environment.tsv','compiler-exports.tsv']}
     38 compiler=json.loads((p/'data/manifest.json').read_text())['compilerSha256']
     39 (p/'pins.mjs').write_text('export default '+json.dumps(pins)+';\nexport const compilerHash='+json.dumps(compiler)+';\n')
     40 PY
     41   echo '<!doctype html><meta charset="utf-8"><title>Haskell WASM probe</title><script type="module" src="page.mjs"></script>' > $out/index.html
     42   cp ${probe}/versions.txt $out/versions.txt
     43 ''