DavidTruby wrote:

I think for Windows the easy thing to do here is just to add 
`/WHOLEARCHIVE:...` here anyway, using the same logic as in 
processVSRuntimeLibrary(); E.g
```
void tools::addFortranRuntimeLibs(const ToolChain &TC, const ArgList &Args, 
//need to add args here so we can search it
                                  llvm::opt::ArgStringList &CmdArgs) {
  if (!TC.getTriple().isKnownWindowsMSVCEnvironment()) {
  // non-windows stuff
  } else {
      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("/WHOLEARCHIVE:Fortran_main.static.lib");
///etc
  }
  ```
I haven't actually tested this code but it maybe gives an idea of what needs 
doing?

The "correct" thing to do would probably be to add the /WHOLEARCHIVE directive 
as a linker directive in the object file (like we do for 
/DEFAULTLIB:Fortran_main) but that would require a bit more hooking up to pass 
that all the way through to creating an `llvm.linker_options` MLIR operation. I 
think the above should probably suffice at least for now.

https://github.com/llvm/llvm-project/pull/73124
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to