xref: /llvm-project/clang/test/Driver/darwin-embedded-search-paths.c (revision b9c932e5d6269fb0233ad5e70084e99e36ed4472)
1*b9c932e5SIan Anderson // REQUIRES: !(default-cxx-stdlib=libc++)
2d6bfe10aSIan Anderson // UNSUPPORTED: system-windows
3d6bfe10aSIan Anderson //   Windows is unsupported because we use the Unix path separator `/` in the test.
4d6bfe10aSIan Anderson 
5d6bfe10aSIan Anderson // Unlike the Darwin driver, the MachO driver doesn't add any framework search paths,
6d6bfe10aSIan Anderson // only the normal header ones.
7d6bfe10aSIan Anderson // RUN: %clang -x c -target arm64-apple-none-macho -isysroot %S/Inputs/MacOSX15.1.sdk -### -c %s 2>&1 \
8d6bfe10aSIan Anderson // RUN: | FileCheck --check-prefixes=CC1,NO-CXX,ULI,CI,UI,NO-FW -DSDKROOT=%S/Inputs/MacOSX15.1.sdk %s
9d6bfe10aSIan Anderson 
10*b9c932e5SIan Anderson // Unlike the Darwin driver, the MachO driver doesn't default to libc++, and unless
11*b9c932e5SIan Anderson // CLANG_DEFAULT_CXX_STDLIB is libc++ it won't add any search paths.
12d6bfe10aSIan Anderson // RUN: %clang -x c++ -target arm64-apple-none-macho -isysroot %S/Inputs/MacOSX15.1.sdk -### -c %s 2>&1 \
13d6bfe10aSIan Anderson // RUN: | FileCheck --check-prefixes=CC1,NO-CXX,ULI,CI,UI,NO-FW -DSDKROOT=%S/Inputs/MacOSX15.1.sdk %s
14d6bfe10aSIan Anderson 
15d6bfe10aSIan Anderson // However, if the user requests libc++, the MachO driver should find the search path.
16d6bfe10aSIan Anderson // RUN: %clang -x c++ -stdlib=libc++ -target arm64-apple-none-macho -isysroot %S/Inputs/MacOSX15.1.sdk -### -c %s 2>&1 \
17d6bfe10aSIan Anderson // RUN: | FileCheck --check-prefixes=CC1,CXX,ULI,CI,UI,NO-FW -DSDKROOT=%S/Inputs/MacOSX15.1.sdk %s
18d6bfe10aSIan Anderson 
19d6bfe10aSIan Anderson // Verify that embedded uses can swap in alternate usr/include and usr/local/include directories.
20d6bfe10aSIan Anderson // usr/local/include is specified in the driver as -internal-isystem, however, the driver generated
21d6bfe10aSIan Anderson // paths come before the paths in the driver arguments. In order to keep usr/local/include in the
22d6bfe10aSIan Anderson // same position, -isystem has to be used instead of -Xclang -internal-isystem. There isn't an
23d6bfe10aSIan Anderson // -externc-isystem, but it's ok to use -Xclang -internal-externc-isystem since the driver doesn't
24d6bfe10aSIan Anderson // use that if -nostdlibinc or -nostdinc is passed.
25d6bfe10aSIan Anderson // RUN: %clang -x c++ -stdlib=libc++ -target arm64-apple-none-macho -isysroot %S/Inputs/MacOSX15.1.sdk \
26d6bfe10aSIan Anderson // RUN:        -nostdlibinc -isystem %S/Inputs/MacOSX15.1.sdk/embedded/usr/local/include \
27d6bfe10aSIan Anderson // RUN:        -Xclang -internal-externc-isystem -Xclang %S/Inputs/MacOSX15.1.sdk/embedded/usr/include \
28d6bfe10aSIan Anderson // RUN:        -### -c %s 2>&1 | FileCheck --check-prefixes=CC1,NO-CXX,EULI,CI,EUI,NO-FW -DSDKROOT=%S/Inputs/MacOSX15.1.sdk %s
29d6bfe10aSIan Anderson 
30d6bfe10aSIan Anderson 
31d6bfe10aSIan Anderson // The ordering of these flags doesn't matter, and so this test is a little
32d6bfe10aSIan Anderson // fragile. i.e. all of the -internal-isystem paths will be searched before the
33d6bfe10aSIan Anderson // -internal-externc-isystem ones, and their order on the command line doesn't
34d6bfe10aSIan Anderson // matter. The line order here is just the current order that the driver writes
35d6bfe10aSIan Anderson // the cc1 arguments.
36d6bfe10aSIan Anderson 
37d6bfe10aSIan Anderson // CC1: "-cc1"
38fe162bedSBenjamin Kramer // CC1: "-resource-dir" "[[RESOURCE_DIR:[^"]*]]"
39d6bfe10aSIan Anderson // NO-CXX-NOT: "-internal-isystem" "{{.*}}/include/c++/v1"
40d6bfe10aSIan Anderson // CXX-SAME: "-internal-isystem" "{{.*}}/include/c++/v1"
41d6bfe10aSIan Anderson // ULI-SAME: "-internal-isystem" "[[SDKROOT]]/usr/local/include"
42d6bfe10aSIan Anderson // EULI-SAME: "-isystem" "[[SDKROOT]]/embedded/usr/local/include"
43fe162bedSBenjamin Kramer // CI-SAME: "-internal-isystem" "[[RESOURCE_DIR]]/include"
44d6bfe10aSIan Anderson // UI-SAME: "-internal-externc-isystem" "[[SDKROOT]]/usr/include"
45d6bfe10aSIan Anderson // EUI-SAME: "-internal-externc-isystem" "[[SDKROOT]]/embedded/usr/include"
46d6bfe10aSIan Anderson // NO-FW-NOT: "-internal-iframework"
47