Compiling for the Web

    • .

    See also

    For a general overview of SCons usage for Godot, see Introduction to the buildsystem.

    Before starting, confirm that the Emscripten configuration file exists and specifies all settings correctly. This file is available as on UNIX-like systems and %USERPROFILE%\.emscripten on Windows. It’s usually written by the Emscripten SDK, e.g. when invoking emsdk activate latest, or by your package manager. It’s also created when starting Emscripten’s emcc program if the file doesn’t exist.

    On Windows, make sure to escape backslashes of paths within the Emscripten configuration file as double backslashes \\ or use Unix-style paths with a single forward slash /.

    Open a terminal and navigate to the root directory of the engine source code. Then instruct SCons to build the JavaScript platform. Specify as either release for a release build or release_debug for a debug build:

    By default, the will be built into the engine. Official export templates also have the JavaScript singleton enabled. Since eval() calls can be a security concern, the javascript_eval option can be used to build without the singleton:

    Finally, rename the zip archive to webassembly_release.zip for the release template:

    And webassembly_debug.zip for the debug template:

    WebAssembly can be compiled in two ways: The default is to first compile to asm.js, a highly optimizable subset of JavaScript, using Emscripten’s fastcomp fork of LLVM. This code is then translated to WebAssembly using a tool called asm2wasm. Emscripten automatically takes care of both processes, we simply run SCons.

    In order to choose one of the two methods, the LLVM_ROOT variable in the Emscripten configuration file is used. If it points to a directory containing binaries of Emscripten’s fastcomp fork of clang, is used. This is the default in a normal Emscripten installation. Otherwise, LLVM binaries built with the WebAssembly backend will be expected and the LLVM’s WebAssembly backend is used.