This page provides step-by-step instructions to compile a simple program directly to WebAssembly.
The easiest way to get set up on Windows 10 is to use one of the Linux subsystem installations available in the Microsoft Store.
To get the installation working:
Windows versions prior to 10 don’t support the Linux susbsytem. To install on earlier versions of Windows do the following:
Note: If you are using Visual Studio 2017, emsdk install
should be appended with the argument --vs2017
.
If you’re on OS X or Linux, SDK installation should be straightfoward by opening a shell terminal and following the instructions below under the next heading ‘Downloading the Toolchain’.
A precompiled toolchain to compile C/C++ to WebAssembly is easily obtained via GitHub.
$ git clone https://github.com/emscripten-core/emsdk.git
$ cd emsdk
$ ./emsdk install latest
$ ./emsdk activate latest
If you are running a Linux distribution for which Emscripten toolchain is not available precompiled (currently Ubuntu 16.04 works best), or if you want to build the whole toolchain from source, Emscripten SDK can also be used to drive the build. The required steps are as follows.
To compile to WebAssembly, some prerequisite tools are needed:
apt-get
or brew
, on Windows download CMake installer.After installing, make sure that git
, cmake
and python
are accessible in PATH. Technically, CMake and a system compiler may not be needed if using a precompiled toolchain, but development options may be a bit limited without them.
$ git clone https://github.com/emscripten-core/emsdk.git
$ cd emsdk
$ ./emsdk install --build=Release sdk-incoming-64bit binaryen-master-64bit
$ ./emsdk activate --build=Release sdk-incoming-64bit binaryen-master-64bit
After installing or compiling the SDK, the installation is complete. To enter an Emscripten compiler environment in the current command line prompt after downloading a precompiled toolchain or building your own, type
$ source ./emsdk_env.sh --build=Release
This command adds relevant environment variables and directory entries to PATH to set up the current terminal for easy access to the compiler tools.
We now have a full toolchain we can use to compile a simple program to WebAssembly. There are a few remaining caveats, however:
.html
extension.file
protocol scheme. We have to actually serve the output files over HTTP.The commands below will create a simple “hello world” program and compile it. The compilation step is highlighted in bold.
$ mkdir hello
$ cd hello
$ cat << EOF > hello.c
#include <stdio.h>
int main(int argc, char ** argv) {
printf("Hello, world!\n");
}
EOF
$ <b>emcc hello.c -o hello.html</b>
To serve the compiled files over HTTP, we can use the emrun
web server provided with the Emscripten SDK:
$ emrun --no_browser --port 8080 .
Once the HTTP server is running, you can open it in your browser. If you see “Hello, world!” printed to the Emscripten console, then congratulations! You’ve successfully compiled to WebAssembly!
#WebAssembly