Persist TargetMap between compilation sessions
Currently, the annotation processor's TargetMap is only persisted within a JVM instance. This means that when Mixin is used in a multi-project Gradle build (e.g. SpongeForge and SpongeCommon), both the main project (SpongeForge) and the sub-project (SpongeCommon) must be compiled at the same time. This unnecessary increases the duration of the build, since Gradle could otherwise skip compilation of a sub-project.
It would be very useful if Mixin could persist its TargetMap between compilation sessions. This would allow the TargetMap for a sub-project to be re-used, allowing just the outer Gradle project to be rebuilt.
This might require integration with MixinGradle - e.g. requiring the user to indicate that a subproject should be considered a 'sub-Mixin' project.
As you've already identified, the scaffolding to support this is already there, but is only used internally. The generated maps would need to be moved to the build directory somewhere, and also tracked via gradle task outputs so they could be appropriately marked as dirty if any changes in the upstream projects occur. But I don't see any fundamental issue with exposing this functionality to the user, since it enables partial recompiles as you've mentioned.
I still think the default should be the internal behaviour, so that the AP works out of the box and there are no potential sources of old targetmaps accidentally being used when the user doesn't control their lifecyle. Putting something into MixinGradle would seem to be the best/most consistent way to expose this functionality anyway, then there's no possibility of screwing up gradle boilerplate.