Подтвердить что ты не робот

Как использовать llvm + clang для компиляции для stm32

Есть ли у кого-нибудь информация о том, как создать инструментальную цепочку llvm + clang с помощью binutils и newlib и как ее использовать?

  • хост: Linux, AMD64
  • target: cortex-m3, stm32
  • c-lib: newlib
  • Ассемблер: gnu as
4b9b3361

Ответ 1

Посмотрите на mbed_samples в github

https://github.com/dwelch67/mbed_samples/

И другие проекты, которые у меня есть в github (которые используют llvm, arm based, mips based и msp430 based). С помощью полных инструментов llvm (well clang) работают мелкие кросс-компиляции для ARM и т.д.

mbed является lpc cortex-m, а stm32 является st cortex-m, основы - это те же настройки регистра изменений. У меня есть stm32vld образец dir, если вы хотите, чтобы некоторые конкретные примеры stm32 с использованием llvm (с использованием 64-битного хоста AMD linux), не проблема.

Ответ 2

К сожалению, сейчас clang не поддерживает гибкие настройки кросс-компиляции. Поэтому, скорее всего, вам нужно будет вызывать необходимые инструменты со всеми необходимыми аргументами.

Начните с создания llvm + clang, используя параметр --target = thumbv7-eabi configure (обратите внимание, что для этого вам понадобится llvm + clang). Возможно, вы захотите указать --enable-target = arm. Это даст указание clang генерировать код для большого пальца по умолчанию. После этого вы можете вызвать clang -mcpu = cortex-m3 для генерации кода для вас.

Вам нужно будет предоставить все необходимые пути ввода/библиотеки руками через -I/-L и т.д.

Если вы довольны взломом С++, вы можете написать необходимую "HostInfo", так что она выберет нужные инструменты и автоматически предоставит правильные пути.

Ответ 3

Я создал структуру прошивки - PolyMCU https://github.com/labapart/polymcu - на основе CMake, поддерживающей GCC и LLVM. Поскольку он основан на CMake, вы можете создать свою прошивку в Linux/Windows/MacOS. Он также использует Newlib - он выглядит все ваши требования!

Я также написал блог, в котором сравнивал размер сборки GCC и LLVM на ARM Cortex-M: http://labapart.com/blogs/3-the-importance-of-the-toolchain-version-in-embedded-space Интересные результаты, генерируемый Clang код не намного больше, чем GCC на Cortex-M...