From 5cb17728d19408725d4ced928ff3276dd4ffd1c9 Mon Sep 17 00:00:00 2001 From: Leonard Chan Date: Thu, 6 May 2021 15:54:28 -0700 Subject: [PATCH] [clang][Fuchsia] Introduce compat multilibs These are GCC-compatible multilibs that use the generic Itanium C++ ABI instead of the Fuchsia C++ ABI. Differential Revision: https://reviews.llvm.org/D102030 --- clang/lib/Driver/ToolChains/Fuchsia.cpp | 4 ++++ .../x86_64-unknown-fuchsia/compat/libc++.so | 0 clang/test/Driver/fuchsia.cpp | 18 ++++++++++++++++++ 3 files changed, 22 insertions(+) create mode 100644 clang/test/Driver/Inputs/basic_fuchsia_tree/lib/x86_64-unknown-fuchsia/compat/libc++.so diff --git a/clang/lib/Driver/ToolChains/Fuchsia.cpp b/clang/lib/Driver/ToolChains/Fuchsia.cpp index cf562335e18e..502afdc1e30c 100644 --- a/clang/lib/Driver/ToolChains/Fuchsia.cpp +++ b/clang/lib/Driver/ToolChains/Fuchsia.cpp @@ -242,6 +242,8 @@ Fuchsia::Fuchsia(const Driver &D, const llvm::Triple &Triple, .flag("+fsanitize=hwaddress") .flag("-fexceptions") .flag("+fno-exceptions")); + // Use Itanium C++ ABI for the compat multilib. + Multilibs.push_back(Multilib("compat", {}, {}, 12).flag("+fc++-abi=itanium")); Multilibs.FilterOut([&](const Multilib &M) { std::vector RD = FilePaths(M); @@ -263,6 +265,8 @@ Fuchsia::Fuchsia(const Driver &D, const llvm::Triple &Triple, options::OPT_fno_experimental_relative_cxx_abi_vtables, /*default=*/false), "fexperimental-relative-c++-abi-vtables", Flags); + addMultilibFlag(Args.getLastArgValue(options::OPT_fcxx_abi_EQ) == "itanium", + "fc++-abi=itanium", Flags); Multilibs.setFilePathsCallback(FilePaths); diff --git a/clang/test/Driver/Inputs/basic_fuchsia_tree/lib/x86_64-unknown-fuchsia/compat/libc++.so b/clang/test/Driver/Inputs/basic_fuchsia_tree/lib/x86_64-unknown-fuchsia/compat/libc++.so new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/clang/test/Driver/fuchsia.cpp b/clang/test/Driver/fuchsia.cpp index 86a0acebc084..bd4c7ebeb560 100644 --- a/clang/test/Driver/fuchsia.cpp +++ b/clang/test/Driver/fuchsia.cpp @@ -144,6 +144,23 @@ // RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \ // RUN: -fuse-ld=lld 2>&1\ // RUN: | FileCheck %s -check-prefixes=CHECK-MULTILIB-X86,CHECK-MULTILIB-RELATIVE-VTABLES-HWASAN-NOEXCEPT-X86 + +// Test compat multilibs. +// RUN: %clangxx %s -### --target=x86_64-unknown-fuchsia -fc++-abi=itanium \ +// RUN: -ccc-install-dir %S/Inputs/basic_fuchsia_tree/bin \ +// RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \ +// RUN: -fuse-ld=lld 2>&1\ +// RUN: | FileCheck %s -check-prefixes=CHECK-MULTILIB-X86,CHECK-MULTILIB-COMPAT-X86 +// RUN: %clangxx %s -### --target=x86_64-unknown-fuchsia -fc++-abi=itanium -fc++-abi=fuchsia \ +// RUN: -ccc-install-dir %S/Inputs/basic_fuchsia_tree/bin \ +// RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \ +// RUN: -fuse-ld=lld 2>&1\ +// RUN: | FileCheck %s -check-prefixes=CHECK-MULTILIB-X86 +// RUN: %clangxx %s -### --target=x86_64-unknown-fuchsia -fc++-abi=fuchsia -fc++-abi=itanium \ +// RUN: -ccc-install-dir %S/Inputs/basic_fuchsia_tree/bin \ +// RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \ +// RUN: -fuse-ld=lld 2>&1\ +// RUN: | FileCheck %s -check-prefixes=CHECK-MULTILIB-X86,CHECK-MULTILIB-COMPAT-X86 // CHECK-MULTILIB-X86: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]" // CHECK-MULTILIB-ASAN-X86: "-L{{.*}}{{/|\\\\}}..{{/|\\\\}}lib{{/|\\\\}}x86_64-unknown-fuchsia{{/|\\\\}}asan" // CHECK-MULTILIB-NOEXCEPT-X86: "-L{{.*}}{{/|\\\\}}..{{/|\\\\}}lib{{/|\\\\}}x86_64-unknown-fuchsia{{/|\\\\}}noexcept" @@ -156,4 +173,5 @@ // CHECK-MULTILIB-HWASAN-NOEXCEPT-X86: "-L{{.*}}{{/|\\\\}}..{{/|\\\\}}lib{{/|\\\\}}x86_64-unknown-fuchsia{{/|\\\\}}hwasan+noexcept" // CHECK-MULTILIB-RELATIVE-VTABLES-HWASAN-X86: "-L{{.*}}{{/|\\\\}}..{{/|\\\\}}lib{{/|\\\\}}x86_64-unknown-fuchsia{{/|\\\\}}relative-vtables+hwasan" // CHECK-MULTILIB-RELATIVE-VTABLES-HWASAN-NOEXCEPT-X86: "-L{{.*}}{{/|\\\\}}..{{/|\\\\}}lib{{/|\\\\}}x86_64-unknown-fuchsia{{/|\\\\}}relative-vtables+hwasan+noexcept" +// CHECK-MULTILIB-COMPAT-X86: "-L{{.*}}{{/|\\\\}}..{{/|\\\\}}lib{{/|\\\\}}x86_64-unknown-fuchsia{{/|\\\\}}compat" // CHECK-MULTILIB-X86: "-L{{.*}}{{/|\\\\}}..{{/|\\\\}}lib{{/|\\\\}}x86_64-unknown-fuchsia"