Mercurial
diff third_party/emsdk/docker/README.md @ 179:8d17f6e6e290
[ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
| author | MrJuneJune <me@mrjunejune.com> |
|---|---|
| date | Thu, 22 Jan 2026 21:23:17 -0800 |
| parents | |
| children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/third_party/emsdk/docker/README.md Thu Jan 22 21:23:17 2026 -0800 @@ -0,0 +1,125 @@ +# Dockerfile for EMSDK + +This Dockerfile builds a self-contained version of Emscripten SDK that enables Emscripten to be used without any +other installation on the host system. + +It is published at https://hub.docker.com/r/emscripten/emsdk. + +### Usage + +Simple usage of this container to compile a hello-world +```bash +# create helloworld.cpp +cat << EOF > helloworld.cpp +#include <iostream> +int main() { + std::cout << "Hello World!" << std::endl; + return 0; +} +EOF +``` + +```bash +# compile with docker image +docker run \ + --rm \ + -v "$(pwd):$(pwd)" \ + -u $(id -u):$(id -g) \ + emscripten/emsdk \ + emcc helloworld.cpp -o helloworld.js + +# execute on host machine +node helloworld.js +``` + +Teardown of compilation command: + +|part|description| +|---|---| +|`docker run`| A standard command to run a command in a container| +|`--rm`|remove a container after execution (optimization)| +|`-v "$(pwd):$(pwd)"`|Mounting current folder from the host system into mirrored path on the container<br>TIP: This helps to investigate possible problem as we preserve exactly the same paths like in host. In such case modern editors (like Sublime, Atom, VS Code) let us to CTRL+Click on a problematic file | +|`-u $(id -u):$(id -g)`| Run the container as a non-root user with the same UID and GID as local user. Hence all files produced by this are accessible to non-root users| +|`emscripten/emsdk`|Get the latest tag of this container| +|`emcc helloworld.cpp -o helloworld.js`|Execute `emcc` command with following arguments inside container, effectively compile our source code| + + + +### Building Dockerfile + +This image has following optional arguments + +| arg | default value | description | +| --- | --- | --- | +| `EMSCRIPTEN_VERSION` | `tot`<br/>(special case, tip-of-tree) | One of released version of Emscripten. For example `2.0.0`<br/> Minimal supported version is **1.39.0** | + +**Building** + +This step will build Dockerfile as given tag on local machine +```bash +# using docker +docker build \ + --network host \ + --build-arg=EMSCRIPTEN_VERSION=1.39.17 \ + -t emscripten/emsdk:1.39.17 \ + -f docker/Dockerfile \ + . +``` +```bash +# using predefined make target +make version=1.39.17 build test +``` + +**Tagging** + +In case of using `docker build` command directly, given `--tag` should match version of released Emscripten (you can see list of non-legacy versions by executing `emsdk list`). + +**Pushing** + +This step will take local image and push to default docker registry. You need to make sure that you logged in docker cli (`docker login`) and you have rights to push to that registry. + +```bash +# using docker +docker push emscripten/emsdk:1.39.17 +``` +```bash +# using predefined make target +make version=1.39.17 push +``` + +In case of pushing the most recent version, this version should be also tagged as `latest` and pushed. +```bash +# using docker cli +docker tag emscripten/emsdk:1.39.17 emscripten/emsdk:latest +docker push emscripten/emsdk:latest + +```bash +# using make +make version=1.39.17 alias=latest push +``` + +### Extending + +If your project uses packages that this image doesn't provide you might want to: +* Contribute to this repo: Maybe your dependency is either non-intrusive or could be useful for other people +* Create custom image that bases on this image + +1. create own Dockerfile that holds: + ```dockerfile + # Point at any base image that you find suitable to extend. + FROM emscripten/emsdk:1.39.17 + + # Install required tools that are useful for your project i.e. ninja-build + RUN apt update && apt install -y ninja-build + ``` + +2. build it + ```bash + docker build -t extended_emscripten . + ``` + +3. test + ```bash + docker run --rm extended_emscripten ninja --version + # 1.10.0 + ```