Skip to content

Commit b1e3cd1

Browse files
committedSep 18, 2023
[driver] Conditionally include installed libc++ headers for Android
https://reviews.llvm.org/D71154 prevented Clang from search for libc++ headers installed alongside the driver when targeting Android. The motivation was the NDK's use of a different libc++ inline namespace (`__ndk1` instead of the standard `__1`), which made regular libc++ headers incompatible with the NDK's libc++ library. Since then, libc++ has gained the ability to install its `__config_site` header (which controls the inline namespace, among other things) to a per-target include directory, which enables per-target customizations. If this directory is present, the user has expressly built libc++ for Android, and we should use those headers. The motivation is that, with the current setup, if a user builds their own libc++ for Android, they'll use the library they built themselves but the NDK's headers instead of their own, which is surprising at best and can cause all sorts of problems (e.g. if you built your own libc++ with a different ABI configuration). It's important to match the headers and libraries in that scenario, and checking for an Android per-target include directory lets us do so without regressing the original scenario which https://reviews.llvm.org/D71154 was addressing. While I'm here, switch to using sys::path::append instead of slashes directly, to get system path separators on Windows, which is consistent with how library paths are constructed (and that consistency will be important in a follow-up, where we use a common search function for the include and library path construction). (As an aside, one of the motivations for https://reviews.llvm.org/D71154 was to support targeting both Android and Apple platforms, which expected libc++ headers to be provided by the toolcain at the time. Apple has since switched to including libc++ headers in the platform SDK instead of in the toolchain, so that specific motivation no longer applies either.) Reviewed By: phosek Differential Revision: https://reviews.llvm.org/D159292
1 parent bdd3748 commit b1e3cd1

7 files changed

+66
-42
lines changed
 

‎clang/lib/Driver/ToolChains/Gnu.cpp

