Build the payload¶
The payload is built from pinned upstream sources plus our patches. Everything happens on your own machine; there is no CI yet.
What you need¶
- macOS on Apple Silicon, Xcode command line tools, CMake, Ninja
- Node 20
- A clone of the Euro-Office repositories (the build will fetch them if you have none)
- Time and disk. V8 alone is about half an hour, and the build tree runs to several gigabytes.
Set BUILD_ROOT to somewhere with room:
The steps¶
build/build.sh fetch # clone or reset to the pinned revisions, apply patches
build/build.sh configure
build/build.sh build # core: x2t and the native libraries
build/payload.sh # sdkjs + web-apps + fonts + branding
build/dist.sh --fonts core # the distributable tarballs and their manifest
build/smoke.sh # check the result converts a document
Then install what you built:
Or skip packaging entirely while developing and point at the build tree:
Linux¶
build/docker.sh runs the same scripts in a container. The infrastructure is written; it has not been run, so treat it as untested.
The upstream mirror is mounted read-only and BUILD_ROOT lives in a named volume — V8 wants a case-sensitive filesystem and thousands of small files, and both are miserable across Docker Desktop's shared-folder layer.
Windows¶
Not yet. It needs a build machine we do not have, which is what will eventually push this onto CI.
Notes¶
The pins are hashes, never branches. A patch queue is only meaningful against a fixed base, and "it built last week" has to stay reproducible. Bumping a pin is deliberate and may mean rebasing patches.
Check the output, not the exit code. build/smoke.sh converts a document and then looks inside the result for an embedded font and text-drawing operators, because a PDF of the right size with no glyphs in it is the failure that looks like success.