From ffd34cf91f1fe29a49b744988ddfab11478138d6 Mon Sep 17 00:00:00 2001 From: Nikolay Igotti Date: Fri, 15 Nov 2019 18:34:47 +0300 Subject: [PATCH] Add cache generator to platform lib generator. --- .../utilities/GeneratePlatformLibraries.kt | 27 ++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/utilities/src/main/kotlin/org/jetbrains/kotlin/cli/utilities/GeneratePlatformLibraries.kt b/utilities/src/main/kotlin/org/jetbrains/kotlin/cli/utilities/GeneratePlatformLibraries.kt index 003b5f4463a..428d01f20a9 100644 --- a/utilities/src/main/kotlin/org/jetbrains/kotlin/cli/utilities/GeneratePlatformLibraries.kt +++ b/utilities/src/main/kotlin/org/jetbrains/kotlin/cli/utilities/GeneratePlatformLibraries.kt @@ -20,17 +20,22 @@ fun generatePlatformLibraries(args: Array) { ArgType.String, "target", "t", "Compilation target").required() val saveTemps by argParser.option( ArgType.Boolean, "save-temps", "s", "Save temporary files").default(false) + val cacheDirectoryPath by argParser.option( + ArgType.String, "cache-directory", "c", "Cache output directory") + argParser.parse(args) val inputDirectory = File(inputDirectoryPath) val outputDirectory = File(outputDirectoryPath) + val cacheDirectory = cacheDirectoryPath?.File() if (!inputDirectory.exists) throw Error("input directory doesn't exist") if (!outputDirectory.exists) { outputDirectory.mkdirs() } + File("${outputDirectoryPath}/../cache").mkdirs() - generatePlatformLibraries(target, inputDirectory, outputDirectory, saveTemps) + generatePlatformLibraries(target, inputDirectory, outputDirectory, saveTemps, cacheDirectory) } private class DefFile(val name: String, val depends: MutableList) { @@ -62,7 +67,8 @@ private fun topoSort(defFiles: List): List { return result } -private fun generatePlatformLibraries(target: String, inputDirectory: File, outputDirectory: File, saveTemps: Boolean) { +private fun generatePlatformLibraries(target: String, inputDirectory: File, outputDirectory: File, + saveTemps: Boolean, cacheDirectory: File?) { fun buildKlib(def: DefFile) { val file = File("$inputDirectory/${def.name}.def") File("${outputDirectory.absolutePath}/build-${def.name}").mkdirs() @@ -81,13 +87,28 @@ private fun generatePlatformLibraries(target: String, inputDirectory: File, outp "-target", target, "-repository", "${outputDirectory.absolutePath}" )) + if (cacheDirectory != null) + K2Native.mainNoExit(arrayOf("-p", "dynamic_cache", + "-target", target, + "-repo", "${outputDirectory.absolutePath}", + "-Xadd-cache=${outputDirectory.absolutePath}/${def.name}", + "-Xcache-directory=${cacheDirectory.absolutePath}")) } finally { if (!saveTemps) { File("$outputDirectory/build-${def.name}").deleteRecursively() } } } - println("generate platform libraries from $inputDirectory to $outputDirectory for $target") + if (cacheDirectory != null) { + val stdlib = inputDirectory.parentFile.parentFile.parentFile.child("klib/common/stdlib") + println("Caching standard library ${stdlib.absolutePath} to ${cacheDirectory.absolutePath}...") + K2Native.mainNoExit(arrayOf("-p", "dynamic_cache", + "-target", target, + "-Xadd-cache=${stdlib.absolutePath}", + "-Xcache-directory=${cacheDirectory.absolutePath}")) + } + + println("Generating platform libraries from $inputDirectory to $outputDirectory for $target") // Build dependencies graph. val defFiles = mutableMapOf() val dependsRegex = Regex("^depends = (.*)")