当前位置: 首页 > 工具软件 > Emscripten > 使用案例 >

Emscripten的编译优化

吴山
2023-12-01

编译工程原文链接:https://kripken.github.io/emscripten-site/docs/compiling/Building-Projects.html

一.Emscripten编译优化分为两个步骤:

  1. 每个源文件编译成目标文件(.bc文件),通过LLVM优化
  2. 目标文件编译成js文件

 

.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

有用库的收集,并移植到EmscriptenGithub地址: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
 类似资料: