Subject: [bug#54239] [PATCH] gnu: Add cross-clang.

From: Julien Lepiller <[email-masked]>
Date: Sat, 16 Jul 2022 21:44:24 +0200

So, I tried using only a wrapper around clang to pass --target.
However, this doesn't seem to be enough: the code disables LIBRARY_PATH
when cross-compiling and it picks up the wrong gcc:lib and libc
headers.

Instead, I tried to improve the previous patches, and here is v3. To
reply (maybe again) to remarks on the previous version:

- no it's not necessary to build a specific llvm package, but that way
  we make sure that the default target is the one we want, so we don't
  have to change the instructions for packages that use it, or to use a
  wrapper to pass the --target argument.  Maybe a wrapper could work
  better though.
- clang-for-target was added in the patch that adds cross-clang.
- the configure flags are now a gexp
- I kept the substitute for "/lib64/ld-linux-x86-64.so.2", it's the
  same instructions as in clang, so I prefer not to change it. It's a
  bit sad that we'll have to change in both places if needed :/
- (gnu packages cross-base) is autoloaded now
- I'll leave documenting limitations of package-with-c-toolchain (or
  improving it) to another time.
- I have no idea how to make it work for wasm, but that can probably be
  fixed another time. Also, it's not listed in supported targets, and
  guix doesn't let me build for that target anymore.
- Fixed build issues for clang >=10.

I also agree that clang-runtime should be cross-compiled. It is a
propagated-input, but cross-clang is a native package that is a
cross-compiler for another architecture, so the inputs are native too.

Since I couldn't figure out how to make a package for a given target, I
added a transformation to (guix build-system) that replaces the
keywords to force a package to build for a given architecture.

Also, I added libcxx and libcxxabi 12 at the end because I need them
for the newer versions of android tools.