@@ -1120,10 +1120,11 @@ void tools::addFortranRuntimeLibs(const ToolChain &TC, const ArgList &Args,
1120
1120
llvm::opt::ArgStringList &CmdArgs) {
1121
1121
// These are handled earlier on Windows by telling the frontend driver to add
1122
1122
// the correct libraries to link against as dependents in the object file.
1123
+
1124
+ // if -fno-fortran-main has been passed, skip linking Fortran_main.a
1125
+ bool LinkFortranMain = !Args.hasArg (options::OPT_no_fortran_main);
1123
1126
if (!TC.getTriple ().isKnownWindowsMSVCEnvironment ()) {
1124
- // if -fno-fortran-main has been passed, skip linking Fortran_main.a
1125
- bool DontLinkFortranMain = Args.hasArg (options::OPT_no_fortran_main);
1126
- if (!DontLinkFortranMain) {
1127
+ if (LinkFortranMain) {
1127
1128
// The --whole-archive option needs to be part of the link line to
1128
1129
// make sure that the main() function from Fortran_main.a is pulled
1129
1130
// in by the linker. Determine if --whole-archive is active when
@@ -1150,28 +1151,30 @@ void tools::addFortranRuntimeLibs(const ToolChain &TC, const ArgList &Args,
1150
1151
CmdArgs.push_back (" -lFortranRuntime" );
1151
1152
CmdArgs.push_back (" -lFortranDecimal" );
1152
1153
} else {
1153
- unsigned RTOptionID = options::OPT__SLASH_MT;
1154
- if (auto *rtl = Args.getLastArg (options::OPT_fms_runtime_lib_EQ)) {
1155
- RTOptionID = llvm::StringSwitch<unsigned >(rtl->getValue ())
1156
- .Case (" static" , options::OPT__SLASH_MT)
1157
- .Case (" static_dbg" , options::OPT__SLASH_MTd)
1158
- .Case (" dll" , options::OPT__SLASH_MD)
1159
- .Case (" dll_dbg" , options::OPT__SLASH_MDd)
1160
- .Default (options::OPT__SLASH_MT);
1161
- }
1162
- switch (RTOptionID) {
1163
- case options::OPT__SLASH_MT:
1164
- CmdArgs.push_back (" /WHOLEARCHIVE:Fortran_main.static.lib" );
1165
- break ;
1166
- case options::OPT__SLASH_MTd:
1167
- CmdArgs.push_back (" /WHOLEARCHIVE:Fortran_main.static_dbg.lib" );
1168
- break ;
1169
- case options::OPT__SLASH_MD:
1170
- CmdArgs.push_back (" /WHOLEARCHIVE:Fortran_main.dynamic.lib" );
1171
- break ;
1172
- case options::OPT__SLASH_MDd:
1173
- CmdArgs.push_back (" /WHOLEARCHIVE:Fortran_main.dynamic_dbg.lib" );
1174
- break ;
1154
+ if (LinkFortranMain) {
1155
+ unsigned RTOptionID = options::OPT__SLASH_MT;
1156
+ if (auto *rtl = Args.getLastArg (options::OPT_fms_runtime_lib_EQ)) {
1157
+ RTOptionID = llvm::StringSwitch<unsigned >(rtl->getValue ())
1158
+ .Case (" static" , options::OPT__SLASH_MT)
1159
+ .Case (" static_dbg" , options::OPT__SLASH_MTd)
1160
+ .Case (" dll" , options::OPT__SLASH_MD)
1161
+ .Case (" dll_dbg" , options::OPT__SLASH_MDd)
1162
+ .Default (options::OPT__SLASH_MT);
1163
+ }
1164
+ switch (RTOptionID) {
1165
+ case options::OPT__SLASH_MT:
1166
+ CmdArgs.push_back (" /WHOLEARCHIVE:Fortran_main.static.lib" );
1167
+ break ;
1168
+ case options::OPT__SLASH_MTd:
1169
+ CmdArgs.push_back (" /WHOLEARCHIVE:Fortran_main.static_dbg.lib" );
1170
+ break ;
1171
+ case options::OPT__SLASH_MD:
1172
+ CmdArgs.push_back (" /WHOLEARCHIVE:Fortran_main.dynamic.lib" );
1173
+ break ;
1174
+ case options::OPT__SLASH_MDd:
1175
+ CmdArgs.push_back (" /WHOLEARCHIVE:Fortran_main.dynamic_dbg.lib" );
1176
+ break ;
1177
+ }
1175
1178
}
1176
1179
}
1177
1180
}
0 commit comments