LLVM simply has a hard-coded list of triples for supported platforms in compiler/llvmGen/LlvmCodeGen/Ppr.hs :: moduleLayout.
Apparently this information can potentially be sourced by configure / autotools instead. This may be a better way forward rather than adding code for each platform.
Edited
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information
There are reports that setting up moduleLayout in compiler/llvmGen/LlvmCodeGen/Ppr.hs for a platform will make the right triple be selected, even in cross-compiling mode.
This may be sufficient, and I am testing it for my target platform now.
which is emitted by the code in LlvmCodeGen.Ppr.moduleLayout. If there's a bug here at all, it is that there are a fixed set of cases handled by moduleLayout, so to cross-compile for a new target you need to modify this code by hand.
As far as I can tell this isn't a bug. As far as I know there is no way to avoid enumerating supported triplets like this. For instance, rustc has a very similar table.