================ @@ -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 cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits