Skip to content

Commit

Permalink
[clang][Darwin] Remove legacy framework search path logic in the fron…
Browse files Browse the repository at this point in the history
…tend (#75841)

This removes a long standing piece of technical debt. Most other
platforms have moved all their header search path logic to the driver,
but Darwin still had some logic for setting framework search paths
present in the frontend. This patch moves that logic to the driver
alongside existing logic that already handles part of these search
paths.

This is intended to be a pure refactor without any functional change
visible to users, since the search paths before and after should be the
same, and in the same order. The change in the tests is necessary
because we would previously add the DriverKit framework search path in
the frontend regardless of whether we actually need to, which we now
handle correctly because the driver checks for ld64-605.1+.

Fixes #75638
  • Loading branch information
ldionne committed Dec 31, 2023
1 parent 568db84 commit 61999b1
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 42 deletions.
35 changes: 22 additions & 13 deletions clang/lib/Driver/ToolChains/Darwin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -758,9 +758,14 @@ void darwin::Linker::ConstructJob(Compilation &C, const JobAction &JA,
}
}

// Add non-standard, platform-specific search paths, e.g., for DriverKit:
// -L<sysroot>/System/DriverKit/usr/lib
// -F<sysroot>/System/DriverKit/System/Library/Framework
// Add framework include paths and library search paths.
// There are two flavors:
// 1. The "non-standard" paths, e.g. for DriverKit:
// -L<sysroot>/System/DriverKit/usr/lib
// -F<sysroot>/System/DriverKit/System/Library/Frameworks
// 2. The "standard" paths, e.g. for macOS and iOS:
// -F<sysroot>/System/Library/Frameworks
// -F<sysroot>/Library/Frameworks
{
bool NonStandardSearchPath = false;
const auto &Triple = getToolChain().getTriple();
Expand All @@ -771,18 +776,22 @@ void darwin::Linker::ConstructJob(Compilation &C, const JobAction &JA,
(Version.getMajor() == 605 && Version.getMinor().value_or(0) < 1);
}

if (NonStandardSearchPath) {
if (auto *Sysroot = Args.getLastArg(options::OPT_isysroot)) {
auto AddSearchPath = [&](StringRef Flag, StringRef SearchPath) {
SmallString<128> P(Sysroot->getValue());
AppendPlatformPrefix(P, Triple);
llvm::sys::path::append(P, SearchPath);
if (getToolChain().getVFS().exists(P)) {
CmdArgs.push_back(Args.MakeArgString(Flag + P));
}
};
if (auto *Sysroot = Args.getLastArg(options::OPT_isysroot)) {
auto AddSearchPath = [&](StringRef Flag, StringRef SearchPath) {
SmallString<128> P(Sysroot->getValue());
AppendPlatformPrefix(P, Triple);
llvm::sys::path::append(P, SearchPath);
if (getToolChain().getVFS().exists(P)) {
CmdArgs.push_back(Args.MakeArgString(Flag + P));
}
};

if (NonStandardSearchPath) {
AddSearchPath("-L", "/usr/lib");
AddSearchPath("-F", "/System/Library/Frameworks");
} else if (!Triple.isDriverKit()) {
AddSearchPath("-F", "/System/Library/Frameworks");
AddSearchPath("-F", "/Library/Frameworks");
}
}
}
Expand Down
18 changes: 3 additions & 15 deletions clang/lib/Lex/InitHeaderSearch.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -324,6 +324,9 @@ bool InitHeaderSearch::ShouldAddDefaultIncludePaths(
break;
}

if (triple.isOSDarwin())
return false;

return true; // Everything else uses AddDefaultIncludePaths().
}

Expand All @@ -338,21 +341,6 @@ void InitHeaderSearch::AddDefaultIncludePaths(
if (!ShouldAddDefaultIncludePaths(triple))
return;

// NOTE: some additional header search logic is handled in the driver for
// Darwin.
if (triple.isOSDarwin()) {
if (HSOpts.UseStandardSystemIncludes) {
// Add the default framework include paths on Darwin.
if (triple.isDriverKit()) {
AddPath("/System/DriverKit/System/Library/Frameworks", System, true);
} else {
AddPath("/System/Library/Frameworks", System, true);
AddPath("/Library/Frameworks", System, true);
}
}
return;
}

if (Lang.CPlusPlus && !Lang.AsmPreprocessor &&
HSOpts.UseStandardCXXIncludes && HSOpts.UseStandardSystemIncludes) {
if (HSOpts.UseLibcxx) {
Expand Down
1 change: 0 additions & 1 deletion clang/test/Driver/driverkit-path.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,3 @@ int main() { return 0; }
// INC: [[PATH]]/System/DriverKit/usr/local/include
// INC: /lib{{(64)?}}/clang/{{[^/ ]+}}/include
// INC: [[PATH]]/System/DriverKit/usr/include
// INC: [[PATH]]/System/DriverKit/System/Library/Frameworks (framework directory)
13 changes: 0 additions & 13 deletions clang/test/Preprocessor/cuda-macos-includes.cu

This file was deleted.

0 comments on commit 61999b1

Please sign in to comment.