[clang] [Darwin][Driver][clang] Prioritise `-isysroot` over `--sysroot` consistently (PR #115993)
Carlo Cabrera via cfe-commits
cfe-commits at lists.llvm.org
Thu Nov 28 06:32:12 PST 2024
carlocab wrote:
> However, notably, even on Darwin, if you pass _both_ flags, you still get the intended behavior of `-isysroot` affecting headers, and `--sysroot` affecting libraries. Your change would break that.
What's the use-case for this?
Because for most users, you almost certainly don't want to mix headers and libraries of different versions, and keeping the existing behavior is essentially a big footgun when trying to build a useful toolchain on Darwin.
At Homebrew, we used to configure the toolchain with `DEFAULT_SYSROOT` but have recently switched that to setting the `--sysroot` flag in a Clang `.cfg` file.[^1] In either case, if you set `SDKROOT` in your environment or try to run our `clang` using Apple's `xcrun`, this becomes equivalent to setting `-isysroot` and you most likely will end up with headers that mismatch the libraries you try to link to.
It seems to me that getting rid of a footgun that can impact many users (our toolchain is installed [a few hundred thousand times a year](https://formulae.brew.sh/formula/llvm#default), see also the [downstream bug report](https://github.com/Homebrew/homebrew-core/issues/197277) I initially linked) might be worth breaking what currently seems to be a niche use-case of using headers and libraries of different versions. If you really wanted to do this, you can set `-Wl,-syslibroot`.
Of course, I'm open to alternatives that don't involve breaking anyone.
[^1]: We do this so that the toolchain can find the sysroot out of the box, when it wouldn't be able to otherwise.
https://github.com/llvm/llvm-project/pull/115993
More information about the cfe-commits
mailing list