@@ -204,6 +204,59 @@ void Flang::AddAArch64TargetArgs(const ArgList &Args,
204
204
}
205
205
}
206
206
207
+ static void processVSRuntimeLibrary (const ToolChain &TC, const ArgList &Args,
208
+ ArgStringList &CmdArgs) {
209
+ assert (TC.getTriple ().isKnownWindowsMSVCEnvironment () &&
210
+ " can only add VS runtime library on Windows!" );
211
+ if (TC.getTriple ().isKnownWindowsMSVCEnvironment ()) {
212
+ CmdArgs.push_back (Args.MakeArgString (
213
+ " --dependent-lib=" + TC.getCompilerRTBasename (Args, " builtins" )));
214
+ }
215
+ unsigned RTOptionID = options::OPT__SLASH_MT;
216
+ if (auto *rtl = Args.getLastArg (options::OPT_fms_runtime_lib_EQ)) {
217
+ RTOptionID = llvm::StringSwitch<unsigned >(rtl->getValue ())
218
+ .Case (" static" , options::OPT__SLASH_MT)
219
+ .Case (" static_dbg" , options::OPT__SLASH_MTd)
220
+ .Case (" dll" , options::OPT__SLASH_MD)
221
+ .Case (" dll_dbg" , options::OPT__SLASH_MDd)
222
+ .Default (options::OPT__SLASH_MT);
223
+ }
224
+ switch (RTOptionID) {
225
+ case options::OPT__SLASH_MT:
226
+ CmdArgs.push_back (" -D_MT" );
227
+ CmdArgs.push_back (" --dependent-lib=libcmt" );
228
+ CmdArgs.push_back (" --dependent-lib=Fortran_main.static.lib" );
229
+ CmdArgs.push_back (" --dependent-lib=FortranRuntime.static.lib" );
230
+ CmdArgs.push_back (" --dependent-lib=FortranDecimal.static.lib" );
231
+ break ;
232
+ case options::OPT__SLASH_MTd:
233
+ CmdArgs.push_back (" -D_MT" );
234
+ CmdArgs.push_back (" -D_DEBUG" );
235
+ CmdArgs.push_back (" --dependent-lib=libcmtd" );
236
+ CmdArgs.push_back (" --dependent-lib=Fortran_main.static_dbg.lib" );
237
+ CmdArgs.push_back (" --dependent-lib=FortranRuntime.static_dbg.lib" );
238
+ CmdArgs.push_back (" --dependent-lib=FortranDecimal.static_dbg.lib" );
239
+ break ;
240
+ case options::OPT__SLASH_MD:
241
+ CmdArgs.push_back (" -D_MT" );
242
+ CmdArgs.push_back (" -D_DLL" );
243
+ CmdArgs.push_back (" --dependent-lib=msvcrt" );
244
+ CmdArgs.push_back (" --dependent-lib=Fortran_main.dynamic.lib" );
245
+ CmdArgs.push_back (" --dependent-lib=FortranRuntime.dynamic.lib" );
246
+ CmdArgs.push_back (" --dependent-lib=FortranDecimal.dynamic.lib" );
247
+ break ;
248
+ case options::OPT__SLASH_MDd:
249
+ CmdArgs.push_back (" -D_MT" );
250
+ CmdArgs.push_back (" -D_DEBUG" );
251
+ CmdArgs.push_back (" -D_DLL" );
252
+ CmdArgs.push_back (" --dependent-lib=msvcrtd" );
253
+ CmdArgs.push_back (" --dependent-lib=Fortran_main.dynamic_dbg.lib" );
254
+ CmdArgs.push_back (" --dependent-lib=FortranRuntime.dynamic_dbg.lib" );
255
+ CmdArgs.push_back (" --dependent-lib=FortranDecimal.dynamic_dbg.lib" );
256
+ break ;
257
+ }
258
+ }
259
+
207
260
void Flang::addTargetOptions (const ArgList &Args,
208
261
ArgStringList &CmdArgs) const {
209
262
const ToolChain &TC = getToolChain ();
@@ -267,6 +320,10 @@ void Flang::addTargetOptions(const ArgList &Args,
267
320
}
268
321
}
269
322
323
+ if (Triple.isKnownWindowsMSVCEnvironment ()) {
324
+ processVSRuntimeLibrary (TC, Args, CmdArgs);
325
+ }
326
+
270
327
// TODO: Add target specific flags, ABI, mtune option etc.
271
328
}
272
329
0 commit comments