[llvm-branch-commits] [clang] [Multilib] Add -fmultilib-flag command-line option (PR #110658)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Thu Oct 24 02:17:59 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang-driver
Author: Victor Campos (vhscampos)
<details>
<summary>Changes</summary>
This option is passed through to the multilib system. It is then used in conjunction with other options to select the proper library variant.
Details about this change can be found in this thread: https://discourse.llvm.org/t/rfc-multilib-custom-flags/81058
---
Full diff: https://github.com/llvm/llvm-project/pull/110658.diff
3 Files Affected:
- (modified) clang/include/clang/Driver/Options.td (+2)
- (modified) clang/lib/Driver/ToolChain.cpp (+14)
- (modified) clang/test/Driver/print-multi-selection-flags.c (+7)
``````````diff
diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td
index 0cb7c0c0ae04f7..1fff1fa3edd052 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -5684,6 +5684,8 @@ def print_multi_directory : Flag<["-", "--"], "print-multi-directory">;
def print_multi_lib : Flag<["-", "--"], "print-multi-lib">;
def print_multi_flags : Flag<["-", "--"], "print-multi-flags-experimental">,
HelpText<"Print the flags used for selecting multilibs (experimental)">;
+def fmultilib_flag : Joined<["-", "--"], "fmultilib-flag=">,
+ Visibility<[ClangOption]>;
def print_multi_os_directory : Flag<["-", "--"], "print-multi-os-directory">,
Flags<[Unsupported]>;
def print_target_triple : Flag<["-", "--"], "print-target-triple">,
diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp
index 4df31770950858..19f5f59897eda2 100644
--- a/clang/lib/Driver/ToolChain.cpp
+++ b/clang/lib/Driver/ToolChain.cpp
@@ -196,6 +196,16 @@ bool ToolChain::defaultToIEEELongDouble() const {
return PPC_LINUX_DEFAULT_IEEELONGDOUBLE && getTriple().isOSLinux();
}
+static void
+processARMAArch64MultilibCustomFlags(Multilib::flags_list &List,
+ const llvm::opt::ArgList &Args) {
+ for (const Arg *MultilibFlagArg :
+ Args.filtered(options::OPT_fmultilib_flag)) {
+ List.push_back(MultilibFlagArg->getAsString(Args));
+ MultilibFlagArg->claim();
+ }
+}
+
static void getAArch64MultilibFlags(const Driver &D,
const llvm::Triple &Triple,
const llvm::opt::ArgList &Args,
@@ -232,6 +242,8 @@ static void getAArch64MultilibFlags(const Driver &D,
if (ABIArg) {
Result.push_back(ABIArg->getAsString(Args));
}
+
+ processARMAArch64MultilibCustomFlags(Result, Args);
}
static void getARMMultilibFlags(const Driver &D,
@@ -285,6 +297,8 @@ static void getARMMultilibFlags(const Driver &D,
if (BranchProtectionArg) {
Result.push_back(BranchProtectionArg->getAsString(Args));
}
+
+ processARMAArch64MultilibCustomFlags(Result, Args);
}
static void getRISCVMultilibFlags(const Driver &D, const llvm::Triple &Triple,
diff --git a/clang/test/Driver/print-multi-selection-flags.c b/clang/test/Driver/print-multi-selection-flags.c
index 4bb62665ad8981..6bf50cd0976a6b 100644
--- a/clang/test/Driver/print-multi-selection-flags.c
+++ b/clang/test/Driver/print-multi-selection-flags.c
@@ -82,3 +82,10 @@
// CHECK-RV32E-ORDER: --target=riscv32-unknown-none-elf
// CHECK-RV32E-ORDER: -mabi=ilp32e
// CHECK-RV32E-ORDER: -march=rv32e{{[0-9]+p[0-9]+}}_c{{[0-9]+p[0-9]+}}_zicsr{{[0-9]+p[0-9]+}}
+
+// RUN: %clang -print-multi-flags-experimental --target=armv8m.main-none-eabi -fmultilib-flag=foo -fmultilib-flag=bar | FileCheck --check-prefixes=CHECK-MULTILIB-CUSTOM-FLAG,CHECK-ARM-MULTILIB-CUSTOM-FLAG %s
+// RUN: %clang -print-multi-flags-experimental --target=aarch64-none-eabi -fmultilib-flag=foo -fmultilib-flag=bar | FileCheck --check-prefixes=CHECK-MULTILIB-CUSTOM-FLAG,CHECK-AARCH64-MULTILIB-CUSTOM-FLAG %s
+// CHECK-ARM-MULTILIB-CUSTOM-FLAG: --target=thumbv8m.main-unknown-none-eabi
+// CHECK-AARCH64-MULTILIB-CUSTOM-FLAG: --target=aarch64-unknown-none-eabi
+// CHECK-MULTILIB-CUSTOM-FLAG-DAG: -fmultilib-flag=foo
+// CHECK-MULTILIB-CUSTOM-FLAG-DAG: -fmultilib-flag=bar
``````````
</details>
https://github.com/llvm/llvm-project/pull/110658
More information about the llvm-branch-commits
mailing list