Emscripten SDK (
emsdk ) is used to perform all SDK maintenance. You only need to install the SDK once; after that emsdk can do all further updates!
With emsdk you can download, install or remove any SDK or Tool, and even use the bleeding edge versions in development on GitHub. To access the emsdk on Windows, first launch the Emscripten Command Prompt. Most operations are of the form
This document provides the command syntax, and a set of guides explaining how to perform both common and advanced maintenance operations.
./emsdk [help [–old] | list | update | install <tool/sdk> | uninstall <tool/sdk> | activate <tool/sdk>]
Lists all current SDKs and tools and their installation status. With the
Fetches the latest list of all available tools and SDKs (but does not install them).
Downloads and installs the specified tool or SDK.
Removes the specified tool or SDK from the disk.
Sets the specified tool or SDK as the default tool in the system environment. On Linux you additionally have to enable the environment settings using
Lists all supported commands. The same list is output if no command is specified.
For Linux and macOS the commands are called with ./emsdk. On Windows use emsdk.
<tool/sdk> given above as a command argument is one of the targets listed using
./emsdk list (or
./emsdk list --old).
Note that some of the tools and SDK names include master or incoming: these targets are used to clone and pull the very latest versions from the Emscripten incoming and master branches.
You can also specify a target of
latest to grab the most current SDK.
The Emscripten toolchain includes a number of different tools, including Clang, Emscripten, Java, Git, Node, etc. Emsdk is a small package manager for controlling which tools are installed, and from the set of installed tools, which are active.
The current set of available tools and SDKs are listed using
./emsdk list. These can be installed individually (
./emsdk install node-0.10.17-64bit) or as a group (
./emsdk install node-0.10.17-64bit java-7.45-64bit).
The SDK targets are a convenience mechanism for specifying the full set of tools used by a particular Emscripten release. For example, the two lines below are equivalent:
./emsdk install sdk-incoming-64bit ./emsdk install git-1.8.3 clang-incoming-64bit node-0.10.17-64bit python-22.214.171.124-64bit java-7.45-64bit emscripten-incoming
A particular installed SDK (or tool) can then be set as active, meaning that it will be used when Emscripten is run. The active “compiler configuration” is stored is a config file (.emscripten) within the emsdk directory.
The different tools and SDKs managed by emsdk are stored in different directories under the root folder you specified when you first installed an SDK, grouped by tool and version.
The Compiler Configuration File stores the active configuration on behalf of the emsdk. The active configuration defines the specific set of tools that are used by default if Emscripten in called on the Emscripten Command Prompt.
The configuration file is named .emscripten. It is emsdk-specific, so it won’t conflict with any config file the user might have in their home directory.
The file should generally not be updated directly unless you’re building Emscripten from source. Instead use the emsdk to activate specific SDKs and tools as needed (
emsdk activate <tool/SDK>).
Below are examples of possible .emscripten files created by emsdk. Note the variable names used to point to the different tools:
# .emscripten file from Windows SDK import os LLVM_ROOT='C:/Program Files/Emscripten/clang/e1.21.0_64bit' NODE_JS='C:/Program Files/Emscripten/node/0.10.17_64bit/node.exe' JAVA='C:/Program Files/Emscripten/java/7.45_64bit/bin/java.exe'
# .emscripten file from Linux SDK import os NODE_JS = 'nodejs' LLVM_ROOT='/home/ubuntu/emsdk/upstream/bin'
The following topics explain how to perform both common and advanced maintenance operations, ranging from installing the latest SDK through to installing your own fork from GitHub.
The examples below show the commands for Linux and macOS. The commands are the same on Windows, but you need to replace ./emsdk with emsdk.
update argument to fetch the current registry of available tools, and then specify the
latest install target to get the most recent SDK:
# Fetch the latest registry of available tools. ./emsdk update # Download and install the latest SDK tools. ./emsdk install latest # Set up the compiler configuration to point to the "latest" SDK. ./emsdk activate latest
./emsdk help or just
./emsdk to get information about all available commands.
To get a list of all currently installed tools and SDK versions (and all available tools) run:
A line will be printed for each tool and SDK that is available for installation. The text
INSTALLED will be shown for each tool that has already been installed. If a tool/SDK is currently active, a star (*) will be shown next to it.
install argument to download and install a new tool or SDK version:
./emsdk install <tool/sdk name>
./emsdk install sdk-1.38.21-64bit
An installed tool is present on the local machine, but not necessarily the active environment. To make an installed SDK active, use the
uninstall argument to delete a given tool or SDK from the local computer:
./emsdk uninstall <tool/sdk name>
If you want to completely remove Emscripten from your system, follow the guide at Uninstalling the Emscripten SDK.
First use the
update command to fetch package information for all new tools and SDK versions. Then use
install <tool/sdk name> to install a new version:
# Fetch the latest registry of available tools. ./emsdk update # Download and install the specified new version. ./emsdk install <tool/sdk name>
Toggle between different tools and SDK versions using the activate command. This will set up
.emscripten to point to that
./emsdk activate <tool/sdk name> # On Linux and macOS, also set the environment variables. source ./emsdk_env.sh
On Linux and macOS,
activate writes the required information to the configuration file, but cannot automatically set up the environment variables in the current terminal. To do this you need to call
source ./emsdk_env.sh after calling
activate. The use of
source is a security feature of Unix shells.
On Windows, calling
activate automatically sets up the required paths and environment variables.
Emsdk contains a history of old tools and SDKs that you can use to maintain your migration path. Use the
list --old argument to get a list of archived tool and SDK versions, and
install <name_of_tool> to install a specific tool:
# Get list of the old versions of the tool. ./emsdk list --old # Install the required version. ./emsdk install <name_of_tool> # Activate required version. ./emsdk activate <name_of_tool>
It is also possible to use the latest and greatest versions of the tools on the GitHub repositories! This allows you to obtain new features and latest fixes immediately as they are pushed to GitHub, without having to wait for release to be tagged. No GitHub account or fork of Emscripten is required.
To switch to using the latest upstream git development branch (
incoming), run the following:
# Install git. Skip if the system already has it. ./emsdk install git-1.8.3 # Clone+pull the latest emscripten-core/emscripten/incoming. ./emsdk install sdk-incoming-64bit # Set the "incoming SDK" as the active version. ./emsdk activate sdk-incoming-64bit
If you want to use the upstream stable branch
master, then replace
-master- in the commands above.
It is also possible to use your own fork of the Emscripten repository via the SDK. This is useful in the case when you want to make your own modifications to the Emscripten toolchain, but still keep using the SDK environment and tools.
The way this works is that you first install the
sdk-incoming SDK as in the previous section. Then you use familiar git commands to replace this branch with the information from your own fork:
cd emscripten/incoming # Add a git remote link to your own repository. git remote add myremote https://github.com/mygituseraccount/emscripten.git # Obtain the changes in your link. git fetch myremote # Switch the emscripten-incoming tool to use your fork. git checkout -b myincoming --track myremote/incoming
You can switch back and forth between remotes via the
git checkout command as usual.