+22-10
Original file line numberDiff line numberDiff line change
@@ -3102,32 +3102,44 @@ Generic_GCC::addLibCxxIncludePaths(const llvm::opt::ArgList &DriverArgs,
31023102
std::string SysRoot = computeSysRoot();
31033103
std::string Target = getTripleString();
31043104

3105-
auto AddIncludePath = [&](std::string Path) {
3105+
auto AddIncludePath = [&](StringRef Path, bool TargetDirRequired = false) {
31063106
std::string Version = detectLibcxxVersion(Path);
31073107
if (Version.empty())
31083108
return false;
31093109

31103110
// First add the per-target include path if it exists.
3111-
std::string TargetDir = Path + "/" + Target + "/c++/" + Version;
3111+
SmallString<128> TargetDir(Path);
3112+
llvm::sys::path::append(TargetDir, Target, "c++", Version);
31123113
if (D.getVFS().exists(TargetDir))
31133114
addSystemInclude(DriverArgs, CC1Args, TargetDir);
3115+
else if (TargetDirRequired)
3116+
return false;
31143117

31153118
// Second add the generic one.
3116-
addSystemInclude(DriverArgs, CC1Args, Path + "/c++/" + Version);
3119+
SmallString<128> GenericDir(Path);
3120+
llvm::sys::path::append(GenericDir, "c++", Version);
3121+
addSystemInclude(DriverArgs, CC1Args, GenericDir);
31173122
return true;
31183123
};
31193124

3120-
// Android never uses the libc++ headers installed alongside the toolchain,
3121-
// which are generally incompatible with the NDK libraries anyway.
3122-
if (!getTriple().isAndroid())
3123-
if (AddIncludePath(getDriver().Dir + "/../include"))
3124-
return;
3125+
// Android only uses the libc++ headers installed alongside the toolchain if
3126+
// they contain an Android-specific target include path, otherwise they're
3127+
// incompatible with the NDK libraries.
3128+
SmallString<128> DriverIncludeDir(getDriver().Dir);
3129+
llvm::sys::path::append(DriverIncludeDir, "..", "include");
3130+
if (AddIncludePath(DriverIncludeDir,
3131+
/*TargetDirRequired=*/getTriple().isAndroid()))
3132+
return;
31253133
// If this is a development, non-installed, clang, libcxx will
31263134
// not be found at ../include/c++ but it likely to be found at
31273135
// one of the following two locations:
3128-
if (AddIncludePath(concat(SysRoot, "/usr/local/include")))
3136+
SmallString<128> UsrLocalIncludeDir(SysRoot);
3137+
llvm::sys::path::append(UsrLocalIncludeDir, "usr", "local", "include");
3138+
if (AddIncludePath(UsrLocalIncludeDir))
31293139
return;
3130-
if (AddIncludePath(concat(SysRoot, "/usr/include")))
3140+
SmallString<128> UsrIncludeDir(SysRoot);
3141+
llvm::sys::path::append(UsrIncludeDir, "usr", "include");
3142+
if (AddIncludePath(UsrIncludeDir))
31313143
return;
31323144
}
31333145

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// Check that we only find libc++ in the installation directory when it contains
2+
// an Android-specific include directory.
3+
4+
// RUN: mkdir -p %t1/bin
5+
// RUN: mkdir -p %t1/include/c++/v1
6+
// RUN: mkdir -p %t1/sysroot
7+
// RUN: %clang -target aarch64-none-linux-android -ccc-install-dir %t1/bin \
8+
// RUN: --sysroot=%t1/sysroot -stdlib=libc++ -fsyntax-only \
9+
// RUN: %s -### 2>&1 | FileCheck %s
10+
// CHECK-NOT: "-internal-isystem" "{{.*}}v1"
11+
12+
// RUN: mkdir -p %t2/bin
13+
// RUN: mkdir -p %t2/include/c++/v1
14+
// RUN: mkdir -p %t2/sysroot
15+
// RUN: mkdir -p %t2/include/aarch64-none-linux-android/c++/v1
16+
17+
// RUN: %clang -target aarch64-none-linux-android -ccc-install-dir %/t2/bin \
18+
// RUN: --sysroot=%t2/sysroot -stdlib=libc++ -fsyntax-only \
19+
// RUN: %s -### 2>&1 | FileCheck --check-prefix=ANDROID-DIR -DDIR=%/t2/bin %s
20+
21+
// ANDROID-DIR: "-internal-isystem" "[[DIR]][[SEP:/|\\\\]]..[[SEP]]include[[SEP]]aarch64-none-linux-android[[SEP]]c++[[SEP]]v1"
22+
// ANDROID-DIR-SAME: "-internal-isystem" "[[DIR]][[SEP]]..[[SEP]]include[[SEP]]c++[[SEP]]v1"

‎clang/test/Driver/android-ndk-standalone.cpp

+8-8
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
// RUN: | FileCheck %s
99
// CHECK: "-cc1"
1010
// CHECK: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
11-
// CHECK: "-internal-isystem" "{{.*}}/include/c++/v1"
11+
// CHECK: "-internal-isystem" "{{.*}}{{/|\\\\}}include{{/|\\\\}}c++{{/|\\\\}}v1"
1212
// CHECK: "-internal-isystem" "[[RESOURCE_DIR]]{{(/|\\\\)}}include"
1313
// CHECK: "-internal-isystem" "{{.*}}/sysroot/usr/local/include"
1414
// CHECK: "-internal-externc-isystem" "{{.*}}/sysroot/usr/include/arm-linux-androideabi"
@@ -81,7 +81,7 @@
8181
// RUN: | FileCheck --check-prefix=CHECK-ARMV7 %s
8282
// CHECK-ARMV7: "-cc1"
8383
// CHECK-ARMV7: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
84-
// CHECK-ARMV7: "-internal-isystem" "{{.*}}/include/c++/v1"
84+
// CHECK-ARMV7: "-internal-isystem" "{{.*}}{{/|\\\\}}include{{/|\\\\}}c++{{/|\\\\}}v1"
8585
// CHECK-ARMV7: "-internal-isystem" "[[RESOURCE_DIR]]{{(/|\\\\)}}include"
8686
// CHECK-ARMV7: "-internal-isystem" "{{.*}}/sysroot/usr/local/include"
8787
// CHECK-ARMV7: "-internal-externc-isystem" "{{.*}}/sysroot/usr/include/arm-linux-androideabi"
@@ -134,7 +134,7 @@
134134
// RUN: | FileCheck --check-prefix=CHECK-THUMB %s
135135
// CHECK-THUMB: "-cc1"
136136
// CHECK-THUMB: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
137-
// CHECK-THUMB: "-internal-isystem" "{{.*}}/include/c++/v1"
137+
// CHECK-THUMB: "-internal-isystem" "{{.*}}{{/|\\\\}}include{{/|\\\\}}c++{{/|\\\\}}v1"
138138
// CHECK-THUMB: "-internal-isystem" "[[RESOURCE_DIR]]{{(/|\\\\)}}include"
139139
// CHECK-THUMB: "-internal-isystem" "{{.*}}/sysroot/usr/local/include"
140140
// CHECK-THUMB: "-internal-externc-isystem" "{{.*}}/sysroot/usr/include/arm-linux-androideabi"
@@ -168,7 +168,7 @@
168168
// RUN: | FileCheck --check-prefix=CHECK-ARMV7THUMB %s
169169
// CHECK-ARMV7THUMB: "-cc1"
170170
// CHECK-ARMV7THUMB: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
171-
// CHECK-ARMV7THUMB: "-internal-isystem" "{{.*}}/include/c++/v1"
171+
// CHECK-ARMV7THUMB: "-internal-isystem" "{{.*}}{{/|\\\\}}include{{/|\\\\}}c++{{/|\\\\}}v1"
172172
// CHECK-ARMV7THUMB: "-internal-isystem" "[[RESOURCE_DIR]]{{(/|\\\\)}}include"
173173
// CHECK-ARMV7THUMB: "-internal-isystem" "{{.*}}/sysroot/usr/local/include"
174174
// CHECK-ARMV7THUMB: "-internal-externc-isystem" "{{.*}}/sysroot/usr/include/arm-linux-androideabi"
@@ -219,7 +219,7 @@
219219
// RUN: --sysroot=%S/Inputs/basic_android_ndk_tree/sysroot \
220220
// RUN: | FileCheck --check-prefix=CHECK-AARCH64 %s
221221
// CHECK-AARCH64: "-cc1"
222-
// CHECK-AARCH64: "-internal-isystem" "{{.*}}/include/c++/v1"
222+
// CHECK-AARCH64: "-internal-isystem" "{{.*}}{{/|\\\\}}include{{/|\\\\}}c++{{/|\\\\}}v1"
223223
// CHECK-AARCH64: "-internal-externc-isystem" "{{.*}}/sysroot/usr/include/aarch64-linux-android"
224224
// CHECK-AARCH64: "-internal-externc-isystem" "{{.*}}/sysroot/include"
225225
// CHECK-AARCH64: "-internal-externc-isystem" "{{.*}}/sysroot/usr/include"
@@ -235,7 +235,7 @@
235235
// RUN: --sysroot=%S/Inputs/basic_android_ndk_tree/sysroot \
236236
// RUN: | FileCheck --check-prefix=CHECK-ARM64 %s
237237
// CHECK-ARM64: "-cc1"
238-
// CHECK-ARM64: "-internal-isystem" "{{.*}}/include/c++/v1"
238+
// CHECK-ARM64: "-internal-isystem" "{{.*}}{{/|\\\\}}include{{/|\\\\}}c++{{/|\\\\}}v1"
239239
// CHECK-ARM64: "-internal-externc-isystem" "{{.*}}/sysroot/usr/include/aarch64-linux-android"
240240
// CHECK-ARM64: "-internal-externc-isystem" "{{.*}}/sysroot/include"
241241
// CHECK-ARM64: "-internal-externc-isystem" "{{.*}}/sysroot/usr/include"
@@ -251,7 +251,7 @@
251251
// RUN: --sysroot=%S/Inputs/basic_android_ndk_tree/sysroot \
252252
// RUN: | FileCheck --check-prefix=CHECK-I686 %s
253253
// CHECK-I686: "-cc1"
254-
// CHECK-I686: "-internal-isystem" "{{.*}}/include/c++/v1"
254+
// CHECK-I686: "-internal-isystem" "{{.*}}{{/|\\\\}}include{{/|\\\\}}c++{{/|\\\\}}v1"
255255
// CHECK-I686: "-internal-externc-isystem" "{{.*}}/sysroot/usr/include/i686-linux-android"
256256
// CHECK-I686: "-internal-externc-isystem" "{{.*}}/sysroot/include"
257257
// CHECK-I686: "-internal-externc-isystem" "{{.*}}/sysroot/usr/include"
@@ -267,7 +267,7 @@
267267
// RUN: --sysroot=%S/Inputs/basic_android_ndk_tree/sysroot \
268268
// RUN: | FileCheck --check-prefix=CHECK-X86_64 %s
269269
// CHECK-X86_64: "-cc1"
270-
// CHECK-X86_64: "-internal-isystem" "{{.*}}/include/c++/v1"
270+
// CHECK-X86_64: "-internal-isystem" "{{.*}}{{/|\\\\}}include{{/|\\\\}}c++{{/|\\\\}}v1"
271271
// CHECK-X86_64: "-internal-externc-isystem" "{{.*}}/sysroot/usr/include/x86_64-linux-android"
272272
// CHECK-X86_64: "-internal-externc-isystem" "{{.*}}/sysroot/include"
273273
// CHECK-X86_64: "-internal-externc-isystem" "{{.*}}/sysroot/usr/include"

‎clang/test/Driver/android-no-installed-libcxx.cpp

-10
This file was deleted.

‎clang/test/Driver/linux-header-search.cpp

+12-12
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@
1313
// RUN: | FileCheck --check-prefix=CHECK-BASIC-LIBCXX-SYSROOT %s
1414
// CHECK-BASIC-LIBCXX-SYSROOT: "-cc1"
1515
// CHECK-BASIC-LIBCXX-SYSROOT: "-isysroot" "[[SYSROOT:[^"]+]]"
16-
// CHECK-BASIC-LIBCXX-SYSROOT: "-internal-isystem" "[[SYSROOT]]/usr/include/x86_64-unknown-linux-gnu/c++/v1"
17-
// CHECK-BASIC-LIBCXX-SYSROOT: "-internal-isystem" "[[SYSROOT]]/usr/include/c++/v1"
16+
// CHECK-BASIC-LIBCXX-SYSROOT: "-internal-isystem" "[[SYSROOT]][[SEP:/|\\\\]]usr[[SEP]]include[[SEP]]x86_64-unknown-linux-gnu[[SEP]]c++[[SEP]]v1"
17+
// CHECK-BASIC-LIBCXX-SYSROOT: "-internal-isystem" "[[SYSROOT]][[SEP]]usr[[SEP]]include[[SEP]]c++[[SEP]]v1"
1818
// CHECK-BASIC-LIBCXX-SYSROOT: "-internal-isystem" "[[SYSROOT]]/usr/local/include"
1919

2020
// Test include paths when the sysroot path ends with `/`.
@@ -28,8 +28,8 @@
2828
// RUN: | FileCheck --check-prefix=CHECK-BASIC-LIBCXX-SYSROOT-SLASH %s
2929
// CHECK-BASIC-LIBCXX-SYSROOT-SLASH: "-cc1"
3030
// CHECK-BASIC-LIBCXX-SYSROOT-SLASH-SAME: "-isysroot" "[[SYSROOT:[^"]+/]]"
31-
// CHECK-BASIC-LIBCXX-SYSROOT-SLASH-SAME: "-internal-isystem" "[[SYSROOT]]usr/include/x86_64-unknown-linux-gnu/c++/v1"
32-
// CHECK-BASIC-LIBCXX-SYSROOT-SLASH-SAME: "-internal-isystem" "[[SYSROOT]]usr/include/c++/v1"
31+
// CHECK-BASIC-LIBCXX-SYSROOT-SLASH-SAME: "-internal-isystem" "[[SYSROOT]]usr[[SEP:/|\\\\]]include[[SEP]]x86_64-unknown-linux-gnu[[SEP]]c++[[SEP]]v1"
32+
// CHECK-BASIC-LIBCXX-SYSROOT-SLASH-SAME: "-internal-isystem" "[[SYSROOT]]usr[[SEP]]include[[SEP]]c++[[SEP]]v1"
3333
// CHECK-BASIC-LIBCXX-SYSROOT-SLASH-SAME: "-internal-isystem" "[[SYSROOT]]usr/local/include"
3434

3535
// RUN: %clang -### %s -fsyntax-only 2>&1 \
@@ -42,8 +42,8 @@
4242
// RUN: | FileCheck --check-prefix=CHECK-BASIC-LIBCXX-INSTALL %s
4343
// CHECK-BASIC-LIBCXX-INSTALL: "-cc1"
4444
// CHECK-BASIC-LIBCXX-INSTALL: "-isysroot" "[[SYSROOT:[^"]+]]"
45-
// CHECK-BASIC-LIBCXX-INSTALL: "-internal-isystem" "[[SYSROOT]]/usr/bin/../include/x86_64-unknown-linux-gnu/c++/v1"
46-
// CHECK-BASIC-LIBCXX-INSTALL: "-internal-isystem" "[[SYSROOT]]/usr/bin/../include/c++/v1"
45+
// CHECK-BASIC-LIBCXX-INSTALL: "-internal-isystem" "[[SYSROOT]]/usr/bin[[SEP:/|\\\\]]..[[SEP]]include[[SEP]]x86_64-unknown-linux-gnu[[SEP]]c++[[SEP]]v1"
46+
// CHECK-BASIC-LIBCXX-INSTALL: "-internal-isystem" "[[SYSROOT]]/usr/bin[[SEP]]..[[SEP]]include[[SEP]]c++[[SEP]]v1"
4747
// CHECK-BASIC-LIBCXX-INSTALL: "-internal-isystem" "[[SYSROOT]]/usr/local/include"
4848
//
4949
// RUN: %clang -### %s -fsyntax-only 2>&1 \
@@ -56,8 +56,8 @@
5656
// RUN: | FileCheck --check-prefix=CHECK-BASIC-LIBCXXV2-SYSROOT %s
5757
// CHECK-BASIC-LIBCXXV2-SYSROOT: "-cc1"
5858
// CHECK-BASIC-LIBCXXV2-SYSROOT: "-isysroot" "[[SYSROOT:[^"]+]]"
59-
// CHECK-BASIC-LIBCXXV2-SYSROOT: "-internal-isystem" "[[SYSROOT]]/usr/include/x86_64-unknown-linux-gnu/c++/v2"
60-
// CHECK-BASIC-LIBCXXV2-SYSROOT: "-internal-isystem" "[[SYSROOT]]/usr/include/c++/v2"
59+
// CHECK-BASIC-LIBCXXV2-SYSROOT: "-internal-isystem" "[[SYSROOT]][[SEP:/|\\\\]]usr[[SEP]]include[[SEP]]x86_64-unknown-linux-gnu[[SEP]]c++[[SEP]]v2"
60+
// CHECK-BASIC-LIBCXXV2-SYSROOT: "-internal-isystem" "[[SYSROOT]][[SEP]]usr[[SEP]]include[[SEP]]c++[[SEP]]v2"
6161
// CHECK-BASIC-LIBCXXV2-SYSROOT: "-internal-isystem" "[[SYSROOT]]/usr/local/include"
6262
// RUN: %clang -### %s -fsyntax-only 2>&1 \
6363
// RUN: --target=x86_64-unknown-linux-gnu \
@@ -69,8 +69,8 @@
6969
// RUN: | FileCheck --check-prefix=CHECK-BASIC-LIBCXXV2-INSTALL %s
7070
// CHECK-BASIC-LIBCXXV2-INSTALL: "-cc1"
7171
// CHECK-BASIC-LIBCXXV2-INSTALL: "-isysroot" "[[SYSROOT:[^"]+]]"
72-
// CHECK-BASIC-LIBCXXV2-INSTALL: "-internal-isystem" "[[SYSROOT]]/usr/bin/../include/x86_64-unknown-linux-gnu/c++/v2"
73-
// CHECK-BASIC-LIBCXXV2-INSTALL: "-internal-isystem" "[[SYSROOT]]/usr/bin/../include/c++/v2"
72+
// CHECK-BASIC-LIBCXXV2-INSTALL: "-internal-isystem" "[[SYSROOT]]/usr/bin[[SEP:/|\\\\]]..[[SEP]]include[[SEP]]x86_64-unknown-linux-gnu[[SEP]]c++[[SEP]]v2"
73+
// CHECK-BASIC-LIBCXXV2-INSTALL: "-internal-isystem" "[[SYSROOT]]/usr/bin[[SEP]]..[[SEP]]include[[SEP]]c++[[SEP]]v2"
7474
// CHECK-BASIC-LIBCXXV2-INSTALL: "-internal-isystem" "[[SYSROOT]]/usr/local/include"
7575

7676
// Test Linux with libstdc++ when the sysroot path ends with `/`.
@@ -97,8 +97,8 @@
9797
// RUN: | FileCheck --check-prefix=CHECK-BASIC-LIBSTDCXX-LIBCXXV2-SYSROOT %s
9898
// CHECK-BASIC-LIBSTDCXX-LIBCXXV2-SYSROOT: "-cc1"
9999
// CHECK-BASIC-LIBSTDCXX-LIBCXXV2-SYSROOT: "-isysroot" "[[SYSROOT:[^"]+]]"
100-
// CHECK-BASIC-LIBSTDCXX-LIBCXXV2-SYSROOT: "-internal-isystem" "[[SYSROOT]]/usr/include/x86_64-unknown-linux-gnu/c++/v2"
101-
// CHECK-BASIC-LIBSTDCXX-LIBCXXV2-SYSROOT: "-internal-isystem" "[[SYSROOT]]/usr/include/c++/v2"
100+
// CHECK-BASIC-LIBSTDCXX-LIBCXXV2-SYSROOT: "-internal-isystem" "[[SYSROOT]][[SEP:/|\\\\]]usr[[SEP]]include[[SEP]]x86_64-unknown-linux-gnu[[SEP]]c++[[SEP]]v2"
101+
// CHECK-BASIC-LIBSTDCXX-LIBCXXV2-SYSROOT: "-internal-isystem" "[[SYSROOT]][[SEP]]usr[[SEP]]include[[SEP]]c++[[SEP]]v2"
102102
// CHECK-BASIC-LIBSTDCXX-LIBCXXV2-SYSROOT: "-internal-isystem" "[[SYSROOT]]/usr/local/include"
103103

104104
// Test Gentoo's weirdness both before and after they changed it in their GCC

‎clang/test/Driver/linux-musl-header-search.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
// This is different from a glibc-based distribution.
1010
// CHECK-X86-64-LIBCXX: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
1111
// CHECK-X86-64-LIBCXX: "-isysroot" "[[SYSROOT:[^"]+]]"
12-
// CHECK-X86-64-LIBCXX: "-internal-isystem" "[[SYSROOT]]/usr/include/c++/v1"
12+
// CHECK-X86-64-LIBCXX: "-internal-isystem" "[[SYSROOT]]{{/|\\\\}}usr{{/|\\\\}}include{{/|\\\\}}c++{{/|\\\\}}v1"
1313
// CHECK-X86-64-LIBCXX: "-internal-isystem" "[[SYSROOT]]/usr/local/include"
1414
// CHECK-X86-64-LIBCXX: "-internal-externc-isystem" "[[SYSROOT]]/usr/include"
1515
// CHECK-X86-64-LIBCXX: "-internal-isystem" "[[RESOURCE_DIR]]{{/|\\\\}}include"

‎clang/test/Driver/linux-per-target-runtime-dir.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
// CHECK-PER-TARGET-RUNTIME: "-cc1"
1010
// CHECK-PER-TARGET-RUNTIME: "-resource-dir" "[[RESDIR:[^"]*]]"
1111
// CHECK-PER-TARGET-RUNTIME: "-isysroot" "[[SYSROOT:[^"]+]]"
12-
// CHECK-PER-TARGET-RUNTIME: "-internal-isystem" "{{.*}}/../include/c++/v1"
12+
// CHECK-PER-TARGET-RUNTIME: "-internal-isystem" "{{.*}}{{/|\\\\}}..{{/|\\\\}}include{{/|\\\\}}c++{{/|\\\\}}v1"
1313
// CHECK-PER-TARGET-RUNTIME: "-internal-isystem" "[[SYSROOT]]/usr/local/include"
1414
// CHECK-PER-TARGET-RUNTIME: "--sysroot=[[SYSROOT]]"
1515
// CHECK-PER-TARGET-RUNTIME: "-L{{.*}}{{/|\\\\}}..{{/|\\\\}}lib{{/|\\\\}}x86_64-unknown-linux-gnu"

0 commit comments

Comments
 (0)
Please sign in to comment.