Skip to content

Commit 7439072

Browse files
authored
[Driver][Fuchsia] Support multilib for C++ include dir (#95815)
We generate a separate `__config_site` for each multilib and thus need to add the additional include dir if it exists.
1 parent 996905d commit 7439072

File tree

24 files changed

+24
-7
lines changed

24 files changed

+24
-7
lines changed

clang/lib/Driver/ToolChains/Fuchsia.cpp

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -433,13 +433,23 @@ void Fuchsia::AddClangCXXStdlibIncludeArgs(const ArgList &DriverArgs,
433433
if (Version.empty())
434434
return;
435435

436-
// First add the per-target include path.
436+
// First add the per-target multilib include dir.
437+
if (!SelectedMultilibs.empty() && !SelectedMultilibs.back().isDefault()) {
438+
const Multilib &M = SelectedMultilibs.back();
439+
SmallString<128> TargetDir(Path);
440+
llvm::sys::path::append(TargetDir, Target, M.gccSuffix(), "c++", Version);
441+
if (getVFS().exists(TargetDir)) {
442+
addSystemInclude(DriverArgs, CC1Args, TargetDir);
443+
}
444+
}
445+
446+
// Second add the per-target include dir.
437447
SmallString<128> TargetDir(Path);
438448
llvm::sys::path::append(TargetDir, Target, "c++", Version);
439449
if (getVFS().exists(TargetDir))
440450
addSystemInclude(DriverArgs, CC1Args, TargetDir);
441451

442-
// Second add the generic one.
452+
// Third the generic one.
443453
SmallString<128> Dir(Path);
444454
llvm::sys::path::append(Dir, "c++", Version);
445455
addSystemInclude(DriverArgs, CC1Args, Dir);

clang/test/Driver/Inputs/basic_fuchsia_tree/include/aarch64-unknown-fuchsia/asan+noexcept/c++/v1/.keep

Whitespace-only changes.

clang/test/Driver/Inputs/basic_fuchsia_tree/include/aarch64-unknown-fuchsia/asan/c++/v1/.keep

Whitespace-only changes.

clang/test/Driver/Inputs/basic_fuchsia_tree/include/aarch64-unknown-fuchsia/compat/c++/v1/.keep

Whitespace-only changes.

clang/test/Driver/Inputs/basic_fuchsia_tree/include/aarch64-unknown-fuchsia/hwasan+noexcept/c++/v1/.keep

Whitespace-only changes.

clang/test/Driver/Inputs/basic_fuchsia_tree/include/aarch64-unknown-fuchsia/hwasan/c++/v1/.keep

Whitespace-only changes.

clang/test/Driver/Inputs/basic_fuchsia_tree/include/aarch64-unknown-fuchsia/noexcept/c++/v1/.keep

Whitespace-only changes.

clang/test/Driver/Inputs/basic_fuchsia_tree/include/riscv64-unknown-fuchsia/asan+noexcept/c++/v1/.keep

Whitespace-only changes.

clang/test/Driver/Inputs/basic_fuchsia_tree/include/riscv64-unknown-fuchsia/asan/c++/v1/.keep

Whitespace-only changes.

clang/test/Driver/Inputs/basic_fuchsia_tree/include/riscv64-unknown-fuchsia/compat/c++/v1/.keep

Whitespace-only changes.

clang/test/Driver/Inputs/basic_fuchsia_tree/include/riscv64-unknown-fuchsia/hwasan+noexcept/c++/v1/.keep

Whitespace-only changes.

clang/test/Driver/Inputs/basic_fuchsia_tree/include/riscv64-unknown-fuchsia/hwasan/c++/v1/.keep

Whitespace-only changes.

clang/test/Driver/Inputs/basic_fuchsia_tree/include/riscv64-unknown-fuchsia/noexcept/c++/v1/.keep

Whitespace-only changes.

clang/test/Driver/Inputs/basic_fuchsia_tree/include/x86_64-unknown-fuchsia/asan+noexcept/c++/v1/.keep

Whitespace-only changes.

clang/test/Driver/Inputs/basic_fuchsia_tree/include/x86_64-unknown-fuchsia/asan/c++/v1/.keep

Whitespace-only changes.

clang/test/Driver/Inputs/basic_fuchsia_tree/include/x86_64-unknown-fuchsia/compat/c++/v1/.keep

Whitespace-only changes.

clang/test/Driver/Inputs/basic_fuchsia_tree/include/x86_64-unknown-fuchsia/hwasan+noexcept/c++/v1/.keep

Whitespace-only changes.

clang/test/Driver/Inputs/basic_fuchsia_tree/include/x86_64-unknown-fuchsia/hwasan/c++/v1/.keep

Whitespace-only changes.

clang/test/Driver/Inputs/basic_fuchsia_tree/include/x86_64-unknown-fuchsia/noexcept/c++/v1/.keep

Whitespace-only changes.

clang/test/Driver/Inputs/basic_fuchsia_tree/lib/aarch64-unknown-fuchsia/ubsan+noexcept/libc++.so

Whitespace-only changes.

clang/test/Driver/Inputs/basic_fuchsia_tree/lib/aarch64-unknown-fuchsia/ubsan/libc++.so

Whitespace-only changes.

clang/test/Driver/Inputs/basic_fuchsia_tree/lib/x86_64-unknown-fuchsia/ubsan+noexcept/libc++.so

Whitespace-only changes.

clang/test/Driver/Inputs/basic_fuchsia_tree/lib/x86_64-unknown-fuchsia/ubsan/libc++.so

Whitespace-only changes.

clang/test/Driver/fuchsia.cpp

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -88,16 +88,16 @@
8888
// RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
8989
// RUN: -fuse-ld=ld 2>&1\
9090
// RUN: | FileCheck %s -check-prefixes=CHECK-MULTILIB-X86
91-
// RUN: %clangxx -### %s --target=x86_64-unknown-fuchsia -fsanitize=address \
91+
// RUN: %clangxx -### %s --target=x86_64-unknown-fuchsia -fno-exceptions \
9292
// RUN: -ccc-install-dir %S/Inputs/basic_fuchsia_tree/bin \
9393
// RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
9494
// RUN: -fuse-ld=ld 2>&1\
95-
// RUN: | FileCheck %s -check-prefixes=CHECK-MULTILIB-X86,CHECK-MULTILIB-ASAN-X86
96-
// RUN: %clangxx -### %s --target=x86_64-unknown-fuchsia -fno-exceptions \
95+
// RUN: | FileCheck %s -check-prefixes=CHECK-MULTILIB-X86,CHECK-MULTILIB-NOEXCEPT-X86
96+
// RUN: %clangxx -### %s --target=x86_64-unknown-fuchsia -fsanitize=address \
9797
// RUN: -ccc-install-dir %S/Inputs/basic_fuchsia_tree/bin \
9898
// RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
9999
// RUN: -fuse-ld=ld 2>&1\
100-
// RUN: | FileCheck %s -check-prefixes=CHECK-MULTILIB-X86,CHECK-MULTILIB-NOEXCEPT-X86
100+
// RUN: | FileCheck %s -check-prefixes=CHECK-MULTILIB-X86,CHECK-MULTILIB-ASAN-X86
101101
// RUN: %clangxx -### %s --target=x86_64-unknown-fuchsia -fsanitize=address -fno-exceptions \
102102
// RUN: -ccc-install-dir %S/Inputs/basic_fuchsia_tree/bin \
103103
// RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
@@ -131,8 +131,15 @@
131131
// RUN: -fuse-ld=ld 2>&1\
132132
// RUN: | FileCheck %s -check-prefixes=CHECK-MULTILIB-X86,CHECK-MULTILIB-COMPAT-X86
133133
// CHECK-MULTILIB-X86: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
134-
// CHECK-MULTILIB-ASAN-X86: "-L{{.*}}{{/|\\\\}}..{{/|\\\\}}lib{{/|\\\\}}x86_64-unknown-fuchsia{{/|\\\\}}asan"
134+
// CHECK-MULTILIB-NOEXCEPT-X86: "-internal-isystem" "{{.*[/\\]}}include{{/|\\\\}}x86_64-unknown-fuchsia{{/|\\\\}}noexcept{{/|\\\\}}c++{{/|\\\\}}v1"
135+
// CHECK-MULTILIB-ASAN-X86: "-internal-isystem" "{{.*[/\\]}}include{{/|\\\\}}x86_64-unknown-fuchsia{{/|\\\\}}asan{{/|\\\\}}c++{{/|\\\\}}v1"
136+
// CHECK-MULTILIB-ASAN-NOEXCEPT-X86: "-internal-isystem" "{{.*[/\\]}}include{{/|\\\\}}x86_64-unknown-fuchsia{{/|\\\\}}asan+noexcept{{/|\\\\}}c++{{/|\\\\}}v1"
137+
// CHECK-MULTILIB-HWASAN-X86: "-internal-isystem" "{{.*[/\\]}}include{{/|\\\\}}x86_64-unknown-fuchsia{{/|\\\\}}hwasan{{/|\\\\}}c++{{/|\\\\}}v1"
138+
// CHECK-MULTILIB-HWASAN-NOEXCEPT-X86: "-internal-isystem" "{{.*[/\\]}}include{{/|\\\\}}x86_64-unknown-fuchsia{{/|\\\\}}hwasan+noexcept{{/|\\\\}}c++{{/|\\\\}}v1"
139+
// CHECK-MULTILIB-COMPAT-X86: "-internal-isystem" "{{.*[/\\]}}include{{/|\\\\}}x86_64-unknown-fuchsia{{/|\\\\}}compat{{/|\\\\}}c++{{/|\\\\}}v1"
140+
// CHECK-MULTILIB-X86: "-internal-isystem" "{{.*[/\\]}}include{{/|\\\\}}x86_64-unknown-fuchsia{{/|\\\\}}c++{{/|\\\\}}v1"
135141
// CHECK-MULTILIB-NOEXCEPT-X86: "-L{{.*}}{{/|\\\\}}..{{/|\\\\}}lib{{/|\\\\}}x86_64-unknown-fuchsia{{/|\\\\}}noexcept"
142+
// CHECK-MULTILIB-ASAN-X86: "-L{{.*}}{{/|\\\\}}..{{/|\\\\}}lib{{/|\\\\}}x86_64-unknown-fuchsia{{/|\\\\}}asan"
136143
// CHECK-MULTILIB-ASAN-NOEXCEPT-X86: "-L{{.*}}{{/|\\\\}}..{{/|\\\\}}lib{{/|\\\\}}x86_64-unknown-fuchsia{{/|\\\\}}asan+noexcept"
137144
// CHECK-MULTILIB-HWASAN-X86: "-L{{.*}}{{/|\\\\}}..{{/|\\\\}}lib{{/|\\\\}}x86_64-unknown-fuchsia{{/|\\\\}}hwasan"
138145
// CHECK-MULTILIB-HWASAN-NOEXCEPT-X86: "-L{{.*}}{{/|\\\\}}..{{/|\\\\}}lib{{/|\\\\}}x86_64-unknown-fuchsia{{/|\\\\}}hwasan+noexcept"

0 commit comments

Comments
 (0)