2012-04-25 4 views
4

最近、私は非常に有望なコンパイラプロジェクトのバックエンドとしてLLVMを検討してきました。LLVMのマシンコード生成のステータスは?

しかし、LLVMはJITコード(これは非常にうれしいです)またはネイティブプラットフォーム用のアセンブリをエクスポートできますが、実際にはネイティブ実行可能ファイルを作成できません。これは、LLVMが主張するコンパイラのバックエンドインフラストラクチャにとって大きな制限のようです。

私は、コンパイルされた実行ファイルをLLVMをインストールしないで(JITなし)実行できるようにするプロジェクトに取り組んでいます。 LLVMには、マシンコード(LLVMビットコードではありません)を生成するために使用できるネイティブアセンブラがありますか?

答えて

2

LLVM(あなたが言及したMCライブラリを使用して)のオブジェクトファイル(おそらく最も成熟していると思われるx86)が生成されます。これはMCの前の比較的最近の進歩ですが、LLVMには機能的なアセンブラがありませんでした。最新のリリースされたLLVMバージョン(現在は3.0ですが、まもなく3.1になります)を使用してください。

この時点で、LLVMの機能は停止します。実際にオブジェクトファイルを実行可能ファイルにリンクするには、プラットフォームリンカが​​必要です。たとえば、ldはLinux-yプラットフォームで使用されます。

これは今日(2012年4月)でも当てはまりますが、将来は真実ではないことに注意してください。 LLD(LLVM Linker)プロジェクトは初期段階にあり、外部ツールに頼ることなく、完全にロード可能な実行可能ファイル(および共有ライブラリ)をLLVMツールで直接作成するために必要な余分なステップを踏み出すLLVMベースのリンカを提供することを目指しています。

関連する問題