Andrew Kelley via llvm-dev
2020-Nov-11 07:18 UTC
[llvm-dev] Building an LLVM cross-compiler
You could try using zig for this. Here's an example build script of zig cross compiling llvm, lld, clang, and finally itself: https://github.com/ziglang/zig-bootstrap You can see the build script is not too complicated. The main trick is using CC and CXX to use `zig cc` and `zig c++` as drop-in replacements for a C and C++ compiler, respectively. I wrote some more details about this here: https://andrewkelley.me/post/zig-cc-powerful-drop-in-replacement-gcc-clang.html On 11/6/20 3:12 PM, Cág via llvm-dev wrote:> Hi everyone, > > I recently sent a message that may or may not have made it to the list, > on problems building an LLVM cross-compiler. Now the issue seems clear > to me and is irrelevant at this point, I would like to discuss the general > issue. > > Suppose you have a host system, a Linux distribution on an x86_64 machine, > and want to build a cross-compiler for aarch64 (or any platform supported > by LLVM, other than an AMD-/Intel-based machine) to cross compile a Linux > distribution. > > The process, in my opinion, should go like this: > 1. Get the sources (llvm, lld, compiler-rt, libunwind, libcxx...). > 2. Build an LLVM cross-compiler toolchain using native distribution's > compiler (i.e. build an x86_64 clang executable that targets aarch64). > 3. Cross-compile libc and other libraries/dependencies to run the > userland. > 4. Cross-compile the userland. > > With LLVM it doesn't work: > 1. You got the sources. > 2. Built clang targetting, among others or only, aarch64/mips/etc. > 3. Clang requires compiler-rt but you need to cross-compile compiler-rt > for the target platform. *You don't have a cross-compiler*. > > It stops after that. To build compiler-rt you need C headers, libc > runtimes, *and libclang_rt.a*. You can't cross-compile libc because you > don't have compiler-rt because you don't have libc. Chicken or egg. > > I.e. you need a cross-compiler to build a cross-compiler. > > So, how do you build an LLVM-based cross-compiler? > > I hope I am wrong in my assumptions and if it's so, please forgive me. > I also hope I made it clear. > > Thanks for taking time and have a nice weekend! >-------------- next part -------------- A non-text attachment was scrubbed... Name: OpenPGP_0x7C5F548F728501A9.asc Type: application/pgp-keys Size: 3127 bytes Desc: not available URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20201111/bc642273/attachment.key> -------------- next part -------------- A non-text attachment was scrubbed... Name: OpenPGP_signature Type: application/pgp-signature Size: 840 bytes Desc: OpenPGP digital signature URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20201111/bc642273/attachment.sig>