====== 1.3 Emscripten SDK ======
Emscripten is a compiler that compiles C/C++ to WebAssembly (WASM).
----
===== What is Emscripten? =====
**Emscripten** translates:
* C/C++ code → WebAssembly
* System APIs → JavaScript equivalents
* OpenGL → WebGL
**Why do we need Emscripten?**
For the WASM build of OpenSSL that runs in Blazor WebAssembly.
----
===== Prerequisites =====
* ☑ [[.:wsl-einrichten|WSL2 installed]]
* ☑ Git available
----
===== Installation in WSL =====
==== Step 1: Open WSL ====
wsl
==== Step 2: Clone Emscripten SDK ====
# 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
==== Step 3: Install latest version ====
cd /opt/emsdk # or ~/emsdk
# Install latest stable version
./emsdk install latest
# Activate
./emsdk activate latest
==== Step 4: Set environment variables ====
**Temporary (this session only):**
source /opt/emsdk/emsdk_env.sh
**Permanent (in .bashrc):**
echo 'source /opt/emsdk/emsdk_env.sh' >> ~/.bashrc
----
===== Verification =====
# Emscripten Compiler
emcc --version
Expected output:
emcc (Emscripten gcc/clang-like replacement) 3.1.xx
# Additional tools
emar --version
emranlib --version
----
===== Quick Test =====
Create a test file:
cat > hello.c << 'EOF'
#include
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 OpenSSL Build =====
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
----
===== Update Version =====
cd /opt/emsdk # or ~/emsdk
# Fetch updates
git pull
# Install latest version
./emsdk install latest
./emsdk activate latest
# Reload environment
source ./emsdk_env.sh
----
===== Common Problems =====
==== "emcc: command not found" ====
Environment not loaded:
source /opt/emsdk/emsdk_env.sh
==== "Python not found" ====
Emscripten needs Python 3:
# Ubuntu
sudo apt install python3
# Fedora
sudo dnf install python3
==== Old version activated ====
# Check active version
emcc --version
# If outdated, reactivate
cd /opt/emsdk
./emsdk activate latest
source ./emsdk_env.sh
----
===== Continue to =====
* [[.:build:wasm-blazor|WASM/Blazor Build]]
* [[.:vorbereitung:start|Back to Preparation]]
----
//Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//