Merge branch 'main' into reenable
tree: cd837bc3e9a046b187f5bccf988e7511decf26c7
  1. .circleci/
  2. .github/
  3. cmake/
  4. docs/
  5. media/
  6. site/
  7. src/
  8. system/
  9. test/
  10. third_party/
  11. tools/
  12. .clang-format
  13. .coveragerc
  14. .editorconfig
  15. .flake8
  16. .git-blame-ignore-revs
  17. .gitattributes
  18. .gitignore
  19. .gitmodules
  20. .mypy.ini
  21. .prettierrc.yml
  22. .style.yapf
  23. AUTHORS
  24. bootstrap
  25. bootstrap.bat
  26. bootstrap.py
  27. ChangeLog.md
  28. CONTRIBUTING.md
  29. em++
  30. em++.bat
  31. em++.py
  32. em-config
  33. em-config.bat
  34. em-config.py
  35. emar
  36. emar.bat
  37. emar.py
  38. embuilder
  39. embuilder.bat
  40. embuilder.py
  41. emcc
  42. emcc.bat
  43. emcc.py
  44. emcmake
  45. emcmake.bat
  46. emcmake.py
  47. emconfigure
  48. emconfigure.bat
  49. emconfigure.py
  50. emdump
  51. emdump.bat
  52. emdwp
  53. emdwp.bat
  54. emmake
  55. emmake.bat
  56. emmake.py
  57. emnm
  58. emnm.bat
  59. emprofile
  60. emprofile.bat
  61. emranlib
  62. emranlib.bat
  63. emranlib.py
  64. emrun
  65. emrun.bat
  66. emrun.py
  67. emscons
  68. emscons.bat
  69. emscons.py
  70. emscripten-version.txt
  71. emsize
  72. emsize.bat
  73. emsize.py
  74. emstrip
  75. emstrip.bat
  76. emstrip.py
  77. emsymbolizer
  78. emsymbolizer.bat
  79. emsymbolizer.py
  80. eslint.config.mjs
  81. LICENSE
  82. Makefile
  83. package-lock.json
  84. package.json
  85. README.md
  86. requirements-dev.txt
  87. SECURITY.md
README.md

emscripten logo

Main project page: https://emscripten.org

GitHub CI status: CircleCI

Chromium builder status: emscripten-releases

Overview

Emscripten compiles C and C++ to WebAssembly using LLVM and Binaryen. Emscripten output can run on the Web, in Node.js, and in wasm runtimes.

Emscripten provides Web support for popular portable APIs such as OpenGL and SDL2, allowing complex graphical native applications to be ported, such as the Unity game engine and Google Earth. It can probably port your codebase, too!

While Emscripten mostly focuses on compiling C and C++ using Clang, it can be integrated with other LLVM-using compilers (for example, Rust has Emscripten integration, with the wasm32-unknown-emscripten and asmjs-unknown-emscripten targets).

License

Emscripten is available under 2 licenses, the MIT license and the University of Illinois/NCSA Open Source License.

Both are permissive open source licenses, with little if any practical difference between them.

The reason for offering both is that (1) the MIT license is well-known and suitable for a compiler toolchain, while (2) LLVM‘s original license, the University of Illinois/NCSA Open Source License, was also offered to allow Emscripten’s code to be integrated upstream into LLVM. The second reason became less important after Emscripten switched to the LLVM wasm backend, at which point there isn't any code we expect to move back and forth between the projects; also, LLVM relicensed to Apache 2.0 + exceptions meanwhile. In practice you can just consider Emscripten as MIT licensed (which allows you to do pretty much anything you want with a compiler, including commercial and non-commercial use).

See LICENSE for the full content of the licenses.