mirror of
https://github.com/Z3Prover/z3
synced 2026-07-15 03:25:43 +00:00
- Add makeCCSinglethreadWrapper() in make-cc-wrapper.ts that generates
synchronous async wrappers using EM_ASM instead of threads +
MAIN_THREAD_ASYNC_EM_ASM. Refactor shared error-handler code into a
SHARED_ERROR_HANDLERS constant used by both variants.
- Add build-wasm-singlethread.ts: new build script that compiles a
separate libz3.a (in build-singlethread/) and z3-built-singlethread.js
without -pthread / USE_PTHREADS=1. Uses -DSINGLE_THREAD -DPOLLING_TIMER
and ALLOW_MEMORY_GROWTH instead of a fixed 2 GB SharedArrayBuffer.
- Add src/node-singlethread.ts and src/browser-singlethread.ts entry
points. Browser variant reads initZ3SingleThread from global scope
(load z3-built-singlethread.js via importScripts in a Web Worker).
- Add tests for both new entry points (node-singlethread.test.ts,
browser-singlethread.test.ts).
- Update package.json: add build:wasm:singlethread script; add exports
map so users can do import { init } from 'z3-solver/singlethread'.
- Update PUBLISHED_README.md: document the single-threaded variant,
explain when to use it (no COOP/COEP headers), and provide a Web
Worker usage example.
- Update wasm.yml CI: add check-singlethread parallel job.
- Update wasm-release.yml: build single-threaded artifact before publish.
- Guard scoped_timer.cpp with #if defined(SINGLE_THREAD) &&
!defined(__EMSCRIPTEN_PTHREADS__) so that thread-based timer creation
is skipped in single-threaded Emscripten builds (POLLING_TIMER covers
the primary cancel_eh<reslimit> use-case).
|
||
|---|---|---|
| .. | ||
| examples | ||
| scripts | ||
| src | ||
| .nvmrc | ||
| .prettierrc.json | ||
| jest.config.js | ||
| package-lock.json | ||
| package.json | ||
| PUBLISHED_README.md | ||
| README.md | ||
| tsconfig.build.json | ||
| tsconfig.json | ||
| typedoc.json | ||
| TYPESCRIPT_API_ENHANCEMENTS.md | ||
TypeScript Bindings
This directory contains JavaScript code to automatically derive TypeScript bindings for the C API, which are published on npm as z3-solver.
The readme for the bindings themselves is located in PUBLISHED_README.md.
Building
You'll need to have emscripten set up, along with all of its dependencies. The easiest way to do that is with emsdk. Newer versions of emscripten may break the build; you can find the version used in CI in this file.
Then run npm i to install dependencies, npm run build:ts to build the TypeScript wrapper, and npm run build:wasm to build the wasm artifact.
Build on your own
Consult the file build-wasm.ts for configurations used for building wasm.
Tests
Run npm test after building to run tests.