[PATCH] D136315: [clang][Darwin] Try to guess the SDK root with xcrun when unspecified

Steven Wu via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Jan 20 13:25:57 PST 2023


steven_wu added a comment.

In D136315#4069849 <https://reviews.llvm.org/D136315#4069849>, @calebzulawski wrote:

> In my situation, at least, I am the vendor of the toolchain and my configuration file contains `--sysroot=<CFGDIR>/../path/to/sysroot` with a known relative path to where the sysroot is distributed.  Apple is unique in this situation, since I am not distributing the sysroot, so there is no equivalent to using the `<CFGDIR>` variable.  There is no way to invoke `xcrun` or set `SDKROOT` from config files, only pass flags.
>
> It is true that the build system could do it, but I think it's reasonable for the driver to make a guess when not provided.  I don't think it's all that different than detection of libstdc++ from GCC installs.

I definitely feel like if to fix your problem, a reverse option like `-infer-sdkroot-from-xcrun` might be better/safer but it doesn't help the general case where people doesn't know `/usr/bin/clang` is different from a regular clang that a regular clang needs to pass -isysroot.

@arphaman Any suggestions?



================
Comment at: clang/test/Driver/darwin-sdk-detect.c:1
+// REQUIRES: system-darwin
+
----------------
calebzulawski wrote:
> steven_wu wrote:
> > This test won't work in all conditions. Like I said, you requires to have a Xcode/CommandLineTools installation to make `xcrun` work.
> > 
> > Maybe you can make the argument that you are compiling clang, so you must have one of those installed, but CommandLineTools definitely doesn't have iOS SDK for the second test.
> True, maybe we can just remove the iOS test if you think that's sufficient.  Otherwise, is there any way to make the have the test check that either the `-isysroot` flag is present with that pattern, or not present at all?  I'm not too familiar with llvm-lit, I just browsed a few other examples before writing this.
I don't think you can write a FileCheck with that. The best way to do this test might be in `clang/test/Driver/lit.local.cfg` write checks to make sure:
* Darwin platform
* `xcrun` exists
* xcrun can resolve all the platforms you want to test

Then add a new feature which you can `REQUIRES` in this test case.




Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D136315



More information about the cfe-commits mailing list