<div dir="ltr"><div>Thanks Peter!</div><div><br></div><div>We are actually already building libcxx and libcxxabi by just bypassing the build system altogether. It's a little kludgey, so I was trying to just tap into the LLVM build system, and then get to use all the pieces. I started at the top level thinking that was the cleanest way. But if you've had success individually driving the CMake in the libraries, I'll try that instead. <br></div><div><br></div><div>Also, thanks for the reference, that looks relevant.<br></div><div><br></div><div>Best,</div><div>Anthony<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Jan 15, 2021 at 1:27 PM Peter Smith <<a href="mailto:Peter.Smith@arm.com">Peter.Smith@arm.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hello Anthony,<br>
<br>
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:<br>
compiler-rt built-ins (limited support for sanitizers on a Cortex-M7)<br>
libunwind<br>
libcxxabi<br>
libcxx<br>
Any remaining components of compiler-rt.<br>
<br>
There have been posts on llvm-dev about cross-compiling for Arm, hopefully others may be able to share their experiences as well.<br>
<br>
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 <a href="https://github.com/ARM-software/LLVM-embedded-toolchain-for-Arm/" rel="noreferrer" target="_blank">https://github.com/ARM-software/LLVM-embedded-toolchain-for-Arm/</a><br>
<br>
Peter<br>
<br>
________________________________________<br>
From: llvm-dev <<a href="mailto:llvm-dev-bounces@lists.llvm.org" target="_blank">llvm-dev-bounces@lists.llvm.org</a>> on behalf of Anthony Merlino via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>><br>
Sent: 15 January 2021 17:51<br>
To: <a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
Subject: [llvm-dev] Cross Compiling Runtime Libraries with Freestanding Toolchain<br>
<br>
Hello everyone,<br>
<br>
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.<br>
<br>
Here is my attempt to configure LLVM to get what I want:<br>
<br>
```<br>
#!/bin/bash<br>
<br>
mkdir build-arm<br>
cd build-arm<br>
<br>
cmake -DCMAKE_TOOLCHAIN_FILE=../arm-toolchain.cmake \<br>
    -DCMAKE_CROSSCOMPILING=True \<br>
    -DCMAKE_INSTALL_PREFIX=output \<br>
    -DLLVM_TABLEGEN=../build-host/bin/llvm-tblgen \<br>
    -DCLANG_TABLEGEN=../build-host/bin/clang-tblgen \<br>
    -DLLVM_DEFAULT_TARGET_TRIPLE=arm-none-eabi \<br>
    -DLLVM_TARGET_ARCH=ARM \<br>
    -DLLVM_TARGETS_TO_BUILD=ARM \<br>
    -DLLVM_BUILD_STATIC=True \<br>
    -DLLVM_ENABLE_PROJECTS="compiler-rt;libcxx;libcxxabi;libunwind" ../llvm<br>
```<br>
<br>
However, this results in the following error:<br>
<br>
```<br>
CMake Error at cmake/modules/CheckAtomic.cmake:56 (message):<br>
  Host compiler must support std::atomic!<br>
Call Stack (most recent call first):<br>
  cmake/config-ix.cmake:364 (include)<br>
  CMakeLists.txt:681 (include)<br>
```<br>
<br>
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!<br>
<br>
Any help would be appreciated!<br>
<br>
Best,<br>
Anthony<br>
<br>
<br>
<br>
<br>
<br>
</blockquote></div>