2014-01-21 4 views
4

Есть ли где-нибудь гид, который описывает, как заставить LLVM испускать бинарный файл для Cortex-M3, который я могу массировать в бегущий металл? Я много времени проводил с LLVM на Windows и Ubuntu, но безрезультатно. Я могу получить ARM-подобную сборку. Я могу получить бит-код, но мне действительно нужны ELF, DWARF, Hobbit, Gandalf или любой другой трекер Lord of the Rings, имеющий спецификацию формата файла. Любая помощь приветствуется! Я компилирую LLVM 3.4 с помощью CLANG на Ubuntu, Windows и/или OS X.Компиляция для Cortex M3 голый металл

+2

Требуется ли Вам LLVM? Потому что, если вы этого не сделаете, вы можете просто использовать эту привязку GCC, которая поддерживается ARM: https://launchpad.net/gcc-arm-embedded –

+1

+1 для Дэвида; в встроенной разработке вы обычно выбираете среди поддерживаемых инструментальных цепей. – Potatoswatter

+0

Вам нужен ELF ... DWARF предназначен для вашей отладочной информации, а не для самого кода. –

ответ

1

Лучший гид, который я знаю, находится здесь: http://wiki.osdev.org/LLVM_Cross-Compiler. Это в основном о создании кросс-компилятора LLVM, но в нем есть раздел «Использование». Однако в этом разделе конкретно показан пример процессора Cortex-A, но вы должны иметь возможность получить общую идею.

Я создал простую гласную металлическую программу Cortex-M3 «hello world», но у меня ее нет передо мной. IIRC, единственными возможными параметрами я был -march=thumb -mcpu=cortex-m3 до тех пор, пока бэкэнд LLVM-компилятора был построен с поддержкой поддержки большого пальца ARM (Опять же, см. http://wiki.osdev.org/LLVM_Cross-Compiler). Тем не менее, мне нужно было связать с arm-none-eabi-ld из инструментальной привязки GCC здесь (http://launchpad.net/gcc-arm-embedded), и я считаю, что вы можете получить свой ELF-бинарный файл.

С тех пор я перешел на язык программирования D, и у меня есть простой пример использования LDC (The LLVM D компилятор) здесь (http://wiki.dlang.org/Extremely_minimal_semihosted_%22Hello_World%22)

Таким образом, я считаю, компиляциями голого металла ARM Cortex-M3 программного обеспечения с LLVM можно сделать, но кажется, что многие люди не пробовали.

2

Я создал прошивку - PolyMCU https://github.com/labapart/polymcu - основанный на CMake, который поддерживает GCC и LLVM. Поскольку он основан на CMake, вы можете создать свою прошивку в Linux/Windows/MacOS. Он также использует Newlib и поддерживает Baremetal/CMSIS RTOS (RTX)/FreeRTOS.

Преимущество использования PolyMCU в этой структуре не добавляет программный уровень поверх libc и SDK поставщика MCU. Еще одно преимущество заключается в том, что вы можете легко переключать инструментальные цепочки. Я использовал эту функцию, чтобы получить больше отзывов о моем коде, протестировав их со многими компиляторами.

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

+0

Для меня clang фактически производит меньший код, чем gcc. – Trass3r

1

Это возможно использовать clang ++, вытащил из http://llvm.org/builds с https://launchpad.net/gcc-arm-embedded в качестве базы, по крайней мере, для этапа компиляции.

Необходимые дополнительные аргументы включаемые пути зашиты в НКУ и некоторые рычажного непереключаемых EABI по умолчанию:

--target=arm-none-eabi -fshort-enums -isystem "../arm-none-eabi/include/c++/5.2.1" [-isystem ...] 
Смежные вопросы