1 // UNSUPPORTED: system-windows
2 
3 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
4 // RUN:     -target armv6m-none-eabi \
5 // RUN:     -T semihosted.lds \
6 // RUN:     -L some/directory/user/asked/for \
7 // RUN:     --sysroot=%S/Inputs/baremetal_arm \
8 // RUN:   | FileCheck --check-prefix=CHECK-V6M-C %s
9 // CHECK-V6M-C: "[[PREFIX_DIR:.*]]{{[/\\]+}}{{[^/^\\]+}}{{[/\\]+}}clang{{.*}}" "-cc1" "-triple" "thumbv6m-none-unknown-eabi"
10 // CHECK-V6M-C-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
11 // CHECK-V6M-C-SAME: "-isysroot" "[[SYSROOT:[^"]*]]"
12 // CHECK-V6M-C-SAME: "-internal-isystem" "[[SYSROOT]]{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}v1"
13 // CHECk-V6M-C-SAME: "-internal-isystem" "[[SYSROOT]]{{[/\\]+}}include"
14 // CHECK-V6M-C-SAME: "-x" "c++" "{{.*}}baremetal.cpp"
15 // CHECK-V6M-C-NEXT: "{{[^"]*}}ld{{(\.(lld|bfd|gold))?}}{{(\.exe)?}}" "{{.*}}.o" "-Bstatic"
16 // CHECK-V6M-C-SAME: "-T" "semihosted.lds" "-Lsome{{[/\\]+}}directory{{[/\\]+}}user{{[/\\]+}}asked{{[/\\]+}}for"
17 // CHECK-V6M-C-SAME: "-L[[SYSROOT:[^"]+]]{{[/\\]+}}lib"
18 // CHECK-V6M-C-SAME: "-L[[RESOURCE_DIR:[^"]+]]{{[/\\]+}}lib{{[/\\]+}}baremetal"
19 // CHECK-V6M-C-SAME: "-lc" "-lm" "-lclang_rt.builtins-armv6m"
20 // CHECK-V6M-C-SAME: "-o" "{{.*}}.o"
21 
22 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
23 // RUN:     -target armv6m-none-eabi \
24 // RUN:     -nostdlibinc -nobuiltininc \
25 // RUN:     --sysroot=%S/Inputs/baremetal_arm \
26 // RUN:   | FileCheck --check-prefix=CHECK-V6M-LIBINC %s
27 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
28 // RUN:     -target armv6m-none-eabi \
29 // RUN:     -nostdinc \
30 // RUN:     --sysroot=%S/Inputs/baremetal_arm \
31 // RUN:   | FileCheck --check-prefix=CHECK-V6M-LIBINC %s
32 // CHECK-V6M-LIBINC-NOT: "-internal-isystem"
33 
34 // RUN: %clangxx -no-canonical-prefixes %s -### -o %t.o 2>&1 \
35 // RUN:     -target armv6m-none-eabi \
36 // RUN:     --sysroot=%S/Inputs/baremetal_arm \
37 // RUN:   | FileCheck --check-prefix=CHECK-V6M-DEFAULTCXX %s
38 // CHECK-V6M-DEFAULTCXX: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
39 // CHECK-V6M-DEFAULTCXX: "{{[^"]*}}ld{{(\.(lld|bfd|gold))?}}{{(\.exe)?}}" "{{.*}}.o" "-Bstatic"
40 // CHECK-V6M-DEFAULTCXX-SAME: "-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}baremetal_arm{{[/\\]+}}lib"
41 // CHECK-V6M-DEFAULTCXX-SAME: "-L[[RESOURCE_DIR]]{{[/\\]+}}lib{{[/\\]+}}baremetal"
42 // CHECK-V6M-DEFAULTCXX-SAME: "-lc++" "-lc++abi" "-lunwind"
43 // CHECK-V6M-DEFAULTCXX-SAME: "-lc" "-lm" "-lclang_rt.builtins-armv6m"
44 // CHECK-V6M-DEFAULTCXX-SAME: "-o" "{{.*}}.o"
45 
46 // RUN: %clangxx -no-canonical-prefixes %s -### -o %t.o 2>&1 \
47 // RUN:     -target armv6m-none-eabi \
48 // RUN:     --sysroot=%S/Inputs/baremetal_arm \
49 // RUN:     -stdlib=libc++ \
50 // RUN:   | FileCheck --check-prefix=CHECK-V6M-LIBCXX %s
51 // CHECK-V6M-LIBCXX: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
52 // CHECK-V6M-LIBCXX-NOT: "-internal-isystem" "{{[^"]+}}{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}{{[^v].*}}"
53 // CHECK-V6M-LIBCXX-SAME: "-internal-isystem" "{{[^"]+}}{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}v1"
54 // CHECK-V6M-LIBCXX: "{{[^"]*}}ld{{(\.(lld|bfd|gold))?}}{{(\.exe)?}}" "{{.*}}.o" "-Bstatic"
55 // CHECK-V6M-LIBCXX-SAME: "-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}baremetal_arm{{[/\\]+}}lib"
56 // CHECK-V6M-LIBCXX-SAME: "-L[[RESOURCE_DIR]]{{[/\\]+}}lib{{[/\\]+}}baremetal"
57 // CHECK-V6M-LIBCXX-SAME: "-lc++" "-lc++abi" "-lunwind"
58 // CHECK-V6M-LIBCXX-SAME: "-lc" "-lm" "-lclang_rt.builtins-armv6m"
59 // CHECK-V6M-LIBCXX-SAME: "-o" "{{.*}}.o"
60 
61 // RUN: %clangxx -no-canonical-prefixes %s -### -o %t.o 2>&1 \
62 // RUN:     -target armv6m-none-eabi \
63 // RUN:     --sysroot=%S/Inputs/baremetal_arm \
64 // RUN:     -stdlib=libstdc++ \
65 // RUN:   | FileCheck --check-prefix=CHECK-V6M-LIBSTDCXX %s
66 // CHECK-V6M-LIBSTDCXX: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
67 // CHECK-V6M-LIBSTDCXX-NOT: "-internal-isystem" "{{[^"]+}}{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}v1"
68 // CHECK-V6M-LIBSTDCXX-SAME: "-internal-isystem" "{{[^"]+}}{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}6.0.0"
69 // CHECK-V6M-LIBSTDCXX: "{{[^"]*}}ld{{(\.(lld|bfd|gold))?}}{{(\.exe)?}}" "{{.*}}.o" "-Bstatic"
70 // CHECK-V6M-LIBSTDCXX-SAME: "-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}baremetal_arm{{[/\\]+}}lib"
71 // CHECK-V6M-LIBSTDCXX-SAME: "-L[[RESOURCE_DIR]]{{[/\\]+}}lib{{[/\\]+}}baremetal"
72 // CHECK-V6M-LIBSTDCXX-SAME: "-lstdc++" "-lsupc++" "-lunwind"
73 // CHECK-V6M-LIBSTDCXX-SAME: "-lc" "-lm" "-lclang_rt.builtins-armv6m"
74 // CHECK-V6M-LIBSTDCXX-SAME: "-o" "{{.*}}.o"
75 
76 // RUN: %clangxx -no-canonical-prefixes %s -### -o %t.o 2>&1 \
77 // RUN:     -target armv6m-none-eabi \
78 // RUN:     --sysroot=%S/Inputs/baremetal_arm \
79 // RUN:     -nodefaultlibs \
80 // RUN:   | FileCheck --check-prefix=CHECK-V6M-NDL %s
81 // CHECK-V6M-NDL: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
82 // CHECK-V6M-NDL: "{{[^"]*}}ld{{(\.(lld|bfd|gold))?}}{{(\.exe)?}}" "{{.*}}.o" "-Bstatic"
83 // CHECK-V6M-NDL-SAME: "-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}baremetal_arm{{[/\\]+}}lib"
84 // CHECK-V6M-NDL-SAME: "-L[[RESOURCE_DIR]]{{[/\\]+}}lib{{[/\\]+}}baremetal"
85 // CHECK-V6M-NDL-SAME: "-o" "{{.*}}.o"
86 
87 // RUN: %clangxx -target arm-none-eabi -v 2>&1 \
88 // RUN:   | FileCheck %s --check-prefix=CHECK-THREAD-MODEL
89 // CHECK-THREAD-MODEL: Thread model: posix
90 
91 // RUN: %clangxx -target arm-none-eabi -mthread-model single -v 2>&1 \
92 // RUN:   | FileCheck %s --check-prefix=CHECK-THREAD-MODEL-SINGLE
93 // CHECK-THREAD-MODEL-SINGLE: Thread model: single
94 
95 // RUN: %clangxx -target arm-none-eabi -mthread-model posix -v 2>&1 \
96 // RUN:   | FileCheck %s --check-prefix=CHECK-THREAD-MODEL-POSIX
97 // CHECK-THREAD-MODEL-POSIX: Thread model: posix
98 
99 // RUN: %clang -### -target arm-none-eabi -rtlib=libgcc -v %s 2>&1 \
100 // RUN:   | FileCheck %s --check-prefix=CHECK-RTLIB-GCC
101 // CHECK-RTLIB-GCC: -lgcc
102 
103 // RUN: %clang -### -target arm-none-eabi -v %s 2>&1 \
104 // RUN:   | FileCheck %s --check-prefix=CHECK-SYSROOT-INC
105 // CHECK-SYSROOT-INC-NOT: "-internal-isystem" "include"
106 
107 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
108 // RUN:      -target aarch64-none-elf \
109 // RUN:   | FileCheck --check-prefix=CHECK-AARCH64-NO-HOST-INC %s
110 // Verify that the bare metal driver does not include any host system paths:
111 // CHECK-AARCH64-NO-HOST-INC: InstalledDir: [[INSTALLEDDIR:.+]]
112 // CHECK-AARCH64-NO-HOST-INC: "-resource-dir" "[[RESOURCE:[^"]+]]"
113 // CHECK-AARCH64-NO-HOST-INC-SAME: "-internal-isystem" "[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+}}aarch64-none-elf{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}v1"
114 // CHECK-AARCH64-NO-HOST-INC-SAME: "-internal-isystem" "[[RESOURCE]]{{[/\\]+}}include"
115 // CHECK-AARCH64-NO-HOST-INC-SAME: "-internal-isystem" "[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+}}aarch64-none-elf{{[/\\]+}}include"
116 
117 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
118 // RUN:     -target riscv64-unknown-elf \
119 // RUN:     -L some/directory/user/asked/for \
120 // RUN:     --sysroot=%S/Inputs/basic_riscv64_tree/riscv64-unknown-elf \
121 // RUN:   | FileCheck --check-prefix=CHECK-RV64 %s
122 // CHECK-RV64: "[[PREFIX_DIR:.*]]{{[/\\]+}}{{[^/^\\]+}}{{[/\\]+}}clang{{.*}}" "-cc1" "-triple" "riscv64-unknown-unknown-elf"
123 // CHECK-RV64-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
124 // CHECK-RV64-SAME: "-isysroot" "[[SYSROOT:[^"]*]]"
125 // CHECK-RV64-SAME: "-internal-isystem" "[[SYSROOT]]{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}v1"
126 // CHECk-RV64-SAME: "-internal-isystem" "[[SYSROOT]]{{[/\\]+}}include"
127 // CHECK-RV64-SAME: "-x" "c++" "{{.*}}baremetal.cpp"
128 // CHECK-RV64-NEXT: "{{[^"]*}}ld{{(\.(lld|bfd|gold))?}}{{(\.exe)?}}" "{{.*}}.o" "-Bstatic"
129 // CHECK-RV64-SAME: "-Lsome{{[/\\]+}}directory{{[/\\]+}}user{{[/\\]+}}asked{{[/\\]+}}for"
130 // CHECK-RV64-SAME: "-L[[SYSROOT:[^"]+]]{{[/\\]+}}lib"
131 // CHECK-RV64-SAME: "-L[[RESOURCE_DIR:[^"]+]]{{[/\\]+}}lib{{[/\\]+}}baremetal"
132 // CHECK-RV64-SAME: "-lc" "-lm" "-lclang_rt.builtins-riscv64"
133 // CHECK-RV64-SAME: "-o" "{{.*}}.o"
134 
135 // RUN: %clangxx -no-canonical-prefixes %s -### -o %t.o 2>&1 \
136 // RUN:     -target riscv64-unknown-elf \
137 // RUN:     --sysroot=%S/Inputs/basic_riscv64_tree/riscv64-unknown-elf \
138 // RUN:   | FileCheck --check-prefix=CHECK-RV64-DEFAULTCXX %s
139 // CHECK-RV64-DEFAULTCXX: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
140 // CHECK-RV64-DEFAULTCXX: "{{[^"]*}}ld{{(\.(lld|bfd|gold))?}}{{(\.exe)?}}" "{{.*}}.o" "-Bstatic"
141 // CHECK-RV64-DEFAULTCXX-SAME: "-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}basic_riscv64_tree{{[/\\]+}}riscv64-unknown-elf{{[/\\]+}}lib"
142 // CHECK-RV64-DEFAULTCXX-SAME: "-L[[RESOURCE_DIR]]{{.*}}{{[/\\]+}}lib{{[/\\]+}}baremetal"
143 // CHECK-RV64-DEFAULTCXX-SAME: "-lc++" "-lc++abi" "-lunwind"
144 // CHECK-RV64-DEFAULTCXX-SAME: "-lc" "-lm" "-lclang_rt.builtins-riscv64"
145 // CHECK-RV64-DEFAULTCXX-SAME: "-o" "{{.*}}.o"
146 
147 // RUN: %clangxx -no-canonical-prefixes %s -### -o %t.o 2>&1 \
148 // RUN:     -target riscv64-unknown-elf \
149 // RUN:     --sysroot=%S/Inputs/basic_riscv64_tree/riscv64-unknown-elf \
150 // RUN:     -stdlib=libc++ \
151 // RUN:   | FileCheck --check-prefix=CHECK-RV64-LIBCXX %s
152 // CHECK-RV64-LIBCXX: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
153 // CHECK-RV64-LIBCXX-NOT: "-internal-isystem" "{{[^"]+}}{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}{{[^v].*}}"
154 // CHECK-RV64-LIBCXX-SAME: "-internal-isystem" "{{[^"]+}}{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}v1"
155 // CHECK-RV64-LIBCXX: "{{[^"]*}}ld{{(\.(lld|bfd|gold))?}}{{(\.exe)?}}" "{{.*}}.o" "-Bstatic"
156 // CHECK-RV64-LIBCXX-SAME: "-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}basic_riscv64_tree{{[/\\]+}}riscv64-unknown-elf{{[/\\]+}}lib"
157 // CHECK-RV64-LIBCXX-SAME: "-L[[RESOURCE_DIR]]{{[/\\]+}}lib{{[/\\]+}}baremetal"
158 // CHECK-RV64-LIBCXX-SAME: "-lc++" "-lc++abi" "-lunwind"
159 // CHECK-RV64-LIBCXX-SAME: "-lc" "-lm" "-lclang_rt.builtins-riscv64"
160 // CHECK-RV64-LIBCXX-SAME: "-o" "{{.*}}.o"
161 
162 // RUN: %clangxx -no-canonical-prefixes %s -### -o %t.o 2>&1 \
163 // RUN:     -target riscv64-unknown-elf \
164 // RUN:     --sysroot=%S/Inputs/basic_riscv64_tree/riscv64-unknown-elf \
165 // RUN:     -stdlib=libstdc++ \
166 // RUN:   | FileCheck --check-prefix=CHECK-RV64-LIBSTDCXX %s
167 // CHECK-RV64-LIBSTDCXX: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
168 // CHECK-RV64-LIBSTDCXX-NOT: "-internal-isystem" "{{[^"]+}}{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}v1"
169 // CHECK-RV64-LIBSTDCXX-SAME: "-internal-isystem" "{{[^"]+}}{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}8.0.1"
170 // CHECK-RV64-LIBSTDCXX: "{{[^"]*}}ld{{(\.(lld|bfd|gold))?}}{{(\.exe)?}}" "{{.*}}.o" "-Bstatic"
171 // CHECK-RV64-LIBSTDCXX-SAME: "-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}basic_riscv64_tree{{[/\\]+}}riscv64-unknown-elf{{[/\\]+}}lib"
172 // CHECK-RV64-LIBSTDCXX-SAME: "-L[[RESOURCE_DIR]]{{[/\\]+}}lib{{[/\\]+}}baremetal"
173 // CHECK-RV64-LIBSTDCXX-SAME: "-lstdc++" "-lsupc++" "-lunwind"
174 // CHECK-RV64-LIBSTDCXX-SAME: "-lc" "-lm" "-lclang_rt.builtins-riscv64"
175 // CHECK-RV64-LIBSTDCXX-SAME: "-o" "{{.*}}.o"
176 
177 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
178 // RUN:     -target riscv32-unknown-elf \
179 // RUN:     -L some/directory/user/asked/for \
180 // RUN:     --sysroot=%S/Inputs/basic_riscv32_tree/riscv32-unknown-elf \
181 // RUN:   | FileCheck --check-prefix=CHECK-RV32 %s
182 // CHECK-RV32: "[[PREFIX_DIR:.*]]{{[/\\]+}}{{[^/^\\]+}}{{[/\\]+}}clang{{.*}}" "-cc1" "-triple" "riscv32-unknown-unknown-elf"
183 // CHECK-RV32-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
184 // CHECK-RV32-SAME: "-isysroot" "[[SYSROOT:[^"]*]]"
185 // CHECK-RV32-SAME: "-internal-isystem" "[[SYSROOT]]{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}v1"
186 // CHECK-RV32-SAME: "-internal-isystem" "[[SYSROOT]]{{[/\\]+}}include"
187 // CHECK-RV32-SAME: "-x" "c++" "{{.*}}baremetal.cpp"
188 // CHECK-RV32-NEXT: "{{[^"]*}}ld{{(\.(lld|bfd|gold))?}}{{(\.exe)?}}" "{{.*}}.o" "-Bstatic"
189 // CHECK-RV32-SAME: "-Lsome{{[/\\]+}}directory{{[/\\]+}}user{{[/\\]+}}asked{{[/\\]+}}for"
190 // CHECK-RV32-SAME: "-L[[SYSROOT:[^"]+]]{{[/\\]+}}lib"
191 // CHECK-RV32-SAME: "-L[[RESOURCE_DIR:[^"]+]]{{[/\\]+}}lib{{[/\\]+}}baremetal"
192 // CHECK-RV32-SAME: "-lc" "-lm" "-lclang_rt.builtins-riscv32"
193 // CHECK-RV32-SAME: "-o" "{{.*}}.o"
194 
195 // RUN: %clangxx -no-canonical-prefixes %s -### -o %t.o 2>&1 \
196 // RUN:     -target riscv32-unknown-elf \
197 // RUN:     --sysroot=%S/Inputs/basic_riscv32_tree/riscv32-unknown-elf \
198 // RUN:   | FileCheck --check-prefix=CHECK-RV32-DEFAULTCXX %s
199 // CHECK-RV32-DEFAULTCXX: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
200 // CHECK-RV32-DEFAULTCXX: "{{[^"]*}}ld{{(\.(lld|bfd|gold))?}}{{(\.exe)?}}" "{{.*}}.o" "-Bstatic"
201 // CHECK-RV32-DEFAULTCXX-SAME: "-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}basic_riscv32_tree{{[/\\]+}}riscv32-unknown-elf{{[/\\]+}}lib"
202 // CHECK-RV32-DEFAULTCXX-SAME: "-L[[RESOURCE_DIR]]{{[/\\]+}}lib{{[/\\]+}}baremetal"
203 // CHECK-RV32-DEFAULTCXX-SAME: "-lc++" "-lc++abi" "-lunwind"
204 // CHECK-RV32-DEFAULTCXX-SAME: "-lc" "-lm" "-lclang_rt.builtins-riscv32"
205 // CHECK-RV32-DEFAULTCXX-SAME: "-o" "{{.*}}.o"
206 
207 // RUN: %clangxx -no-canonical-prefixes %s -### -o %t.o 2>&1 \
208 // RUN:     -target riscv32-unknown-elf \
209 // RUN:     --sysroot=%S/Inputs/basic_riscv32_tree/riscv32-unknown-elf \
210 // RUN:     -stdlib=libc++ \
211 // RUN:   | FileCheck --check-prefix=CHECK-RV32-LIBCXX %s
212 // CHECK-RV32-LIBCXX: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
213 // CHECK-RV32-LIBCXX-NOT: "-internal-isystem" "{{[^"]+}}{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}{{[^v].*}}"
214 // CHECK-RV32-LIBCXX-SAME: "-internal-isystem" "{{[^"]+}}{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}v1"
215 // CHECK-RV32-LIBCXX: "{{[^"]*}}ld{{(\.(lld|bfd|gold))?}}{{(\.exe)?}}" "{{.*}}.o" "-Bstatic"
216 // CHECK-RV32-LIBCXX-SAME: "-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}basic_riscv32_tree{{[/\\]+}}riscv32-unknown-elf{{[/\\]+}}lib"
217 // CHECK-RV32-LIBCXX-SAME: "-L[[RESOURCE_DIR]]{{[/\\]+}}lib{{[/\\]+}}baremetal"
218 // CHECK-RV32-LIBCXX-SAME: "-lc++" "-lc++abi" "-lunwind"
219 // CHECK-RV32-LIBCXX-SAME: "-lc" "-lm" "-lclang_rt.builtins-riscv32"
220 // CHECK-RV32-LIBCXX-SAME: "-o" "{{.*}}.o"
221 
222 // RUN: %clangxx -no-canonical-prefixes %s -### -o %t.o 2>&1 \
223 // RUN:     -target riscv32-unknown-elf \
224 // RUN:     --sysroot=%S/Inputs/basic_riscv32_tree/riscv32-unknown-elf \
225 // RUN:     -stdlib=libstdc++ \
226 // RUN:   | FileCheck --check-prefix=CHECK-RV32-LIBSTDCXX %s
227 // CHECK-RV32-LIBSTDCXX: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
228 // CHECK-RV32-LIBSTDCXX-NOT: "-internal-isystem" "{{[^"]+}}{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}v1"
229 // CHECK-RV32-LIBSTDCXX-SAME: "-internal-isystem" "{{[^"]+}}{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}8.0.1"
230 // CHECK-RV32-LIBSTDCXX: "{{[^"]*}}ld{{(\.(lld|bfd|gold))?}}{{(\.exe)?}}" "{{.*}}.o" "-Bstatic"
231 // CHECK-RV32-LIBSTDCXX-SAME: "-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}basic_riscv32_tree{{[/\\]+}}riscv32-unknown-elf{{[/\\]+}}lib"
232 // CHECK-RV32-LIBSTDCXX-SAME: "-L[[RESOURCE_DIR]]{{[/\\]+}}lib{{[/\\]+}}baremetal"
233 // CHECK-RV32-LIBSTDCXX-SAME: "-lstdc++" "-lsupc++" "-lunwind"
234 // CHECK-RV32-LIBSTDCXX-SAME: "-lc" "-lm" "-lclang_rt.builtins-riscv32"
235 // CHECK-RV32-LIBSTDCXX-SAME: "-o" "{{.*}}.o"
236 
237 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
238 // RUN:     -target riscv64-unknown-elf \
239 // RUN:     -nostdlibinc -nobuiltininc \
240 // RUN:     --sysroot=%S/Inputs/basic_riscv64_tree/riscv64-unknown-elf \
241 // RUN:   | FileCheck --check-prefix=CHECK-RV64-LIBINC %s
242 
243 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
244 // RUN:     -target riscv64-unknown-elf \
245 // RUN:     -nostdinc \
246 // RUN:     --sysroot=%S/Inputs/basic_riscv64_tree/riscv64-unknown-elf \
247 // RUN:   | FileCheck --check-prefix=CHECK-RV64-LIBINC %s
248 // CHECK-RV64-LIBINC-NOT: "-internal-isystem"
249 
250 // RUN: %clangxx -no-canonical-prefixes %s -### -o %t.o 2>&1 \
251 // RUN:     -target riscv64-unknown-elf \
252 // RUN:     --sysroot=%S/Inputs/basic_riscv64_tree/riscv64-unknown-elf \
253 // RUN:     -nodefaultlibs \
254 // RUN:   | FileCheck --check-prefix=CHECK-RV64-NDL %s
255 // CHECK-RV64-NDL: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
256 // CHECK-RV64-NDL: "{{[^"]*}}ld{{(\.(lld|bfd|gold))?}}{{(\.exe)?}}" "{{.*}}.o" "-Bstatic"
257 // CHECK-RV64-NDL-SAME: "-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}basic_riscv64_tree{{[/\\]+}}riscv64-unknown-elf{{[/\\]+}}lib"
258 // CHECK-RV64-NDL-SAME: "-L[[RESOURCE_DIR]]{{[/\\]+}}lib{{[/\\]+}}baremetal"
259 // CHECK-RV64-NDL-SAME: "-o" "{{.*}}.o"
260 
261 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
262 // RUN:     -target riscv64-unknown-elf \
263 // RUN:     -march=rv64imafdc -mabi=lp64d \
264 // RUN:     --sysroot=%S/Inputs/basic_riscv64_tree/riscv64-unknown-elf \
265 // RUN:   | FileCheck --check-prefix=CHECK-RV64FD %s
266 
267 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
268 // RUN:     -target riscv64-unknown-elf \
269 // RUN:     -march=rv64gc -mabi=lp64d \
270 // RUN:     --sysroot=%S/Inputs/basic_riscv64_tree/riscv64-unknown-elf \
271 // RUN:   | FileCheck --check-prefix=CHECK-RV64FD %s
272 
273 // CHECK-RV64FD: "[[PREFIX_DIR:.*]]{{[/\\]+}}{{[^/^\\]+}}{{[/\\]+}}clang{{.*}}" "-cc1" "-triple" "riscv64-unknown-unknown-elf"
274 // CHECK-RV64FD-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
275 // CHECK-RV64FD-SAME: "-isysroot" "[[SYSROOT:[^"]*]]"
276 // CHECK-RV64FD-SAME: "-internal-isystem" "[[SYSROOT]]{{[/\\]+}}rv64imafdc{{[/\\]+}}lp64d{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}v1"
277 // CHECk-RV64FD-SAME: "-internal-isystem" "[[SYSROOT]]{{[/\\]+}}rv64imafdc{{[/\\]+}}lp64d{{[/\\]+}}include"
278 // CHECK-RV64FD-SAME: "-x" "c++" "{{.*}}baremetal.cpp"
279 // CHECK-RV64FD-NEXT: "{{[^"]*}}ld{{(\.(lld|bfd|gold))?}}{{(\.exe)?}}" "{{.*}}.o" "-Bstatic"
280 // CHECK-RV64FD-SAME: "-L[[SYSROOT:[^"]+]]{{[/\\]+}}rv64imafdc{{[/\\]+}}lp64d{{[/\\]+}}lib"
281 // CHECK-RV64FD-SAME: "-L[[RESOURCE_DIR:[^"]+]]{{[/\\]+}}lib{{[/\\]+}}baremetal{{[/\\]+}}rv64imafdc{{[/\\]+}}lp64d"
282 
283 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
284 // RUN:     -target riscv32-unknown-elf \
285 // RUN:     -march=rv32i -mabi=ilp32 \
286 // RUN:     --sysroot=%S/Inputs/basic_riscv32_tree/riscv32-unknown-elf \
287 // RUN:   | FileCheck --check-prefix=CHECK-RV32I %s
288 
289 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
290 // RUN:     -target riscv32-unknown-elf \
291 // RUN:     -march=rv32ic -mabi=ilp32 \
292 // RUN:     --sysroot=%S/Inputs/basic_riscv32_tree/riscv32-unknown-elf \
293 // RUN:   | FileCheck --check-prefix=CHECK-RV32I %s
294 
295 // CHECK-RV32I: "[[PREFIX_DIR:.*]]{{[/\\]+}}{{[^/^\\]+}}{{[/\\]+}}clang{{.*}}" "-cc1" "-triple" "riscv32-unknown-unknown-elf"
296 // CHECK-RV32I-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
297 // CHECK-RV32I-SAME: "-isysroot" "[[SYSROOT:[^"]*]]"
298 // CHECK-RV32I-SAME: "-internal-isystem" "[[SYSROOT]]{{[/\\]+}}rv32i{{[/\\]+}}ilp32{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}v1"
299 // CHECK-RV32I-SAME: "-internal-isystem" "[[SYSROOT]]{{[/\\]+}}rv32i{{[/\\]+}}ilp32{{[/\\]+}}include"
300 // CHECK-RV32I-SAME: "-x" "c++" "{{.*}}baremetal.cpp"
301 // CHECK-RV32I-NEXT: "{{[^"]*}}ld{{(\.(lld|bfd|gold))?}}{{(\.exe)?}}" "{{.*}}.o" "-Bstatic"
302 // CHECK-RV32I-SAME: "-L[[SYSROOT:[^"]+]]{{[/\\]+}}rv32i{{[/\\]+}}ilp32{{[/\\]+}}lib"
303 // CHECK-RV32I-SAME: "-L[[RESOURCE_DIR:[^"]+]]{{[/\\]+}}lib{{[/\\]+}}baremetal{{[/\\]+}}rv32i{{[/\\]+}}ilp32"
304 
305 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
306 // RUN:     -target riscv32-unknown-elf \
307 // RUN:     -march=rv32im -mabi=ilp32 \
308 // RUN:     --sysroot=%S/Inputs/basic_riscv32_tree/riscv32-unknown-elf \
309 // RUN:   | FileCheck --check-prefix=CHECK-RV32IM %s
310 
311 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
312 // RUN:     -target riscv32-unknown-elf \
313 // RUN:     -march=rv32imc -mabi=ilp32 \
314 // RUN:     --sysroot=%S/Inputs/basic_riscv32_tree/riscv32-unknown-elf \
315 // RUN:   | FileCheck --check-prefix=CHECK-RV32IM %s
316 
317 // CHECK-RV32IM: "[[PREFIX_DIR:.*]]{{[/\\]+}}{{[^/^\\]+}}{{[/\\]+}}clang{{.*}}" "-cc1" "-triple" "riscv32-unknown-unknown-elf"
318 // CHECK-RV32IM-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
319 // CHECK-RV32IM-SAME: "-isysroot" "[[SYSROOT:[^"]*]]"
320 // CHECK-RV32IM-SAME: "-internal-isystem" "[[SYSROOT]]{{[/\\]+}}rv32im{{[/\\]+}}ilp32{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}v1"
321 // CHECK-RV32IM-SAME: "-internal-isystem" "[[SYSROOT]]{{[/\\]+}}rv32im{{[/\\]+}}ilp32{{[/\\]+}}include"
322 // CHECK-RV32IM-SAME: "-x" "c++" "{{.*}}baremetal.cpp"
323 // CHECK-RV32IM-NEXT: "{{[^"]*}}ld{{(\.(lld|bfd|gold))?}}{{(\.exe)?}}" "{{.*}}.o" "-Bstatic"
324 // CHECK-RV32IM-SAME: "-L[[SYSROOT:[^"]+]]{{[/\\]+}}rv32im{{[/\\]+}}ilp32{{[/\\]+}}lib"
325 // CHECK-RV32IM-SAME: "-L[[RESOURCE_DIR:[^"]+]]{{[/\\]+}}lib{{[/\\]+}}baremetal{{[/\\]+}}rv32im{{[/\\]+}}ilp32"
326 
327 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
328 // RUN:     -target riscv32-unknown-elf \
329 // RUN:     -march=rv32iac -mabi=ilp32 \
330 // RUN:     --sysroot=%S/Inputs/basic_riscv32_tree/riscv32-unknown-elf \
331 // RUN:   | FileCheck --check-prefix=CHECK-RV32IAC %s
332 
333 // CHECK-RV32IAC: "[[PREFIX_DIR:.*]]{{[/\\]+}}{{[^/^\\]+}}{{[/\\]+}}clang{{.*}}" "-cc1" "-triple" "riscv32-unknown-unknown-elf"
334 // CHECK-RV32IAC-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
335 // CHECK-RV32IAC-SAME: "-isysroot" "[[SYSROOT:[^"]*]]"
336 // CHECK-RV32IAC-SAME: "-internal-isystem" "[[SYSROOT]]{{[/\\]+}}rv32iac{{[/\\]+}}ilp32{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}v1"
337 // CHECK-RV32IAC-SAME: "-internal-isystem" "[[SYSROOT]]{{[/\\]+}}rv32iac{{[/\\]+}}ilp32{{[/\\]+}}include"
338 // CHECK-RV32IAC-SAME: "-x" "c++" "{{.*}}baremetal.cpp"
339 // CHECK-RV32IAC-NEXT: "{{[^"]*}}ld{{(\.(lld|bfd|gold))?}}{{(\.exe)?}}" "{{.*}}.o" "-Bstatic"
340 // CHECK-RV32IAC-SAME: "-L[[SYSROOT:[^"]+]]{{[/\\]+}}rv32iac{{[/\\]+}}ilp32{{[/\\]+}}lib"
341 // CHECK-RV32IAC-SAME: "-L[[RESOURCE_DIR:[^"]+]]{{[/\\]+}}lib{{[/\\]+}}baremetal{{[/\\]+}}rv32iac{{[/\\]+}}ilp32"
342 
343 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
344 // RUN:     -target riscv32-unknown-elf \
345 // RUN:     -march=rv32imafc -mabi=ilp32f \
346 // RUN:     --sysroot=%S/Inputs/basic_riscv32_tree/riscv32-unknown-elf \
347 // RUN:   | FileCheck --check-prefix=CHECK-RV32IMAFC %s
348 
349 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
350 // RUN:     -target riscv32-unknown-elf \
351 // RUN:     -march=rv32imafdc -mabi=ilp32f \
352 // RUN:     --sysroot=%S/Inputs/basic_riscv32_tree/riscv32-unknown-elf \
353 // RUN:   | FileCheck --check-prefix=CHECK-RV32IMAFC %s
354 
355 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
356 // RUN:     -target riscv32-unknown-elf \
357 // RUN:     -march=rv32gc -mabi=ilp32f \
358 // RUN:     --sysroot=%S/Inputs/basic_riscv32_tree/riscv32-unknown-elf \
359 // RUN:   | FileCheck --check-prefix=CHECK-RV32IMAFC %s
360 
361 // CHECK-RV32IMAFC: "[[PREFIX_DIR:.*]]{{[/\\]+}}{{[^/^\\]+}}{{[/\\]+}}clang{{.*}}" "-cc1" "-triple" "riscv32-unknown-unknown-elf"
362 // CHECK-RV32IMAFC-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
363 // CHECK-RV32IMAFC-SAME: "-isysroot" "[[SYSROOT:[^"]*]]"
364 // CHECK-RV32IMAFC-SAME: "-internal-isystem" "[[SYSROOT]]{{[/\\]+}}rv32imafc{{[/\\]+}}ilp32f{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}v1"
365 // CHECK-RV32IMAFC-SAME: "-internal-isystem" "[[SYSROOT]]{{[/\\]+}}rv32imafc{{[/\\]+}}ilp32f{{[/\\]+}}include"
366 // CHECK-RV32IMAFC-SAME: "-x" "c++" "{{.*}}baremetal.cpp"
367 // CHECK-RV32IMAFC-NEXT: "{{[^"]*}}ld{{(\.(lld|bfd|gold))?}}{{(\.exe)?}}" "{{.*}}.o" "-Bstatic"
368 // CHECK-RV32IMAFC-SAME: "-L[[SYSROOT:[^"]+]]{{[/\\]+}}rv32imafc{{[/\\]+}}ilp32f{{[/\\]+}}lib"
369 // CHECK-RV32IMAFC-SAME: "-L[[RESOURCE_DIR:[^"]+]]{{[/\\]+}}lib{{[/\\]+}}baremetal{{[/\\]+}}rv32imafc{{[/\\]+}}ilp32f"
370