Skip to content

Commit 444418e

Browse files
committed
Pass linker options to flang2
1 parent 5f1137e commit 444418e

File tree

2 files changed

+42
-25
lines changed

2 files changed

+42
-25
lines changed

lib/Driver/ToolChains/Flang.cpp

+8
Original file line numberDiff line numberDiff line change
@@ -1050,6 +1050,14 @@ if(Args.getAllArgValues(options::OPT_fopenmp_targets_EQ).size() > 0) {
10501050
LowerCmdArgs.push_back(Args.MakeArgString(OutFile));
10511051
}
10521052

1053+
bool IsWindowsMSVC = getToolChain().getTriple().isWindowsMSVCEnvironment();
1054+
if (IsWindowsMSVC && !Args.hasArg(options::OPT_noFlangLibs)) {
1055+
getToolChain().AddFortranStdlibLibArgs(Args, LowerCmdArgs);
1056+
}
1057+
for (auto Arg : Args.filtered(options::OPT_noFlangLibs)) {
1058+
Arg->claim();
1059+
}
1060+
10531061
C.addCommand(llvm::make_unique<Command>(JA, *this, LowerExec, LowerCmdArgs, Inputs));
10541062
}
10551063

lib/Driver/ToolChains/MSVC.cpp

+34-25
Original file line numberDiff line numberDiff line change
@@ -426,16 +426,6 @@ void visualstudio::Linker::ConstructJob(Compilation &C, const JobAction &JA,
426426
}
427427
}
428428

429-
// Add Fortran runtime libraries
430-
if (needFortranLibs(TC.getDriver(), Args)) {
431-
TC.AddFortranStdlibLibArgs(Args, CmdArgs);
432-
} else {
433-
// Claim "no Flang libraries" arguments if any
434-
for (auto Arg : Args.filtered(options::OPT_noFlangLibs)) {
435-
Arg->claim();
436-
}
437-
}
438-
439429
// Add compiler-rt lib in case if it was explicitly
440430
// specified as an argument for --rtlib option.
441431
if (!Args.hasArg(options::OPT_nostdlib)) {
@@ -767,32 +757,48 @@ void MSVCToolChain::AddFortranStdlibLibArgs(const ArgList &Args,
767757
useOpenMP = true;
768758
}
769759

770-
CmdArgs.push_back(Args.MakeArgString(std::string("-libpath:") +
760+
CmdArgs.push_back("-linker");
761+
CmdArgs.push_back(Args.MakeArgString(std::string("/libpath:") +
771762
getDriver().Dir + "/../lib"));
772763

773764
if (needFortranMain(getDriver(), Args)) {
774765
// flangmain is always static
775-
CmdArgs.push_back("-subsystem:console");
776-
CmdArgs.push_back("-defaultlib:flangmain");
766+
CmdArgs.push_back("-linker");
767+
CmdArgs.push_back("/subsystem:console");
768+
CmdArgs.push_back("-linker");
769+
CmdArgs.push_back("/defaultlib:flangmain.lib");
777770
}
778771

779772
if (staticFlangLibs) {
780-
CmdArgs.push_back("-defaultlib:libflang");
781-
CmdArgs.push_back("-defaultlib:libflangrti");
782-
CmdArgs.push_back("-defaultlib:libpgmath");
773+
CmdArgs.push_back("-linker");
774+
CmdArgs.push_back("/defaultlib:libflang.lib");
775+
CmdArgs.push_back("-linker");
776+
CmdArgs.push_back("/defaultlib:libflangrti.lib");
777+
CmdArgs.push_back("-linker");
778+
CmdArgs.push_back("/defaultlib:libpgmath.lib");
783779
} else {
784-
CmdArgs.push_back("-defaultlib:flang");
785-
CmdArgs.push_back("-defaultlib:flangrti");
786-
CmdArgs.push_back("-defaultlib:pgmath");
780+
CmdArgs.push_back("-linker");
781+
CmdArgs.push_back("/defaultlib:flang.lib");
782+
CmdArgs.push_back("-linker");
783+
CmdArgs.push_back("/defaultlib:flangrti.lib");
784+
CmdArgs.push_back("-linker");
785+
CmdArgs.push_back("/defaultlib:pgmath.lib");
787786
}
788787
if (useOpenMP) {
789-
// openmp is added in ConstructJob
788+
CmdArgs.push_back("-linker");
789+
CmdArgs.push_back("/nodefaultlib:vcomp.lib");
790+
CmdArgs.push_back("-linker");
791+
CmdArgs.push_back("/nodefaultlib:vcompd.lib");
792+
CmdArgs.push_back("-linker");
793+
CmdArgs.push_back("/defaultlib:libomp.lib");
790794
}
791795
else {
792796
if (staticFlangLibs) {
793-
CmdArgs.push_back("-defaultlib:libompstub");
797+
CmdArgs.push_back("-linker");
798+
CmdArgs.push_back("/defaultlib:libompstub.lib");
794799
} else {
795-
CmdArgs.push_back("-defaultlib:ompstub");
800+
CmdArgs.push_back("-linker");
801+
CmdArgs.push_back("/defaultlib:ompstub.lib");
796802
}
797803
}
798804

@@ -805,11 +811,14 @@ void MSVCToolChain::AddFortranStdlibLibArgs(const ArgList &Args,
805811
// dependency tracking. Let's assume that if somebody needs
806812
// static flang libs, they need static runtime libs as well.
807813
if (staticFlangLibs) {
808-
CmdArgs.push_back("-defaultlib:libcmt");
814+
CmdArgs.push_back("-linker");
815+
CmdArgs.push_back("/defaultlib:libcmt.lib");
809816
} else {
810-
CmdArgs.push_back("-defaultlib:msvcrt");
817+
CmdArgs.push_back("-linker");
818+
CmdArgs.push_back("/defaultlib:msvcrt.lib");
811819
}
812-
CmdArgs.push_back("-defaultlib:oldnames");
820+
CmdArgs.push_back("-linker");
821+
CmdArgs.push_back("/defaultlib:oldnames.lib");
813822

814823
}
815824

0 commit comments

Comments
 (0)