Platform lib generator: Allow building metadata libraries
This commit is contained in:
committed by
Ilya Matveev
parent
be8622053e
commit
a4422c22e5
+3
-1
@@ -50,7 +50,7 @@ open class CommonInteropArguments(val argParser: ArgParser) {
|
|||||||
val repo by argParser.option(ArgType.String, shortName = "r", description = "repository to resolve dependencies")
|
val repo by argParser.option(ArgType.String, shortName = "r", description = "repository to resolve dependencies")
|
||||||
.multiple()
|
.multiple()
|
||||||
val mode by argParser.option(ArgType.Choice(listOf(MODE_METADATA, MODE_SOURCECODE)), description = "the way interop library is generated")
|
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,
|
val nodefaultlibs by argParser.option(ArgType.Boolean, NODEFAULTLIBS,
|
||||||
description = "don't link the libraries from dist/klib automatically").default(false)
|
description = "don't link the libraries from dist/klib automatically").default(false)
|
||||||
val nodefaultlibsDeprecated by argParser.option(ArgType.Boolean, NODEFAULTLIBS_DEPRECATED,
|
val nodefaultlibsDeprecated by argParser.option(ArgType.Boolean, NODEFAULTLIBS_DEPRECATED,
|
||||||
@@ -70,6 +70,8 @@ open class CommonInteropArguments(val argParser: ArgParser) {
|
|||||||
companion object {
|
companion object {
|
||||||
const val MODE_SOURCECODE = "sourcecode"
|
const val MODE_SOURCECODE = "sourcecode"
|
||||||
const val MODE_METADATA = "metadata"
|
const val MODE_METADATA = "metadata"
|
||||||
|
|
||||||
|
const val DEFAULT_MODE = MODE_SOURCECODE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+17
-3
@@ -17,6 +17,9 @@ import org.jetbrains.kotlin.konan.target.HostManager
|
|||||||
import org.jetbrains.kotlin.konan.target.KonanTarget
|
import org.jetbrains.kotlin.konan.target.KonanTarget
|
||||||
import org.jetbrains.kotlin.konan.target.customerDistribution
|
import org.jetbrains.kotlin.konan.target.customerDistribution
|
||||||
import org.jetbrains.kotlin.konan.util.visibleName
|
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.PrintWriter
|
||||||
import java.io.StringWriter
|
import java.io.StringWriter
|
||||||
import java.util.concurrent.atomic.AtomicInteger
|
import java.util.concurrent.atomic.AtomicInteger
|
||||||
@@ -101,6 +104,13 @@ fun generatePlatformLibraries(args: Array<String>) {
|
|||||||
val cacheDirectoryPath by argParser.option(
|
val cacheDirectoryPath by argParser.option(
|
||||||
ArgType.String, "cache-directory", "c", "Cache output directory")
|
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(
|
val verbose by argParser.option(
|
||||||
ArgType.Boolean,
|
ArgType.Boolean,
|
||||||
"verbose", "v",
|
"verbose", "v",
|
||||||
@@ -138,7 +148,8 @@ fun generatePlatformLibraries(args: Array<String>) {
|
|||||||
val logger = Logger(if (verbose) Logger.Level.VERBOSE else Logger.Level.NORMAL)
|
val logger = Logger(if (verbose) Logger.Level.VERBOSE else Logger.Level.NORMAL)
|
||||||
|
|
||||||
generatePlatformLibraries(
|
generatePlatformLibraries(
|
||||||
target, inputDirectory, outputDirectory,
|
target, mode,
|
||||||
|
inputDirectory, outputDirectory,
|
||||||
saveTemps, cacheDirectory, stdlibFile,
|
saveTemps, cacheDirectory, stdlibFile,
|
||||||
cacheKind, cacheArgs, logger
|
cacheKind, cacheArgs, logger
|
||||||
)
|
)
|
||||||
@@ -175,6 +186,7 @@ private fun topoSort(defFiles: List<DefFile>): List<DefFile> {
|
|||||||
|
|
||||||
private fun generateLibrary(
|
private fun generateLibrary(
|
||||||
target: KonanTarget,
|
target: KonanTarget,
|
||||||
|
mode: String,
|
||||||
def: DefFile,
|
def: DefFile,
|
||||||
inputDirectory: File,
|
inputDirectory: File,
|
||||||
outputDirectory: File,
|
outputDirectory: File,
|
||||||
@@ -199,6 +211,7 @@ private fun generateLibrary(
|
|||||||
"-compiler-option", "-fmodules-cache-path=${tmpDirectory.child("clangModulesCache").absolutePath}",
|
"-compiler-option", "-fmodules-cache-path=${tmpDirectory.child("clangModulesCache").absolutePath}",
|
||||||
"-repo", outputDirectory.absolutePath,
|
"-repo", outputDirectory.absolutePath,
|
||||||
"-no-default-libs", "-no-endorsed-libs", "-Xpurge-user-libs", "-nopack",
|
"-no-default-libs", "-no-endorsed-libs", "-Xpurge-user-libs", "-nopack",
|
||||||
|
"-mode", mode,
|
||||||
*def.depends.flatMap { listOf("-l", "$outputDirectory/${it.name}") }.toTypedArray()
|
*def.depends.flatMap { listOf("-l", "$outputDirectory/${it.name}") }.toTypedArray()
|
||||||
)
|
)
|
||||||
logger.verbose("Run cinterop with args: ${cinteropArgs.joinToString(separator = " ")}")
|
logger.verbose("Run cinterop with args: ${cinteropArgs.joinToString(separator = " ")}")
|
||||||
@@ -277,7 +290,8 @@ private fun buildStdlibCache(
|
|||||||
K2Native.mainNoExit(compilerArgs)
|
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,
|
saveTemps: Boolean, cacheDirectory: File?, stdlibFile: File,
|
||||||
cacheKind: String, cacheArgs: List<String>,
|
cacheKind: String, cacheArgs: List<String>,
|
||||||
logger: Logger) {
|
logger: Logger) {
|
||||||
@@ -345,7 +359,7 @@ private fun generatePlatformLibraries(target: KonanTarget, inputDirectory: File,
|
|||||||
}
|
}
|
||||||
|
|
||||||
logger.log("Processing ${def.name} (${countProcessed.incrementAndGet()}/$countTotal)...")
|
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) {
|
if (cacheDirectory != null) {
|
||||||
buildCache(target, def, outputDirectory, cacheDirectory, cacheKind, cacheArgs, logger)
|
buildCache(target, def, outputDirectory, cacheDirectory, cacheKind, cacheArgs, logger)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user