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):
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):
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 return HaskellReplDepInfo (
@@ -226,6 +237,7 @@ def _merge_HaskellReplDepInfo(dep_infos):
226237 interface_dirs = interface_dirs ,
227238 cc_libraries_info = merge_HaskellCcLibrariesInfo (infos = cc_libraries_infos ),
228239 cc_info = cc_common .merge_cc_infos (cc_infos = cc_infos ),
240+ cc_shared_library_infos = cc_shared_library_infos ,
229241 runfiles = _merge_runfiles (runfiles ),
230242 )
231243
@@ -257,6 +269,11 @@ def _create_HaskellReplCollectInfo(target, dep_labels, dep_package_ids, dep_pack
257269 for dep in getattr (ctx .rule .attr , "deps" , []) + getattr (ctx .rule .attr , "narrowed_deps" , [])
258270 if CcInfo in dep and not HaskellInfo in dep
259271 ]
272+ ccSharedLibraryInfoDeps = [
273+ dep
274+ for dep in getattr (ctx .rule .attr , "deps" , []) + getattr (ctx .rule .attr , "narrowed_deps" , [])
275+ if CcSharedLibraryInfo in dep and not HaskellInfo in dep
276+ ]
260277 if HaskellLibraryInfo in target :
261278 package_id = target [HaskellLibraryInfo ].package_id
262279 load_info = HaskellReplLoadInfo (
@@ -266,12 +283,19 @@ def _create_HaskellReplCollectInfo(target, dep_labels, dep_package_ids, dep_pack
266283 boot_files = hs_info .boot_files ,
267284 module_names = hs_info .module_names ,
268285 import_dirs = set .to_depset (hs_info .import_dirs ),
269- cc_libraries_info = deps_HaskellCcLibrariesInfo (ccInfoDeps ),
286+ cc_libraries_info = deps_HaskellCcLibrariesInfo (ccInfoDeps + ccSharedLibraryInfoDeps ),
270287 cc_info = cc_common .merge_cc_infos (cc_infos = [
271288 # Collect pure C library dependencies, no Haskell dependencies.
272289 dep [CcInfo ]
273290 for dep in ccInfoDeps
274291 ]),
292+ cc_shared_library_infos = [merge_cc_shared_library_infos (
293+ owner = ctx .label ,
294+ cc_shared_library_infos = [
295+ dep [CcSharedLibraryInfo ]
296+ for dep in ccSharedLibraryInfoDeps
297+ ],
298+ )],
275299 compiler_flags = hs_info .user_compile_flags ,
276300 repl_ghci_args = hs_info .user_repl_flags ,
277301 data_runfiles = _data_runfiles (ctx , ctx .rule , "data" ),
@@ -287,6 +311,7 @@ def _create_HaskellReplCollectInfo(target, dep_labels, dep_package_ids, dep_pack
287311 interface_dirs = hs_info .interface_dirs ,
288312 cc_libraries_info = target [HaskellCcLibrariesInfo ],
289313 cc_info = target [CcInfo ],
314+ cc_shared_library_infos = [target [CcSharedLibraryInfo ]] if CcSharedLibraryInfo in target else [],
290315 runfiles = target [DefaultInfo ].default_runfiles ,
291316 )
292317 dep_infos [target .label ] = dep_info
@@ -484,7 +509,9 @@ def _compiler_flags_and_inputs(hs, cc, repl_info, get_dirname, static = False, i
484509 repl_info .load_info .cc_info ,
485510 repl_info .dep_info .cc_info ,
486511 ])
487- all_libraries = [lib for li in cc_info .linking_context .linker_inputs .to_list () for lib in li .libraries ]
512+ cc_shared_library_infos = repl_info .load_info .cc_shared_library_infos + repl_info .dep_info .cc_shared_library_infos
513+ linker_inputs = cc_info .linking_context .linker_inputs .to_list () + [info .linker_input for info in cc_shared_library_infos ]
514+ all_libraries = [lib for li in linker_inputs for lib in li .libraries ]
488515 cc_libraries = get_cc_libraries (cc_libraries_info , all_libraries )
489516 if static :
490517 cc_library_files = _concat (get_library_files (hs , cc_libraries_info , cc_libraries ))
0 commit comments