From a4422c22e56fc00c114d6083668eb8439ea8a294 Mon Sep 17 00:00:00 2001 From: Ilya Matveev Date: Tue, 11 Feb 2020 17:03:14 +0700 Subject: [PATCH] Platform lib generator: Allow building metadata libraries --- .../native/interop/gen/jvm/CommandLine.kt | 4 +++- .../utilities/GeneratePlatformLibraries.kt | 20 ++++++++++++++++--- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/CommandLine.kt b/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/CommandLine.kt index c9a216831ca..f50a426bacd 100644 --- a/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/CommandLine.kt +++ b/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/CommandLine.kt @@ -50,7 +50,7 @@ open class CommonInteropArguments(val argParser: ArgParser) { val repo by argParser.option(ArgType.String, shortName = "r", description = "repository to resolve dependencies") .multiple() val mode by argParser.option(ArgType.Choice(listOf(MODE_METADATA, MODE_SOURCECODE)), description = "the way interop library is generated") - .default(MODE_SOURCECODE) + .default(DEFAULT_MODE) val nodefaultlibs by argParser.option(ArgType.Boolean, NODEFAULTLIBS, description = "don't link the libraries from dist/klib automatically").default(false) val nodefaultlibsDeprecated by argParser.option(ArgType.Boolean, NODEFAULTLIBS_DEPRECATED, @@ -70,6 +70,8 @@ open class CommonInteropArguments(val argParser: ArgParser) { companion object { const val MODE_SOURCECODE = "sourcecode" const val MODE_METADATA = "metadata" + + const val DEFAULT_MODE = MODE_SOURCECODE } } 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 0fa6cef3355..b0e54a23931 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 @@ -17,6 +17,9 @@ import org.jetbrains.kotlin.konan.target.HostManager import org.jetbrains.kotlin.konan.target.KonanTarget import org.jetbrains.kotlin.konan.target.customerDistribution import org.jetbrains.kotlin.konan.util.visibleName +import org.jetbrains.kotlin.native.interop.tool.CommonInteropArguments.Companion.DEFAULT_MODE +import org.jetbrains.kotlin.native.interop.tool.CommonInteropArguments.Companion.MODE_METADATA +import org.jetbrains.kotlin.native.interop.tool.CommonInteropArguments.Companion.MODE_SOURCECODE import java.io.PrintWriter import java.io.StringWriter import java.util.concurrent.atomic.AtomicInteger @@ -101,6 +104,13 @@ fun generatePlatformLibraries(args: Array) { val cacheDirectoryPath by argParser.option( ArgType.String, "cache-directory", "c", "Cache output directory") + val mode by argParser.option( + ArgType.Choice(listOf(MODE_METADATA, MODE_SOURCECODE)), + fullName = "mode", + shortName = "m", + description = "The way interop library is generated." + ).default(DEFAULT_MODE) + val verbose by argParser.option( ArgType.Boolean, "verbose", "v", @@ -138,7 +148,8 @@ fun generatePlatformLibraries(args: Array) { val logger = Logger(if (verbose) Logger.Level.VERBOSE else Logger.Level.NORMAL) generatePlatformLibraries( - target, inputDirectory, outputDirectory, + target, mode, + inputDirectory, outputDirectory, saveTemps, cacheDirectory, stdlibFile, cacheKind, cacheArgs, logger ) @@ -175,6 +186,7 @@ private fun topoSort(defFiles: List): List { private fun generateLibrary( target: KonanTarget, + mode: String, def: DefFile, inputDirectory: File, outputDirectory: File, @@ -199,6 +211,7 @@ private fun generateLibrary( "-compiler-option", "-fmodules-cache-path=${tmpDirectory.child("clangModulesCache").absolutePath}", "-repo", outputDirectory.absolutePath, "-no-default-libs", "-no-endorsed-libs", "-Xpurge-user-libs", "-nopack", + "-mode", mode, *def.depends.flatMap { listOf("-l", "$outputDirectory/${it.name}") }.toTypedArray() ) logger.verbose("Run cinterop with args: ${cinteropArgs.joinToString(separator = " ")}") @@ -277,7 +290,8 @@ private fun buildStdlibCache( K2Native.mainNoExit(compilerArgs) } -private fun generatePlatformLibraries(target: KonanTarget, inputDirectory: File, outputDirectory: File, +private fun generatePlatformLibraries(target: KonanTarget, mode: String, + inputDirectory: File, outputDirectory: File, saveTemps: Boolean, cacheDirectory: File?, stdlibFile: File, cacheKind: String, cacheArgs: List, logger: Logger) { @@ -345,7 +359,7 @@ private fun generatePlatformLibraries(target: KonanTarget, inputDirectory: File, } logger.log("Processing ${def.name} (${countProcessed.incrementAndGet()}/$countTotal)...") - generateLibrary(target, def, inputDirectory, outputDirectory, tmpDirectory, logger) + generateLibrary(target, mode, def, inputDirectory, outputDirectory, tmpDirectory, logger) if (cacheDirectory != null) { buildCache(target, def, outputDirectory, cacheDirectory, cacheKind, cacheArgs, logger) }