https://github.com/cyndyishida updated https://github.com/llvm/llvm-project/pull/115048
>From 9359df8624a75b7c0c361fdfcd9fc9102824dc68 Mon Sep 17 00:00:00 2001 From: Cyndy Ishida <cyndy_ish...@apple.com> Date: Tue, 5 Nov 2024 10:48:09 -0800 Subject: [PATCH 1/4] [Clang][Darwin] Introduce `SubFrameworks` as a SDK default location * Have clang always append & pass `System/Library/SubFrameworks` when determining default sdk search paths. * Teach `clang-installapi` to traverse there for framework input. * Teach `llvm-readtapi` that the library files (TBD or binary) in there should be considered private. resolves: <rdar://137457006> --- clang/lib/InstallAPI/DirectoryScanner.cpp | 3 ++- clang/lib/Lex/InitHeaderSearch.cpp | 1 + clang/test/Driver/darwin-subframeworks.c | 15 +++++++++++++++ llvm/lib/TextAPI/Utils.cpp | 3 +++ llvm/test/tools/llvm-readtapi/stubify-delete.test | 7 +++++-- 5 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 clang/test/Driver/darwin-subframeworks.c diff --git a/clang/lib/InstallAPI/DirectoryScanner.cpp b/clang/lib/InstallAPI/DirectoryScanner.cpp index 03a8208c7364e9..be43a96f3d97d1 100644 --- a/clang/lib/InstallAPI/DirectoryScanner.cpp +++ b/clang/lib/InstallAPI/DirectoryScanner.cpp @@ -277,7 +277,8 @@ llvm::Error DirectoryScanner::scanForFrameworks(StringRef Directory) { // Expect a certain directory structure and naming convention to find // frameworks. static const char *SubDirectories[] = {"System/Library/Frameworks/", - "System/Library/PrivateFrameworks/"}; + "System/Library/PrivateFrameworks/", + "System/Library/SubFrameworks"}; // Check if the directory is already a framework. if (isFramework(Directory)) { diff --git a/clang/lib/Lex/InitHeaderSearch.cpp b/clang/lib/Lex/InitHeaderSearch.cpp index 86c2ecdf9e36eb..c1769c84887b5f 100644 --- a/clang/lib/Lex/InitHeaderSearch.cpp +++ b/clang/lib/Lex/InitHeaderSearch.cpp @@ -347,6 +347,7 @@ void InitHeaderSearch::AddDefaultIncludePaths( } else { AddPath("/System/Library/Frameworks", System, true); AddPath("/Library/Frameworks", System, true); + AddPath("/System/Library/SubFrameworks", System, true); } } return; diff --git a/clang/test/Driver/darwin-subframeworks.c b/clang/test/Driver/darwin-subframeworks.c new file mode 100644 index 00000000000000..62d3ab50f44741 --- /dev/null +++ b/clang/test/Driver/darwin-subframeworks.c @@ -0,0 +1,15 @@ +// Add default directories before running clang to check default +// search paths. +// RUN: rm -rf %t && mkdir -p %t +// RUN: cp -R %S/Inputs/MacOSX15.1.sdk %t/ +// RUN: mkdir -p %t/MacOSX15.1.sdk/System/Library/Frameworks +// RUN: mkdir -p %t/MacOSX15.1.sdk/System/Library/SubFrameworks +// RUN: mkdir -p %t/MacOSX15.1.sdk/usr/include + +// RUN: %clang %s -target arm64-apple-darwin13.0 -isysroot %t/MacOSX15.1.sdk -E -v 2>&1 | FileCheck %s + +// CHECK: -isysroot [[PATH:[^ ]*/MacOSX15.1.sdk]] +// CHECK: #include <...> search starts here: +// CHECK: [[PATH]]/usr/include +// CHECK: [[PATH]]/System/Library/Frameworks (framework directory) +// CHECK: [[PATH]]/System/Library/SubFrameworks (framework directory) diff --git a/llvm/lib/TextAPI/Utils.cpp b/llvm/lib/TextAPI/Utils.cpp index 8a06d53942a947..68d73eac86691d 100644 --- a/llvm/lib/TextAPI/Utils.cpp +++ b/llvm/lib/TextAPI/Utils.cpp @@ -120,6 +120,9 @@ bool llvm::MachO::isPrivateLibrary(StringRef Path, bool IsSymLink) { if (Path.starts_with("/System/Library/PrivateFrameworks")) return true; + if (Path.starts_with("/System/Library/SubFrameworks")) + return true; + // Everything in /usr/lib/swift (including sub-directories) are considered // public. if (Path.consume_front("/usr/lib/swift/")) diff --git a/llvm/test/tools/llvm-readtapi/stubify-delete.test b/llvm/test/tools/llvm-readtapi/stubify-delete.test index 666d740560cbfe..d91b0df06d3d8f 100644 --- a/llvm/test/tools/llvm-readtapi/stubify-delete.test +++ b/llvm/test/tools/llvm-readtapi/stubify-delete.test @@ -2,17 +2,20 @@ # Setup a mix of public and private libraries that resemble apple sdk. ; RUN: mkdir -p %t/sysroot/usr/local/lib/ %t/sysroot/usr/lib/ ; RUN: mkdir -p %t/sysroot/System/Library/Frameworks/System.framework %t/sysroot/System/Library/PrivateFrameworks/Fat.framework +; RUN: mkdir -p %t/sysroot/System/Library/SubFrameworks/Fat.framework/Headers ; RUN: yaml2obj %S/Inputs/libSystem.1.yaml -o %t/sysroot/System/Library/Frameworks/System.framework/System ; RUN: yaml2obj %S/Inputs/objc.yaml -o %t/sysroot/usr/lib/libobjc.dylib ; RUN: cp %t/sysroot/usr/lib/libobjc.dylib %t/sysroot/usr/local/lib/libobjc-unstable.dylib ; RUN: yaml2obj %S/Inputs/universal.yaml -o %t/sysroot/System/Library/PrivateFrameworks/Fat.framework/Fat +; RUN: cp %t/sysroot/System/Library/PrivateFrameworks/Fat.framework/Fat %t/sysroot/System/Library/SubFrameworks/Fat.framework/Fat +; RUN: touch %t/sysroot/System/Library/SubFrameworks/Fat.framework/Headers/Fat.h ; RUN: llvm-readtapi -stubify %t/sysroot --delete-input --delete-private-libraries 2>&1 | FileCheck %s --allow-empty --implicit-check-not warning: --implicit-check-not error: # Validate expected files are removed. ; RUN: not test -f %t/sysroot/System/Library/PrivateFrameworks ; RUN: not test -f %t/sysroot/usr/local ; RUN: not test -f %t/sysroot/usr/lib/libobjc.dylib ; RUN: not test -f %t/sysroot/System/Library/Frameworks/System.framework/System +; RUN: not test -f %t/sysroot/System/Library/SubFrameworks/Fat.framework/Fat ; RUN: test -f %t/sysroot/System/Library/Frameworks/System.framework/System.tbd ; RUN: test -f %t/sysroot/usr/lib/libobjc.tbd - - +; RUN: test -f %t/sysroot/System/Library/SubFrameworks/Fat.framework/Headers/Fat.h >From 4207ffe204e2391444d17e1944934ba2a415fc88 Mon Sep 17 00:00:00 2001 From: Cyndy Ishida <cyndy_ish...@apple.com> Date: Tue, 5 Nov 2024 12:56:42 -0800 Subject: [PATCH 2/4] [llvm-readtapi] Make directory traversal more reslient to different path styles --- llvm/tools/llvm-readtapi/llvm-readtapi.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/llvm/tools/llvm-readtapi/llvm-readtapi.cpp b/llvm/tools/llvm-readtapi/llvm-readtapi.cpp index 7390d0ec4b79a3..04282d3e4877c1 100644 --- a/llvm/tools/llvm-readtapi/llvm-readtapi.cpp +++ b/llvm/tools/llvm-readtapi/llvm-readtapi.cpp @@ -255,16 +255,21 @@ static void stubifyDirectory(const StringRef InputPath, Context &Ctx) { if (EC) reportError(IT->path() + ": " + EC.message()); - // Skip header directories (include/Headers/PrivateHeaders) and module - // files. + // Skip header directories (include/Headers/PrivateHeaders). StringRef Path = IT->path(); - if (Path.ends_with("/include") || Path.ends_with("/Headers") || - Path.ends_with("/PrivateHeaders") || Path.ends_with("/Modules") || - Path.ends_with(".map") || Path.ends_with(".modulemap")) { - IT.no_push(); - continue; + if (sys::fs::is_directory(Path)) { + const StringRef Stem = sys::path::stem(Path); + if ((Stem == "include") || (Stem == "Headers") || + (Stem == "PrivateHeaders") || (Stem == "Modules")) { + IT.no_push(); + continue; + } } + // Skip module files too. + if (Path.ends_with(".map") || Path.ends_with(".modulemap")) + continue; + // Check if the entry is a symlink. We don't follow symlinks but we record // their content. bool IsSymLink; >From 3f45b4235d2a4244192e0e166b19686329c17fa5 Mon Sep 17 00:00:00 2001 From: Cyndy Ishida <cyndy_ish...@apple.com> Date: Fri, 8 Nov 2024 11:29:30 -0800 Subject: [PATCH 3/4] Swap order of search paths. --- clang/lib/Lex/InitHeaderSearch.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Lex/InitHeaderSearch.cpp b/clang/lib/Lex/InitHeaderSearch.cpp index c1769c84887b5f..cb3941fa948211 100644 --- a/clang/lib/Lex/InitHeaderSearch.cpp +++ b/clang/lib/Lex/InitHeaderSearch.cpp @@ -346,8 +346,8 @@ void InitHeaderSearch::AddDefaultIncludePaths( AddPath("/System/DriverKit/System/Library/Frameworks", System, true); } else { AddPath("/System/Library/Frameworks", System, true); - AddPath("/Library/Frameworks", System, true); AddPath("/System/Library/SubFrameworks", System, true); + AddPath("/Library/Frameworks", System, true); } } return; >From f7d617a7dc6f3bb02a1996cce7a2854c85676b94 Mon Sep 17 00:00:00 2001 From: Cyndy Ishida <cyndy_ish...@apple.com> Date: Fri, 8 Nov 2024 20:02:17 -0800 Subject: [PATCH 4/4] Disable darwin-subframeworks.c test on windows like driverkit-path test --- clang/test/Driver/darwin-subframeworks.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/clang/test/Driver/darwin-subframeworks.c b/clang/test/Driver/darwin-subframeworks.c index 62d3ab50f44741..1a7a095c642922 100644 --- a/clang/test/Driver/darwin-subframeworks.c +++ b/clang/test/Driver/darwin-subframeworks.c @@ -1,3 +1,6 @@ +// UNSUPPORTED: system-windows +// Windows is unsupported because we use the Unix path separator `\`. + // Add default directories before running clang to check default // search paths. // RUN: rm -rf %t && mkdir -p %t _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits