diff options
Diffstat (limited to 'clang/lib/Driver/ToolChains/Darwin.cpp')
-rw-r--r-- | clang/lib/Driver/ToolChains/Darwin.cpp | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/clang/lib/Driver/ToolChains/Darwin.cpp b/clang/lib/Driver/ToolChains/Darwin.cpp index 3596be41607..478e1111e18 100644 --- a/clang/lib/Driver/ToolChains/Darwin.cpp +++ b/clang/lib/Driver/ToolChains/Darwin.cpp @@ -1805,13 +1805,21 @@ void Darwin::AddDeploymentTarget(DerivedArgList &Args) const { } } +// Returns the effective header sysroot path to use. This comes either from +// -isysroot or --sysroot. +llvm::StringRef DarwinClang::GetHeaderSysroot(const llvm::opt::ArgList &DriverArgs) const { + if(DriverArgs.hasArg(options::OPT_isysroot)) + return DriverArgs.getLastArgValue(options::OPT_isysroot); + if (!getDriver().SysRoot.empty()) + return getDriver().SysRoot; + return "/"; +} + void DarwinClang::AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args) const { const Driver &D = getDriver(); - llvm::StringRef Sysroot = "/"; - if (const Arg *A = DriverArgs.getLastArg(options::OPT_isysroot)) - Sysroot = A->getValue(); + llvm::StringRef Sysroot = GetHeaderSysroot(DriverArgs); bool NoStdInc = DriverArgs.hasArg(options::OPT_nostdinc); bool NoStdlibInc = DriverArgs.hasArg(options::OPT_nostdlibinc); @@ -1897,12 +1905,7 @@ void DarwinClang::AddClangCXXStdlibIncludeArgs( DriverArgs.hasArg(options::OPT_nostdincxx)) return; - llvm::SmallString<128> Sysroot; - if (const Arg *A = DriverArgs.getLastArg(options::OPT_isysroot)) { - Sysroot = A->getValue(); - } else { - Sysroot = "/"; - } + llvm::StringRef Sysroot = GetHeaderSysroot(DriverArgs); switch (GetCXXStdlibType(DriverArgs)) { case ToolChain::CST_Libcxx: { |