@@ -56,52 +56,18 @@ impl LinkerInfo {
56
56
. collect ( ) ,
57
57
}
58
58
}
59
-
60
- pub fn to_linker < ' a > (
61
- & ' a self ,
62
- cmd : Command ,
63
- sess : & ' a Session ,
64
- flavor : LinkerFlavor ,
65
- ) -> Box < dyn Linker + ' a > {
66
- match flavor {
67
- LinkerFlavor :: Lld ( LldFlavor :: Link ) | LinkerFlavor :: Msvc => {
68
- Box :: new ( MsvcLinker { cmd, sess, info : self } ) as Box < dyn Linker >
69
- }
70
- LinkerFlavor :: Em => Box :: new ( EmLinker { cmd, sess, info : self } ) as Box < dyn Linker > ,
71
- LinkerFlavor :: Gcc => {
72
- Box :: new ( GccLinker { cmd, sess, info : self , hinted_static : false , is_ld : false } )
73
- as Box < dyn Linker >
74
- }
75
-
76
- LinkerFlavor :: Lld ( LldFlavor :: Ld )
77
- | LinkerFlavor :: Lld ( LldFlavor :: Ld64 )
78
- | LinkerFlavor :: Ld => {
79
- Box :: new ( GccLinker { cmd, sess, info : self , hinted_static : false , is_ld : true } )
80
- as Box < dyn Linker >
81
- }
82
-
83
- LinkerFlavor :: Lld ( LldFlavor :: Wasm ) => {
84
- Box :: new ( WasmLd :: new ( cmd, sess, self ) ) as Box < dyn Linker >
85
- }
86
-
87
- LinkerFlavor :: PtxLinker => Box :: new ( PtxLinker { cmd, sess } ) as Box < dyn Linker > ,
88
-
89
- LinkerFlavor :: BpfLinker => {
90
- Box :: new ( BpfLinker { cmd, sess, info : self } ) as Box < dyn Linker >
91
- }
92
- }
93
- }
94
59
}
95
60
96
61
// The third parameter is for env vars, used on windows to set up the
97
62
// path for MSVC to find its DLLs, and gcc to find its bundled
98
63
// toolchain
99
- pub fn get_linker (
100
- sess : & Session ,
64
+ pub fn get_linker < ' a > (
65
+ sess : & ' a Session ,
101
66
linker : & Path ,
102
67
flavor : LinkerFlavor ,
103
68
self_contained : bool ,
104
- ) -> Command {
69
+ info : & ' a LinkerInfo ,
70
+ ) -> Box < dyn Linker + ' a > {
105
71
let msvc_tool = windows_registry:: find_tool ( & sess. opts . target_triple . triple ( ) , "link.exe" ) ;
106
72
107
73
// If our linker looks like a batch script on Windows then to execute this
@@ -181,7 +147,35 @@ pub fn get_linker(
181
147
}
182
148
cmd. env ( "PATH" , env:: join_paths ( new_path) . unwrap ( ) ) ;
183
149
184
- cmd
150
+ // FIXME: Move `/LIBPATH` addition for uwp targets from the linker construction
151
+ // to the linker args construction.
152
+ assert ! ( cmd. get_args( ) . is_empty( ) || sess. target. vendor == "uwp" ) ;
153
+
154
+ match flavor {
155
+ LinkerFlavor :: Lld ( LldFlavor :: Link ) | LinkerFlavor :: Msvc => {
156
+ Box :: new ( MsvcLinker { cmd, sess, info } ) as Box < dyn Linker >
157
+ }
158
+ LinkerFlavor :: Em => Box :: new ( EmLinker { cmd, sess, info } ) as Box < dyn Linker > ,
159
+ LinkerFlavor :: Gcc => {
160
+ Box :: new ( GccLinker { cmd, sess, info, hinted_static : false , is_ld : false } )
161
+ as Box < dyn Linker >
162
+ }
163
+
164
+ LinkerFlavor :: Lld ( LldFlavor :: Ld )
165
+ | LinkerFlavor :: Lld ( LldFlavor :: Ld64 )
166
+ | LinkerFlavor :: Ld => {
167
+ Box :: new ( GccLinker { cmd, sess, info, hinted_static : false , is_ld : true } )
168
+ as Box < dyn Linker >
169
+ }
170
+
171
+ LinkerFlavor :: Lld ( LldFlavor :: Wasm ) => {
172
+ Box :: new ( WasmLd :: new ( cmd, sess, info) ) as Box < dyn Linker >
173
+ }
174
+
175
+ LinkerFlavor :: PtxLinker => Box :: new ( PtxLinker { cmd, sess } ) as Box < dyn Linker > ,
176
+
177
+ LinkerFlavor :: BpfLinker => Box :: new ( BpfLinker { cmd, sess, info } ) as Box < dyn Linker > ,
178
+ }
185
179
}
186
180
187
181
/// Linker abstraction used by `back::link` to build up the command to invoke a
0 commit comments