@@ -631,7 +631,6 @@ def _build_haskell_lib(
631
631
md_file = md_file ,
632
632
pkgname = pkgname ,
633
633
worker = _persistent_worker (ctx ),
634
- worker_plugin = ctx .attrs ._worker_plugin if ctx .label .cell != "prelude" and ctx .attrs ._haskell_toolchain [HaskellToolchainInfo ].use_worker else None ,
635
634
)
636
635
solibs = {}
637
636
artifact_suffix = get_artifact_suffix (link_style , enable_profiling )
@@ -1195,7 +1194,6 @@ def haskell_binary_impl(ctx: AnalysisContext) -> list[Provider]:
1195
1194
md_file = md_file ,
1196
1195
worker = _persistent_worker (ctx ),
1197
1196
pkgname = pkgname ,
1198
- worker_plugin = ctx .attrs ._worker_plugin if hasattr (ctx .attrs , "_worker_plugin" ) else None ,
1199
1197
)
1200
1198
1201
1199
haskell_toolchain = ctx .attrs ._haskell_toolchain [HaskellToolchainInfo ]
@@ -1478,20 +1476,20 @@ worker = anon_rule(
1478
1476
"srcs_deps" : attrs .dict (attrs .string (), attrs .dep (), default = {}),
1479
1477
"srcs_envs" : attrs .dict (attrs .string (), attrs .string (), default = {}),
1480
1478
"template_deps" : attrs .list (attrs .dep (), default = []),
1481
- # N.B. the _worker_* attrs are only treated by the call site of the anon_target
1482
- "_worker_deps" : attrs .default_only (attrs .list (attrs .dep (), default = [])),
1483
- "_worker_srcs" : attrs .default_only (attrs .list (attrs .source (), default = [])),
1479
+ # N.B. allow_worker is only treated by the call site of the anon_target
1480
+ "allow_worker" : attrs .bool (),
1484
1481
} | native_common .link_style (),
1485
1482
artifact_promise_mappings = {
1486
1483
"worker" : lambda x : x [DefaultInfo ].default_outputs [0 ],
1487
1484
},
1488
1485
)
1489
1486
1490
1487
def _persistent_worker (ctx : AnalysisContext ) -> WorkerInfo | None :
1491
- if ctx .label . cell == "prelude" :
1488
+ if not ctx .attrs . allow_worker :
1492
1489
return None
1493
1490
1494
- if not ctx .attrs ._haskell_toolchain [HaskellToolchainInfo ].use_worker :
1491
+ tc = ctx .attrs ._haskell_toolchain [HaskellToolchainInfo ]
1492
+ if not tc .use_worker :
1495
1493
return None
1496
1494
1497
1495
worker_target = ctx .actions .anon_target (
@@ -1501,20 +1499,21 @@ def _persistent_worker(ctx: AnalysisContext) -> WorkerInfo | None:
1501
1499
"_generate_target_metadata" : ctx .attrs ._generate_target_metadata ,
1502
1500
"_ghc_wrapper" : ctx .attrs ._ghc_wrapper ,
1503
1501
"_haskell_toolchain" : ctx .attrs ._haskell_toolchain ,
1504
- "deps" : ctx . attrs . _worker_deps ,
1502
+ "deps" : tc . worker_deps ,
1505
1503
"link_style" : "shared" ,
1506
1504
"name" : "prelude//haskell:worker" ,
1507
- "srcs" : ctx . attrs . _worker_srcs ,
1508
- "compiler_flags" : ctx . attrs . _worker_compiler_flags + [
1505
+ "srcs" : tc . worker_srcs_multiplexer if tc . use_worker_multiplexer else tc . worker_srcs ,
1506
+ "compiler_flags" : tc . worker_compiler_flags + [
1509
1507
"-O2" ,
1510
1508
],
1511
- "linker_flags" : ctx . attrs . _worker_compiler_flags + [
1509
+ "linker_flags" : [
1512
1510
"-dynamic" ,
1513
1511
"-rtsopts=all" ,
1514
1512
"-with-rtsopts=-K512M -H -I5 -T" ,
1515
1513
"-threaded" ,
1516
1514
"-O2" ,
1517
1515
],
1516
+ "allow_worker" : False ,
1518
1517
},
1519
1518
)
1520
1519
return WorkerInfo (worker_target .artifact ("worker" ))
0 commit comments