clang で C/C++ コードをバイナリ実行可能ファイルではなく LLVM ビットコードにコンパイルしたいです。どうすれば実現できますか?
LLVM ビットコードがある場合、それをさらにバイナリ実行可能ファイルにコンパイルするにはどうすればよいでしょうか?
バイナリ実行ファイルにコンパイルする前に、LLVM ビットコードに独自のコードを追加したいと思います。
ベストアンサー1
いくつかの C/C++ ファイルが与えられますfoo.c
:
> clang -S -emit-llvm foo.c
foo.ll
LLVM IR ファイルを生成します。
このオプションは、次-emit-llvm
の方法でドライバーではなくコンパイラのフロントエンドに直接渡すこともできます。-cc1
> clang -cc1 foo.c -emit-llvm
foo.ll
IR を使用して生成します。-cc1
などのクールなオプションを追加します。詳細については、-ast-print
をご覧ください。-cc1 --help
LLVM IR をアセンブリにさらにコンパイルするには、次のllc
ツールを使用します。
> llc foo.ll
アセンブリで生成しますfoo.s
(デフォルトは、実行するマシンのアーキテクチャです)。LLVMllc
ツールの1つです。ここにそのドキュメントがあります。