web-dev-qa-db-ja.com

cmakeプロジェクトでemscriptenを使用してビットコード(.bcファイル)を生成するにはどうすればよいですか?

Cmakeでビルドしたc ++プロジェクトがあります。それはうまくコンパイルしてリンクします。目標は、Emscriptenを使用して、ブラウザーで実行されるコードを生成することです。

Emscriptenサイトのドキュメントから ここ 次のことがわかります。

enter image description here

最初の2つのコマンド(emconfigureとemmake)を実行した後、一見正常に見えましたが、実際には.jsファイルと.wasmファイルが生成されますが、.bcファイルはどこにもありません。ドキュメントは、.jsファイルが3番目のコマンド./emccの実行からのみ生じることを示唆しています。

あなたが見つけた同じドキュメントページの少し下に:

MakeはリンクされたLLVMビットコードを生成します。すべてのファイルは同じ最適化とコンパイラオプションを使用してコンパイルする必要があるため、リンク中にJavaScriptは自動的に生成されません。これは、ビットコードからJavaScriptへの最終変換で行うのが理にかなっています。

したがって、ビットコードを生成する必要があるようです。これを行う方法?

(これらのドキュメントが示唆しているように、VERBOSEコマンドを使用しました。ネイティブコンパイラの代わりにemccが使用されていることはわかりませんが、em ++が使用されています。これはemccとほぼ同じようです。)

5
Alyoshak

プロジェクトによっては、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
1
AnthumChris

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).
_
1
Braaedy