Web native plug-ins for Emscripten
Web native plug-ins for Emscripten.
Read time 3 minutesLast updated 12 days ago
Unity uses the Emscripten compiler toolchain to cross-compile the Unity runtime code written in C and C++ into WebAssembly (also called Wasm). Emscripten generates small code, is load-time and memory efficient, and aims to deliver close to native speed execution.
Unity uses IL2CPP to convert the .NET game code in your C# scripts to Wasm. IL2CPP takes .NET bytecode and converts it to corresponding C++ source files, which is then compiled using Emscripten to convert your scripts to Wasm.
Targeted versions
Unity bundles the Emscripten compiler with the Web platform package, so that you don't have to manually download it. The version of Emscripten that the Unity Editor uses varies by Editor version:
Unity Version | Emscripten version | Supported native plug-in file formats |
|---|---|---|
| Unity 6000.5 and later | Emscripten 4.0.19-unity | .a, .bc |
| Unity 2023.2 and later | Emscripten 3.1.38-unity | .a, .bc |
| Unity 2022.2 and later | Emscripten 3.1.8-unity | .a, .bc |
| Unity 2021.2 and later | Emscripten 2.0.19.6-unity | .a, .bc |
| Unity 2019.2 to 2021.1 | 1.38.11-unity | .bc |
| Unity 2018.4 up until Unity 2019.2 | 1.37.40-unity | .bc |
| Unity 2018.2 up until Unity 2018.4 | 1.37.33-unity | .bc |
Notes:
-
The following list provides expansion for the acronyms of file formats listed in the table:
- GNU archive file format ()
.a - WebAssembly Object Files ()
.o - LLVM Bitcode file format ()
.bc
- GNU archive file format (
-
With Emscripten versions before Emscripten 2.0, Unity recommends buildingplug-ins (files of type
Bitcode). From Emscripten 2.0 onwards, Unity recommends to build.bcplug-ins that are Wasm object files of typeWasm Object File, bundled into GNU archive files of type.o..a
You can determine the path to the exact version of Emscripten toolchain from the located at:
emscripten-version.txtC:\Program Files\Unity\Hub\Editor\<Editor version>\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten\emscripten-version.txt
Compile native plug-ins with Emscripten
If you're creating native C/C++ plug-ins for your Unity application, you can either bundle the C/C++ code with your project (refer to Native plug-ins) or build the native code to a plug-in archive ahead-of-time with the Emscripten compiler toolchain.
If you choose to build plug-in code in advance, use the Emscripten compiler toolchain. To ensure LLVM binary format compatibility, the version of Emscripten that's used to compile the plug-ins must match the version of Emscripten that Unity uses.
Typically, plug-ins are compiled to a static library archive format. For versions before Unity 2021.2 (Emscripten 2.0), LLVM Bitcode file format () is the preferred plug-in format.
.bcFrom Unity 2021.2, the preferred plug-in format is GNU archive file format () that contain WebAssembly Object Files (). Although, earlier LLVM Bitcode .bc plug-in files are still supported, using them might have a negative impact to compilation times.
.a.oEmscripten build flags
When you compile your C/C++ code, include specific build flags to ensure compatibility with certain Player Settings (menu: Edit > > Player).
Project Settings
?
Without these flags, the plug-in might not link correctly with the code generated by Unity.
Unity Player Setting | Required Emscripten build flags |
|---|---|
| Enable Exceptions set to None | |
| Target WebAssembly 2023 enabled | |
| Enable C/C++ Native Multithreading enabled | |