ldionne wrote:

> > So the intent of the current ordering was to allow creating a toolchain by 
> > placing the libc++ headers alongside Clang, as is typically done (and 
> > exceptionally not done on Apple platforms). On Apple platforms, you 
> > basically always specify a sysroot, either explicitly or implicitly (via 
> > env vars). You have to, since the SDK is where you find everything you need 
> > to compile even the most basic program (like our libc headers).
> 
> @ldionne thank you for explaining the reasoning behind the decision. 
> Unfortunately, it makes the life of a non-system compilers and clang-tools 
> much more complicated on Apple platforms. They usually don’t have system 
> headers shipped with them so they rely on one provided in SDK. My interest in 
> this issue started from clang-tidy that was not able to find cxxabi.h in the 
> path specified with -isysroot due to the new order introduced in 
> https://reviews.llvm.org/D89001.

If you ship libc++ headers in the toolchain directory as part of your 
non-system compiler, you should also be shipping the lib++abi headers in the 
toolchain directory. Libc++ and libc++abi always go hand in hand, that's a 
common source of confusion.

> But it seems my use case will be broken anyway if SDK stops providing libc++ 
> headers. Is it the eventual future?

No. The libc++ headers are in the SDK right now and they will remain there in 
the future.

> If it is the case, checking -sysroot first will be only a temporary solution. 
> I still think that it makes sense for the time being but also we need to 
> think about a long term solution for non-system compilers and clang-tools. 
> Perhaps it should be configured at build time if you are building the system 
> default compiler or additional tools shipped separately.

The current setup is explicitly intended to make the life of non-system 
compilers easier. You pass `-isysroot <SDK>` for the system headers, and if you 
happen to want to build libc++ from source and ship it with your system 
compiler, you place the headers in the toolchain directory (as usually done in 
upstream LLVM) and everything will work. If you want to rely on the 
SDK-provided libc++ instead, you simply don't put any libc++ headers in the 
toolchain directory and  Clang will use the ones it finds in `-isysroot`.

I feel like either I am fundamentally misunderstanding something or we're 
talking past each other. I don't see a problem with the current logic as done 
upstream, since it makes it easiest to build a non-system toolchain (from my 
point of view at least).

https://github.com/llvm/llvm-project/pull/80524
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to