diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 0528104f05515..aa30f2f414a89 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -3218,7 +3218,7 @@ def modules_reduced_bmi : Flag<["-"], "fmodules-reduced-bmi">, HelpText<"Generate the reduced BMI">, MarshallingInfoFlag>; -def experimental_modules_reduced_bmi : Flag<["-"], "fexperimental-modules-reduced-bmi">, +def experimental_modules_reduced_bmi : Flag<["-"], "fexperimental-modules-reduced-bmi">, Group, Visibility<[ClangOption, CC1Option]>, Alias; def fmodules_embed_all_files : Joined<["-"], "fmodules-embed-all-files">, @@ -7421,7 +7421,7 @@ def fuse_register_sized_bitfield_access: Flag<["-"], "fuse-register-sized-bitfie def relaxed_aliasing : Flag<["-"], "relaxed-aliasing">, HelpText<"Turn off Type Based Alias Analysis">, MarshallingInfoFlag>; -defm pointer_tbaa: BoolOption<"", "pointer-tbaa", CodeGenOpts<"PointerTBAA">, +defm pointer_tbaa: BoolOption<"", "pointer-tbaa", CodeGenOpts<"PointerTBAA">, DefaultTrue, PosFlag, NegFlag, diff --git a/clang/lib/Driver/ToolChains/Darwin.cpp b/clang/lib/Driver/ToolChains/Darwin.cpp index 56b6dd78673cb..1ce2254ebe757 100644 --- a/clang/lib/Driver/ToolChains/Darwin.cpp +++ b/clang/lib/Driver/ToolChains/Darwin.cpp @@ -800,9 +800,15 @@ void darwin::Linker::ConstructJob(Compilation &C, const JobAction &JA, } } - // Add non-standard, platform-specific search paths, e.g., for DriverKit: - // -L/System/DriverKit/usr/lib - // -F/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/System/DriverKit/usr/lib + // -F/System/DriverKit/System/Library/Frameworks + // 2. The "standard" paths, e.g. for macOS and iOS: + // -F/System/Library/Frameworks + // -F/System/Library/SubFrameworks + // -F/Library/Frameworks { bool NonStandardSearchPath = false; const auto &Triple = getToolChain().getTriple(); @@ -813,18 +819,23 @@ 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", "/System/Library/SubFrameworks"); + AddSearchPath("-F", "/Library/Frameworks"); } } } @@ -2547,6 +2558,17 @@ void DarwinClang::AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs llvm::sys::path::append(P, "usr", "include"); addExternCSystemInclude(DriverArgs, CC1Args, P.str()); } + + // Add default framework search paths + auto AddFrameworkInclude = [&](StringRef Flag, StringRef SearchPath) { + SmallString<128> P(Sysroot); + llvm::sys::path::append(P, SearchPath); + CC1Args.push_back(DriverArgs.MakeArgString(Flag)); + CC1Args.push_back(DriverArgs.MakeArgString(P)); + }; + AddFrameworkInclude("-iframework", "/System/Library/Frameworks"); + AddFrameworkInclude("-iframework", "/System/Library/SubFrameworks"); + AddFrameworkInclude("-iframework", "/Library/Frameworks"); } bool DarwinClang::AddGnuCPlusPlusIncludePaths(const llvm::opt::ArgList &DriverArgs, diff --git a/clang/lib/Lex/InitHeaderSearch.cpp b/clang/lib/Lex/InitHeaderSearch.cpp index 67c9d92b849ea..6567ad6afb561 100644 --- a/clang/lib/Lex/InitHeaderSearch.cpp +++ b/clang/lib/Lex/InitHeaderSearch.cpp @@ -321,6 +321,9 @@ bool InitHeaderSearch::ShouldAddDefaultIncludePaths( break; } + if (triple.isOSDarwin()) + return false; + return true; // Everything else uses AddDefaultIncludePaths(). } @@ -335,22 +338,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("/System/Library/SubFrameworks", System, true); - AddPath("/Library/Frameworks", System, true); - } - } - return; - } - if (Lang.CPlusPlus && !Lang.AsmPreprocessor && HSOpts.UseStandardCXXIncludes && HSOpts.UseStandardSystemIncludes) { if (HSOpts.UseLibcxx) { diff --git a/clang/test/Driver/Inputs/DriverKit19.0.sdk/System/DriverKit/System/Library/SubFrameworks/.keep b/clang/test/Driver/Inputs/DriverKit19.0.sdk/System/DriverKit/System/Library/SubFrameworks/.keep new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/clang/test/Driver/darwin-framework-search-paths.c b/clang/test/Driver/darwin-framework-search-paths.c new file mode 100644 index 0000000000000..7ad814539f7cd --- /dev/null +++ b/clang/test/Driver/darwin-framework-search-paths.c @@ -0,0 +1,26 @@ +// UNSUPPORTED: system-windows +// Windows is unsupported because we use the Unix path separator `/` in the test. + +// 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 -xc %s -target arm64-apple-macosx15.1 -isysroot %t/MacOSX15.1.sdk -c -### 2>&1 \ +// RUN: | FileCheck -DSDKROOT=%t/MacOSX15.1.sdk --check-prefix=CHECK-C %s +// +// CHECK-C: "-isysroot" "[[SDKROOT]]" +// CHECK-C: "-internal-externc-isystem" "[[SDKROOT]]/usr/include" +// CHECK-C: "-iframework" "[[SDKROOT]]/System/Library/Frameworks" +// CHECK-C: "-iframework" "[[SDKROOT]]/System/Library/SubFrameworks" + +// RUN: %clang -xc++ %s -target arm64-apple-macosx15.1 -isysroot %t/MacOSX15.1.sdk -c -### 2>&1 \ +// RUN: | FileCheck -DSDKROOT=%t/MacOSX15.1.sdk --check-prefix=CHECK-CXX %s +// +// CHECK-CXX: "-isysroot" "[[SDKROOT]]" +// CHECK-CXX: "-internal-externc-isystem" "[[SDKROOT]]/usr/include" +// CHECK-CXX: "-iframework" "[[SDKROOT]]/System/Library/Frameworks" +// CHECK-CXX: "-iframework" "[[SDKROOT]]/System/Library/SubFrameworks" diff --git a/clang/test/Driver/darwin-subframeworks.c b/clang/test/Driver/darwin-subframeworks.c deleted file mode 100644 index 1a7a095c64292..0000000000000 --- a/clang/test/Driver/darwin-subframeworks.c +++ /dev/null @@ -1,18 +0,0 @@ -// 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 -// 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/clang/test/Driver/driverkit-path.c b/clang/test/Driver/driverkit-path.c index 3caae382d65bb..34fad5950fea5 100644 --- a/clang/test/Driver/driverkit-path.c +++ b/clang/test/Driver/driverkit-path.c @@ -21,13 +21,15 @@ int main() { return 0; } // LD64-NEW: "-isysroot" "[[PATH:[^"]*]]Inputs/DriverKit19.0.sdk" // LD64-NEW-NOT: "-L[[PATH]]Inputs/DriverKit19.0.sdk/System/DriverKit/usr/lib" // LD64-NEW-NOT: "-F[[PATH]]Inputs/DriverKit19.0.sdk/System/DriverKit/System/Library/Frameworks" +// LD64-NEW-NOT: "-F[[PATH]]Inputs/DriverKit19.0.sdk/System/DriverKit/System/Library/SubFrameworks" -// RUN: %clang %s -target x86_64-apple-driverkit19.0 -isysroot %S/Inputs/DriverKit19.0.sdk -E -v -x c++ 2>&1 | FileCheck %s --check-prefix=INC +// RUN: %clang %s -target x86_64-apple-driverkit19.0 -isysroot %S/Inputs/DriverKit19.0.sdk -x c++ -### 2>&1 \ +// RUN: | FileCheck %s -DSDKROOT=%S/Inputs/DriverKit19.0.sdk --check-prefix=INC // -// INC: -isysroot [[PATH:[^ ]*/Inputs/DriverKit19.0.sdk]] -// INC-LABEL: #include <...> search starts here: -// 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) +// INC: "-isysroot" "[[SDKROOT]]" +// INC: "-internal-isystem" "[[SDKROOT]]/System/DriverKit/usr/local/include" +// INC: "-internal-isystem" "{{.+}}/lib{{(64)?}}/clang/{{[^/ ]+}}/include" +// INC: "-internal-externc-isystem" "[[SDKROOT]]/System/DriverKit/usr/include" +// INC: "-iframework" "[[SDKROOT]]/System/DriverKit/System/Library/Frameworks" +// INC: "-iframework" "[[SDKROOT]]/System/DriverKit/System/Library/SubFrameworks" diff --git a/clang/test/Preprocessor/cuda-macos-includes.cu b/clang/test/Preprocessor/cuda-macos-includes.cu deleted file mode 100644 index 6ef94b0e45352..0000000000000 --- a/clang/test/Preprocessor/cuda-macos-includes.cu +++ /dev/null @@ -1,13 +0,0 @@ -// RUN: %clang -cc1 -fcuda-is-device -isysroot /var/empty \ -// RUN: -triple nvptx-nvidia-cuda -aux-triple i386-apple-macosx \ -// RUN: -E -fcuda-is-device -v -o /dev/null -x cuda %s 2>&1 | FileCheck %s - -// RUN: %clang -cc1 -isysroot /var/empty \ -// RUN: -triple i386-apple-macosx -aux-triple nvptx-nvidia-cuda \ -// RUN: -E -fcuda-is-device -v -o /dev/null -x cuda %s 2>&1 | FileCheck %s - -// Check that when we do CUDA host and device compiles on MacOS, we check for -// includes in /System/Library/Frameworks and /Library/Frameworks. - -// CHECK-DAG: ignoring nonexistent directory "/var/empty/System/Library/Frameworks" -// CHECK-DAG: ignoring nonexistent directory "/var/empty/Library/Frameworks"