Skip to content

Commit

Permalink
[flang] Add MSC_VER and target arch defines when targeting the MSVC A…
Browse files Browse the repository at this point in the history
…BI (#73250)

Fixes #67675
  • Loading branch information
DavidTruby committed Dec 4, 2023
1 parent 4596dd1 commit dff5bb9
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 0 deletions.
25 changes: 25 additions & 0 deletions clang/lib/Driver/ToolChains/Flang.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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() &&
Expand Down Expand Up @@ -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.
Expand Down
10 changes: 10 additions & 0 deletions flang/test/Driver/msvc-defines.f90
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit dff5bb9

Please sign in to comment.