@@ -9,7 +9,6 @@ import java.io.File
99import javax.inject.Inject
1010import org.gradle.api.NamedDomainObjectContainer
1111import org.gradle.api.file.ConfigurableFileCollection
12- import org.gradle.api.file.Directory
1312import org.gradle.api.file.DirectoryProperty
1413import org.gradle.api.file.FileSystemOperations
1514import org.gradle.api.model.ObjectFactory
@@ -58,24 +57,20 @@ constructor(
5857 abstract val outputApiBuildDir: DirectoryProperty
5958
6059 @get:LocalState
61- val supportedTargetsDir : File get() = temporaryDir.resolve( " klib-supported " )
60+ internal val workDir : File get() = temporaryDir
6261
63- @get:LocalState
64- val unsupportedTargetsDir: File get() = temporaryDir.resolve(" klib-unsupported" )
62+ private val klibTargetsDir = object {
63+ private val klibDir: File get() = workDir.resolve(" klib" )
64+ val supported: File get() = klibDir.resolve(" supported" )
65+ val unsupported: File get() = klibDir.resolve(" unsupported" )
66+ val extracted: File get() = klibDir.resolve(" extracted" )
67+ }
6568
6669 @TaskAction
6770 fun generate () {
6871 val workQueue = prepareWorkQueue()
6972
70- val outputApiBuildDir = outputApiBuildDir.get()
71- fs.delete { delete(outputApiBuildDir) }
72- outputApiBuildDir.asFile.mkdirs()
73-
74- fs.delete { delete(supportedTargetsDir) }
75- supportedTargetsDir.mkdirs()
76-
77- fs.delete { delete(unsupportedTargetsDir) }
78- unsupportedTargetsDir.mkdirs()
73+ prepareDirectories()
7974
8075 logger.lifecycle(" [$path ] got ${targets.size} targets : ${targets.joinToString { it.name }} " )
8176
@@ -84,7 +79,7 @@ constructor(
8479 generateJvmTargets(
8580 workQueue = workQueue,
8681 jvmTargets = enabledTargets.withType<BCVJvmTarget >(),
87- outputApiBuildDir = outputApiBuildDir,
82+ outputApiBuildDir = outputApiBuildDir.get().asFile ,
8883 )
8984
9085 // TODO log when klib file doesn't exist
@@ -96,7 +91,7 @@ constructor(
9691 generateKLibTargets(
9792 workQueue = workQueue,
9893 klibTargets = klibTargets,
99- outputApiBuildDir = outputApiBuildDir,
94+ outputApiBuildDir = outputApiBuildDir.get().asFile ,
10095 )
10196
10297 // The worker queue is asynchronous, so any code here won't wait for the workers to finish.
@@ -113,11 +108,26 @@ constructor(
113108 }
114109 }
115110
111+ private fun prepareDirectories () {
112+ val outputApiBuildDir = outputApiBuildDir.get()
113+ fs.delete { delete(outputApiBuildDir) }
114+ outputApiBuildDir.asFile.mkdirs()
115+
116+ fs.delete { delete(klibTargetsDir.supported) }
117+ klibTargetsDir.supported.mkdirs()
118+
119+ fs.delete { delete(klibTargetsDir.unsupported) }
120+ klibTargetsDir.unsupported.mkdirs()
121+
122+ fs.delete { delete(klibTargetsDir.extracted) }
123+ klibTargetsDir.extracted.mkdirs()
124+ }
125+
116126 // region JVM
117127
118128 private fun generateJvmTargets (
119129 workQueue : WorkQueue ,
120- outputApiBuildDir : Directory ,
130+ outputApiBuildDir : File ,
121131 jvmTargets : Collection <BCVJvmTarget >,
122132 ) {
123133 if (jvmTargets.isEmpty()) {
@@ -131,12 +141,12 @@ constructor(
131141 val outputDir = if (jvmTargets.size == 1 ) {
132142 outputApiBuildDir
133143 } else {
134- outputApiBuildDir.dir (target.platformType)
144+ outputApiBuildDir.resolve (target.platformType)
135145 }
136146
137147 workQueue.submit(
138148 target = target,
139- outputDir = outputDir.asFile ,
149+ outputDir = outputDir,
140150 )
141151 }
142152 }
@@ -173,10 +183,13 @@ constructor(
173183
174184 private fun generateKLibTargets (
175185 workQueue : WorkQueue ,
176- outputApiBuildDir : Directory ,
186+ outputApiBuildDir : File ,
177187 klibTargets : Collection <BCVKLibTarget >,
178188 ) {
179- if (klibTargets.isEmpty()) return
189+ if (klibTargets.isEmpty()) {
190+ logger.info(" [$path ] No enabled KLib targets" )
191+ return
192+ }
180193 logger.lifecycle(" [$path ] generating ${klibTargets.size} KLib targets : ${klibTargets.joinToString { it.name }} " )
181194
182195 val (supportedKLibTargets, unsupportedKLibTargets) =
@@ -188,10 +201,10 @@ constructor(
188201 workQueue.await()
189202
190203 val allTargetDumpFiles =
191- supportedTargetsDir .walk().filter { it.isFile }.toSet() union
192- unsupportedTargetsDir .walk().filter { it.isFile }.toSet()
204+ klibTargetsDir.supported .walk().filter { it.isFile }.toSet() union
205+ klibTargetsDir.unsupported .walk().filter { it.isFile }.toSet()
193206
194- mergeDumpFiles(workQueue, allTargetDumpFiles, outputApiBuildDir.asFile )
207+ mergeDumpFiles(workQueue, allTargetDumpFiles, outputApiBuildDir)
195208 }
196209
197210 private fun generateSupportedKLibTargets (
@@ -200,17 +213,17 @@ constructor(
200213 ) {
201214 logger.lifecycle(" [$path ] generating ${supportedKLibTargets.size} supported KLib targets : ${supportedKLibTargets.joinToString { it.name }} " )
202215
203- val supportedKLibGenDuration = measureTime {
216+ val duration = measureTime {
204217 supportedKLibTargets.forEach { target ->
205218 workQueue.submit(
206219 target = target,
207- outputDir = supportedTargetsDir ,
220+ outputDir = klibTargetsDir.supported ,
208221 )
209222 }
210223 workQueue.await()
211224 }
212225
213- logger.lifecycle(" [$path ] finished generating supported KLib targets in $supportedKLibGenDuration " )
226+ logger.lifecycle(" [$path ] finished generating supported KLib targets in $duration " )
214227 }
215228
216229 private fun generateUnsupportedKLibTargets (
@@ -219,19 +232,19 @@ constructor(
219232 ) {
220233 logger.lifecycle(" [$path ] generating ${unsupportedKLibTargets.size} unsupported KLib targets : ${unsupportedKLibTargets.joinToString { it.name }} " )
221234
222- val unsupportedKLibGenDuration = measureTime {
235+ val duration = measureTime {
223236 unsupportedKLibTargets.forEach { target ->
224237 workQueue.inferKLib(
225238 target = target,
226- supportedTargetDumpFiles = supportedTargetsDir .walk().filter { it.isFile }.toSet(),
239+ supportedTargetDumpFiles = klibTargetsDir.supported .walk().filter { it.isFile }.toSet(),
227240 extantApiDumpFile = extantApiDumpDir.asFile.orNull?.walk()?.filter { it.isFile }
228241 ?.firstOrNull(),
229- outputDir = unsupportedTargetsDir ,
242+ outputDir = klibTargetsDir.unsupported ,
230243 )
231244 }
232245 }
233246
234- logger.lifecycle(" [$path ] finished generating unsupported KLib targets in $unsupportedKLibGenDuration " )
247+ logger.lifecycle(" [$path ] finished generating unsupported KLib targets in $duration " )
235248 }
236249
237250
0 commit comments