https://github.com/DavidTruby updated https://github.com/llvm/llvm-project/pull/72519
>From eeb1e7c7b7905d541c9359bd1800fdfb70f0219e Mon Sep 17 00:00:00 2001 From: David Truby <da...@truby.dev> Date: Thu, 16 Nov 2023 14:32:27 +0000 Subject: [PATCH 1/2] [flang] Add runtimes using --dependent-lib on MSVC targets This patch uses the added --dependent-lib support to add the relevant runtimes on MSVC targets as `/DEFAULTLIB:` sections in the object file rather than on the link line. This should help CMake support for flang on Windows. --- clang/lib/Driver/ToolChains/CommonArgs.cpp | 43 +------------- clang/lib/Driver/ToolChains/CommonArgs.h | 2 +- clang/lib/Driver/ToolChains/Darwin.cpp | 2 +- clang/lib/Driver/ToolChains/DragonFly.cpp | 2 +- clang/lib/Driver/ToolChains/Flang.cpp | 57 +++++++++++++++++++ clang/lib/Driver/ToolChains/FreeBSD.cpp | 2 +- clang/lib/Driver/ToolChains/Gnu.cpp | 2 +- clang/lib/Driver/ToolChains/Haiku.cpp | 2 +- clang/lib/Driver/ToolChains/MSVC.cpp | 2 +- clang/lib/Driver/ToolChains/MinGW.cpp | 2 +- clang/lib/Driver/ToolChains/NetBSD.cpp | 2 +- clang/lib/Driver/ToolChains/OpenBSD.cpp | 2 +- clang/lib/Driver/ToolChains/Solaris.cpp | 2 +- flang/test/Driver/linker-flags.f90 | 35 ------------ .../test/Driver/msvc-dependent-lib-flags.f90 | 36 ++++++++++++ 15 files changed, 107 insertions(+), 86 deletions(-) create mode 100644 flang/test/Driver/msvc-dependent-lib-flags.f90 diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp index 5d2cd1959b06925..55951162df50a75 100644 --- a/clang/lib/Driver/ToolChains/CommonArgs.cpp +++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp @@ -977,47 +977,10 @@ bool tools::addOpenMPRuntime(ArgStringList &CmdArgs, const ToolChain &TC, return true; } -void tools::addFortranRuntimeLibs(const ToolChain &TC, const ArgList &Args, +void tools::addFortranRuntimeLibs(const ToolChain &TC, llvm::opt::ArgStringList &CmdArgs) { - if (TC.getTriple().isKnownWindowsMSVCEnvironment()) { - 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_dbg.lib"); - CmdArgs.push_back("FortranRuntime.static_dbg.lib"); - CmdArgs.push_back("FortranDecimal.static_dbg.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; - case options::OPT__SLASH_MDd: - CmdArgs.push_back("/DEFAULTLIB:msvcrtd"); - CmdArgs.push_back("Fortran_main.dynamic_dbg.lib"); - CmdArgs.push_back("FortranRuntime.dynamic_dbg.lib"); - CmdArgs.push_back("FortranDecimal.dynamic_dbg.lib"); - break; - } - } else { + // These are handled by adding link options to the object file on Windows + if (!TC.getTriple().isKnownWindowsMSVCEnvironment()) { CmdArgs.push_back("-lFortran_main"); CmdArgs.push_back("-lFortranRuntime"); CmdArgs.push_back("-lFortranDecimal"); diff --git a/clang/lib/Driver/ToolChains/CommonArgs.h b/clang/lib/Driver/ToolChains/CommonArgs.h index 0a0951c5386e601..f364c9793c9be62 100644 --- a/clang/lib/Driver/ToolChains/CommonArgs.h +++ b/clang/lib/Driver/ToolChains/CommonArgs.h @@ -116,7 +116,7 @@ bool addOpenMPRuntime(llvm::opt::ArgStringList &CmdArgs, const ToolChain &TC, bool IsOffloadingHost = false, bool GompNeedsRT = false); /// Adds Fortran runtime libraries to \p CmdArgs. -void addFortranRuntimeLibs(const ToolChain &TC, const llvm::opt::ArgList &Args, +void addFortranRuntimeLibs(const ToolChain &TC, llvm::opt::ArgStringList &CmdArgs); /// Adds the path for the Fortran runtime libraries to \p CmdArgs. diff --git a/clang/lib/Driver/ToolChains/Darwin.cpp b/clang/lib/Driver/ToolChains/Darwin.cpp index 7c3d4982d8f6a8c..1f61bb02c6ae226 100644 --- a/clang/lib/Driver/ToolChains/Darwin.cpp +++ b/clang/lib/Driver/ToolChains/Darwin.cpp @@ -678,7 +678,7 @@ void darwin::Linker::ConstructJob(Compilation &C, const JobAction &JA, // to generate executables. if (getToolChain().getDriver().IsFlangMode()) { addFortranRuntimeLibraryPath(getToolChain(), Args, CmdArgs); - addFortranRuntimeLibs(getToolChain(), Args, CmdArgs); + addFortranRuntimeLibs(getToolChain(), CmdArgs); } if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) diff --git a/clang/lib/Driver/ToolChains/DragonFly.cpp b/clang/lib/Driver/ToolChains/DragonFly.cpp index 9942fc632e0a917..181d0ad0d834b2b 100644 --- a/clang/lib/Driver/ToolChains/DragonFly.cpp +++ b/clang/lib/Driver/ToolChains/DragonFly.cpp @@ -153,7 +153,7 @@ void dragonfly::Linker::ConstructJob(Compilation &C, const JobAction &JA, // AddRunTimeLibs). if (D.IsFlangMode()) { addFortranRuntimeLibraryPath(ToolChain, Args, CmdArgs); - addFortranRuntimeLibs(ToolChain, Args, CmdArgs); + addFortranRuntimeLibs(ToolChain, CmdArgs); CmdArgs.push_back("-lm"); } diff --git a/clang/lib/Driver/ToolChains/Flang.cpp b/clang/lib/Driver/ToolChains/Flang.cpp index 8bdd920c3dcbb79..01f07b9228256cf 100644 --- a/clang/lib/Driver/ToolChains/Flang.cpp +++ b/clang/lib/Driver/ToolChains/Flang.cpp @@ -204,6 +204,59 @@ void Flang::AddAArch64TargetArgs(const ArgList &Args, } } +static void processVSRuntimeLibrary(const ToolChain &TC, const ArgList &Args, + ArgStringList &CmdArgs) { + assert(TC.getTriple().isKnownWindowsMSVCEnvironment() && + "can only add VS runtime library on Windows!"); + if (TC.getTriple().isKnownWindowsMSVCEnvironment()) { + CmdArgs.push_back(Args.MakeArgString( + "--dependent-lib=" + 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("-D_MT"); + CmdArgs.push_back("--dependent-lib=libcmt"); + CmdArgs.push_back("--dependent-lib=Fortran_main.static.lib"); + CmdArgs.push_back("--dependent-lib=FortranRuntime.static.lib"); + CmdArgs.push_back("--dependent-lib=FortranDecimal.static.lib"); + break; + case options::OPT__SLASH_MTd: + CmdArgs.push_back("-D_MT"); + CmdArgs.push_back("-D_DEBUG"); + CmdArgs.push_back("--dependent-lib=libcmtd"); + CmdArgs.push_back("--dependent-lib=Fortran_main.static_dbg.lib"); + CmdArgs.push_back("--dependent-lib=FortranRuntime.static_dbg.lib"); + CmdArgs.push_back("--dependent-lib=FortranDecimal.static_dbg.lib"); + break; + case options::OPT__SLASH_MD: + CmdArgs.push_back("-D_MT"); + CmdArgs.push_back("-D_DLL"); + CmdArgs.push_back("--dependent-lib=msvcrt"); + CmdArgs.push_back("--dependent-lib=Fortran_main.dynamic.lib"); + CmdArgs.push_back("--dependent-lib=FortranRuntime.dynamic.lib"); + CmdArgs.push_back("--dependent-lib=FortranDecimal.dynamic.lib"); + break; + case options::OPT__SLASH_MDd: + CmdArgs.push_back("-D_MT"); + CmdArgs.push_back("-D_DEBUG"); + CmdArgs.push_back("-D_DLL"); + CmdArgs.push_back("--dependent-lib=msvcrtd"); + CmdArgs.push_back("--dependent-lib=Fortran_main.dynamic_dbg.lib"); + CmdArgs.push_back("--dependent-lib=FortranRuntime.dynamic_dbg.lib"); + CmdArgs.push_back("--dependent-lib=FortranDecimal.dynamic_dbg.lib"); + break; + } +} + void Flang::addTargetOptions(const ArgList &Args, ArgStringList &CmdArgs) const { const ToolChain &TC = getToolChain(); @@ -267,6 +320,10 @@ void Flang::addTargetOptions(const ArgList &Args, } } + if (Triple.isKnownWindowsMSVCEnvironment()) { + processVSRuntimeLibrary(TC, Args, CmdArgs); + } + // TODO: Add target specific flags, ABI, mtune option etc. } diff --git a/clang/lib/Driver/ToolChains/FreeBSD.cpp b/clang/lib/Driver/ToolChains/FreeBSD.cpp index d46feb3459a6344..d08764aeef77539 100644 --- a/clang/lib/Driver/ToolChains/FreeBSD.cpp +++ b/clang/lib/Driver/ToolChains/FreeBSD.cpp @@ -310,7 +310,7 @@ void freebsd::Linker::ConstructJob(Compilation &C, const JobAction &JA, // AddRunTimeLibs). if (D.IsFlangMode()) { addFortranRuntimeLibraryPath(ToolChain, Args, CmdArgs); - addFortranRuntimeLibs(ToolChain, Args, CmdArgs); + addFortranRuntimeLibs(ToolChain, CmdArgs); if (Profiling) CmdArgs.push_back("-lm_p"); else diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp index ba95ce9c5a28153..d7e347f54eef393 100644 --- a/clang/lib/Driver/ToolChains/Gnu.cpp +++ b/clang/lib/Driver/ToolChains/Gnu.cpp @@ -568,7 +568,7 @@ void tools::gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA, // AddRunTimeLibs). if (D.IsFlangMode()) { addFortranRuntimeLibraryPath(ToolChain, Args, CmdArgs); - addFortranRuntimeLibs(ToolChain, Args, CmdArgs); + addFortranRuntimeLibs(ToolChain, CmdArgs); CmdArgs.push_back("-lm"); } diff --git a/clang/lib/Driver/ToolChains/Haiku.cpp b/clang/lib/Driver/ToolChains/Haiku.cpp index e0d94035823fd37..3fe92054ac53e15 100644 --- a/clang/lib/Driver/ToolChains/Haiku.cpp +++ b/clang/lib/Driver/ToolChains/Haiku.cpp @@ -118,7 +118,7 @@ void haiku::Linker::ConstructJob(Compilation &C, const JobAction &JA, // AddRunTimeLibs). if (D.IsFlangMode()) { addFortranRuntimeLibraryPath(ToolChain, Args, CmdArgs); - addFortranRuntimeLibs(ToolChain, Args, CmdArgs); + addFortranRuntimeLibs(ToolChain, CmdArgs); } CmdArgs.push_back("-lgcc"); diff --git a/clang/lib/Driver/ToolChains/MSVC.cpp b/clang/lib/Driver/ToolChains/MSVC.cpp index 8a4a174c90ea855..4966d102c51f1ac 100644 --- a/clang/lib/Driver/ToolChains/MSVC.cpp +++ b/clang/lib/Driver/ToolChains/MSVC.cpp @@ -131,7 +131,7 @@ void visualstudio::Linker::ConstructJob(Compilation &C, const JobAction &JA, if (C.getDriver().IsFlangMode()) { addFortranRuntimeLibraryPath(TC, Args, CmdArgs); - addFortranRuntimeLibs(TC, Args, CmdArgs); + addFortranRuntimeLibs(TC, CmdArgs); // Inform the MSVC linker that we're generating a console application, i.e. // one with `main` as the "user-defined" entry point. The `main` function is diff --git a/clang/lib/Driver/ToolChains/MinGW.cpp b/clang/lib/Driver/ToolChains/MinGW.cpp index 5d7f8675daf8d28..39d767795445dbe 100644 --- a/clang/lib/Driver/ToolChains/MinGW.cpp +++ b/clang/lib/Driver/ToolChains/MinGW.cpp @@ -249,7 +249,7 @@ void tools::MinGW::Linker::ConstructJob(Compilation &C, const JobAction &JA, if (C.getDriver().IsFlangMode()) { addFortranRuntimeLibraryPath(TC, Args, CmdArgs); - addFortranRuntimeLibs(TC, Args, CmdArgs); + addFortranRuntimeLibs(TC, CmdArgs); } // TODO: Add profile stuff here diff --git a/clang/lib/Driver/ToolChains/NetBSD.cpp b/clang/lib/Driver/ToolChains/NetBSD.cpp index 240bf5764b9cce2..90b195a007caa78 100644 --- a/clang/lib/Driver/ToolChains/NetBSD.cpp +++ b/clang/lib/Driver/ToolChains/NetBSD.cpp @@ -325,7 +325,7 @@ void netbsd::Linker::ConstructJob(Compilation &C, const JobAction &JA, // AddRunTimeLibs). if (D.IsFlangMode()) { addFortranRuntimeLibraryPath(ToolChain, Args, CmdArgs); - addFortranRuntimeLibs(ToolChain, Args, CmdArgs); + addFortranRuntimeLibs(ToolChain, CmdArgs); CmdArgs.push_back("-lm"); } diff --git a/clang/lib/Driver/ToolChains/OpenBSD.cpp b/clang/lib/Driver/ToolChains/OpenBSD.cpp index c8f02161d8311e3..3722c27e7d01761 100644 --- a/clang/lib/Driver/ToolChains/OpenBSD.cpp +++ b/clang/lib/Driver/ToolChains/OpenBSD.cpp @@ -237,7 +237,7 @@ void openbsd::Linker::ConstructJob(Compilation &C, const JobAction &JA, // AddRunTimeLibs). if (D.IsFlangMode()) { addFortranRuntimeLibraryPath(ToolChain, Args, CmdArgs); - addFortranRuntimeLibs(ToolChain, Args, CmdArgs); + addFortranRuntimeLibs(ToolChain, CmdArgs); if (Profiling) CmdArgs.push_back("-lm_p"); else diff --git a/clang/lib/Driver/ToolChains/Solaris.cpp b/clang/lib/Driver/ToolChains/Solaris.cpp index 96757f07a54974f..badfc33a74f2958 100644 --- a/clang/lib/Driver/ToolChains/Solaris.cpp +++ b/clang/lib/Driver/ToolChains/Solaris.cpp @@ -229,7 +229,7 @@ void solaris::Linker::ConstructJob(Compilation &C, const JobAction &JA, // these dependencies need to be listed before the C runtime below. if (D.IsFlangMode()) { addFortranRuntimeLibraryPath(getToolChain(), Args, CmdArgs); - addFortranRuntimeLibs(getToolChain(), Args, CmdArgs); + addFortranRuntimeLibs(getToolChain(), CmdArgs); CmdArgs.push_back("-lm"); } if (Args.hasArg(options::OPT_fstack_protector) || diff --git a/flang/test/Driver/linker-flags.f90 b/flang/test/Driver/linker-flags.f90 index a1417057d4da068..85c4d60b3f09862 100644 --- a/flang/test/Driver/linker-flags.f90 +++ b/flang/test/Driver/linker-flags.f90 @@ -16,9 +16,6 @@ ! but it is not needed when compiling Fortran code and they might bring in ! additional dependencies. Make sure its not added. ! RUN: %flang -### --target=aarch64-windows-msvc -fuse-ld= %S/Inputs/hello.f90 2>&1 | FileCheck %s --check-prefixes=CHECK,MSVC --implicit-check-not oldnames -! RUN: %flang -### --target=aarch64-windows-msvc -fms-runtime-lib=static_dbg -fuse-ld= %S/Inputs/hello.f90 2>&1 | FileCheck %s --check-prefixes=CHECK,MSVC-DEBUG --implicit-check-not oldnames -! RUN: %flang -### --target=aarch64-windows-msvc -fms-runtime-lib=dll -fuse-ld= %S/Inputs/hello.f90 2>&1 | FileCheck %s --check-prefixes=CHECK,MSVC-DLL --implicit-check-not oldnames -! RUN: %flang -### --target=aarch64-windows-msvc -fms-runtime-lib=dll_dbg -fuse-ld= %S/Inputs/hello.f90 2>&1 | FileCheck %s --check-prefixes=CHECK,MSVC-DLL-DEBUG --implicit-check-not oldnames ! Compiler invocation to generate the object file ! CHECK-LABEL: {{.*}} "-emit-obj" @@ -54,37 +51,5 @@ ! (lld-)link.exe on Windows platforms. The suffix may not be added ! when the executable is not found or on non-Windows platforms. ! MSVC-LABEL: link -! MSVC-SAME: /DEFAULTLIB:clang_rt.builtins-aarch64.lib -! MSVC-SAME: /DEFAULTLIB:libcmt -! MSVC-SAME: Fortran_main.static.lib -! MSVC-SAME: FortranRuntime.static.lib -! MSVC-SAME: FortranDecimal.static.lib ! MSVC-SAME: /subsystem:console ! MSVC-SAME: "[[object_file]]" - -! MSVC-DEBUG-LABEL: link -! MSVC-DEBUG-SAME: /DEFAULTLIB:clang_rt.builtins-aarch64.lib -! MSVC-DEBUG-SAME: /DEFAULTLIB:libcmtd -! MSVC-DEBUG-SAME: Fortran_main.static_dbg.lib -! MSVC-DEBUG-SAME: FortranRuntime.static_dbg.lib -! MSVC-DEBUG-SAME: FortranDecimal.static_dbg.lib -! MSVC-DEBUG-SAME: /subsystem:console -! MSVC-DEBUG-SAME: "[[object_file]]" - -! MSVC-DLL-LABEL: link -! MSVC-DLL-SAME: /DEFAULTLIB:clang_rt.builtins-aarch64.lib -! MSVC-DLL-SAME: /DEFAULTLIB:msvcrt -! MSVC-DLL-SAME: Fortran_main.dynamic.lib -! MSVC-DLL-SAME: FortranRuntime.dynamic.lib -! MSVC-DLL-SAME: FortranDecimal.dynamic.lib -! MSVC-DLL-SAME: /subsystem:console -! MSVC-DLL-SAME: "[[object_file]]" - -! MSVC-DLL-DEBUG-LABEL: link -! MSVC-DLL-DEBUG-SAME: /DEFAULTLIB:clang_rt.builtins-aarch64.lib -! MSVC-DLL-DEBUG-SAME: /DEFAULTLIB:msvcrtd -! MSVC-DLL-DEBUG-SAME: Fortran_main.dynamic_dbg.lib -! MSVC-DLL-DEBUG-SAME: FortranRuntime.dynamic_dbg.lib -! MSVC-DLL-DEBUG-SAME: FortranDecimal.dynamic_dbg.lib -! MSVC-DLL-DEBUG-SAME: /subsystem:console -! MSVC-DLL-DEBUG-SAME: "[[object_file]]" diff --git a/flang/test/Driver/msvc-dependent-lib-flags.f90 b/flang/test/Driver/msvc-dependent-lib-flags.f90 new file mode 100644 index 000000000000000..9d971d5b1ec66fa --- /dev/null +++ b/flang/test/Driver/msvc-dependent-lib-flags.f90 @@ -0,0 +1,36 @@ +! RUN: %flang -### --target=aarch64-windows-msvc -fuse-ld= %S/Inputs/hello.f90 -v 2>&1 | FileCheck %s --check-prefixes=MSVC +! RUN: %flang -### --target=aarch64-windows-msvc -fms-runtime-lib=static_dbg -fuse-ld= %S/Inputs/hello.f90 -v 2>&1 | FileCheck %s --check-prefixes=MSVC-DEBUG +! RUN: %flang -### --target=aarch64-windows-msvc -fms-runtime-lib=dll -fuse-ld= %S/Inputs/hello.f90 -v 2>&1 | FileCheck %s --check-prefixes=MSVC-DLL +! RUN: %flang -### --target=aarch64-windows-msvc -fms-runtime-lib=dll_dbg -fuse-ld= %S/Inputs/hello.f90 -v 2>&1 | FileCheck %s --check-prefixes=MSVC-DLL-DEBUG + +! MSVC: --dependent-lib=clang_rt.builtins-aarch64.lib +! MSVC-SAME: -D_MT +! MSVC-SAME: --dependent-lib=libcmt +! MSVC-SAME: --dependent-lib=Fortran_main.static.lib +! MSVC-SAME: --dependent-lib=FortranRuntime.static.lib +! MSVC-SAME: --dependent-lib=FortranDecimal.static.lib + +! MSVC-DEBUG: --dependent-lib=clang_rt.builtins-aarch64.lib +! MSVC-DEBUG-SAME: -D_MT +! MSVC-DEBUG-SAME: -D_DEBUG +! MSVC-DEBUG-SAME: --dependent-lib=libcmtd +! MSVC-DEBUG-SAME: --dependent-lib=Fortran_main.static_dbg.lib +! MSVC-DEBUG-SAME: --dependent-lib=FortranRuntime.static_dbg.lib +! MSVC-DEBUG-SAME: --dependent-lib=FortranDecimal.static_dbg.lib + +! MSVC-DLL: --dependent-lib=clang_rt.builtins-aarch64.lib +! MSVC-DLL-SAME: -D_MT +! MSVC-DLL-SAME: -D_DLL +! MSVC-DLL-SAME: --dependent-lib=msvcrt +! MSVC-DLL-SAME: --dependent-lib=Fortran_main.dynamic.lib +! MSVC-DLL-SAME: --dependent-lib=FortranRuntime.dynamic.lib +! MSVC-DLL-SAME: --dependent-lib=FortranDecimal.dynamic.lib + +! MSVC-DLL-DEBUG: --dependent-lib=clang_rt.builtins-aarch64.lib +! MSVC-DLL-DEBUG-SAME: -D_MT +! MSVC-DLL-DEBUG-SAME: -D_DEBUG +! MSVC-DLL-DEBUG-SAME: -D_DLL +! MSVC-DLL-DEBUG-SAME: --dependent-lib=msvcrtd +! MSVC-DLL-DEBUG-SAME: --dependent-lib=Fortran_main.dynamic_dbg.lib +! MSVC-DLL-DEBUG-SAME: --dependent-lib=FortranRuntime.dynamic_dbg.lib +! MSVC-DLL-DEBUG-SAME: --dependent-lib=FortranDecimal.dynamic_dbg.lib >From c279cfbc95d708ad93c31cd2228acc52dbfb6245 Mon Sep 17 00:00:00 2001 From: David Truby <da...@truby.dev> Date: Tue, 21 Nov 2023 15:14:52 +0000 Subject: [PATCH 2/2] Small fixes for review --- clang/lib/Driver/ToolChains/CommonArgs.cpp | 3 ++- flang/test/Driver/msvc-dependent-lib-flags.f90 | 8 ++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp index 55951162df50a75..1f31c6395206ee8 100644 --- a/clang/lib/Driver/ToolChains/CommonArgs.cpp +++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp @@ -979,7 +979,8 @@ bool tools::addOpenMPRuntime(ArgStringList &CmdArgs, const ToolChain &TC, void tools::addFortranRuntimeLibs(const ToolChain &TC, llvm::opt::ArgStringList &CmdArgs) { - // These are handled by adding link options to the object file on Windows + // These are handled earlier on Windows by telling the frontend driver to add + // the correct libraries to link against as dependents in the object file. if (!TC.getTriple().isKnownWindowsMSVCEnvironment()) { CmdArgs.push_back("-lFortran_main"); CmdArgs.push_back("-lFortranRuntime"); diff --git a/flang/test/Driver/msvc-dependent-lib-flags.f90 b/flang/test/Driver/msvc-dependent-lib-flags.f90 index 9d971d5b1ec66fa..80352a82c9334a9 100644 --- a/flang/test/Driver/msvc-dependent-lib-flags.f90 +++ b/flang/test/Driver/msvc-dependent-lib-flags.f90 @@ -1,7 +1,7 @@ -! RUN: %flang -### --target=aarch64-windows-msvc -fuse-ld= %S/Inputs/hello.f90 -v 2>&1 | FileCheck %s --check-prefixes=MSVC -! RUN: %flang -### --target=aarch64-windows-msvc -fms-runtime-lib=static_dbg -fuse-ld= %S/Inputs/hello.f90 -v 2>&1 | FileCheck %s --check-prefixes=MSVC-DEBUG -! RUN: %flang -### --target=aarch64-windows-msvc -fms-runtime-lib=dll -fuse-ld= %S/Inputs/hello.f90 -v 2>&1 | FileCheck %s --check-prefixes=MSVC-DLL -! RUN: %flang -### --target=aarch64-windows-msvc -fms-runtime-lib=dll_dbg -fuse-ld= %S/Inputs/hello.f90 -v 2>&1 | FileCheck %s --check-prefixes=MSVC-DLL-DEBUG +! RUN: %flang -### --target=aarch64-windows-msvc %S/Inputs/hello.f90 -v 2>&1 | FileCheck %s --check-prefixes=MSVC +! RUN: %flang -### --target=aarch64-windows-msvc -fms-runtime-lib=static_dbg %S/Inputs/hello.f90 -v 2>&1 | FileCheck %s --check-prefixes=MSVC-DEBUG +! RUN: %flang -### --target=aarch64-windows-msvc -fms-runtime-lib=dll %S/Inputs/hello.f90 -v 2>&1 | FileCheck %s --check-prefixes=MSVC-DLL +! RUN: %flang -### --target=aarch64-windows-msvc -fms-runtime-lib=dll_dbg %S/Inputs/hello.f90 -v 2>&1 | FileCheck %s --check-prefixes=MSVC-DLL-DEBUG ! MSVC: --dependent-lib=clang_rt.builtins-aarch64.lib ! MSVC-SAME: -D_MT _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits