编译Cortex M3裸机

时间:2014-01-21 23:33:17

标签: c++11 llvm native cortex-m3

是否有某个指南描述了如何让LLVM为Cortex-M3发出二进制文件,我可以按摩它来运行裸机?我花了相当多的时间在Windows和Ubuntu上使用LLVM无济于事。我可以得到类似ARM的装配。我可以得到一些代码,但我真正需要的是ELF,DWARF,Hobbit,Gandalf或任何其他具有文件格式规范的Lord of the Rings生物。任何和所有帮助表示赞赏!我正在Ubuntu,Windows和/或OS X上使用CLANG编译LLVM 3.4。

3 个答案:

答案 0 :(得分:4)

我创建了一个固件框架--PolyMCU https://github.com/labapart/polymcu - 基于支持GCC和LLVM的CMake。因为它基于CMake,所以您可以在Linux / Windows / MacOS上构建固件。 它还使用Newlib并支持Baremetal / CMSIS RTOS(RTX)/ FreeRTOS。

使用PolyMCU的好处是这个框架不会在libc和MCU供应商的SDK之上添加任何软件层。 另一个好处是您可以轻松切换工具链。我使用此功能通过使用许多编译器进行测试来获得有关我的代码的更多反馈。

我还写了一篇博客,在那里我比较了ARM Cortex-M上的GCC和LLVM构建大小:http://labapart.com/blogs/3-the-importance-of-the-toolchain-version-in-embedded-space有趣的结果,Clang生成的代码并不比Cortex-M上的GCC大得多......

答案 1 :(得分: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)。但是,我确实需要从GCC工具链(http://launchpad.net/gcc-arm-embedded)链接arm-none-eabi-ld,我相信这就是你如何获得你的ELF二进制文件。

我已经转到了D编程语言,我在这里有一个使用LDC(LLVM D编译器)的简单示例(http://wiki.dlang.org/Extremely_minimal_semihosted_%22Hello_World%22

所以,我相信可以用LLVM编译裸机ARM Cortex-M3软件,但似乎没有多少人尝试过。

答案 2 :(得分:1)

可以使用以http://llvm.org/builds为基础的https://launchpad.net/gcc-arm-embedded拉取的clang ++作为基础,至少在编译步骤中是这样。

必需的额外参数是硬编码到gcc中的包含路径和某些arm-none-eabi默认值:

--target=arm-none-eabi -fshort-enums  -isystem "../arm-none-eabi/include/c++/5.2.1" [-isystem ...]