Emscripten is a compiler that compiles C/C++ to WebAssembly (WASM).
Emscripten translates:
Why do we need Emscripten?
For the WASM build of OpenSSL that runs in Blazor WebAssembly.
wsl
# To the opt directory (system-wide) cd /opt # Clone as root sudo git clone https://github.com/emscripten-core/emsdk.git sudo chown -R $USER:$USER /opt/emsdk
Or in home directory (only for your user):
git clone https://github.com/emscripten-core/emsdk.git ~/emsdk cd ~/emsdk
cd /opt/emsdk # or ~/emsdk # Install latest stable version ./emsdk install latest # Activate ./emsdk activate latest
Temporary (this session only):
source /opt/emsdk/emsdk_env.sh
Permanent (in .bashrc):
echo 'source /opt/emsdk/emsdk_env.sh' >> ~/.bashrc
# Emscripten Compiler emcc --version
Expected output:
emcc (Emscripten gcc/clang-like replacement) 3.1.xx
# Additional tools emar --version emranlib --version
Create a test file:
cat > hello.c << 'EOF' #include <stdio.h> int main() { printf("Hello from WebAssembly!\n"); return 0; } EOF
Compile to WASM:
emcc hello.c -o hello.js # Run with Node.js node hello.js # Output: Hello from WebAssembly!
For the WASM build of OpenSSL, these Emscripten tools are used:
| Tool | Usage |
| —— | ——- |
emcc | C compiler (replaces gcc) |
emar | Archiver (replaces ar) |
emranlib | Ranlib (replaces ranlib) |
emconfigure | Wrapper for ./Configure |
emmake | Wrapper for make |
Example:
# Instead of: ./Configure linux-x86_64 make # With Emscripten: emconfigure ./Configure linux-generic32 emmake make
cd /opt/emsdk # or ~/emsdk # Fetch updates git pull # Install latest version ./emsdk install latest ./emsdk activate latest # Reload environment source ./emsdk_env.sh
Environment not loaded:
source /opt/emsdk/emsdk_env.sh
Emscripten needs Python 3:
# Ubuntu sudo apt install python3 # Fedora sudo dnf install python3
# Check active version emcc --version # If outdated, reactivate cd /opt/emsdk ./emsdk activate latest source ./emsdk_env.sh
Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional