[cfe-users] clang for embedded, C runtime support, and crt*.o
Andrew Pullin via cfe-users
cfe-users at lists.llvm.org
Sun Nov 22 21:59:24 PST 2020
Hi folks,
I have recently been looking at using clang to build firmware code
targeting the ARM Cortex-M microcontrollers, where arm-gcc is the de
facto standard tool.
I did find some good write-ups around online to follow and get me
started, but I ran into an issue that goes beyond my current knowledge:
To get a build that produced a "working" ELF that would run on a micro,
I ended up having to explicitly link in my arch-specific crt0.o, crti.0,
crtn.o, crtbegin.o, and crtend.o, including sussing those out of the
arm-gcc library path.
(here, the arch is thumb/v6-m/nofp or ARMv6-m)
Is that expected, if I want to use various GCC libraries? e.g. lib_nano,
libnosys
The roundabout solution for linking is intricate enough that it makes me
believe I might be missing some target or architecture-specific flag
that would normally pull these objects in to get all of the pre-main
symbols.
I've found a few bug tickets mentioning the crt items in the
clang/compiler-rt ecosystem, but nothing seemed final or a standard
solution.
I did a minimum working example using CMake to accomplish the build and
show my workaround here:
https://github.com/apullin/clang_min_fw
As you can see in the CMakeLists, I had to fulfill these dependencies
with ${CRT_SUPPORT_ROOT} and ${CRT_SUPPORT_LINK} .
Any insight on the topic would be appreciated.
Thanks,
Andrew Pullin
More information about the cfe-users
mailing list