[llvm-dev] Cross compiling C++ program
Jonathan Roelofs via llvm-dev
llvm-dev at lists.llvm.org
Thu Aug 3 07:22:24 PDT 2017
On 8/2/17 5:57 PM, Goran Mekić wrote:
> On Wed, Aug 02, 2017 at 05:48:20PM -0600, Jonathan Roelofs wrote:
>> I strongly recommend against using the host's headers when cross compiling.
>> You need to either find or build an arm-none-eabi sysroot, and use the
>> --sysroot= flag.
>>
>>
>> Jon
> OK, that's a start. I found https://www.llvm.org/docs/HowToCrossCompileLLVM.html. Is it enough for --sysroot? In case it is, what should be the value of -DLLVM_DEFAULT_TARGET_TRIPLE if I want to use FreeBSD as host and Cortex-M4 as sysroot? Thanx!
IIUC, you don't want to cross compile llvm itself (which is what those
instructions are for), but instead you want to *use* llvm to cross
compile things.
To build your sysroot, you'll need to cross-build:
1) A libc. Good choices for that for baremetal are: newlib or musl.
2) Builtins. In llvm, that's provided in the compiler-rt repo.
Otherwise you can use libgcc from an arm-none-eabi-gcc toolchain.
3) If you want c++, you'll also need:
3A) c++ abi library. llvm provides this as libcxxabi. There's also
libsupc++, and libcxxrt, depending on what licenses you're comfortable with.
3B) An unwinder. llvm provides libunwind. There's also one
packaged in libgcc_s (depending on how it was built), and another from
the old HP libunwind project (different codebase, but same name as the
llvm one).
3C) A c++ standard library. llvm provides this as libcxx. There's
also libstdc++.
To start with, I recommend using the cmake cache in:
$clang_src/cmake/caches/BaremetalARM.cmake. You'll want the stuff in it
that references the armv7em-none-eabi triple. To use it, do something like:
$ cmake -G <build system>
-DBAREMETAL_ARMV7EM_SYSROOT=path/to/your/v7em/sysroot -C
path/to/BaremetalARM.cmake [other CMake Options]
Assuming your sysroot has libc headers in it, that should get you a
clang that's capable of compiling basic things, which you can use to
build all the libraries above.
Jon
>
> Regards,
> meka
--
Jon Roelofs
jonathan at codesourcery.com
CodeSourcery / Mentor Embedded / Siemens
More information about the llvm-dev
mailing list