You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
rsc_compile.py should be able to be converted to a set of v2 @rules. These should all be made into their own issues/PRs.
Wrap the hermetic local ExecuteProcessRequests/etc in something like ScalaCompileRequest/ScalaCompileResponse. Do this for rsc, zinc, metacp, metai, etc (these can be landed separately).
Convert each Job in the zinc compile to use these ExecuteProcessRequest/etc wrappers by synchronously invoking the engine.
Make the rules recursive (as we do with e.g. TransitiveHydratedTargets) so that we can convert all of quelea/zinc compile to just be a single engine invocation per target root.
Figure out the interaction with v1 caching and products. ClasspathEntrys already have digests -- we can consider something like the BuildInvalidator to materialize digests on demand to consume by v1 tasks (so v1 tasks would be able to lazily materialize classpath entries -- but we would never need to materialize compile output that the downstream v1 task doesn't ask for)!
Allow compiling some targets with rsc and compiling other targets (containing rsc-incompatible scala) with pure zinc, then running metacp on them in order to generate input for downstream rsc-compatible scala targets. This means we can blacklist incompatible targets and break them down alongside rsc improvements instead of whitelisting rsc-compatible code.
Note that currently we eagerly materialize the compile output into the workdir on each compile invocation -- we can remove this first, or later. Then we can implement the recursive rules by maintaining a mapping of target -> classpath and passing it down through recursive rule invocations, and flattening it when we need to generate a classpath for a following compile (there's an example of how to do the flattening somewhere in v1 zinc land). Then we can consider adapting something like the BuildInvalidator to allow v1 tasks to consume digests so we never have to materialize anything we don't need.
The text was updated successfully, but these errors were encountered:
rsc_compile.py
should be able to be converted to a set of v2@rule
s. These should all be made into their own issues/PRs.ExecuteProcessRequest
s/etc in something likeScalaCompileRequest
/ScalaCompileResponse
. Do this forrsc
,zinc
,metacp
,metai
, etc (these can be landed separately).Job
in the zinc compile to use theseExecuteProcessRequest
/etc wrappers by synchronously invoking the engine.TransitiveHydratedTargets
) so that we can convert all of quelea/zinc compile to just be a single engine invocation per target root.ClasspathEntry
s already have digests -- we can consider something like theBuildInvalidator
to materialize digests on demand to consume by v1 tasks (so v1 tasks would be able to lazily materialize classpath entries -- but we would never need to materialize compile output that the downstream v1 task doesn't ask for)!Note that currently we eagerly materialize the compile output into the workdir on each compile invocation -- we can remove this first, or later. Then we can implement the recursive rules by maintaining a mapping of
target -> classpath
and passing it down through recursive rule invocations, and flattening it when we need to generate a classpath for a following compile (there's an example of how to do the flattening somewhere in v1 zinc land). Then we can consider adapting something like theBuildInvalidator
to allow v1 tasks to consume digests so we never have to materialize anything we don't need.The text was updated successfully, but these errors were encountered: