编译工程原文链接:https://kripken.github.io/emscripten-site/docs/compiling/Building-Projects.html
一.Emscripten编译优化分为两个步骤:
二.emscripten正确的优化方式:
# Correct. The SAME LLVM and JavaScript options are provided at both levels.
./emcc -O2 a.cpp -o a.bc//编译成bitcode
./emcc -O2 b.cpp -o b.bc//编译成bitcode
./emcc -O2 a.bc b.bc -o project.js//把bitcode编译成js
两个步骤的优化级别设置为一样
三.Js使用库的两种方式:
1. 多个bitcode直接变成js
emcc project.bc libstuff.bc -o final.js
2. 多个bitcode先编译成一个,然后在变成js
emcc project.bc libstuff.bc -o allproject.bc
emcc allproject.bc -o final.js
四.Emscripten Ports
有用库的收集,并移植到Emscripten。Github地址:https://github.com/emscripten-ports
他们已经被整合到了emcc中。当你请求一个ports被使用时,emcc会从远程服务器获取,设置并在本地构建它,然后将其链接到您的项目,向您的构建命令添加必需的包含。
例如:SDL2是一个ports,可以请求并并使用命令-s USE_SDL=2链接他。
emcc tests/sdl2glshader.c -s USE_SDL=2 -s LEGACY_GL_EMULATION=1 -o sdl2.html
五.动态库链接
Emscripten的目标是产生最快、最小的代码,因为这个原因,它侧重于产生对整个项目单一的JavaScript文件。出于这个原因,在可能时应避免动态链接。
缺省情况下,.so文件和.bc文件和.o文件是相同的,即他们包含LLVM bitcode.
在最终构建阶段(在生成JavaScript或HTML)时指定的动态库作为静态库链接在一起
六.emcc的主要使用方式(教程:https://kripken.github.io/emscripten-site/docs/getting_started/Tutorial.html#tutorial)
# Generate a.out.js from C++. Can also take .ll (LLVM assembly) or .bc (LLVM bitcode) as input
./emcc src.cpp
# Generate src.o containing LLVM bitcode.
./emcc src.cpp -c
# Generate result.js containing JavaScript.
./emcc src.cpp -o result.js
# Generate result.bc containing LLVM bitcode (the suffix matters).
./emcc src.cpp -o result.bc
# Generate a.out.js from two C++ sources.
./emcc src1.cpp src2.cpp
# Generate src1.o and src2.o, containing LLVM bitcode
./emcc src1.cpp src2.cpp -c
# Combine two LLVM bitcode files into a.out.js
./emcc src1.o src2.o
# Combine two LLVM bitcode files into another LLVM bitcode file
./emcc src1.o src2.o -o combined.o