@@ -205,6 +205,30 @@ void Flang::AddAArch64TargetArgs(const ArgList &Args,
205205 }
206206}
207207
208+ static void addVSDefines (const ToolChain &TC, const ArgList &Args,
209+ ArgStringList &CmdArgs) {
210+
211+ unsigned ver = 0 ;
212+ const VersionTuple vt = TC.computeMSVCVersion (nullptr , Args);
213+ ver = vt.getMajor () * 10000000 + vt.getMinor ().value_or (0 ) * 100000 +
214+ vt.getSubminor ().value_or (0 );
215+ CmdArgs.push_back (Args.MakeArgString (" -D_MSC_VER=" + Twine (ver / 100000 )));
216+ CmdArgs.push_back (Args.MakeArgString (" -D_MSC_FULL_VER=" + Twine (ver)));
217+ CmdArgs.push_back (Args.MakeArgString (" -D_WIN32" ));
218+
219+ llvm::Triple triple = TC.getTriple ();
220+ if (triple.isAArch64 ()) {
221+ CmdArgs.push_back (" -D_M_ARM64=1" );
222+ } else if (triple.isX86 () && triple.isArch32Bit ()) {
223+ CmdArgs.push_back (" -D_M_IX86=600" );
224+ } else if (triple.isX86 () && triple.isArch64Bit ()) {
225+ CmdArgs.push_back (" -D_M_X64=100" );
226+ } else {
227+ llvm_unreachable (
228+ " Flang on Windows only supports X86_32, X86_64 and AArch64" );
229+ }
230+ }
231+
208232static void processVSRuntimeLibrary (const ToolChain &TC, const ArgList &Args,
209233 ArgStringList &CmdArgs) {
210234 assert (TC.getTriple ().isKnownWindowsMSVCEnvironment () &&
@@ -334,6 +358,7 @@ void Flang::addTargetOptions(const ArgList &Args,
334358
335359 if (Triple.isKnownWindowsMSVCEnvironment ()) {
336360 processVSRuntimeLibrary (TC, Args, CmdArgs);
361+ addVSDefines (TC, Args, CmdArgs);
337362 }
338363
339364 // TODO: Add target specific flags, ABI, mtune option etc.
0 commit comments