14
14
"haskell_cc_libraries_aspect" ,
15
15
"link_libraries" ,
16
16
"merge_HaskellCcLibrariesInfo" ,
17
+ "merge_cc_shared_library_infos" ,
17
18
)
18
19
load (":private/context.bzl" , "haskell_context" , "render_env" )
19
20
load (":private/expansions.bzl" , "expand_make_variables" )
@@ -48,6 +49,7 @@ HaskellReplLoadInfo = provider(
48
49
"import_dirs" : "Depset of Haskell import directories." ,
49
50
"cc_libraries_info" : "HaskellCcLibrariesInfo of transitive C dependencies." ,
50
51
"cc_info" : "CcInfo of transitive C dependencies." ,
52
+ "cc_shared_library_infos" : "CcSharedLibraryInfo providers of transitive C dependencies." ,
51
53
"compiler_flags" : "Flags to pass to the Haskell compiler." ,
52
54
"repl_ghci_args" : "Arbitrary extra arguments to pass to GHCi. This extends `compiler_flags` and `repl_ghci_args` from the toolchain" ,
53
55
"data_runfiles" : "Runtime data dependencies of this target, i.e. the files and runfiles of the `data` attribute." ,
@@ -68,6 +70,7 @@ HaskellReplDepInfo = provider(
68
70
"interface_dirs" : "Set of interface dirs for all the dependencies" ,
69
71
"cc_libraries_info" : "HaskellCcLibrariesInfo of transitive C dependencies." ,
70
72
"cc_info" : "CcInfo of the package itself (includes its transitive dependencies)." ,
73
+ "cc_shared_library_infos" : "CcSharedLibraryInfo providers of transitive C dependencies." ,
71
74
"runfiles" : "Runfiles of this target." ,
72
75
},
73
76
)
@@ -146,6 +149,7 @@ def _merge_HaskellReplLoadInfo(load_infos):
146
149
import_dirs = depset ()
147
150
cc_libraries_infos = []
148
151
cc_infos = []
152
+ cc_shared_library_infos = []
149
153
compiler_flags = []
150
154
repl_ghci_args = []
151
155
data_runfiles = []
@@ -158,6 +162,7 @@ def _merge_HaskellReplLoadInfo(load_infos):
158
162
import_dirs = depset (transitive = [import_dirs , load_info .import_dirs ])
159
163
cc_libraries_infos .append (load_info .cc_libraries_info )
160
164
cc_infos .append (load_info .cc_info )
165
+ cc_shared_library_infos .extend (load_info .cc_shared_library_infos )
161
166
compiler_flags += load_info .compiler_flags
162
167
repl_ghci_args += load_info .repl_ghci_args
163
168
data_runfiles .append (load_info .data_runfiles )
@@ -171,6 +176,7 @@ def _merge_HaskellReplLoadInfo(load_infos):
171
176
import_dirs = import_dirs ,
172
177
cc_libraries_info = merge_HaskellCcLibrariesInfo (infos = cc_libraries_infos ),
173
178
cc_info = cc_common .merge_cc_infos (cc_infos = cc_infos ),
179
+ cc_shared_library_infos = cc_shared_library_infos ,
174
180
compiler_flags = compiler_flags ,
175
181
repl_ghci_args = repl_ghci_args ,
176
182
data_runfiles = _merge_runfiles (data_runfiles ),
@@ -180,11 +186,13 @@ def _merge_HaskellReplLoadInfo(load_infos):
180
186
def _merge_HaskellReplLoadInfoMulti (root_info , load_infos ):
181
187
cc_libraries_infos = []
182
188
cc_infos = []
189
+ cc_shared_library_infos = []
183
190
data_runfiles = []
184
191
java_deps = []
185
192
for load_info in load_infos :
186
193
cc_libraries_infos .append (load_info .cc_libraries_info )
187
194
cc_infos .append (load_info .cc_info )
195
+ cc_shared_library_infos .extend (load_info .cc_shared_library_infos )
188
196
data_runfiles .append (load_info .data_runfiles )
189
197
java_deps .append (load_info .java_deps )
190
198
@@ -197,6 +205,7 @@ def _merge_HaskellReplLoadInfoMulti(root_info, load_infos):
197
205
import_dirs = root_info .import_dirs ,
198
206
cc_libraries_info = merge_HaskellCcLibrariesInfo (infos = cc_libraries_infos ),
199
207
cc_info = cc_common .merge_cc_infos (cc_infos = cc_infos ),
208
+ cc_shared_library_infos = cc_shared_library_infos ,
200
209
compiler_flags = root_info .compiler_flags ,
201
210
repl_ghci_args = root_info .repl_ghci_args ,
202
211
data_runfiles = _merge_runfiles (data_runfiles ),
@@ -209,6 +218,7 @@ def _merge_HaskellReplDepInfo(dep_infos, dep_infos_for_package_dbs = []):
209
218
interface_dirs = depset ()
210
219
cc_libraries_infos = []
211
220
cc_infos = []
221
+ cc_shared_library_infos = []
212
222
runfiles = []
213
223
214
224
for dep_info in dep_infos :
@@ -217,6 +227,7 @@ def _merge_HaskellReplDepInfo(dep_infos, dep_infos_for_package_dbs = []):
217
227
interface_dirs = depset (transitive = [interface_dirs , dep_info .interface_dirs ])
218
228
cc_libraries_infos .append (dep_info .cc_libraries_info )
219
229
cc_infos .append (dep_info .cc_info )
230
+ cc_shared_library_infos .extend (dep_info .cc_shared_library_infos )
220
231
runfiles .append (dep_info .runfiles )
221
232
222
233
for dep_info in dep_infos_for_package_dbs :
@@ -229,6 +240,7 @@ def _merge_HaskellReplDepInfo(dep_infos, dep_infos_for_package_dbs = []):
229
240
interface_dirs = interface_dirs ,
230
241
cc_libraries_info = merge_HaskellCcLibrariesInfo (infos = cc_libraries_infos ),
231
242
cc_info = cc_common .merge_cc_infos (cc_infos = cc_infos ),
243
+ cc_shared_library_infos = cc_shared_library_infos ,
232
244
runfiles = _merge_runfiles (runfiles ),
233
245
)
234
246
@@ -260,6 +272,11 @@ def _create_HaskellReplCollectInfo(target, dep_labels, dep_package_ids, dep_pack
260
272
for dep in getattr (ctx .rule .attr , "deps" , []) + getattr (ctx .rule .attr , "narrowed_deps" , [])
261
273
if CcInfo in dep and not HaskellInfo in dep
262
274
]
275
+ ccSharedLibraryInfoDeps = [
276
+ dep
277
+ for dep in getattr (ctx .rule .attr , "deps" , []) + getattr (ctx .rule .attr , "narrowed_deps" , [])
278
+ if CcSharedLibraryInfo in dep and not HaskellInfo in dep
279
+ ]
263
280
if HaskellLibraryInfo in target :
264
281
package_id = target [HaskellLibraryInfo ].package_id
265
282
load_info = HaskellReplLoadInfo (
@@ -269,12 +286,19 @@ def _create_HaskellReplCollectInfo(target, dep_labels, dep_package_ids, dep_pack
269
286
boot_files = hs_info .boot_files ,
270
287
module_names = hs_info .module_names ,
271
288
import_dirs = set .to_depset (hs_info .import_dirs ),
272
- cc_libraries_info = deps_HaskellCcLibrariesInfo (ccInfoDeps ),
289
+ cc_libraries_info = deps_HaskellCcLibrariesInfo (ccInfoDeps + ccSharedLibraryInfoDeps ),
273
290
cc_info = cc_common .merge_cc_infos (cc_infos = [
274
291
# Collect pure C library dependencies, no Haskell dependencies.
275
292
dep [CcInfo ]
276
293
for dep in ccInfoDeps
277
294
]),
295
+ cc_shared_library_infos = [merge_cc_shared_library_infos (
296
+ owner = ctx .label ,
297
+ cc_shared_library_infos = [
298
+ dep [CcSharedLibraryInfo ]
299
+ for dep in ccSharedLibraryInfoDeps
300
+ ],
301
+ )],
278
302
compiler_flags = hs_info .user_compile_flags ,
279
303
repl_ghci_args = hs_info .user_repl_flags ,
280
304
data_runfiles = _data_runfiles (ctx , ctx .rule , "data" ),
@@ -290,6 +314,7 @@ def _create_HaskellReplCollectInfo(target, dep_labels, dep_package_ids, dep_pack
290
314
interface_dirs = hs_info .interface_dirs ,
291
315
cc_libraries_info = target [HaskellCcLibrariesInfo ],
292
316
cc_info = target [CcInfo ],
317
+ cc_shared_library_infos = [target [CcSharedLibraryInfo ]] if CcSharedLibraryInfo in target else [],
293
318
runfiles = target [DefaultInfo ].default_runfiles ,
294
319
)
295
320
dep_infos [target .label ] = dep_info
@@ -492,7 +517,9 @@ def _compiler_flags_and_inputs(hs, cc, repl_info, get_dirname, static = False, i
492
517
repl_info .load_info .cc_info ,
493
518
repl_info .dep_info .cc_info ,
494
519
])
495
- all_libraries = [lib for li in cc_info .linking_context .linker_inputs .to_list () for lib in li .libraries ]
520
+ cc_shared_library_infos = repl_info .load_info .cc_shared_library_infos + repl_info .dep_info .cc_shared_library_infos
521
+ linker_inputs = cc_info .linking_context .linker_inputs .to_list () + [info .linker_input for info in cc_shared_library_infos ]
522
+ all_libraries = [lib for li in linker_inputs for lib in li .libraries ]
496
523
cc_libraries = get_cc_libraries (cc_libraries_info , all_libraries )
497
524
if static :
498
525
cc_library_files = _concat (get_library_files (hs , cc_libraries_info , cc_libraries ))
0 commit comments