Emscriptenのコンパイル最適化

7326 ワード

コンパイルプロジェクトの原文のリンク:https://kripken.github.io/emscripten-site/docs/compiling/Building-Projects.html
一.Emscripten編集の最適化は二つのステップに分けられます.
  • 各ソースファイルをターゲットファイル(.bcファイル)にコンパイルし、LLVMによる最適化
  • ターゲットファイルをjsファイルにコンパイルする
  •  
     .emscripten
    
    # Correct. The SAME LLVM and JavaScript options are provided at both levels.
    ./emcc-O 2 a.cpp-o.bc/bitcodeにコンパイルする
    ./emcc-O 2 b.cpp-o b.bc//bitcodeにコンパイルする
    ・emcc-O 2 a.bc-o project.js/bitcodeをjsにコンパイルする
     
    二つのステップの最適化レベルは同じに設定されています.
     
    三.Js使用庫の二種類の方式:
    1.   bitcode    js
    emcc project.bc libstuff.bc -o final.js
     
    2.   bitcodejs
    emcc project.bc libstuff.bc -o allproject.bc
    emcc allproject.bc -o final.js
     
    四.Emscripten Ports
    ライブラリの収集とEmscriptenに移植します.Githubアドレス:https://github.com/emscripten-ports
             emccportsemcc         ,         ,           ,              。
    例えば、SDL 2はポーツであり、コマンド−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