binutils と newlib を使用して llvm+clang ツールチェーンを構築する方法と、その使用方法を知っている人はいますか?
- ホスト: Linux、AMD64
- ターゲット: cortex-m3、stm32
- c-lib: newlib
- アセンブラ: gnu as
GCC と LLVM をサポートする CMake に基づいたファームウェア フレームワーク (PolyMCU https://github.com/labapart/polymcu ) を作成しました。CMake に基づいているため、Linux/Windows/MacOS でファームウェアをビルドできます。また、Newlib を使用しています - すべての要件がそこにあるようです!
ARM Cortex-M で GCC と LLVM のビルド サイズを比較したブログも書きました: http://labapart.com/blogs/3-the-importance-of-the-toolchain-version-in-embedded-space 興味深い結果、Clang で生成されたコードは、Cortex-M 上の GCC よりもそれほど大きくありません...
残念ながら、現時点では、clang は柔軟なクロスコンパイル設定をサポートしていません。したがって、ほとんどの場合、必要なすべての引数を指定して必要なツールを呼び出す必要があります。
--target=thumbv7-eabi configure 引数を使用して llvm + clang をビルドすることから始めます (これには昨日の時点で llvm + clang が必要になることに注意してください)。--enable-targets=arm も指定することをお勧めします。これにより、clang は既定で Thumb 用のコードを生成するように指示されます。この後、clang -mcpu=cortex-m3 を呼び出してコードを生成できます。
-I / -L などを使用して、必要なすべてのインクルード / ライブラリ パスを手動で指定する必要があります。
C++ のハッキングに満足している場合は、必要な「HostInfo」を記述して、適切なツールを呼び出し、適切なパスを自動的に提供することができます。