2017-01-09 9 views
0

私はおもちゃプログラムでテストした結果、大きなプログラムで実行したいと思っています。その多くはmemcachedのようなオープンソースプログラムです。そのようなプログラムは独自のMakefileと複雑なコンパイル手順を持っています。そのようなプログラムのためのビットコードファイルを生成して、それらに私のパスを働かせたい。ヘルプと提案をいただければ幸いです!多くのソースコードファイルと巨大なMakefile(例えばmemcached)を持つ大規模なプログラムのためのllvmビットコードの生成方法は?

答えて

1

あなたをすることができますやっている:

  • LTOを構築します。CFLAGSに-flto追加すると、独自に構築リンカプラグインを使用してアプリケーションを構築するには、ビルドシステムの観点から非常にシームレスですビューの。しかし、LTOを設定する方法についていくつかの理解が必要です。
  • LLVMパイプラインに静的にパスを追加し、独自のビルドクランを使用して独自のビルドクランを構築してください。ビルドシステムによっては、インストールされたclangを指すCC/CXX環境変数をエクスポートするだけで十分です。
  • パスをダイナミックにclangにロードすることで構築できます。たとえば、これはPollyです(オプション)。
+0

ありがとうJoky!だから私はこれらの3つのオプションの1つを行う必要がありますか?最初の2つのオプションの既存の例はありますか? –

+0

私はそうは思いませんが、オプション2は設定が難しくないかもしれません。パスがある場合は、PassManagerBuilder.cppの適切な場所に追加してclangをビルドします。 – Joky

+0

私がしたことは、Makefileを編集して、gcc/g ++を置き換えるclangと関連するフラグを入れて、パスがコード上で動作するようにすることです。私のパスは、関数呼び出しを追加することによってプログラムを呼び出し、その関数は別の.cファイルにあります。しかし、私はclangから未定義の参照エラーを取得します。私はここにこの問題を掲載しました: http://stackoverflow.com/questions/41650417/clang-linking-error-undefined-reference-to-function-calls-added-by-llvm-pass どうぞご覧ください。どうもありがとうございます! –

0

climフラグに-emit-llvmを追加すると、アセンブリではなくオブジェクトファイルまたはLLファイルの代わりにBCファイルが生成されます。

メイクファイルを正しい方向に開始する必要がありますより少し修正する必要があります。あなたは合格している内容に応じて

+0

返信いただきありがとうございます。だから、私はこれらのプログラムの既存のMakefileを修正し、gccをclcで置き換える必要があると思います。既存のツールはありますか? –