Skip to content

Commit 34e4e5e

Browse files
authored
[flang][Driver] Support -rpath, -shared, and -static in the frontend (#66702)
Enable -rpath, -shared, and -static for the flang frontend. This brings it in line with clang. Fixes issue #65546.
1 parent cb4627d commit 34e4e5e

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

clang/include/clang/Driver/Options.td

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5253,7 +5253,8 @@ def resource_dir : Separate<["-"], "resource-dir">,
52535253
def resource_dir_EQ : Joined<["-"], "resource-dir=">, Flags<[NoXarchOption]>,
52545254
Visibility<[ClangOption, CLOption, DXCOption]>,
52555255
Alias<resource_dir>;
5256-
def rpath : Separate<["-"], "rpath">, Flags<[LinkerInput]>, Group<Link_Group>;
5256+
def rpath : Separate<["-"], "rpath">, Flags<[LinkerInput]>, Group<Link_Group>,
5257+
Visibility<[ClangOption, CLOption, DXCOption, FlangOption]>;
52575258
def rtlib_EQ : Joined<["-", "--"], "rtlib=">, Visibility<[ClangOption, CLOption]>,
52585259
HelpText<"Compiler runtime library to use">;
52595260
def frtlib_add_rpath: Flag<["-"], "frtlib-add-rpath">, Flags<[NoArgumentUnused]>,
@@ -5304,7 +5305,8 @@ def segs__read__only__addr : Separate<["-"], "segs_read_only_addr">;
53045305
def segs__read__write__addr : Separate<["-"], "segs_read_write_addr">;
53055306
def segs__read__ : Joined<["-"], "segs_read_">;
53065307
def shared_libgcc : Flag<["-"], "shared-libgcc">;
5307-
def shared : Flag<["-", "--"], "shared">, Group<Link_Group>;
5308+
def shared : Flag<["-", "--"], "shared">, Group<Link_Group>,
5309+
Visibility<[ClangOption, CLOption, DXCOption, FlangOption]>;
53085310
def single__module : Flag<["-"], "single_module">;
53095311
def specs_EQ : Joined<["-", "--"], "specs=">, Group<Link_Group>;
53105312
def specs : Separate<["-", "--"], "specs">, Flags<[Unsupported]>;
@@ -5314,6 +5316,7 @@ def start_no_unused_arguments : Flag<["--"], "start-no-unused-arguments">,
53145316
def static_libgcc : Flag<["-"], "static-libgcc">;
53155317
def static_libstdcxx : Flag<["-"], "static-libstdc++">;
53165318
def static : Flag<["-", "--"], "static">, Group<Link_Group>,
5319+
Visibility<[ClangOption, CLOption, DXCOption, FlangOption]>,
53175320
Flags<[NoArgumentUnused]>;
53185321
def std_default_EQ : Joined<["-"], "std-default=">;
53195322
def std_EQ : Joined<["-", "--"], "std=">,

flang/test/Driver/dynamic-linker.f90

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
! Verify that certain linker flags are known to the frontend and are passed on
2+
! to the linker.
3+
4+
! RUN: %flang -### --target=x86_64-linux-gnu -rpath /path/to/dir -shared \
5+
! RUN: -static %s 2>&1 | FileCheck \
6+
! RUN: --check-prefixes=GNU-LINKER-OPTIONS %s
7+
! RUN: %flang -### --target=x86_64-windows-msvc -rpath /path/to/dir -shared \
8+
! RUN: -static %s 2>&1 | FileCheck \
9+
! RUN: --check-prefixes=MSVC-LINKER-OPTIONS %s
10+
11+
! TODO: Could the linker have an extension or a suffix?
12+
! GNU-LINKER-OPTIONS: "{{.*}}ld{{(.exe)?}}"
13+
! GNU-LINKER-OPTIONS-SAME: "-shared"
14+
! GNU-LINKER-OPTIONS-SAME: "-static"
15+
! GNU-LINKER-OPTIONS-SAME: "-rpath" "/path/to/dir"
16+
17+
! For MSVC, adding -static does not add any additional linker options.
18+
! MSVC-LINKER-OPTIONS: "{{.*}}link.exe"
19+
! MSVC-LINKER-OPTIONS-SAME: "-dll"
20+
! MSVC-LINKER-OPTIONS-SAME: "-rpath" "/path/to/dir"

0 commit comments

Comments
 (0)