[llvm-dev] Cross Compiling Runtime Libraries with Freestanding Toolchain
Peter Smith via llvm-dev
llvm-dev at lists.llvm.org
Fri Jan 15 10:27:04 PST 2021
Hello Anthony,
In my experience I've had most success with building the static runtime libraries standalone, i.e. building each library one at a time by pointing cmake at the directory rather than using the integrated build in the top level llvm dir. In my case I do:
compiler-rt built-ins (limited support for sanitizers on a Cortex-M7)
libunwind
libcxxabi
libcxx
Any remaining components of compiler-rt.
There have been posts on llvm-dev about cross-compiling for Arm, hopefully others may be able to share their experiences as well.
Apologies not got a lot of time left today, have to leave the virtual office. Arm does have a recipe for building a LLVM toolchain (initially targeting cortex-m0), this is likely doing both more and less than you want, but it may be possible to get some ideas from it https://github.com/ARM-software/LLVM-embedded-toolchain-for-Arm/
Peter
________________________________________
From: llvm-dev <llvm-dev-bounces at lists.llvm.org> on behalf of Anthony Merlino via llvm-dev <llvm-dev at lists.llvm.org>
Sent: 15 January 2021 17:51
To: llvm-dev at lists.llvm.org
Subject: [llvm-dev] Cross Compiling Runtime Libraries with Freestanding Toolchain
Hello everyone,
So here's my situation - I am running an RTOS on an embedded system with an ARM Cortex M7. I have a freestanding GCC toolchain built for this target. What I would like to do is cross-compile LLVM to produce only the static runtime libraries: libcxxabi, libcxx, compiler-rt, and libunwind using that toolchain.
Here is my attempt to configure LLVM to get what I want:
```
#!/bin/bash
mkdir build-arm
cd build-arm
cmake -DCMAKE_TOOLCHAIN_FILE=../arm-toolchain.cmake \
-DCMAKE_CROSSCOMPILING=True \
-DCMAKE_INSTALL_PREFIX=output \
-DLLVM_TABLEGEN=../build-host/bin/llvm-tblgen \
-DCLANG_TABLEGEN=../build-host/bin/clang-tblgen \
-DLLVM_DEFAULT_TARGET_TRIPLE=arm-none-eabi \
-DLLVM_TARGET_ARCH=ARM \
-DLLVM_TARGETS_TO_BUILD=ARM \
-DLLVM_BUILD_STATIC=True \
-DLLVM_ENABLE_PROJECTS="compiler-rt;libcxx;libcxxabi;libunwind" ../llvm
```
However, this results in the following error:
```
CMake Error at cmake/modules/CheckAtomic.cmake:56 (message):
Host compiler must support std::atomic!
Call Stack (most recent call first):
cmake/config-ix.cmake:364 (include)
CMakeLists.txt:681 (include)
```
Is what I'm trying to do supported? Could someone help me chip away at this? I'm really trying to get a full LLVM stack running on this thing!
Any help would be appreciated!
Best,
Anthony
More information about the llvm-dev
mailing list