================
@@ -976,12 +976,46 @@ bool tools::addOpenMPRuntime(ArgStringList &CmdArgs,
const ToolChain &TC,
return true;
}
-void tools::addFortranRuntimeLibs(const ToolChain &TC,
+void tools::addFortranRuntimeLibs(const ToolChain &TC, const ArgList &Args,
llvm::opt::ArgStringList &CmdArgs) {
if (TC.getTriple().isKnownWindowsMSVCEnvironment()) {
- CmdArgs.push_back("Fortran_main.lib");
- CmdArgs.push_back("FortranRuntime.lib");
- CmdArgs.push_back("FortranDecimal.lib");
+ CmdArgs.push_back(Args.MakeArgString(
+ "/DEFAULTLIB:" + TC.getCompilerRTBasename(Args, "builtins")));
+ unsigned RTOptionID = options::OPT__SLASH_MT;
+ if (auto *rtl = Args.getLastArg(options::OPT_fms_runtime_lib_EQ)) {
+ RTOptionID = llvm::StringSwitch<unsigned>(rtl->getValue())
+ .Case("static", options::OPT__SLASH_MT)
+ .Case("static_dbg", options::OPT__SLASH_MTd)
+ .Case("dll", options::OPT__SLASH_MD)
+ .Case("dll_dbg", options::OPT__SLASH_MDd)
+ .Default(options::OPT__SLASH_MT);
+ }
+ switch (RTOptionID) {
+ case options::OPT__SLASH_MT:
+ CmdArgs.push_back("/DEFAULTLIB:libcmt");
+ CmdArgs.push_back("Fortran_main.static.lib");
+ CmdArgs.push_back("FortranRuntime.static.lib");
+ CmdArgs.push_back("FortranDecimal.static.lib");
+ break;
+ case options::OPT__SLASH_MTd:
+ CmdArgs.push_back("/DEFAULTLIB:libcmtd");
+ CmdArgs.push_back("Fortran_main.static_debug.lib");
+ CmdArgs.push_back("FortranRuntime.static_debug.lib");
+ CmdArgs.push_back("FortranDecimal.static_debug.lib");
+ break;
+ case options::OPT__SLASH_MD:
+ CmdArgs.push_back("/DEFAULTLIB:msvcrt");
+ CmdArgs.push_back("Fortran_main.dynamic.lib");
+ CmdArgs.push_back("FortranRuntime.dynamic.lib");
+ CmdArgs.push_back("FortranDecimal.dynamic.lib");
+ break;
----------------
bradking wrote:
I'm not aware of any easy way to add defaultlib directives after-the-fact.
I think it's okay to merge this PR's approach as a temporary solution. It does
fix the empty-`program` example in #68017 work, and provide the Fortran runtime
library variants. However, I'm not sure how well CMake will be able to support
this until the defaultlib part is added.
BTW, the `Fixes #68017` note in the PR description is no longer accurate. It's
not fully fixed yet.
https://github.com/llvm/llvm-project/pull/70833
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits