Arm offers 2 different GCC toolchains: one for Cortex-M/R devices and the other one for Cortex-A devices. However, in the Cortex-M/R toolchain documentation, it is specified that Cortex-A targets are accepted too, so this confuses me: why is there another toolchain for Cortex-A devices?
In my case, I am trying to build a baremetal application for a Cortex-A9 using a Makefile that invokes the GCC cross-compiler for arm. Should I use arm-none-eabi- or arm-eabi- tools? What's the difference?
Also, where can I find a template for a linker LD script for Cortex-A9 cores which I can then customize?
I have done this many times for Cortex-M devices, using arm-none-eabi-gcc, and using template linker scripts and startup files that I can then edit for my own needs. I can find many of these templates for Cortex-M devices, but none for Cortex-A cores.
you can take a look at this document https://developer.arm.com/tools-and-software/embedded/legacy-tools/ds-5-development-studio/resources/tutorials/building-bare-metal-applications-in-ds-5-using-gcc-compiler
Thanks Zheng. I read the document and it was helpful, however it does not explain the difference between the 2 tools: the Cortex-M/R toolchain (which can also compile for Cortex-A cores) and the Cortex-A toolchain for baremetal applications.
the major difference is about the library, if you compile both of them targeting A9, the Cortex-M/R GCC compiler can not generate code without neon SIMD support, while Cortex-A compiler can
Cortex M/R library
Thanks Zheng. I tried both tools (arm-none-eabi-gcc and arm-eabi-gcc) and both work correclty for me (I am using a hard FPU). The only difference I could find between the 2 is that arm-eabi-gcc (cortex-a toolchain) seems to compile faster.
View all questions in Arm Compilers forum