[clang] dff5bb9 - [flang] Add MSC_VER and target arch defines when targeting the MSVC ABI (#73250)
via cfe-commits
cfe-commits at lists.llvm.org
Sun Dec 3 18:20:08 PST 2023
Author: David Truby
Date: 2023-12-04T02:20:03Z
New Revision: dff5bb92d47ef226319ba1b70a334785d7896de8
URL: https://github.com/llvm/llvm-project/commit/dff5bb92d47ef226319ba1b70a334785d7896de8
DIFF: https://github.com/llvm/llvm-project/commit/dff5bb92d47ef226319ba1b70a334785d7896de8.diff
LOG: [flang] Add MSC_VER and target arch defines when targeting the MSVC ABI (#73250)
Fixes #67675
Added:
flang/test/Driver/msvc-defines.f90
Modified:
clang/lib/Driver/ToolChains/Flang.cpp
Removed:
################################################################################
diff --git a/clang/lib/Driver/ToolChains/Flang.cpp b/clang/lib/Driver/ToolChains/Flang.cpp
index 98b337e60e4ff..c4cd26adb5a09 100644
--- a/clang/lib/Driver/ToolChains/Flang.cpp
+++ b/clang/lib/Driver/ToolChains/Flang.cpp
@@ -205,6 +205,30 @@ void Flang::AddAArch64TargetArgs(const ArgList &Args,
}
}
+static void addVSDefines(const ToolChain &TC, const ArgList &Args,
+ ArgStringList &CmdArgs) {
+
+ unsigned ver = 0;
+ const VersionTuple vt = TC.computeMSVCVersion(nullptr, Args);
+ ver = vt.getMajor() * 10000000 + vt.getMinor().value_or(0) * 100000 +
+ vt.getSubminor().value_or(0);
+ CmdArgs.push_back(Args.MakeArgString("-D_MSC_VER=" + Twine(ver / 100000)));
+ CmdArgs.push_back(Args.MakeArgString("-D_MSC_FULL_VER=" + Twine(ver)));
+ CmdArgs.push_back(Args.MakeArgString("-D_WIN32"));
+
+ llvm::Triple triple = TC.getTriple();
+ if (triple.isAArch64()) {
+ CmdArgs.push_back("-D_M_ARM64=1");
+ } else if (triple.isX86() && triple.isArch32Bit()) {
+ CmdArgs.push_back("-D_M_IX86=600");
+ } else if (triple.isX86() && triple.isArch64Bit()) {
+ CmdArgs.push_back("-D_M_X64=100");
+ } else {
+ llvm_unreachable(
+ "Flang on Windows only supports X86_32, X86_64 and AArch64");
+ }
+}
+
static void processVSRuntimeLibrary(const ToolChain &TC, const ArgList &Args,
ArgStringList &CmdArgs) {
assert(TC.getTriple().isKnownWindowsMSVCEnvironment() &&
@@ -334,6 +358,7 @@ void Flang::addTargetOptions(const ArgList &Args,
if (Triple.isKnownWindowsMSVCEnvironment()) {
processVSRuntimeLibrary(TC, Args, CmdArgs);
+ addVSDefines(TC, Args, CmdArgs);
}
// TODO: Add target specific flags, ABI, mtune option etc.
diff --git a/flang/test/Driver/msvc-defines.f90 b/flang/test/Driver/msvc-defines.f90
new file mode 100644
index 0000000000000..a05df666ac09a
--- /dev/null
+++ b/flang/test/Driver/msvc-defines.f90
@@ -0,0 +1,10 @@
+! RUN: %flang -### --target=aarch64-windows-msvc %S/Inputs/hello.f90 -v 2>&1 | FileCheck %s --check-prefixes=MSVC,MSVC-AARCH64
+! RUN: %flang -### --target=i386-windows-msvc %S/Inputs/hello.f90 -v 2>&1 | FileCheck %s --check-prefixes=MSVC,MSVC-X86_32
+! RUN: %flang -### --target=x86_64-windows-msvc %S/Inputs/hello.f90 -v 2>&1 | FileCheck %s --check-prefixes=MSVC,MSVC-X86_64
+
+! MSVC: -fc1
+! MSVC-SAME: -D_MSC_VER={{[0-9]*}}
+! MSVC-SAME: -D_MSC_FULL_VER={{[0-9]*}}
+! MSVC-AARCH64-SAME: -D_M_ARM64=1
+! MSVC-X86_32-SAME: -D_M_IX86=600
+! MSVC-X86_64-SAME: -D_M_X64=100
More information about the cfe-commits
mailing list