This article provides information that is relevant to people who want to contribute to Emscripten. We welcome contributions from anyone that is interested in helping out!
The information will be less relevant if you’re just using Emscripten, but may still be of interest.
For contributing to core Emscripten code, such as
emcc.py, you don’t need to
build any binaries as
emcc.py is in Python, and the core JS generation is
get using the emsdk:
emsdk install tot-upstream emsdk activate tot-upstream
That gets a “tip-of-tree” build of the very latest binaries. You can use those
binaries with a checkout of the core Emscripten repository, simply by calling
emcc.py from that checkout, and it will use the binaries from the emsdk.
If you do want to contribute to LLVM or Binaryen, or to test modifications to them, you can build them from source.
The Emscripten main repository is https://github.com/emscripten-core/emscripten. The main branch is incoming, which exists for historic reasons as we did not always have good pre-commit CI, and so we landed code on incoming first, tested, then merged to master. Today we have extensive pre-commit CI on GitHub, so the incoming branch functions like the master branch in most projects.
Aside from the Emscripten repo, the other codebases of interest are LLVM and Binaryen, which Emscripten invokes, and have their own repos.
Patches should be submitted as pull requests to the incoming branch.
When submitting patches, please:
tests/*.pyfor related tests, as often the simplest thing is to add to an existing one. If you’re not sure how to test your code, feel free to ask for help.
One of the core developers will review a pull request before merging it. If several days pass without any comments on your PR, please comment in the PR which will ping them. (If that happens, sorry! Sometimes things get missed.)
The Emscripten Compiler Frontend (emcc) is a python script that manages the entire compilation process:
wasm-ldto link it. It builds and integrates with the Emscripten system libraries, both the compiled ones and the ones implemented in JS.
src/compiler.jsand related files) which emits the JS.
Emscripten has a comprehensive test suite, which covers virtually all Emscripten functionality. These tests are run on CI automatically when you create a pull request, and they should all pass. If you run into trouble with a test failure you can’t fix, please let the developers know.