aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichał Górny <mgorny@moritz.systems>2021-04-22 11:51:24 +0200
committerMichał Górny <mgorny@moritz.systems>2022-09-20 08:30:21 +0200
commitb64154059ee61e98e5801f9d4fcf5e6ce9337adc (patch)
tree1b39127be033c209ec4664e2dd96c92558df2f20
parent[llvm] [llvm-config] Clean up exported values (diff)
downloadllvm-project-b64154059ee61e98e5801f9d4fcf5e6ce9337adc.tar.gz
llvm-project-b64154059ee61e98e5801f9d4fcf5e6ce9337adc.tar.bz2
llvm-project-b64154059ee61e98e5801f9d4fcf5e6ce9337adc.zip
[clang] Apply Gentoo's prefix-dirs.patch
This mirrors cmake-*-prefix-dirs.patch It add EPREFIX to search paths for c/cxx headers. It also adds EPREFIX/MacOSX.sdk to search paths for c and Frameworks. Assumes that c++ lib and headers will be installed in the prefix. Also, a couple of args are populated by inspecting the SDK, so, default to EPREFIX/MacOSX.sdk when the sysroot is not specified. (This does NOT set sysroot). Gentoo-Component: clang
-rw-r--r--clang/lib/Driver/ToolChains/Darwin.cpp12
-rw-r--r--clang/lib/Lex/InitHeaderSearch.cpp3
2 files changed, 13 insertions, 2 deletions
diff --git a/clang/lib/Driver/ToolChains/Darwin.cpp b/clang/lib/Driver/ToolChains/Darwin.cpp
index bada811daadf..f8e8204015ed 100644
--- a/clang/lib/Driver/ToolChains/Darwin.cpp
+++ b/clang/lib/Driver/ToolChains/Darwin.cpp
@@ -2038,9 +2038,11 @@ Optional<DarwinSDKInfo> parseSDKSettings(llvm::vfs::FileSystem &VFS,
const ArgList &Args,
const Driver &TheDriver) {
const Arg *A = Args.getLastArg(options::OPT_isysroot);
+#if 0
if (!A)
return None;
- StringRef isysroot = A->getValue();
+#endif
+ StringRef isysroot = A ? A->getValue() : "@GENTOO_PORTAGE_EPREFIX@/MacOSX.sdk";
auto SDKInfoOrErr = parseDarwinSDKInfo(VFS, isysroot);
if (!SDKInfoOrErr) {
llvm::consumeError(SDKInfoOrErr.takeError());
@@ -2264,13 +2266,14 @@ llvm::StringRef DarwinClang::GetHeaderSysroot(const llvm::opt::ArgList &DriverAr
return DriverArgs.getLastArgValue(options::OPT_isysroot);
if (!getDriver().SysRoot.empty())
return getDriver().SysRoot;
- return "/";
+ return "@GENTOO_PORTAGE_EPREFIX@/";
}
void DarwinClang::AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,
llvm::opt::ArgStringList &CC1Args) const {
const Driver &D = getDriver();
+ // Sysroot is effectively Gentoo EPREFIX when -isysroot/-sysroot is not defined
llvm::StringRef Sysroot = GetHeaderSysroot(DriverArgs);
bool NoStdInc = DriverArgs.hasArg(options::OPT_nostdinc);
@@ -2312,6 +2315,10 @@ void DarwinClang::AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs
SmallString<128> P(Sysroot);
llvm::sys::path::append(P, "usr", "include");
addExternCSystemInclude(DriverArgs, CC1Args, P.str());
+ // And add <sysroot>/MacOSX.sdk/usr/include.
+ SmallString<128> Psdk(Sysroot);
+ llvm::sys::path::append(Psdk, "MacOSX.sdk", "usr", "include");
+ addExternCSystemInclude(DriverArgs, CC1Args, Psdk.str());
}
}
@@ -2360,6 +2367,7 @@ void DarwinClang::AddClangCXXStdlibIncludeArgs(
DriverArgs.hasArg(options::OPT_nostdincxx))
return;
+ // Sysroot is effectively Gentoo EPREFIX when -isysroot/-sysroot is not defined
llvm::StringRef Sysroot = GetHeaderSysroot(DriverArgs);
switch (GetCXXStdlibType(DriverArgs)) {
diff --git a/clang/lib/Lex/InitHeaderSearch.cpp b/clang/lib/Lex/InitHeaderSearch.cpp
index 158b5667151f..847e5f695ced 100644
--- a/clang/lib/Lex/InitHeaderSearch.cpp
+++ b/clang/lib/Lex/InitHeaderSearch.cpp
@@ -460,6 +460,9 @@ void InitHeaderSearch::AddDefaultIncludePaths(const LangOptions &Lang,
// All header search logic is handled in the Driver for Darwin.
if (triple.isOSDarwin()) {
if (HSOpts.UseStandardSystemIncludes) {
+ // Add Gentoo Prefix framework dirs first
+ AddPath("@GENTOO_PORTAGE_EPREFIX@/MacOSX.sdk/System/Library/Frameworks", System, true);
+ AddPath("@GENTOO_PORTAGE_EPREFIX@/MacOSX.sdk/Library/Frameworks", System, true);
// Add the default framework include paths on Darwin.
AddPath("/System/Library/Frameworks", System, true);
AddPath("/Library/Frameworks", System, true);