これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、または MAC OS オンライン エミュレーターなどの複数の無料オンライン ワークステーションの XNUMX つを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド emcc です。
プログラム:
NAME
emcc - Emscripten コンパイラ フロントエンド
DESCRIPTION
emcc [オプション] ファイル...
ブリッジ 通常の gcc/g++ オプション 意志 仕事、 for 例:
- 助けて この情報を表示する
- バージョン
コンパイラのバージョン情報を表示する
オプション それ 修正されました or 新製品 in EMCC 次のとおりです。
-O0 最適化なし (デフォルト)
-O1 asm.js、LLVM を含む単純な最適化 -O1 最適化あり、ランタイムなし
アサーションまたは C++ 例外キャッチ (C++ 例外キャッチを再度有効にするには、次を使用します) -s
DISABLE_EXCEPTION_CATCHING=0 )。 (さまざまなオプションの影響の詳細については、
レベルについては、tools/shared.py および src/settings.js の apply_opt_level() を参照してください。) 注:
最適化は JavaScript にコンパイルするときにのみ行われ、中間コンパイルには行われません。
EMCC_OPTIMIZE_NORMALLY=1 でビルドする場合を除き、ビットコード (そうでない場合は推奨されません)
あなたは自分が何をしているか知っています!)
-O2 As -O1、リルーパー (ループ再作成)、LLVM を加えたもの -O2 最適化、および
-s ALIASING_FUNCTION_POINTERS=1
-O3 As -O2、さらに、生成されたコードを破損する可能性のある危険な最適化が行われています。 これは追加します
-s FORCE_ALIGNED_MEMORY=1 -s ダブルモード=0 -s PRECISE_I64_MATH=0 - 閉鎖 1
--llvm-lto 1
これはまったくお勧めできません。 より良いアイデアは、これらを個別に試してみることです
のトップ -O2 何が機能するかを確認します。 wiki と src/settings.js ( -s オプション)
。
-s オプション=値
emscripten コンパイラに渡される JavaScript コード生成オプション。 のために
利用可能なオプションについては、src/settings.js を参照してください。リストのオプションについては、
ほとんどのシェルでは引用符が必要です。たとえば、
-s RUNTIME_LINKED_LIBS="['liblib.so']"
or
-s "RUNTIME_LINKED_LIBS=['liblib.so']"
(これらのいずれかに外部の "s がないと、エラーが発生します)
値を読み取るファイルを指定することもできます。たとえば、
-s DEAD_FUNCTIONS=@/パス/ファイルへ
の内容 /パス/ファイルへ 読み取られ、JSON.解析されて、DEAD_FUNCTIONS に設定されます
(ファイルには次の内容が含まれる可能性があります)
["_func1"、"func2"]
)。 パスは相対パスではなく絶対パスである必要があることに注意してください。
-g デバッグ情報を使用します。 これは、最後のコンパイル段階で必要になることに注意してください。
ビットコードを JavaScript に変換します。そうでない場合は、デフォルトで削除されます。 -O1 以上。 の
-O0、生成されたコードには行番号が表示されます。 の -O1 以上、
オプティマイザーはそれらのコメントを削除します。 ただし、このフラグには次のような効果があります。
名前のマングリングや縮小(閉鎖や
パスを登録します)。
--型付き配列
0: 型付き配列なし 1: 並列型付き配列 2: 共有 (C ライク) 型付き配列
(デフォルト)
--llvm-opts
0: LLVM 最適化なし (デフォルトでは -O0) 1: -O1 LLVM の最適化 (デフォルトでは
-O1) 2: -O2 LLVM の最適化 3: -O3 LLVM の最適化 (デフォルトでは -O2+)
--llvm-lto
0: LLVM LTO なし (デフォルトでは -O2 以下) 1: LLVM LTO (デフォルトでは -O3) 注:
LLVM 最適化は実行されません (「 --llvm-opts)、これを 1 に設定しても効果はありません。
- 閉鎖
0: クロージャコンパイラなし (デフォルトでは -O2 以下) 1: クロージャ コンパイラを実行します。 これ
コード サイズが大幅に削減され、場合によっては実行速度が向上する可能性があります (ただし、
その逆も起こり得ます)。 実行には時間がかかり、必要な場合があることに注意してください。
コードに変更が加えられます。 これはデフォルトで実行されます -O3.
asm.js モードでは、クロージャはコンパイルされたファイルの周囲の「シェル」コードでのみ使用されます。
コード (コンパイルされたコードはカスタム asm.js ミニファイアーによって処理されます)。
注: クロージャ コンパイラがメモリ不足に陥った場合は、JAVA_HEAP_SIZE を調整してみてください。
環境 (たとえば、4096GB の場合は 4m)。
--js-変換
は、生成されたコードが最適化される前に呼び出されます。 これにより、
JavaScript を変更する (コードを追加したり、コードを削除したりするなど)
それらの変更は生成されたコードとともに最適化されます。
ちゃんと。 は、生成されたコードのファイル名を使用して呼び出されます。
パラメータ; コードを変更するには、元のデータを読み取り、それに追加します。
または、変更されたデータで上書きします。 はスペースで区切られたものとして解釈されます
たとえば、引数のリスト「pythonprocessor.py」の場合、Pythonが発生します
実行するスクリプト。
--pre-js
生成されたコードの前に内容が追加されるファイル。 これは*前*に行われます
最適化されているため、クロージャーコンパイラーが実行されると適切に縮小されます。
--post-js
生成されたコードの後に内容が追加されるファイル これは *前* に行われます
最適化されているため、クロージャーコンパイラーが実行されると適切に縮小されます。
--埋め込みファイル
生成された JavaScript 内に埋め込むファイル。 コンパイルされたコードは次のことが可能になります
ここで指定したのと同じ名前の現在のディレクトリ内のファイルにアクセスします。 それで、もし
あなたがやる --埋め込みファイル dir/file.dat の場合、(1) dir/file.dat は相対的に存在する必要があります。
emcc を実行すると、(2) コンパイルされたコードは次の方法でファイルを見つけることができます。
同じパス dir/file.dat を読み取ります。 ディレクトリがここに渡されると、そのディレクトリ全体が
内容が埋め込まれます。
--プリロードファイル
コンパイルされたコードを非同期で実行する前にプリロードするファイル。 さもないと
に似て --埋め込みファイルただし、このオプションは生成時にのみ関連します。
HTML (非同期バイナリ XHR を使用します)、または Web ページで使用される JS。 もしも
ディレクトリがここに渡されると、その内容全体がプリロードされます。 プリロードされたファイル
ファイル名.data に保存されます。ここで、ファイル名.html はコンパイルしているメイン ファイルです。
に。 コードを実行するには、.html と .data の両方が必要です。
emcc は tools/file_packager.py を実行して、組み込みおよび
プリロードされたファイル。 必要に応じて、ファイル パッケージャーを自分で実行できます。ドキュメントを参照してください。
そのファイルの中に。 次に、ファイル パッケージャーの出力を emcc に配置する必要があります。
--pre-js、メインのコンパイル済みコードの前に実行されるようにします(または、
他の方法で)。
- 圧縮
コンパイルされたコードと埋め込み/プリロードされたファイルの両方を圧縮します。 であるべきです
トリプル、
、 、
ここで、native_encoder は、stdin を stdout に圧縮するネイティブ実行可能ファイルです (
可能な限り最も単純なインターフェイス)、js_decoder は、
デコーダ、js_name はデコーダ ファイル内で呼び出す関数の名前です (
配列/型付き配列を受け取り、配列/型付き配列を返す必要があります。 圧縮
HTML を生成する場合にのみ機能します。 圧縮がオンの場合、指定されたすべてのファイルは
プリロードされたファイルは XNUMX つの大きなアーカイブに圧縮され、ファイルと同じ名前が付けられます。
HTML を出力しますが、サフィックス .data.compress が付きます
--縮小する
0: 生成された JavaScript の空白を縮小しません (デフォルトでは -O0, -O1、またはif
-g 使用されている)
1: 生成された JavaScript を縮小する
ホワイトスペース (デフォルトでは -O2+、仮定すると -g は使用されません)
- スプリット
デバッグを容易にするために、結果の JavaScript ファイルをいくつかの部分に分割します。 このオプション
Javascript が生成された場合にのみ機能します (ターゲット -o .js)。 機能のあるファイル
宣言は、実行時にメイン ファイルの前にロードする必要があります。
「-g」オプションを使用しない場合:
指定されたサイズまでの関数宣言と接尾辞を含むファイルを作成します
「_functions.partxxx.js」とサフィックス「.js」が付いたメイン ファイル。
「-g」オプションを使用すると:
Cソースファイルのディレクトリ構造を再作成し、関数を保存します。
それぞれの C ファイル内の宣言には接尾辞「.js」が付きます。 そのようなファイルの場合
指定したサイズを超えると、拡張子「.partxxx.js」が付いたファイルが作成されます。 メイン
ファイルはベース ディレクトリに存在し、接尾辞「.js」が付いています。
- 練る C/C++ を接続する「embind」バインディング アプローチを使用してソース コードをコンパイルします。
そしてJS。
--ignore-dynamic-linking 通常、emcc は動的リンクを次のように扱います。
静的リンク。動的ライブラリのコード内でリンクします。 次の場合、これは失敗します。
同じダイナミック ライブラリが複数回リンクされています。 このオプションを使用すると、動的リンクが可能になります。
は無視されるため、ビルド システムはエラーなしで続行できます。 しかし、あなたは
後で自分で共有ライブラリに手動でリンクする必要があります。
--シェルファイル
HTML 出力の生成時に使用されるスケルトン HTML ファイルへのパス名。 シェル
使用するファイルには、このトークンが含まれている必要があります: {{{ SCRIPT_CODE }}}
HTML 以外のターゲットが指定された場合、引数は無視されます。 -o オプションを選択します。
--js-ライブラリ
Emscripten の src/library_* にあるものに加えて使用する JavaScript ライブラリ
-v 詳細出力をオンにします。 これは通るだろう -v Clang を有効にし、さらに EMCC_DEBUG を有効にして、
emcc のオペレーションの詳細
--jcache
JavaScript キャッシュを使用します。 これはデフォルトでは無効になっています。 有効にすると、emcc は保存します。
コンパイル結果をキャッシュに保存し、後でコンパイルするときにキャッシュを確認します。
ccache が行うことのようなもの。 これにより、どこにいても増分ビルドが可能になります
大規模なプログラムをコンパイルしても、その一部のみを変更するだけ - はるかに高速化する
(キャッシュアクセスのためのディスク IO が増加します)。 有効にする必要があることに注意してください
--jcache データのロードと保存の両方に使用できるため、完全なビルドで有効にする必要があります
後の増分ビルド (有効にする場合) を高速化します。
キャッシュはコンパイルの 4 つの部分で個別に動作します: 'pre' はタイプとグローバルです
変数; 次に、その情報は関数である「funcs」に供給されます(
並列化します)、次に、それに基づいて最終情報を追加する「post」を行います。
関数 (たとえば、long64 サポート コードが必要かどうか)。 最後に、「jsfuncs」は
JavaScript レベルの最適化。 4 つの部分はそれぞれ個別にキャッシュできますが、
これらは相互に影響を与える可能性があることに注意してください。単一の C++ ファイルを再コンパイルすると、
グローバル変数を変更します - たとえば、グローバル変数を追加、削除、または変更します。
printf を追加するか、コンパイル時のタイムスタンプを追加することによって、「pre」を実行することはできません。
キャッシュからロードされます。 そして、「pre」の出力は「funcs」と「post」に送信されるため、
も無効になり、「jsfuncs」のみがキャッシュされます。 したがって、変更は避けてください
グローバルを使用してキャッシュを完全に機能させます。
前の段落で説明した問題を回避するには、次を使用できます。
emscripten_jcache_printf
コードにデバッグ printfs を追加するとき。 その関数は特別に前処理されているため、
最初の引数に対してグローバルな定数文字列を作成しないこと。 見る
詳細については、emscripten.h を参照してください。 特に、すでに
関数を追加してインクリメンタルを実行する*前に*、コード内でその関数を呼び出します。
外部参照 (これもグローバル プロパティ) を追加してもビルドされないようにします。
すべてを無効にする。
使用する必要があることに注意してください -g リンク段階 (ビットコードから JS) で、jcache が
(そうしないと、JS の縮小化によって混乱する可能性があります)。
- キャッシュの消去
コンパイルされた emscripten システム ライブラリ (libc++、libc++、
libc++abi、libc)。 通常、これは自動的に処理されますが、llvm を更新すると、
インプレース (新しいバージョン用に別のディレクトリを用意する代わりに)、キャッシュ
メカニズムが混乱する可能性があります。 キャッシュをクリアすると、次のような奇妙な問題が解決されることがあります。
Clang がライブラリ ファイルとリンクできないなど、キャッシュの非互換性。 これもまた
jcache やブートストラップ リルーパーなどの他のキャッシュ データをクリアします。 後に
キャッシュがクリアされると、このプロセスは終了します。
--save-bc パス
JavaScript または HTML にコンパイルする場合、このオプションはビットコードのコピーを保存します。
指定されたパスに。 ビットコードには、リンクされているすべてのファイルが含まれます。
標準ライブラリ、およびリンク時の最適化 (存在する場合) 後。
-- メモリ初期化ファイル
オンの場合、別のメモリ初期化ファイルが生成されます。 これはより効率的です
JavaScript 内に埋め込まれたメモリ初期化データをテキストとして保存するよりも優れています。
(デフォルトはオフです)
ターゲット ファイル (指定されている場合)-o )、生成される内容を定義します。
.js
JavaScriptを
.html
JavaScript が埋め込まれた HTML
。紀元前
LLVM ビットコード (デフォルト)
.o
LLVM ビットコード (.bc と同じ)
(次の場合に注意してください -- メモリ初期化ファイル .js または .html ファイルに加えて、
生成されると、.mem ファイルも表示されます。)
-c オプション (リンカーを実行しないように gcc に指示します) により、LLVM ビットコードが
emcc はビルドの最終リンク段階でのみ JavaScript を生成するため、生成されます。
入力ファイルは、Clang が処理できるソース コード ファイル (C または C++)、LLVM のいずれかです。
バイナリ形式のビットコード、または人間が読める形式の LLVM アセンブリ ファイル。
emcc は、いくつかの環境変数の影響を受けます。 詳細については、emcc のソースを参照してください。
(「os.environ」を検索してください)。
emcc: サポートされているターゲット: llvm ビットコード、javascript、elf ではありません (autoconf は elf を参照することを好みます)
上記で共有オブジェクトのサポートを有効にします)
COPYRIGHT
Copyright © 2013 Emscripten 作者 (AUTHORS.txt を参照) これは無料のオープンソースです
MIT ライセンスに基づくソフトウェア。 保証はありません。 商業性のためでもなく、
特定の目的への適合性。
onworks.net サービスを使用してオンラインで emcc を使用する