Skip to content

Commit dc48a76

Browse files
DanielCChenvar-const
authored andcommitted
[driver] Generalize the code that adds the path of libflang_rt.runtime.a. (llvm#134362)
The PR is to generalize the re-use of the `compilerRT` code of adding the path of `libflang_rt.runtime.a (so)` from AIX and LoP only to all platforms via a new function `addFlangRTLibPath`. It also added `-static-libflangrt` and `-shared-libflangrt` compiler options to allow users choosing which `flang-rt` to link to. It defaults to shared `flang-rt`, which is consistent with the linker behavior, except on AIX, it defaults to static. Also, PR llvm#134320 exposed an issue in PR llvm#131041 that the the overriding `addFortranRuntimeLibs` is missing the link to `libquadmath`. This PR also fixed that and restored the test case that PR llvm#131041 broke.
1 parent 5bcea1f commit dc48a76

File tree

9 files changed

+143
-65
lines changed

9 files changed

+143
-65
lines changed

clang/include/clang/Driver/Options.td

+7
Original file line numberDiff line numberDiff line change
@@ -6881,6 +6881,13 @@ let Flags = [TargetSpecific] in {
68816881
defm android_pad_segment : BooleanFFlag<"android-pad-segment">, Group<f_Group>;
68826882
} // let Flags = [TargetSpecific]
68836883

6884+
def shared_libflangrt : Flag<["-"], "shared-libflangrt">,
6885+
HelpText<"Link the flang-rt shared library">, Group<Link_Group>,
6886+
Visibility<[FlangOption]>, Flags<[NoArgumentUnused]>;
6887+
def static_libflangrt : Flag<["-"], "static-libflangrt">,
6888+
HelpText<"Link the flang-rt static library">, Group<Link_Group>,
6889+
Visibility<[FlangOption]>, Flags<[NoArgumentUnused]>;
6890+
68846891
//===----------------------------------------------------------------------===//
68856892
// FLangOption + NoXarchOption
68866893
//===----------------------------------------------------------------------===//

clang/include/clang/Driver/ToolChain.h

+4
Original file line numberDiff line numberDiff line change
@@ -521,6 +521,10 @@ class ToolChain {
521521
addFortranRuntimeLibraryPath(const llvm::opt::ArgList &Args,
522522
llvm::opt::ArgStringList &CmdArgs) const;
523523

524+
/// Add the path for libflang_rt.runtime.a
525+
void addFlangRTLibPath(const llvm::opt::ArgList &Args,
526+
llvm::opt::ArgStringList &CmdArgs) const;
527+
524528
const char *getCompilerRTArgString(const llvm::opt::ArgList &Args,
525529
StringRef Component,
526530
FileType Type = ToolChain::FT_Static,

clang/lib/Driver/ToolChain.cpp

+21-5
Original file line numberDiff line numberDiff line change
@@ -744,9 +744,12 @@ std::string ToolChain::buildCompilerRTBasename(const llvm::opt::ArgList &Args,
744744
Suffix = IsITANMSVCWindows ? ".lib" : ".a";
745745
break;
746746
case ToolChain::FT_Shared:
747-
Suffix = TT.isOSWindows()
748-
? (TT.isWindowsGNUEnvironment() ? ".dll.a" : ".lib")
749-
: ".so";
747+
if (TT.isOSWindows())
748+
Suffix = TT.isWindowsGNUEnvironment() ? ".dll.a" : ".lib";
749+
else if (TT.isOSAIX())
750+
Suffix = ".a";
751+
else
752+
Suffix = ".so";
750753
break;
751754
}
752755

@@ -816,8 +819,7 @@ void ToolChain::addFortranRuntimeLibs(const ArgList &Args,
816819
if (AsNeeded)
817820
addAsNeededOption(*this, Args, CmdArgs, /*as_needed=*/false);
818821
}
819-
CmdArgs.push_back("-lflang_rt.runtime");
820-
addArchSpecificRPath(*this, Args, CmdArgs);
822+
addFlangRTLibPath(Args, CmdArgs);
821823

822824
// needs libexecinfo for backtrace functions
823825
if (getTriple().isOSFreeBSD() || getTriple().isOSNetBSD() ||
@@ -850,6 +852,20 @@ void ToolChain::addFortranRuntimeLibraryPath(const llvm::opt::ArgList &Args,
850852
CmdArgs.push_back(Args.MakeArgString("-L" + DefaultLibPath));
851853
}
852854

855+
void ToolChain::addFlangRTLibPath(const ArgList &Args,
856+
llvm::opt::ArgStringList &CmdArgs) const {
857+
// Link static flang_rt.runtime.a or shared flang_rt.runtime.so.
858+
// On AIX, default to static flang-rt.
859+
if (Args.hasFlag(options::OPT_static_libflangrt,
860+
options::OPT_shared_libflangrt, getTriple().isOSAIX()))
861+
CmdArgs.push_back(
862+
getCompilerRTArgString(Args, "runtime", ToolChain::FT_Static, true));
863+
else {
864+
CmdArgs.push_back("-lflang_rt.runtime");
865+
addArchSpecificRPath(*this, Args, CmdArgs);
866+
}
867+
}
868+
853869
// Android target triples contain a target version. If we don't have libraries
854870
// for the exact target version, we should fall back to the next newest version
855871
// or a versionless path, if any.

clang/lib/Driver/ToolChains/AIX.cpp

-8
Original file line numberDiff line numberDiff line change
@@ -608,14 +608,6 @@ void AIX::addProfileRTLibs(const llvm::opt::ArgList &Args,
608608
ToolChain::addProfileRTLibs(Args, CmdArgs);
609609
}
610610

611-
void AIX::addFortranRuntimeLibs(const ArgList &Args,
612-
llvm::opt::ArgStringList &CmdArgs) const {
613-
// Link flang_rt.runtime.a. On AIX, the static and shared library are all
614-
// named .a
615-
CmdArgs.push_back(
616-
getCompilerRTArgString(Args, "runtime", ToolChain::FT_Static, true));
617-
}
618-
619611
ToolChain::CXXStdlibType AIX::GetDefaultCXXStdlibType() const {
620612
return ToolChain::CST_Libcxx;
621613
}

clang/lib/Driver/ToolChains/AIX.h

-3
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,6 @@ class LLVM_LIBRARY_VISIBILITY AIX : public ToolChain {
8787
void addProfileRTLibs(const llvm::opt::ArgList &Args,
8888
llvm::opt::ArgStringList &CmdArgs) const override;
8989

90-
void addFortranRuntimeLibs(const llvm::opt::ArgList &Args,
91-
llvm::opt::ArgStringList &CmdArgs) const override;
92-
9390
CXXStdlibType GetDefaultCXXStdlibType() const override;
9491

9592
RuntimeLibType GetDefaultRuntimeLibType() const override;

clang/lib/Driver/ToolChains/PPCLinux.cpp

-16
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
#include "clang/Driver/Options.h"
1313
#include "llvm/Support/FileSystem.h"
1414
#include "llvm/Support/Path.h"
15-
#include "llvm/Support/VirtualFileSystem.h"
1615

1716
using namespace clang::driver;
1817
using namespace clang::driver::toolchains;
@@ -102,18 +101,3 @@ bool PPCLinuxToolChain::SupportIEEEFloat128(
102101
return GlibcSupportsFloat128((Twine(D.DyldPrefix) + Linker).str()) &&
103102
!(D.CCCIsCXX() && HasUnsupportedCXXLib);
104103
}
105-
106-
void PPCLinuxToolChain::addFortranRuntimeLibs(
107-
const ArgList &Args, llvm::opt::ArgStringList &CmdArgs) const {
108-
// Link static flang_rt.runtime.a or shared flang_rt.runtime.so
109-
const char *Path;
110-
if (getVFS().exists(Twine(Path = getCompilerRTArgString(
111-
Args, "runtime", ToolChain::FT_Static, true))))
112-
CmdArgs.push_back(Path);
113-
else if (getVFS().exists(
114-
Twine(Path = getCompilerRTArgString(
115-
Args, "runtime", ToolChain::FT_Shared, true))))
116-
CmdArgs.push_back(Path);
117-
else
118-
CmdArgs.push_back("-lflang_rt.runtime");
119-
}

clang/lib/Driver/ToolChains/PPCLinux.h

-3
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,6 @@ class LLVM_LIBRARY_VISIBILITY PPCLinuxToolChain : public Linux {
2424
AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,
2525
llvm::opt::ArgStringList &CC1Args) const override;
2626

27-
void addFortranRuntimeLibs(const llvm::opt::ArgList &Args,
28-
llvm::opt::ArgStringList &CmdArgs) const override;
29-
3027
private:
3128
bool SupportIEEEFloat128(const Driver &D, const llvm::Triple &Triple,
3229
const llvm::opt::ArgList &Args) const;

flang/test/Driver/flang-ld-powerpc.f90

+93-28
Original file line numberDiff line numberDiff line change
@@ -7,35 +7,100 @@
77
!! LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON, use
88
!! resource_dir_with_per_target_subdir as inputs.
99

10-
! Check powerpc64-ibm-aix 64-bit linking to static flang-rt
11-
! RUN: %flang %s -### 2>&1 \
10+
! Check powerpc64-ibm-aix 64-bit linking to static flang-rt by default
11+
! RUN: %flang -Werror %s -### 2>&1 \
1212
! RUN: --target=powerpc64-ibm-aix \
1313
! RUN: -resource-dir=%S/../../../clang/test/Driver/Inputs/resource_dir_with_per_target_subdir \
14-
! RUN: | FileCheck %s --check-prefix=AIX64-LD-PER-TARGET
15-
16-
! AIX64-LD-PER-TARGET-NOT: warning:
17-
! AIX64-LD-PER-TARGET: "-fc1" "-triple" "powerpc64-ibm-aix"
18-
! AIX64-LD-PER-TARGET-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
19-
! AIX64-LD-PER-TARGET: "{{.*}}ld{{(.exe)?}}"
20-
! AIX64-LD-PER-TARGET-NOT: "-bnso"
21-
! AIX64-LD-PER-TARGET-SAME: "-b64"
22-
! AIX64-LD-PER-TARGET-SAME: "-bpT:0x100000000" "-bpD:0x110000000"
23-
! AIX64-LD-PER-TARGET-SAME: "-lc"
24-
! AIX64-LD-PER-TARGET-SAME: "[[RESOURCE_DIR]]{{/|\\\\}}lib{{/|\\\\}}powerpc64-ibm-aix{{/|\\\\}}libflang_rt.runtime.a"
25-
! AIX64-LD-PER-TARGET-SAME: "-lm"
26-
! AIX64-LD-PER-TARGET-SAME: "-lpthread"
27-
28-
! Check powerpc64le-unknown-linux-gnu 64-bit linking to static flang-rt
29-
! RUN: %flang %s -### 2>&1 \
14+
! RUN: | FileCheck %s --check-prefix=AIX64-LD-PER-TARGET-DEFAULT
15+
16+
! AIX64-LD-PER-TARGET-DEFAULT: "-fc1" "-triple" "powerpc64-ibm-aix"
17+
! AIX64-LD-PER-TARGET-DEFAULT-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
18+
! AIX64-LD-PER-TARGET-DEFAULT: "{{.*}}ld{{(.exe)?}}"
19+
! AIX64-LD-PER-TARGET-DEFAULT-NOT: "-bnso"
20+
! AIX64-LD-PER-TARGET-DEFAULT-SAME: "-b64"
21+
! AIX64-LD-PER-TARGET-DEFAULT-SAME: "-bpT:0x100000000" "-bpD:0x110000000"
22+
! AIX64-LD-PER-TARGET-DEFAULT-SAME: "-lc"
23+
! AIX64-LD-PER-TARGET-DEFAULT-SAME: "[[RESOURCE_DIR]]{{/|\\\\}}lib{{/|\\\\}}powerpc64-ibm-aix{{/|\\\\}}libflang_rt.runtime.a"
24+
! AIX64-LD-PER-TARGET-DEFAULT-SAME: "-lm"
25+
! AIX64-LD-PER-TARGET-DEFAULT-SAME: "-lpthread"
26+
27+
28+
! Check powerpc64-ibm-aix 64-bit linking to static flang-rt by option
29+
! RUN: %flang -static-libflangrt -Werror %s -### 2>&1 \
30+
! RUN: --target=powerpc64-ibm-aix \
31+
! RUN: -resource-dir=%S/../../../clang/test/Driver/Inputs/resource_dir_with_per_target_subdir \
32+
! RUN: | FileCheck %s --check-prefix=AIX64-LD-PER-TARGET-STATIC
33+
34+
! AIX64-LD-PER-TARGET-STATIC: "-fc1" "-triple" "powerpc64-ibm-aix"
35+
! AIX64-LD-PER-TARGET-STATIC-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
36+
! AIX64-LD-PER-TARGET-STATIC: "{{.*}}ld{{(.exe)?}}"
37+
! AIX64-LD-PER-TARGET-STATIC-NOT: "-bnso"
38+
! AIX64-LD-PER-TARGET-STATIC-SAME: "-b64"
39+
! AIX64-LD-PER-TARGET-STATIC-SAME: "-bpT:0x100000000" "-bpD:0x110000000"
40+
! AIX64-LD-PER-TARGET-STATIC-SAME: "-lc"
41+
! AIX64-LD-PER-TARGET-STATIC-SAME: "[[RESOURCE_DIR]]{{/|\\\\}}lib{{/|\\\\}}powerpc64-ibm-aix{{/|\\\\}}libflang_rt.runtime.a"
42+
! AIX64-LD-PER-TARGET-STATIC-SAME: "-lm"
43+
! AIX64-LD-PER-TARGET-STATIC-SAME: "-lpthread"
44+
45+
46+
! Check powerpc64-ibm-aix 64-bit linking to shared flang-rt by option
47+
! RUN: %flang -shared-libflangrt -Werror %s -### 2>&1 \
48+
! RUN: --target=powerpc64-ibm-aix \
49+
! RUN: -resource-dir=%S/../../../clang/test/Driver/Inputs/resource_dir_with_per_target_subdir \
50+
! RUN: | FileCheck %s --check-prefix=AIX64-LD-PER-TARGET-SHARED
51+
52+
! AIX64-LD-PER-TARGET-SHARED: "-fc1" "-triple" "powerpc64-ibm-aix"
53+
! AIX64-LD-PER-TARGET-SHARED-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
54+
! AIX64-LD-PER-TARGET-SHARED: "{{.*}}ld{{(.exe)?}}"
55+
! AIX64-LD-PER-TARGET-SHARED-NOT: "-bnso"
56+
! AIX64-LD-PER-TARGET-SHARED-SAME: "-b64"
57+
! AIX64-LD-PER-TARGET-SHARED-SAME: "-bpT:0x100000000" "-bpD:0x110000000"
58+
! AIX64-LD-PER-TARGET-SHARED-SAME: "-lc"
59+
! AIX64-LD-PER-TARGET-SHARED-SAME: "-lflang_rt.runtime"
60+
! AIX64-LD-PER-TARGET-SHARED-SAME: "-lm"
61+
! AIX64-LD-PER-TARGET-SHARED-SAME: "-lpthread"
62+
63+
64+
! Check powerpc64le-unknown-linux-gnu 64-bit linking to shared flang-rt by default
65+
! RUN: %flang -Werror %s -### 2>&1 \
66+
! RUN: --target=powerpc64le-unknown-linux-gnu \
67+
! RUN: -resource-dir=%S/../../../clang/test/Driver/Inputs/resource_dir_with_per_target_subdir \
68+
! RUN: | FileCheck %s --check-prefixes=LOP64-LD-PER-TARGET-DEFAULT
69+
70+
! LOP64-LD-PER-TARGET-DEFAULT: "-fc1" "-triple" "powerpc64le-unknown-linux-gnu"
71+
! LOP64-LD-PER-TARGET-DEFAULT-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
72+
! LOP64-LD-PER-TARGET-DEFAULT: "{{.*}}ld{{(.exe)?}}"
73+
! LOP64-LD-PER-TARGET-DEFAULT-NOT: "-bnso"
74+
! LOP64-LD-PER-TARGET-DEFAULT-SAME: "-lflang_rt.runtime"
75+
! LOP64-LD-PER-TARGET-DEFAULT-SAME: "-lm"
76+
! LOP64-LD-PER-TARGET-DEFAULT-SAME: "-lc"
77+
78+
79+
! Check powerpc64le-unknown-linux-gnu 64-bit linking to static flang-rt by option
80+
! RUN: %flang -static-libflangrt -Werror %s -### 2>&1 \
3081
! RUN: --target=powerpc64le-unknown-linux-gnu \
3182
! RUN: -resource-dir=%S/../../../clang/test/Driver/Inputs/resource_dir_with_per_target_subdir \
32-
! RUN: | FileCheck %s --check-prefixes=LOP64-LD-PER-TARGET
33-
34-
! LOP64-LD-PER-TARGET-NOT: warning:
35-
! LOP64-LD-PER-TARGET: "-fc1" "-triple" "powerpc64le-unknown-linux-gnu"
36-
! LOP64-LD-PER-TARGET-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
37-
! LOP64-LD-PER-TARGET: "{{.*}}ld{{(.exe)?}}"
38-
! LOP64-LD-PER-TARGET-NOT: "-bnso"
39-
! LOP64-LD-PER-TARGET-SAME: "[[RESOURCE_DIR]]{{/|\\\\}}lib{{/|\\\\}}powerpc64le-unknown-linux-gnu{{/|\\\\}}libflang_rt.runtime.a"
40-
! LOP64-LD-PER-TARGET-SAME: "-lm"
41-
! LOP64-LD-PER-TARGET-SAME: "-lc"
83+
! RUN: | FileCheck %s --check-prefixes=LOP64-LD-PER-TARGET-STATIC
84+
85+
! LOP64-LD-PER-TARGET-STATIC: "-fc1" "-triple" "powerpc64le-unknown-linux-gnu"
86+
! LOP64-LD-PER-TARGET-STATIC-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
87+
! LOP64-LD-PER-TARGET-STATIC: "{{.*}}ld{{(.exe)?}}"
88+
! LOP64-LD-PER-TARGET-STATIC-NOT: "-bnso"
89+
! LOP64-LD-PER-TARGET-STATIC-SAME: "[[RESOURCE_DIR]]{{/|\\\\}}lib{{/|\\\\}}powerpc64le-unknown-linux-gnu{{/|\\\\}}libflang_rt.runtime.a"
90+
! LOP64-LD-PER-TARGET-STATIC-SAME: "-lm"
91+
! LOP64-LD-PER-TARGET-STATIC-SAME: "-lc"
92+
93+
94+
! Check powerpc64le-unknown-linux-gnu 64-bit linking to shared flang-rt by option
95+
! RUN: %flang -shared-libflangrt -Werror %s -### 2>&1 \
96+
! RUN: --target=powerpc64le-unknown-linux-gnu \
97+
! RUN: -resource-dir=%S/../../../clang/test/Driver/Inputs/resource_dir_with_per_target_subdir \
98+
! RUN: | FileCheck %s --check-prefixes=LOP64-LD-PER-TARGET-SHARED
99+
100+
! LOP64-LD-PER-TARGET-SHARED: "-fc1" "-triple" "powerpc64le-unknown-linux-gnu"
101+
! LOP64-LD-PER-TARGET-SHARED-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
102+
! LOP64-LD-PER-TARGET-SHARED: "{{.*}}ld{{(.exe)?}}"
103+
! LOP64-LD-PER-TARGET-SHARED-NOT: "-bnso"
104+
! LOP64-LD-PER-TARGET-SHARED-SAME: "-lflang_rt.runtime"
105+
! LOP64-LD-PER-TARGET-SHARED-SAME: "-lm"
106+
! LOP64-LD-PER-TARGET-SHARED-SAME: "-lc"

flang/test/Driver/linker-flags.f90

+18-2
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,33 @@
22
! invocation. These libraries are added on top of other standard runtime
33
! libraries that the Clang driver will include.
44

5-
! RUN: %flang -### --target=ppc64le-linux-gnu %S/Inputs/hello.f90 2>&1 | FileCheck %s --check-prefixes=CHECK,UNIX,UNIX-F128NONE
6-
! RUN: %flang -### --target=aarch64-apple-darwin %S/Inputs/hello.f90 2>&1 | FileCheck %s --check-prefixes=CHECK,DARWIN,DARWIN-F128%f128-lib
5+
! RUN: %flang -### --target=ppc64le-linux-gnu %S/Inputs/hello.f90 2>&1 | FileCheck %s --check-prefixes=CHECK,UNIX,UNIX-F128%f128-lib
76
! RUN: %flang -### --target=sparc-sun-solaris2.11 %S/Inputs/hello.f90 2>&1 | FileCheck %s --check-prefixes=CHECK,UNIX,SOLARIS-F128%f128-lib
87
! RUN: %flang -### --target=x86_64-unknown-freebsd %S/Inputs/hello.f90 2>&1 | FileCheck %s --check-prefixes=CHECK,BSD,BSD-F128%f128-lib
98
! RUN: %flang -### --target=x86_64-unknown-netbsd %S/Inputs/hello.f90 2>&1 | FileCheck %s --check-prefixes=CHECK,BSD,BSD-F128%f128-lib
109
! RUN: %flang -### --target=x86_64-unknown-openbsd %S/Inputs/hello.f90 2>&1 | FileCheck %s --check-prefixes=CHECK,BSD,BSD-F128%f128-lib
1110
! RUN: %flang -### --target=x86_64-unknown-dragonfly %S/Inputs/hello.f90 2>&1 | FileCheck %s --check-prefixes=CHECK,BSD,BSD-F128%f128-lib
11+
! RUN: %flang -### --target=aarch64-apple-darwin %S/Inputs/hello.f90 2>&1 | FileCheck %s --check-prefixes=CHECK,DARWIN,DARWIN-F128%f128-lib
1212
! RUN: %flang -### --target=x86_64-unknown-haiku %S/Inputs/hello.f90 2>&1 | FileCheck %s --check-prefixes=CHECK,HAIKU,HAIKU-F128%f128-lib
1313
! RUN: %flang -### --target=x86_64-windows-gnu %S/Inputs/hello.f90 2>&1 | FileCheck %s --check-prefixes=CHECK,MINGW,MINGW-F128%f128-lib
14+
1415
! RUN: %flang -### -rtlib=compiler-rt --target=aarch64-linux-gnu %S/Inputs/hello.f90 2>&1 | FileCheck %s --check-prefixes=CHECK,UNIX,COMPILER-RT
1516

1617
! NOTE: Clang's driver library, clangDriver, usually adds 'oldnames' on Windows,
1718
! but it is not needed when compiling Fortran code and they might bring in
1819
! additional dependencies. Make sure its not added.
1920
! RUN: %flang -### --target=aarch64-windows-msvc -fuse-ld= %S/Inputs/hello.f90 2>&1 | FileCheck %s --check-prefixes=CHECK,MSVC --implicit-check-not oldnames
2021

22+
! RUN: %flang -### --target=ppc64le-linux-gnu -static-libflangrt %S/Inputs/hello.f90 2>&1 | FileCheck %s --check-prefixes=UNIX-STATIC-FLANGRT
23+
! RUN: %flang -### --target=sparc-sun-solaris2.11 -static-libflangrt %S/Inputs/hello.f90 2>&1 | FileCheck %s --check-prefixes=UNIX-STATIC-FLANGRT
24+
! RUN: %flang -### --target=x86_64-unknown-freebsd -static-libflangrt %S/Inputs/hello.f90 2>&1 | FileCheck %s --check-prefixes=BSD-STATIC-FLANGRT
25+
! RUN: %flang -### --target=x86_64-unknown-netbsd -static-libflangrt %S/Inputs/hello.f90 2>&1 | FileCheck %s --check-prefixes=BSD-STATIC-FLANGRT
26+
! RUN: %flang -### --target=x86_64-unknown-openbsd -static-libflangrt %S/Inputs/hello.f90 2>&1 | FileCheck %s --check-prefixes=BSD-STATIC-FLANGRT
27+
! RUN: %flang -### --target=x86_64-unknown-dragonfly -static-libflangrt %S/Inputs/hello.f90 2>&1 | FileCheck %s --check-prefixes=CHECK,BSD-STATIC-FLANGRT
28+
! RUN: %flang -### --target=aarch64-apple-darwin -static-libflangrt %S/Inputs/hello.f90 2>&1 | FileCheck %s --check-prefixes=DARWIN-STATIC-FLANGRT
29+
! RUN: %flang -### --target=x86_64-unknown-haiku -static-libflangrt %S/Inputs/hello.f90 2>&1 | FileCheck %s --check-prefixes=HAIKU-STATIC-FLANGRT
30+
! RUN: %flang -### --target=x86_64-windows-gnu -static-libflangrt %S/Inputs/hello.f90 2>&1 | FileCheck %s --check-prefixes=MINGW-STATIC-FLANGRT
31+
2132
! Compiler invocation to generate the object file
2233
! CHECK-LABEL: {{.*}} "-emit-obj"
2334
! CHECK-SAME: "-o" "[[object_file:.*\.o]]" {{.*}}Inputs/hello.f90
@@ -35,31 +46,36 @@
3546
! SOLARIS-F128LIBQUADMATH-SAME: "-lflang_rt.quadmath" "-z" "ignore" "-lquadmath" "-z" "record"
3647
! UNIX-SAME: "-lflang_rt.runtime" "-lm"
3748
! COMPILER-RT: "{{.*}}{{\\|/}}libclang_rt.builtins.a"
49+
! UNIX-STATIC-FLANGRT: "{{.*}}{{\\|/}}libflang_rt.runtime.a"
3850

3951
! BSD-LABEL: "{{.*}}ld{{(\.exe)?}}"
4052
! BSD-SAME: "[[object_file]]"
4153
! BSD-F128NONE-NOT: flang_rt.quadmath
4254
! BSD-F128LIBQUADMATH-SAME: "-lflang_rt.quadmath" "--as-needed" "-lquadmath" "--no-as-needed"
4355
! BSD-SAME: -lflang_rt.runtime
4456
! BSD-SAME: -lexecinfo
57+
! BSD-STATIC-FLANGRT: "{{.*}}{{\\|/}}libflang_rt.runtime.a"
4558

4659
! DARWIN-LABEL: "{{.*}}ld{{(\.exe)?}}"
4760
! DARWIN-SAME: "[[object_file]]"
4861
! DARWIN-F128NONE-NOT: libflang_rt.quadmath
4962
! DARWIN-F128LIBQUADMATH-SAME: "-lflang_rt.quadmath" "--as-needed" "-lquadmath" "--no-as-needed"
5063
! DARWIN-SAME: -lflang_rt.runtime
64+
! DARWIN-STATIC-FLANGRT: "{{.*}}{{\\|/}}libclang_rt.runtime_osx.a"
5165

5266
! HAIKU-LABEL: "{{.*}}ld{{(\.exe)?}}"
5367
! HAIKU-SAME: "[[object_file]]"
5468
! HAIKU-F128NONE-NOT: libflang_rt.quadmath
5569
! HAIKU-F128LIBQUADMATH-SAME: "-lflang_rt.quadmath" "--as-needed" "-lquadmath" "--no-as-needed"
5670
! HAIKU-SAME: "-lflang_rt.runtime"
71+
! HAIKU-STATIC-FLANGRT: "{{.*}}{{\\|/}}libflang_rt.runtime.a"
5772

5873
! MINGW-LABEL: "{{.*}}ld{{(\.exe)?}}"
5974
! MINGW-SAME: "[[object_file]]"
6075
! MINGW-F128NONE-NOT: libflang_rt.quadmath
6176
! MINGW-F128LIBQUADMATH-SAME: "-lflang_rt.quadmath" "--as-needed" "-lquadmath" "--no-as-needed"
6277
! MINGW-SAME: -lflang_rt.runtime
78+
! MINGW-STATIC-FLANGRT: "{{.*}}{{\\|/}}libflang_rt.runtime.a"
6379

6480
! NOTE: This also matches lld-link (when CLANG_DEFAULT_LINKER=lld) and
6581
! any .exe suffix that is added when resolving to the full path of

0 commit comments

Comments
 (0)