Building an LLVM cross-compiler

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!