[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