web-dev-qa-db-ja.com

llvm + clangを使用してstm32用にコンパイルする方法

Binutilsとnewlibを使用してllvm + clangツールチェーンを構築する方法とその使用方法について誰かが情報を持っていますか?

  • ホスト:Linux、AMD64
  • ターゲット:cortex-m3、stm32
  • c-lib:newlib
  • アセンブラ:gnu as
20
wermut

GCCとLLVMをサポートするCMakeに基づくファームウェアフレームワーク--PolyMCU https://github.com/labapart/polymc -を作成しました。 CMakeに基づいているため、Linux/Windows/MacOSでファームウェアをビルドできます。 Newlibも使用しています-すべての要件が満たされているようです!

ARM Cortex-M: http://labapart.com/blogs/3-the-importance-of-)でGCCとLLVMのビルドサイズを比較したブログも書きました。 the-toolchain-version-in-embedded-space 興味深い結果、Clangで生成されたコードはCortex-MのGCCよりもそれほど大きくありません...

6
OlivierM

残念ながら、現時点では、clangは柔軟なクロスコンパイル設定をサポートしていません。したがって、おそらく、必要なすべての引数を使用して必要なツールを呼び出す必要があります。

--target = thumbv7-eabi設定引数を使用してllvm + clangをビルドすることから始めます(これには昨日の時点でllvm + clangが必要になることに注意してください)。 --enable-targets = armも指定することをお勧めします。これは、デフォルトでthumbのコードを生成するようにclangに指示します。この後、clang -mcpu = cortex-m3を呼び出してコードを生成できます。

-I/-Lなどを使用して、必要なすべてのインクルード/ライブラリパスを手動で提供する必要があります。

C++のハッキングに満足している場合は、必要な「HostInfo」を記述して、適切なツールを呼び出し、適切なパスを自動的に提供します。

2