[clang] [llvm] [Clang][Darwin] Introduce `SubFrameworks` as a SDK default location (PR #115048)

2024-12-03 Thread Cyndy Ishida via cfe-commits


@@ -346,6 +346,7 @@ void InitHeaderSearch::AddDefaultIncludePaths(
 AddPath("/System/DriverKit/System/Library/Frameworks", System, true);

cyndyishida wrote:

Followup in: https://github.com/llvm/llvm-project/pull/118543

https://github.com/llvm/llvm-project/pull/115048
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [Clang][Darwin] Introduce `SubFrameworks` as a SDK default location (PR #115048)

2024-11-15 Thread Cyndy Ishida via cfe-commits

https://github.com/cyndyishida closed 
https://github.com/llvm/llvm-project/pull/115048
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [Clang][Darwin] Introduce `SubFrameworks` as a SDK default location (PR #115048)

2024-11-15 Thread Cyndy Ishida via cfe-commits

https://github.com/cyndyishida edited 
https://github.com/llvm/llvm-project/pull/115048
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [Clang][Darwin] Introduce `SubFrameworks` as a SDK default location (PR #115048)

2024-11-15 Thread Cyndy Ishida via cfe-commits


@@ -346,6 +346,7 @@ void InitHeaderSearch::AddDefaultIncludePaths(
 AddPath("/System/DriverKit/System/Library/Frameworks", System, true);

cyndyishida wrote:

I'd rather discuss DriverKit support separately, so I will merge this pr now. 
> Also, why's there an explicit /System/DriverKit here, didn't we generalize 
> support for the system prefix?
I don't know, but it does not look generalized to me even downstream. perhaps a 
question for @yln ? 

https://github.com/llvm/llvm-project/pull/115048
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [Clang][Darwin] Introduce `SubFrameworks` as a SDK default location (PR #115048)

2024-11-14 Thread Jake Petroules via cfe-commits


@@ -346,6 +346,7 @@ void InitHeaderSearch::AddDefaultIncludePaths(
 AddPath("/System/DriverKit/System/Library/Frameworks", System, true);

jakepetroules wrote:

Should we include SubFrameworks for DriverKit too, for consistency? Also, why's 
there an explicit /System/DriverKit here, didn't we generalize support for the 
system prefix?

https://github.com/llvm/llvm-project/pull/115048
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [Clang][Darwin] Introduce `SubFrameworks` as a SDK default location (PR #115048)

2024-11-14 Thread Juergen Ributzka via cfe-commits

https://github.com/ributzka approved this pull request.

LGTM

https://github.com/llvm/llvm-project/pull/115048
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [Clang][Darwin] Introduce `SubFrameworks` as a SDK default location (PR #115048)

2024-11-13 Thread Cyndy Ishida via cfe-commits

cyndyishida wrote:

ping

https://github.com/llvm/llvm-project/pull/115048
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [Clang][Darwin] Introduce `SubFrameworks` as a SDK default location (PR #115048)

2024-11-08 Thread Cyndy Ishida via cfe-commits

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 
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: 
---
 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 00..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

[clang] [llvm] [Clang][Darwin] Introduce `SubFrameworks` as a SDK default location (PR #115048)

2024-11-08 Thread Cyndy Ishida via cfe-commits

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 
Date: Tue, 5 Nov 2024 10:48:09 -0800
Subject: [PATCH 1/3] [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: 
---
 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 00..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

[clang] [llvm] [Clang][Darwin] Introduce `SubFrameworks` as a SDK default location (PR #115048)

2024-11-08 Thread Juergen Ributzka via cfe-commits


@@ -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);

ributzka wrote:

The preference should be still SDK content, before we fall-back to 
`/Library/Frameworks`. There is also the concern that lookups will miss now in 
`/Library/Frameworks` first, before they hit in `/System/Library/SubFrameworks`.

https://github.com/llvm/llvm-project/pull/115048
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [Clang][Darwin] Introduce `SubFrameworks` as a SDK default location (PR #115048)

2024-11-08 Thread Cyndy Ishida via cfe-commits

https://github.com/cyndyishida edited 
https://github.com/llvm/llvm-project/pull/115048
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [Clang][Darwin] Introduce `SubFrameworks` as a SDK default location (PR #115048)

2024-11-08 Thread Cyndy Ishida via cfe-commits


@@ -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

cyndyishida wrote:

My suspicion of why the windows bot failed on the `stubify-delete` test is 
because the conditional includes the path style, which likely differs for a 
non-unix system. I changed it to omit "/"

https://github.com/llvm/llvm-project/pull/115048
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [Clang][Darwin] Introduce `SubFrameworks` as a SDK default location (PR #115048)

2024-11-08 Thread Cyndy Ishida via cfe-commits


@@ -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);

cyndyishida wrote:

Why do you think?

https://github.com/llvm/llvm-project/pull/115048
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [Clang][Darwin] Introduce `SubFrameworks` as a SDK default location (PR #115048)

2024-11-08 Thread Juergen Ributzka via cfe-commits


@@ -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);

ributzka wrote:

Should `/System/Library/SubFrameworks` be before `/Library/Frameworks`?

https://github.com/llvm/llvm-project/pull/115048
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [Clang][Darwin] Introduce `SubFrameworks` as a SDK default location (PR #115048)

2024-11-08 Thread Juergen Ributzka via cfe-commits


@@ -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

ributzka wrote:

How is this changing readtapi's behavior?

https://github.com/llvm/llvm-project/pull/115048
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [Clang][Darwin] Introduce `SubFrameworks` as a SDK default location (PR #115048)

2024-11-08 Thread Cyndy Ishida via cfe-commits

cyndyishida wrote:

ping

https://github.com/llvm/llvm-project/pull/115048
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [Clang][Darwin] Introduce `SubFrameworks` as a SDK default location (PR #115048)

2024-11-06 Thread Cyndy Ishida via cfe-commits

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 
Date: Tue, 5 Nov 2024 10:48:09 -0800
Subject: [PATCH 1/2] [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: 
---
 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 00..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

[clang] [llvm] [Clang][Darwin] Introduce `SubFrameworks` as a SDK default location (PR #115048)

2024-11-05 Thread Cyndy Ishida via cfe-commits

cyndyishida wrote:

```
> git checkout -f baecb5c50287efebf2482739bfbe320c8147b7ff
error: unable to unlink old 'clang/lib/AST/Decl.cpp': Invalid argument
error: unable to unlink old 'clang/lib/Serialization/ASTReaderDecl.cpp': 
Invalid argument
```
Seems like an unrelated issue is happening on the windows bot, noticed the same 
in a different PR. 
https://buildkite.com/llvm-project/github-pull-requests/builds/116688#0192fe1c-1484-47e8-b14c-7f3da7038b76
 

https://github.com/llvm/llvm-project/pull/115048
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [Clang][Darwin] Introduce `SubFrameworks` as a SDK default location (PR #115048)

2024-11-05 Thread Cyndy Ishida via cfe-commits

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 
Date: Tue, 5 Nov 2024 10:48:09 -0800
Subject: [PATCH 1/2] [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: 
---
 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 00..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

[clang] [llvm] [Clang][Darwin] Introduce `SubFrameworks` as a SDK default location (PR #115048)

2024-11-05 Thread Cyndy Ishida via cfe-commits

https://github.com/cyndyishida updated 
https://github.com/llvm/llvm-project/pull/115048

>From dd22f1347530d8f866822074ec9b89cb8ee56867 Mon Sep 17 00:00:00 2001
From: Cyndy Ishida 
Date: Tue, 5 Nov 2024 10:48:09 -0800
Subject: [PATCH 1/2] [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: 
---
 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 00..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

[clang] [llvm] [Clang][Darwin] Introduce `SubFrameworks` as a SDK default location (PR #115048)

2024-11-05 Thread Cyndy Ishida via cfe-commits

cyndyishida wrote:

> Do we also need to update `darwin::Linker::ConstructJob(...)`?

I thought about it, but clang already doesn't for today's default paths so I 
decided against it. It seems only pass extra paths to the linker for 
platform-specific directories like `DriverKit`. Xcode's `ld` passes its own 
path to `S/L/F` 

https://github.com/llvm/llvm-project/pull/115048
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [Clang][Darwin] Introduce `SubFrameworks` as a SDK default location (PR #115048)

2024-11-05 Thread Cyndy Ishida via cfe-commits

https://github.com/cyndyishida reopened 
https://github.com/llvm/llvm-project/pull/115048
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [Clang][Darwin] Introduce `SubFrameworks` as a SDK default location (PR #115048)

2024-11-05 Thread Cyndy Ishida via cfe-commits

cyndyishida wrote:

> `darwin::Linker::ConstructJob`


https://github.com/llvm/llvm-project/pull/115048
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [Clang][Darwin] Introduce `SubFrameworks` as a SDK default location (PR #115048)

2024-11-05 Thread Cyndy Ishida via cfe-commits

https://github.com/cyndyishida closed 
https://github.com/llvm/llvm-project/pull/115048
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [Clang][Darwin] Introduce `SubFrameworks` as a SDK default location (PR #115048)

2024-11-05 Thread Ian Anderson via cfe-commits

ian-twilightcoder wrote:

Do we also need to update `darwin::Linker::ConstructJob(...)`?

https://github.com/llvm/llvm-project/pull/115048
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [Clang][Darwin] Introduce `SubFrameworks` as a SDK default location (PR #115048)

2024-11-05 Thread via cfe-commits

llvmbot wrote:




@llvm/pr-subscribers-clang

Author: Cyndy Ishida (cyndyishida)


Changes

* 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: 

---
Full diff: https://github.com/llvm/llvm-project/pull/115048.diff


5 Files Affected:

- (modified) clang/lib/InstallAPI/DirectoryScanner.cpp (+2-1) 
- (modified) clang/lib/Lex/InitHeaderSearch.cpp (+1) 
- (added) clang/test/Driver/darwin-subframeworks.c (+15) 
- (modified) llvm/lib/TextAPI/Utils.cpp (+3) 
- (modified) llvm/test/tools/llvm-readtapi/stubify-delete.test (+5-2) 


``diff
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 00..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 --all

[clang] [llvm] [Clang][Darwin] Introduce `SubFrameworks` as a SDK default location (PR #115048)

2024-11-05 Thread via cfe-commits

llvmbot wrote:




@llvm/pr-subscribers-clang-driver

Author: Cyndy Ishida (cyndyishida)


Changes

* 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: 

---
Full diff: https://github.com/llvm/llvm-project/pull/115048.diff


5 Files Affected:

- (modified) clang/lib/InstallAPI/DirectoryScanner.cpp (+2-1) 
- (modified) clang/lib/Lex/InitHeaderSearch.cpp (+1) 
- (added) clang/test/Driver/darwin-subframeworks.c (+15) 
- (modified) llvm/lib/TextAPI/Utils.cpp (+3) 
- (modified) llvm/test/tools/llvm-readtapi/stubify-delete.test (+5-2) 


``diff
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 00..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 %

[clang] [llvm] [Clang][Darwin] Introduce `SubFrameworks` as a SDK default location (PR #115048)

2024-11-05 Thread Cyndy Ishida via cfe-commits

https://github.com/cyndyishida created 
https://github.com/llvm/llvm-project/pull/115048

* 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: 

>From dd22f1347530d8f866822074ec9b89cb8ee56867 Mon Sep 17 00:00:00 2001
From: Cyndy Ishida 
Date: Tue, 5 Nov 2024 10:48:09 -0800
Subject: [PATCH] [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: 
---
 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 00..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
 ; RU