16a4fbf14SFangrui Song // UNSUPPORTED: system-windows
26a4fbf14SFangrui Song 
35b899c22SFangrui Song /// Test native GCC installation on Arch Linux i686.
45b899c22SFangrui Song // RUN: %clang -### %s --target=i686-linux-gnu --sysroot=%S/Inputs/archlinux_i686_tree \
55b899c22SFangrui Song // RUN:   -ccc-install-dir %S/Inputs/basic_linux_tree/usr/bin -resource-dir=%S/Inputs/resource_dir \
65b899c22SFangrui Song // RUN:   --stdlib=platform --rtlib=platform 2>&1 | FileCheck %s --check-prefix=ARCH_I686
75b899c22SFangrui Song // ARCH_I686:      "-resource-dir" "[[RESOURCE:[^"]+]]"
85b899c22SFangrui Song // ARCH_I686:      "-internal-isystem"
95b899c22SFangrui Song // ARCH_I686-SAME: {{^}} "[[SYSROOT:[^"]+]]/usr/lib/gcc/i686-pc-linux-gnu/11.1.0/../../../../include/c++/11.1.0"
105b899c22SFangrui Song // ARCH_I686-SAME: {{^}} "-internal-isystem" "[[SYSROOT:[^"]+]]/usr/lib/gcc/i686-pc-linux-gnu/11.1.0/../../../../include/c++/11.1.0/i686-pc-linux-gnu"
115b899c22SFangrui Song // ARCH_I686-SAME: {{^}} "-internal-isystem" "[[SYSROOT:[^"]+]]/usr/lib/gcc/i686-pc-linux-gnu/11.1.0/../../../../include/c++/11.1.0/backward"
125b899c22SFangrui Song // ARCH_I686-SAME: {{^}} "-internal-isystem" "[[RESOURCE]]/include"
135b899c22SFangrui Song // ARCH_I686-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/local/include"
145b899c22SFangrui Song /// This resolves to /usr/i686-linux-gnu/include. Because it does not exist,
155b899c22SFangrui Song /// having it does no harm albeit not ideal.
165b899c22SFangrui Song // ARCH_I686-SAME: {{^}} "-internal-isystem" "[[SYSROOT:[^"]+]]/usr/lib/gcc/i686-pc-linux-gnu/11.1.0/../../../../i686-pc-linux-gnu/include"
175b899c22SFangrui Song // ARCH_I686:      "-internal-externc-isystem"
185b899c22SFangrui Song // ARCH_I686-SAME: {{^}} "[[SYSROOT]]/include"
195b899c22SFangrui Song // ARCH_I686-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/usr/include"
205b899c22SFangrui Song // ARCH_I686:      "-L
215b899c22SFangrui Song // ARCH_I686-SAME: {{^}}[[SYSROOT]]/usr/lib/gcc/i686-pc-linux-gnu/11.1.0"
225b899c22SFangrui Song // ARCH_I686-SAME: {{^}} "-L[[SYSROOT]]/lib"
235b899c22SFangrui Song // ARCH_I686-SAME: {{^}} "-L[[SYSROOT]]/usr/lib"
245b899c22SFangrui Song 
256a4fbf14SFangrui Song /// Test native x86-64 in the tree.
266a4fbf14SFangrui Song // RUN: %clang -### %s --target=x86_64-linux-gnu --sysroot=%S/Inputs/debian_multiarch_tree \
2745340efbSPetr Hosek // RUN:   -ccc-install-dir %S/Inputs/basic_linux_tree/usr/bin -resource-dir=%S/Inputs/resource_dir \
2845340efbSPetr Hosek // RUN:   --stdlib=platform --rtlib=platform 2>&1 | FileCheck %s --check-prefix=DEBIAN_X86_64
292a28d1d3SFangrui Song // DEBIAN_X86_64:      "-resource-dir" "[[RESOURCE:[^"]+]]"
306a4fbf14SFangrui Song // DEBIAN_X86_64:      "-internal-isystem"
316a4fbf14SFangrui Song // DEBIAN_X86_64-SAME: {{^}} "[[SYSROOT:[^"]+]]/usr/lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10"
326a4fbf14SFangrui Song // DEBIAN_X86_64-SAME: {{^}} "-internal-isystem" "[[SYSROOT:[^"]+]]/usr/lib/gcc/x86_64-linux-gnu/10/../../../../include/x86_64-linux-gnu/c++/10"
336a4fbf14SFangrui Song // DEBIAN_X86_64-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/backward"
342a28d1d3SFangrui Song // DEBIAN_X86_64-SAME: {{^}} "-internal-isystem" "[[RESOURCE]]/include"
356a4fbf14SFangrui Song // DEBIAN_X86_64-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/local/include"
366a4fbf14SFangrui Song // DEBIAN_X86_64-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/x86_64-linux-gnu/10/../../../../x86_64-linux-gnu/include"
3745340efbSPetr Hosek /// We set explicit -ccc-install-dir ensure that Clang does not pick up extra
3845340efbSPetr Hosek /// library directories which may be present in the runtimes build.
396a4fbf14SFangrui Song // DEBIAN_X86_64:      "-L
406a4fbf14SFangrui Song // DEBIAN_X86_64-SAME: {{^}}[[SYSROOT]]/usr/lib/gcc/x86_64-linux-gnu/10"
416a4fbf14SFangrui Song /// Debian patches MULTILIB_OSDIRNAMES (../lib64 -> ../lib), so gcc uses 'lib' instead of 'lib64'.
426a4fbf14SFangrui Song /// This difference does not matter in practice.
436a4fbf14SFangrui Song // DEBIAN_X86_64-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/gcc/x86_64-linux-gnu/10/../../../../lib64"
446a4fbf14SFangrui Song // DEBIAN_X86_64-SAME: {{^}} "-L[[SYSROOT]]/lib/x86_64-linux-gnu"
456a4fbf14SFangrui Song // DEBIAN_X86_64-SAME: {{^}} "-L[[SYSROOT]]/lib/../lib64"
466a4fbf14SFangrui Song // DEBIAN_X86_64-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/x86_64-linux-gnu"
476a4fbf14SFangrui Song // DEBIAN_X86_64-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/../lib64"
486a4fbf14SFangrui Song /// /usr/x86_64-linux-gnu does not exist, so there is no /usr/lib/gcc/x86_64-linux-gnu/10/../../../../x86_64-linux-gnu/lib.
496a4fbf14SFangrui Song /// -ccc-install-dir is not within sysroot. No bin/../lib.
506a4fbf14SFangrui Song /// $sysroot/lib and $sysroot/usr/lib. Fallback when GCC installation is unavailable.
516a4fbf14SFangrui Song // DEBIAN_X86_64-SAME: {{^}} "-L[[SYSROOT]]/lib"
526a4fbf14SFangrui Song // DEBIAN_X86_64-SAME: {{^}} "-L[[SYSROOT]]/usr/lib"
536a4fbf14SFangrui Song 
546a4fbf14SFangrui Song /// Test -m32.
556a4fbf14SFangrui Song // RUN: %clang -### %s --target=x86_64-linux-gnu -m32 --sysroot=%S/Inputs/debian_multiarch_tree \
5645340efbSPetr Hosek // RUN:   -ccc-install-dir %S/Inputs/basic_linux_tree/usr/bin -resource-dir=%S/Inputs/resource_dir \
5745340efbSPetr Hosek // RUN:   --stdlib=platform --rtlib=platform 2>&1 | FileCheck %s --check-prefix=DEBIAN_X86_64_M32
582a28d1d3SFangrui Song // DEBIAN_X86_64_M32:      "-resource-dir" "[[RESOURCE:[^"]+]]"
596a4fbf14SFangrui Song // DEBIAN_X86_64_M32:      "-internal-isystem"
606a4fbf14SFangrui Song // DEBIAN_X86_64_M32-SAME: {{^}} "[[SYSROOT:[^"]+]]/usr/lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10"
616a4fbf14SFangrui Song // DEBIAN_X86_64_M32-SAME: {{^}} "-internal-isystem" "[[SYSROOT:[^"]+]]/usr/lib/gcc/x86_64-linux-gnu/10/../../../../include/x86_64-linux-gnu/c++/10/32"
626a4fbf14SFangrui Song // DEBIAN_X86_64_M32-SAME: {{^}} "-internal-isystem" "[[SYSROOT:[^"]+]]/usr/lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/backward"
632a28d1d3SFangrui Song // DEBIAN_X86_64_M32-SAME: {{^}} "-internal-isystem" "[[RESOURCE]]/include"
646a4fbf14SFangrui Song // DEBIAN_X86_64_M32-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/local/include"
656a4fbf14SFangrui Song // DEBIAN_X86_64_M32-SAME: {{^}} "-internal-isystem" "[[SYSROOT:[^"]+]]/usr/lib/gcc/x86_64-linux-gnu/10/../../../../x86_64-linux-gnu/include"
663e32e8c5SFangrui Song // DEBIAN_X86_64_M32:      "-internal-externc-isystem"
673e32e8c5SFangrui Song // DEBIAN_X86_64_M32-SAME: {{^}} "[[SYSROOT]]/usr/include/i386-linux-gnu"
686a4fbf14SFangrui Song // DEBIAN_X86_64_M32:      "-L
696a4fbf14SFangrui Song // DEBIAN_X86_64_M32-SAME: {{^}}[[SYSROOT]]/usr/lib/gcc/x86_64-linux-gnu/10/32"
706a4fbf14SFangrui Song // DEBIAN_X86_64_M32-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/gcc/x86_64-linux-gnu/10/../../../../lib32"
716a4fbf14SFangrui Song // DEBIAN_X86_64_M32-SAME: {{^}} "-L[[SYSROOT]]/lib/i386-linux-gnu"
726a4fbf14SFangrui Song // DEBIAN_X86_64_M32-SAME: {{^}} "-L[[SYSROOT]]/lib/../lib32"
736a4fbf14SFangrui Song // DEBIAN_X86_64_M32-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/i386-linux-gnu"
746a4fbf14SFangrui Song // DEBIAN_X86_64_M32-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/../lib32"
756a4fbf14SFangrui Song // DEBIAN_X86_64_M32-SAME: {{^}} "-L[[SYSROOT]]/lib"
766a4fbf14SFangrui Song // DEBIAN_X86_64_M32-SAME: {{^}} "-L[[SYSROOT]]/usr/lib"
776a4fbf14SFangrui Song 
78e92d2b80SFangrui Song /// Test native GCC installation on Debian i386.
79e92d2b80SFangrui Song // RUN: %clang -### %s --target=i686-linux-gnu --sysroot=%S/Inputs/debian_i386_tree \
8045340efbSPetr Hosek // RUN:   -ccc-install-dir %S/Inputs/basic_linux_tree/usr/bin -resource-dir=%S/Inputs/resource_dir \
8145340efbSPetr Hosek // RUN:   --stdlib=platform --rtlib=platform 2>&1 | FileCheck %s --check-prefix=DEBIAN_I686
82e92d2b80SFangrui Song // DEBIAN_I686:      "-resource-dir" "[[RESOURCE:[^"]+]]"
83e92d2b80SFangrui Song // DEBIAN_I686:      "-internal-isystem"
84e92d2b80SFangrui Song // DEBIAN_I686-SAME: {{^}} "[[SYSROOT:[^"]+]]/usr/lib/gcc/i686-linux-gnu/10/../../../../include/c++/10"
85e92d2b80SFangrui Song /// Debian specific - the path component after 'include' is i386-linux-gnu even
86e92d2b80SFangrui Song /// though the installation is i686-linux-gnu.
87e92d2b80SFangrui Song // DEBIAN_I686-SAME: {{^}} "-internal-isystem" "[[SYSROOT:[^"]+]]/usr/lib/gcc/i686-linux-gnu/10/../../../../include/i386-linux-gnu/c++/10"
88e92d2b80SFangrui Song // DEBIAN_I686-SAME: {{^}} "-internal-isystem" "[[SYSROOT:[^"]+]]/usr/lib/gcc/i686-linux-gnu/10/../../../../include/c++/10/backward"
89e92d2b80SFangrui Song // DEBIAN_I686-SAME: {{^}} "-internal-isystem" "[[RESOURCE]]/include"
90e92d2b80SFangrui Song // DEBIAN_I686-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/local/include"
91e92d2b80SFangrui Song /// This resolves to /usr/i686-linux-gnu/include. Because it does not exist,
92e92d2b80SFangrui Song /// having it does no harm albeit not ideal.
93e92d2b80SFangrui Song // DEBIAN_I686-SAME: {{^}} "-internal-isystem" "[[SYSROOT:[^"]+]]/usr/lib/gcc/i686-linux-gnu/10/../../../../i686-linux-gnu/include"
94e92d2b80SFangrui Song // DEBIAN_I686:      "-internal-externc-isystem"
95e92d2b80SFangrui Song // DEBIAN_I686-SAME: {{^}} "[[SYSROOT]]/usr/include/i386-linux-gnu"
96e92d2b80SFangrui Song // DEBIAN_I686:      "-L
97e92d2b80SFangrui Song // DEBIAN_I686-SAME: {{^}}[[SYSROOT]]/usr/lib/gcc/i686-linux-gnu/10"
98e92d2b80SFangrui Song // DEBIAN_I686-SAME: {{^}} "-L[[SYSROOT]]/lib/i386-linux-gnu"
99e92d2b80SFangrui Song // DEBIAN_I686-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/i386-linux-gnu"
100e92d2b80SFangrui Song // DEBIAN_I686-SAME: {{^}} "-L[[SYSROOT]]/lib"
101e92d2b80SFangrui Song // DEBIAN_I686-SAME: {{^}} "-L[[SYSROOT]]/usr/lib"
102e92d2b80SFangrui Song 
103e92d2b80SFangrui Song /// Test -m64 on Debian i386.
104e92d2b80SFangrui Song // RUN: %clang -### %s --target=i686-linux-gnu --sysroot=%S/Inputs/debian_i386_tree -m64 \
10545340efbSPetr Hosek // RUN:   -ccc-install-dir %S/Inputs/basic_linux_tree/usr/bin -resource-dir=%S/Inputs/resource_dir \
10645340efbSPetr Hosek // RUN:   --stdlib=platform --rtlib=platform 2>&1 | FileCheck %s --check-prefix=DEBIAN_I686_M64
107e92d2b80SFangrui Song // DEBIAN_I686_M64:      "-resource-dir" "[[RESOURCE:[^"]+]]"
108e92d2b80SFangrui Song // DEBIAN_I686_M64:      "-internal-isystem"
109e92d2b80SFangrui Song // DEBIAN_I686_M64-SAME: {{^}} "[[SYSROOT:[^"]+]]/usr/lib/gcc/i686-linux-gnu/10/../../../../include/c++/10"
110e92d2b80SFangrui Song /// Debian specific - the path component after 'include' is i386-linux-gnu even
111e92d2b80SFangrui Song /// though the installation is i686-linux-gnu.
112e92d2b80SFangrui Song // DEBIAN_I686_M64-SAME: {{^}} "-internal-isystem" "[[SYSROOT:[^"]+]]/usr/lib/gcc/i686-linux-gnu/10/../../../../include/i386-linux-gnu/c++/10/64"
113e92d2b80SFangrui Song // DEBIAN_I686_M64-SAME: {{^}} "-internal-isystem" "[[SYSROOT:[^"]+]]/usr/lib/gcc/i686-linux-gnu/10/../../../../include/c++/10/backward"
114e92d2b80SFangrui Song // DEBIAN_I686_M64-SAME: {{^}} "-internal-isystem" "[[RESOURCE]]/include"
115e92d2b80SFangrui Song // DEBIAN_I686_M64-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/local/include"
116e92d2b80SFangrui Song // DEBIAN_I686_M64-SAME: {{^}} "-internal-isystem" "[[SYSROOT:[^"]+]]/usr/lib/gcc/i686-linux-gnu/10/../../../../i686-linux-gnu/include"
117e92d2b80SFangrui Song // DEBIAN_I686_M64:      "-internal-externc-isystem"
118e92d2b80SFangrui Song // DEBIAN_I686_M64-SAME: {{^}} "[[SYSROOT]]/usr/include/x86_64-linux-gnu"
119e92d2b80SFangrui Song // DEBIAN_I686_M64:      "-L
120e92d2b80SFangrui Song // DEBIAN_I686_M64-SAME: {{^}}[[SYSROOT]]/usr/lib/gcc/i686-linux-gnu/10/64"
121e92d2b80SFangrui Song // DEBIAN_I686_M64-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/gcc/i686-linux-gnu/10/../../../../lib64"
122e92d2b80SFangrui Song // DEBIAN_I686_M64-SAME: {{^}} "-L[[SYSROOT]]/lib/x86_64-linux-gnu"
123e92d2b80SFangrui Song // DEBIAN_I686_M64-SAME: {{^}} "-L[[SYSROOT]]/lib/../lib64"
124e92d2b80SFangrui Song // DEBIAN_I686_M64-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/x86_64-linux-gnu"
125e92d2b80SFangrui Song // DEBIAN_I686_M64-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/../lib64"
126e92d2b80SFangrui Song // DEBIAN_I686_M64-SAME: {{^}} "-L[[SYSROOT]]/lib"
127e92d2b80SFangrui Song // DEBIAN_I686_M64-SAME: {{^}} "-L[[SYSROOT]]/usr/lib"
128e92d2b80SFangrui Song 
1296a4fbf14SFangrui Song /// Test a cross compiler.
1306a4fbf14SFangrui Song // RUN: %clang -### %s --target=aarch64-linux-gnu --sysroot=%S/Inputs/debian_multiarch_tree \
13145340efbSPetr Hosek // RUN:   -ccc-install-dir %S/Inputs/basic_linux_tree/usr/bin -resource-dir=%S/Inputs/resource_dir \
13245340efbSPetr Hosek // RUN:   --stdlib=platform --rtlib=platform 2>&1 | FileCheck %s --check-prefix=DEBIAN_AARCH64
1332a28d1d3SFangrui Song // DEBIAN_AARCH64:      "-resource-dir" "[[RESOURCE:[^"]+]]"
1346a4fbf14SFangrui Song // DEBIAN_AARCH64:      "-internal-isystem"
1356a4fbf14SFangrui Song // DEBIAN_AARCH64-SAME: {{^}} "[[SYSROOT:[^"]+]]/usr/lib/gcc-cross/aarch64-linux-gnu/10/../../../../aarch64-linux-gnu/include/c++/10"
1366a4fbf14SFangrui Song // DEBIAN_AARCH64-SAME: {{^}} "-internal-isystem" "[[SYSROOT:[^"]+]]/usr/lib/gcc-cross/aarch64-linux-gnu/10/../../../../aarch64-linux-gnu/include/c++/10/aarch64-linux-gnu"
1376a4fbf14SFangrui Song // DEBIAN_AARCH64-SAME: {{^}} "-internal-isystem" "[[SYSROOT:[^"]+]]/usr/lib/gcc-cross/aarch64-linux-gnu/10/../../../../aarch64-linux-gnu/include/c++/10/backward"
1382a28d1d3SFangrui Song // DEBIAN_AARCH64-SAME: {{^}} "-internal-isystem" "[[RESOURCE]]/include"
1396a4fbf14SFangrui Song // DEBIAN_AARCH64-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/local/include"
1406a4fbf14SFangrui Song // DEBIAN_AARCH64-SAME: {{^}} "-internal-isystem" "[[SYSROOT:[^"]+]]/usr/lib/gcc-cross/aarch64-linux-gnu/10/../../../../aarch64-linux-gnu/include"
1416a4fbf14SFangrui Song // DEBIAN_AARCH64:      "-L
1426a4fbf14SFangrui Song // DEBIAN_AARCH64-SAME: {{^}}[[SYSROOT]]/usr/lib/gcc-cross/aarch64-linux-gnu/10"
1436a4fbf14SFangrui Song /// Debian patches MULTILIB_OSDIRNAMES (../lib64 -> ../lib), so aarch64-linux-gnu-gcc uses 'lib' instead of 'lib64'.
1446a4fbf14SFangrui Song /// This difference does not matter in practice.
1456a4fbf14SFangrui Song // DEBIAN_AARCH64-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/gcc-cross/aarch64-linux-gnu/10/../../../../lib64"
1466a4fbf14SFangrui Song // DEBIAN_AARCH64-SAME: {{^}} "-L[[SYSROOT]]/lib/aarch64-linux-gnu"
1476a4fbf14SFangrui Song // DEBIAN_AARCH64-SAME: {{^}} "-L[[SYSROOT]]/lib/../lib64"
1486a4fbf14SFangrui Song // DEBIAN_AARCH64-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/aarch64-linux-gnu"
1496a4fbf14SFangrui Song // DEBIAN_AARCH64-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/../lib64"
1506a4fbf14SFangrui Song // DEBIAN_AARCH64-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/gcc-cross/aarch64-linux-gnu/10/../../../../aarch64-linux-gnu/lib"
1516a4fbf14SFangrui Song // DEBIAN_AARCH64-SAME: {{^}} "-L[[SYSROOT]]/lib"
1526a4fbf14SFangrui Song // DEBIAN_AARCH64-SAME: {{^}} "-L[[SYSROOT]]/usr/lib"
153cdd993faSFangrui Song 
154a2796f1eSFangrui Song /// Test native x86-64 with -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=on.
155a2796f1eSFangrui Song /// FIXME -internal-isystem .*bin/../include/x86_64-linux-gnu/c++/v1 and -L[[PREFIX]]/bin/../lib/x86_64-linux-gnu are missing.
156a2796f1eSFangrui Song // RUN: %clang -### %s --target=x86_64-linux-gnu --sysroot=%S/Inputs/debian_multiarch_tree \
157a2796f1eSFangrui Song // RUN:   -ccc-install-dir %S/Inputs/debian_per_target_tree/usr/lib/llvm-14/bin -resource-dir=%S/Inputs/debian_per_target_tree/usr/lib/llvm-14/lib/clang/14.0.0 \
158a2796f1eSFangrui Song // RUN:   --stdlib=libc++ --rtlib=compiler-rt 2>&1 | FileCheck %s --check-prefix=DEBIAN_X86_64_PER_TARGET
159a2796f1eSFangrui Song // DEBIAN_X86_64_PER_TARGET:      "-resource-dir" "[[RESOURCE:[^"]+]]"
160a2796f1eSFangrui Song // DEBIAN_X86_64_PER_TARGET:      "-internal-isystem"
161a2796f1eSFangrui Song // DEBIAN_X86_64_PER_TARGET-SAME: {{^}} "[[PREFIX:[^"]+llvm-14]]/bin/../include/c++/v1"
162a2796f1eSFangrui Song // DEBIAN_X86_64_PER_TARGET-SAME: {{^}} "-internal-isystem" "[[RESOURCE]]/include"
163a2796f1eSFangrui Song // DEBIAN_X86_64_PER_TARGET-SAME: {{^}} "-internal-isystem" "[[SYSROOT:[^"]+]]/usr/local/include"
164a2796f1eSFangrui Song // DEBIAN_X86_64_PER_TARGET-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/x86_64-linux-gnu/10/../../../../x86_64-linux-gnu/include"
165a2796f1eSFangrui Song 
166a2796f1eSFangrui Song // DEBIAN_X86_64_PER_TARGET:      "-L
167a2796f1eSFangrui Song // DEBIAN_X86_64_PER_TARGET-SAME: {{^}}[[SYSROOT]]/usr/lib/gcc/x86_64-linux-gnu/10"
168a2796f1eSFangrui Song /// Debian patches MULTILIB_OSDIRNAMES (../lib64 -> ../lib), so gcc uses 'lib' instead of 'lib64'.
169a2796f1eSFangrui Song /// This difference does not matter in practice.
170a2796f1eSFangrui Song // DEBIAN_X86_64_PER_TARGET-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/gcc/x86_64-linux-gnu/10/../../../../lib64"
171a2796f1eSFangrui Song // DEBIAN_X86_64_PER_TARGET-SAME: {{^}} "-L[[SYSROOT]]/lib/x86_64-linux-gnu"
172a2796f1eSFangrui Song // DEBIAN_X86_64_PER_TARGET-SAME: {{^}} "-L[[SYSROOT]]/lib/../lib64"
173a2796f1eSFangrui Song // DEBIAN_X86_64_PER_TARGET-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/x86_64-linux-gnu"
174a2796f1eSFangrui Song // DEBIAN_X86_64_PER_TARGET-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/../lib64"
175a2796f1eSFangrui Song /// /usr/x86_64-linux-gnu does not exist, so there is no /usr/lib/gcc/x86_64-linux-gnu/10/../../../../x86_64-linux-gnu/lib.
176a2796f1eSFangrui Song /// -ccc-install-dir is not within sysroot. No bin/../lib.
177a2796f1eSFangrui Song /// $sysroot/lib and $sysroot/usr/lib. Fallback when GCC installation is unavailable.
178a2796f1eSFangrui Song // DEBIAN_X86_64_PER_TARGET-SAME: {{^}} "-L[[SYSROOT]]/lib"
179a2796f1eSFangrui Song // DEBIAN_X86_64_PER_TARGET-SAME: {{^}} "-L[[SYSROOT]]/usr/lib"
180a2796f1eSFangrui Song 
181a2796f1eSFangrui Song /// Test -m32.
182a2796f1eSFangrui Song /// FIXME -internal-isystem .*bin/../include/i386-linux-gnu/c++/v1 and -L[[PREFIX]]/bin/../lib/i386-linux-gnu are missing.
183a2796f1eSFangrui Song // RUN: %clang -### %s --target=x86_64-linux-gnu -m32 --sysroot=%S/Inputs/debian_multiarch_tree \
184a2796f1eSFangrui Song // RUN:   -ccc-install-dir %S/Inputs/debian_per_target_tree/usr/lib/llvm-14/bin -resource-dir=%S/Inputs/debian_per_target_tree/usr/lib/llvm-14/lib/clang/14.0.0 \
185a2796f1eSFangrui Song // RUN:   --stdlib=libc++ --rtlib=compiler-rt 2>&1 | FileCheck %s --check-prefix=DEBIAN_X86_64_M32_PER_TARGET
186a2796f1eSFangrui Song // DEBIAN_X86_64_M32_PER_TARGET:      "-resource-dir" "[[RESOURCE:[^"]+]]"
187a2796f1eSFangrui Song // DEBIAN_X86_64_M32_PER_TARGET:      "-internal-isystem"
188a2796f1eSFangrui Song // DEBIAN_X86_64_M32_PER_TARGET-SAME: {{^}} "[[PREFIX:[^"]+llvm-14]]/bin/../include/c++/v1"
189a2796f1eSFangrui Song // DEBIAN_X86_64_M32_PER_TARGET-SAME: {{^}} "-internal-isystem" "[[RESOURCE]]/include"
190a2796f1eSFangrui Song // DEBIAN_X86_64_M32_PER_TARGET-SAME: {{^}} "-internal-isystem" "[[SYSROOT:[^"]+]]/usr/local/include"
191a2796f1eSFangrui Song // DEBIAN_X86_64_M32_PER_TARGET-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/x86_64-linux-gnu/10/../../../../x86_64-linux-gnu/include"
192a2796f1eSFangrui Song 
193a2796f1eSFangrui Song // DEBIAN_X86_64_M32_PER_TARGET:      "-L
194a2796f1eSFangrui Song // DEBIAN_X86_64_M32_PER_TARGET-SAME: {{^}}[[SYSROOT]]/usr/lib/gcc/x86_64-linux-gnu/10/32"
195a2796f1eSFangrui Song // DEBIAN_X86_64_M32_PER_TARGET-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/gcc/x86_64-linux-gnu/10/../../../../lib32"
196a2796f1eSFangrui Song // DEBIAN_X86_64_M32_PER_TARGET-SAME: {{^}} "-L[[SYSROOT]]/lib/i386-linux-gnu"
197a2796f1eSFangrui Song // DEBIAN_X86_64_M32_PER_TARGET-SAME: {{^}} "-L[[SYSROOT]]/lib/../lib32"
198a2796f1eSFangrui Song // DEBIAN_X86_64_M32_PER_TARGET-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/i386-linux-gnu"
199a2796f1eSFangrui Song // DEBIAN_X86_64_M32_PER_TARGET-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/../lib32"
200a2796f1eSFangrui Song // DEBIAN_X86_64_M32_PER_TARGET-SAME: {{^}} "-L[[SYSROOT]]/lib"
201a2796f1eSFangrui Song // DEBIAN_X86_64_M32_PER_TARGET-SAME: {{^}} "-L[[SYSROOT]]/usr/lib"
202a2796f1eSFangrui Song 
203cdd993faSFangrui Song /// LDSO_ARCH is i386 for all x86-32 variants.
204cdd993faSFangrui Song // RUN: %clang -### %s --target=i686-linux-musl --sysroot= \
205cdd993faSFangrui Song // RUN:   --stdlib=platform --rtlib=platform 2>&1 | FileCheck %s --check-prefix=MUSL_I686
206cdd993faSFangrui Song // MUSL_I686: "-dynamic-linker" "/lib/ld-musl-i386.so.1"
207ed956554SFangrui Song 
208ed956554SFangrui Song // RUN: %clang -### %s --target=x86_64-linux-muslx32 --sysroot= \
209ed956554SFangrui Song // RUN:   --stdlib=platform --rtlib=platform 2>&1 | FileCheck %s --check-prefix=MUSL_X32
21075521bd9SHarald van Dijk // RUN: %clang -### %s --target=i686-linux-musl -mx32 --sysroot= \
21175521bd9SHarald van Dijk // RUN:   --stdlib=platform --rtlib=platform 2>&1 | FileCheck %s --check-prefix=MUSL_X32
212ed956554SFangrui Song // MUSL_X32: "-dynamic-linker" "/lib/ld-musl-x32.so.1"
21364da6eb0SFangrui Song 
214*57e43ebcSFangrui Song /// -r suppresses -dynamic-linker, default -l, and crt*.o like -nostdlib.
21564da6eb0SFangrui Song // RUN: %clang -### %s --target=x86_64-linux-gnu --sysroot=%S/Inputs/debian_multiarch_tree \
21664da6eb0SFangrui Song // RUN:   -ccc-install-dir %S/Inputs/basic_linux_tree/usr/bin -resource-dir=%S/Inputs/resource_dir \
21764da6eb0SFangrui Song // RUN:   --stdlib=platform --rtlib=platform -r 2>&1 | FileCheck %s --check-prefix=RELOCATABLE
218*57e43ebcSFangrui Song // RELOCATABLE-NOT:  "-dynamic-linker"
21964da6eb0SFangrui Song // RELOCATABLE:      "-internal-isystem"
22064da6eb0SFangrui Song // RELOCATABLE-SAME: {{^}} "[[SYSROOT:[^"]+]]/usr/lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10"
22164da6eb0SFangrui Song // RELOCATABLE:      "-L
22264da6eb0SFangrui Song // RELOCATABLE-SAME: {{^}}[[SYSROOT]]/usr/lib/gcc/x86_64-linux-gnu/10"
22364da6eb0SFangrui Song // RELOCATABLE-NOT:  "-l
22467aea3b6SNico Weber // RELOCATABLE-NOT:  crt{{[^./]+}}.o
225