[PATCH] D134337: [clang] [Driver] More flexible rules for loading default configs

Serge Pavlov via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Sep 28 05:17:10 PDT 2022


sepavloff added inline comments.


================
Comment at: clang/test/Driver/config-file3.c:27
 
-//--- Invocation qqq-clang-g++ tries to find config file qqq-clang-g++.cfg first.
+//--- Invocation x86_64-unknown-linux-gnu-clang-g++ tries x86_64-unknown-linux-gnu-clang++.cfg first.
 //
----------------
mgorny wrote:
> sepavloff wrote:
> > mgorny wrote:
> > > sepavloff wrote:
> > > > mgorny wrote:
> > > > > sepavloff wrote:
> > > > > > mgorny wrote:
> > > > > > > arichardson wrote:
> > > > > > > > sepavloff wrote:
> > > > > > > > > Tests must check the case when target prefix is not a real triple as in the original test (qqq-clang).
> > > > > > > > It would be quite important for me that this continues to work. I made use of that in the CheriBSD toolchain when creating [[ https://github.com/CTSRD-CHERI/cheribuild/blob/master/pycheribuild/projects/cross/llvm.py#L499 | symlinked binaries to easily build for different ABIs]] such as `cheribsd-riscv64-hybrid-clang++` and `cheribsd-riscv64-purecap-clang-cpp`. It appears this previously only worked if the prefix did not start with a valid triple (which is why I put the OS before the architecture). I think it would also be nice if the whole prefix was checked even if it starts with a valid triple, but this does not need to be changed in this patch (haven't looked at it in detail so this might actually work).
> > > > > > > If the prefix is not a valid triple, then clang ignores it and uses host triple instead. And now we're back to square one. If I check both variants, it's too complex. If I don't, it's bad too.
> > > > > > Our customers use this feature. Target prefix may designate, for example, debug build or build with specific framework.
> > > > > How are we supposed to avoid the "absurd" case where x86_64 configs are loaded for `-m32` invocation then?
> > > > In this case overloading target does not makes sense. You need to analyze `RealTriple` in `Driver::loadDefaultConfigFiles` and if it is wrong, use target prefix as if it is real target.
> > > What do you mean by "wrong"? The target triple is always a correct triple.
> > Not triple, sorry. Target prefix taken from `ClangNameParts.TargetPrefix`.
> Now I'm confused. Are you suggesting that we use prefix instead of target if it's… incorrect?
Basically yes.

We need to support arbitrary target prefixes, because they are used now. If `ClangNameParts.TargetPrefix` is not a valid triple, use it to build config file names.

We also need to use config files like `x86_64.cfg` where middle components are dropped, they are also used. They also need to support target overloading.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D134337/new/

https://reviews.llvm.org/D134337



More information about the cfe-commits mailing list