1414 "haskell_cc_libraries_aspect" ,
1515 "link_libraries" ,
1616 "merge_HaskellCcLibrariesInfo" ,
17+ "merge_cc_shared_library_infos" ,
1718)
1819load (":private/context.bzl" , "haskell_context" , "render_env" )
1920load (":private/expansions.bzl" , "expand_make_variables" )
@@ -48,6 +49,7 @@ HaskellReplLoadInfo = provider(
4849 "import_dirs" : "Depset of Haskell import directories." ,
4950 "cc_libraries_info" : "HaskellCcLibrariesInfo of transitive C dependencies." ,
5051 "cc_info" : "CcInfo of transitive C dependencies." ,
52+ "cc_shared_library_infos" : "CcSharedLibraryInfo providers of transitive C dependencies." ,
5153 "compiler_flags" : "Flags to pass to the Haskell compiler." ,
5254 "repl_ghci_args" : "Arbitrary extra arguments to pass to GHCi. This extends `compiler_flags` and `repl_ghci_args` from the toolchain" ,
5355 "data_runfiles" : "Runtime data dependencies of this target, i.e. the files and runfiles of the `data` attribute." ,
@@ -68,6 +70,7 @@ HaskellReplDepInfo = provider(
6870 "interface_dirs" : "Set of interface dirs for all the dependencies" ,
6971 "cc_libraries_info" : "HaskellCcLibrariesInfo of transitive C dependencies." ,
7072 "cc_info" : "CcInfo of the package itself (includes its transitive dependencies)." ,
73+ "cc_shared_library_infos" : "CcSharedLibraryInfo providers of transitive C dependencies." ,
7174 "runfiles" : "Runfiles of this target." ,
7275 },
7376)
@@ -146,6 +149,7 @@ def _merge_HaskellReplLoadInfo(load_infos):
146149 import_dirs = depset ()
147150 cc_libraries_infos = []
148151 cc_infos = []
152+ cc_shared_library_infos = []
149153 compiler_flags = []
150154 repl_ghci_args = []
151155 data_runfiles = []
@@ -158,6 +162,7 @@ def _merge_HaskellReplLoadInfo(load_infos):
158162 import_dirs = depset (transitive = [import_dirs , load_info .import_dirs ])
159163 cc_libraries_infos .append (load_info .cc_libraries_info )
160164 cc_infos .append (load_info .cc_info )
165+ cc_shared_library_infos .extend (load_info .cc_shared_library_infos )
161166 compiler_flags += load_info .compiler_flags
162167 repl_ghci_args += load_info .repl_ghci_args
163168 data_runfiles .append (load_info .data_runfiles )
@@ -171,6 +176,7 @@ def _merge_HaskellReplLoadInfo(load_infos):
171176 import_dirs = import_dirs ,
172177 cc_libraries_info = merge_HaskellCcLibrariesInfo (infos = cc_libraries_infos ),
173178 cc_info = cc_common .merge_cc_infos (cc_infos = cc_infos ),
179+ cc_shared_library_infos = cc_shared_library_infos ,
174180 compiler_flags = compiler_flags ,
175181 repl_ghci_args = repl_ghci_args ,
176182 data_runfiles = _merge_runfiles (data_runfiles ),
@@ -180,11 +186,13 @@ def _merge_HaskellReplLoadInfo(load_infos):
180186def _merge_HaskellReplLoadInfoMulti (root_info , load_infos ):
181187 cc_libraries_infos = []
182188 cc_infos = []
189+ cc_shared_library_infos = []
183190 data_runfiles = []
184191 java_deps = []
185192 for load_info in load_infos :
186193 cc_libraries_infos .append (load_info .cc_libraries_info )
187194 cc_infos .append (load_info .cc_info )
195+ cc_shared_library_infos .extend (load_info .cc_shared_library_infos )
188196 data_runfiles .append (load_info .data_runfiles )
189197 java_deps .append (load_info .java_deps )
190198
@@ -197,6 +205,7 @@ def _merge_HaskellReplLoadInfoMulti(root_info, load_infos):
197205 import_dirs = root_info .import_dirs ,
198206 cc_libraries_info = merge_HaskellCcLibrariesInfo (infos = cc_libraries_infos ),
199207 cc_info = cc_common .merge_cc_infos (cc_infos = cc_infos ),
208+ cc_shared_library_infos = cc_shared_library_infos ,
200209 compiler_flags = root_info .compiler_flags ,
201210 repl_ghci_args = root_info .repl_ghci_args ,
202211 data_runfiles = _merge_runfiles (data_runfiles ),
@@ -209,6 +218,7 @@ def _merge_HaskellReplDepInfo(dep_infos, dep_infos_for_package_dbs = []):
209218 interface_dirs = depset ()
210219 cc_libraries_infos = []
211220 cc_infos = []
221+ cc_shared_library_infos = []
212222 runfiles = []
213223
214224 for dep_info in dep_infos :
@@ -217,6 +227,7 @@ def _merge_HaskellReplDepInfo(dep_infos, dep_infos_for_package_dbs = []):
217227 interface_dirs = depset (transitive = [interface_dirs , dep_info .interface_dirs ])
218228 cc_libraries_infos .append (dep_info .cc_libraries_info )
219229 cc_infos .append (dep_info .cc_info )
230+ cc_shared_library_infos .extend (dep_info .cc_shared_library_infos )
220231 runfiles .append (dep_info .runfiles )
221232
222233 for dep_info in dep_infos_for_package_dbs :
@@ -229,6 +240,7 @@ def _merge_HaskellReplDepInfo(dep_infos, dep_infos_for_package_dbs = []):
229240 interface_dirs = interface_dirs ,
230241 cc_libraries_info = merge_HaskellCcLibrariesInfo (infos = cc_libraries_infos ),
231242 cc_info = cc_common .merge_cc_infos (cc_infos = cc_infos ),
243+ cc_shared_library_infos = cc_shared_library_infos ,
232244 runfiles = _merge_runfiles (runfiles ),
233245 )
234246
@@ -260,6 +272,11 @@ def _create_HaskellReplCollectInfo(target, dep_labels, dep_package_ids, dep_pack
260272 for dep in getattr (ctx .rule .attr , "deps" , []) + getattr (ctx .rule .attr , "narrowed_deps" , [])
261273 if CcInfo in dep and not HaskellInfo in dep
262274 ]
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+ ]
263280 if HaskellLibraryInfo in target :
264281 package_id = target [HaskellLibraryInfo ].package_id
265282 load_info = HaskellReplLoadInfo (
@@ -269,12 +286,19 @@ def _create_HaskellReplCollectInfo(target, dep_labels, dep_package_ids, dep_pack
269286 boot_files = hs_info .boot_files ,
270287 module_names = hs_info .module_names ,
271288 import_dirs = set .to_depset (hs_info .import_dirs ),
272- cc_libraries_info = deps_HaskellCcLibrariesInfo (ccInfoDeps ),
289+ cc_libraries_info = deps_HaskellCcLibrariesInfo (ccInfoDeps + ccSharedLibraryInfoDeps ),
273290 cc_info = cc_common .merge_cc_infos (cc_infos = [
274291 # Collect pure C library dependencies, no Haskell dependencies.
275292 dep [CcInfo ]
276293 for dep in ccInfoDeps
277294 ]),
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+ )],
278302 compiler_flags = hs_info .user_compile_flags ,
279303 repl_ghci_args = hs_info .user_repl_flags ,
280304 data_runfiles = _data_runfiles (ctx , ctx .rule , "data" ),
@@ -290,6 +314,7 @@ def _create_HaskellReplCollectInfo(target, dep_labels, dep_package_ids, dep_pack
290314 interface_dirs = hs_info .interface_dirs ,
291315 cc_libraries_info = target [HaskellCcLibrariesInfo ],
292316 cc_info = target [CcInfo ],
317+ cc_shared_library_infos = [target [CcSharedLibraryInfo ]] if CcSharedLibraryInfo in target else [],
293318 runfiles = target [DefaultInfo ].default_runfiles ,
294319 )
295320 dep_infos [target .label ] = dep_info
@@ -492,7 +517,9 @@ def _compiler_flags_and_inputs(hs, cc, repl_info, get_dirname, static = False, i
492517 repl_info .load_info .cc_info ,
493518 repl_info .dep_info .cc_info ,
494519 ])
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 ]
496523 cc_libraries = get_cc_libraries (cc_libraries_info , all_libraries )
497524 if static :
498525 cc_library_files = _concat (get_library_files (hs , cc_libraries_info , cc_libraries ))
0 commit comments