7

LLVM コンパイラ ツールチェーンには、通常の gcc と互換性のある gcc があります。llvm-gcc を使用する利点は、任意のターゲットに移動することです。つまり、通常の gcc では、mips-apple-darwin などのランダムなアーキテクチャにコンパイルしようとすると、そのようなターゲットはないと通知されます。ただし、llvm-gcc は、実際には mips プロセッサ上で Mac OS X 用のコンパイラをビルドします。

ただし、問題は次のとおりです。ランダムなターゲットにビルドするには、そのターゲット用にビルドされた binutils が必要です。したがって、llvm がコンパイルできるターゲットがあり、binutils がコンパイルできない場合、GNU Binutils はそのターゲットをサポートしていないため、コンパイラを作成できません。

それで... ここに質問があります: GNU Binutils と互換性のある llvm-gcc のような同等の llvm-binutils はありますか? (リストからではなく、任意のターゲットにビルドするものを意味します。)

編集:

任意とは、llvm-gcc を実行するときにターゲットを選択しないことを意味します。llvm-gcc をコンパイルするときにターゲットを選択します。意味: mips-apple-darwin 用に GCC をコンパイルしようとすると、サポートされていないターゲットが表示されます。しかし、mips-apple-darwin 用に llvm-gcc をビルドすると、mips-apple-darwin-as と mips-apple-darwin-ld があれば動作します。

4

2 に答える 2

4

私の知る限り、LLVMは任意のターゲット用にコンパイルしません。ターゲットに合うようにすべてのインクルードと定義が必要です。通常、llvmには、ターゲットのコードを生成するためのバックエンドがあります。「CまたはC++コードをプラットフォームに依存しないLLVMビットコードにコンパイルできますか?」をお読みください。http://llvm.org/docs/FAQ.htmlから。

質問に答えるために、llvmはGNU binutilsを使用しません。llvmには、コードを生成するための独自の「binutils」があります(LLVMコアプロジェクトと呼ばれます)。逆アセンブラとデバッガはLLDBプロジェクトの一部です。

LLVMがある程度の独立性をもたらす場合、それは言語レベルにあります。プロジェクトはC/C ++、Ada、Fortranなどでコーディングできます... llvmには、コードを中間表現に変換する機能があります。そのIRは最終的にコードを生成します。

于 2011-03-09T07:39:39.393 に答える
2

llvm-gcc は任意のターゲットをサポートしていません。llvm-gcc は、特定のターゲット用に特別にビルドする必要があります。clang + LLVM できます。私は ellcc: http://ellcc.orgでまさにそれをやろうとしています。アセンブリとリンクには binutils を使用しています。

于 2011-03-10T03:22:28.717 に答える