At Indel, we have been building bare-metal embedded applications that run on custom PowerPC and ARM systems with Clang and LLD for a couple of years now, using target triples powerpc-indel-eabi, powerpc-indel-eabi750, arm-indel-eabi, aarch64-indel-eabi (which I just learned from D153430 is wrong and should be aarch64-indel-elf instead, but that’s a different matter). This has worked fine for ARM, but for PowerPC we have been unable to call the linker (LLD) through the Clang driver, because it would insist on calling GCC as the linker, even when told -fuse-ld=lld. That does not work for us, there is no GCC around. Instead we had to call ld.lld directly, introducing some special cases in our build system to translate between linker-via-driver and linker-called-directly command line arguments. I have now dug into why that is, and found that the difference between ARM and PowerPC is that arm-indel-eabi hits a special case that causes the Clang driver to instantiate a BareMetal toolchain that is able to call LLD and works the way we need, whereas powerpc-indel-eabi lands in the default case of a Generic_ELF (subclass of Generic_GCC) toolchain which expects GCC.
It seems to me that maybe anything with OS none (although that doesn’t seem to be distinguished from unknown) or with environment eabi should be treated as bare-metal, but I don’t have a lot of experience in this regard. Since this seems to have been handled on a case-by-case basis in the past (arm, riscv, aarch64), what I am proposing here is to add another case to the list to also handle powerpc[64][le]-unknown-unknown-eabi using the BareMetal toolchain, following the example of the existing cases. (We don’t care about powerpc64 and powerpc[64]le, but it seemed appropriate to lump them in.)
does this break your use cases re: having indel as the vendor? or will you have a downstream patch to exempt indel from this check?