Cmakeでビルドしたc ++プロジェクトがあります。それはうまくコンパイルしてリンクします。目標は、Emscriptenを使用して、ブラウザーで実行されるコードを生成することです。
Emscriptenサイトのドキュメントから ここ 次のことがわかります。
最初の2つのコマンド(emconfigureとemmake)を実行した後、一見正常に見えましたが、実際には.jsファイルと.wasmファイルが生成されますが、.bcファイルはどこにもありません。ドキュメントは、.jsファイルが3番目のコマンド./emccの実行からのみ生じることを示唆しています。
あなたが見つけた同じドキュメントページの少し下に:
MakeはリンクされたLLVMビットコードを生成します。すべてのファイルは同じ最適化とコンパイラオプションを使用してコンパイルする必要があるため、リンク中にJavaScriptは自動的に生成されません。これは、ビットコードからJavaScriptへの最終変換で行うのが理にかなっています。
したがって、ビットコードを生成する必要があるようです。これを行う方法?
(これらのドキュメントが示唆しているように、VERBOSEコマンドを使用しました。ネイティブコンパイラの代わりにemccが使用されていることはわかりませんが、em ++が使用されています。これはemccとほぼ同じようです。)
プロジェクトによっては、configure
を完全にスキップできる場合があります。過去に、Wasm実装が迅速にビルドするために使用するエクスポートするC関数を指定しました。一部のCライブラリでは、少なくともautogen
を実行する必要がありますが、複数の依存関係を持つCプロジェクトではconfigure
をバイパスしました。
# create bitcode library for WebAssembly module
$ emcc \
-o wasmlib.bc \
-s EXPORTED_FUNCTIONS="[ \
'_needed_c_function1' \
'_needed_c_function2', \
]" \
-I "c_lib_src/include" \
c_lib_src/*.c
# Quickly build using the bitcode we just created
$ emcc \
-o my_wasm_module.js \
-I "c_lib_src/include" \
wasmlib.bc \
my_wasm_impl.c
Emscriptenのマンページから:
_The target file, if specified (-o <target>), defines what will be generated:
<name>.js
JavaScript
<name>.html
HTML with embedded JavaScript
<name>.bc
LLVM bitcode (default)
<name>.o
LLVM bitcode (same as .bc)
_
次に、出力ファイルの拡張子が_.bc
_のカスタムコマンドを作成して、ビットコードを生成できると思います。 .c(pp)
から_.js
_を直接生成することで、面倒な作業をスキップできる可能性があるようです。
編集:あるいは、実際の製品ではなく副作用としてのみ必要な場合:
_ --save-bc PATH
When compiling to JavaScript or HTML, this option will save a copy of the bitcode to the specified
path. The bitcode will include all files being linked, including standard libraries, and after any
link-time optimizations (if any).
_