[interop] Prepare interop driver for a metadata-only mode.

This commit is contained in:
Sergey Bogolepov
2019-11-01 17:46:12 +07:00
committed by Sergey Bogolepov
parent 8a8ba03f9e
commit e8ad4712d3
9 changed files with 194 additions and 67 deletions
@@ -83,7 +83,7 @@ private fun generatePlatformLibraries(target: String, inputDirectory: File, outp
"-no-default-libs", "-no-endorsed-libs", "-Xpurge-user-libs",
*def.depends.flatMap { listOf("-l", "$outputDirectory/${it.name}") }.toTypedArray())
println("Processing ${def.name}...")
K2Native.mainNoExit(invokeInterop("native", args))
invokeInterop("native", args)?.let { K2Native.mainNoExit(it) }
org.jetbrains.kotlin.cli.klib.main(arrayOf("install", outKlib,
"-target", target,
"-repository", "${outputDirectory.absolutePath}"
@@ -19,7 +19,11 @@ import org.jetbrains.kotlin.native.interop.tool.*
// TODO: this function should eventually be eliminated from 'utilities'.
// The interaction of interop and the compiler should be streamlined.
fun invokeInterop(flavor: String, args: Array<String>): Array<String> {
/**
* @return null if there is no need in compiler invocation.
* Otherwise returns array of compiler args.
*/
fun invokeInterop(flavor: String, args: Array<String>): Array<String>? {
val arguments = if (flavor == "native") CInteropArguments() else JSInteropArguments()
arguments.argParser.parse(args)
val outputFileName = arguments.output
@@ -68,7 +72,9 @@ fun invokeInterop(flavor: String, args: Array<String>): Array<String> {
additionalProperties.putAll(mapOf("cstubsname" to cstubsName, "import" to imports))
}
val cinteropArgsToCompiler = interop(flavor, args + additionalArgs, additionalProperties)
?: return null // There is no need in compiler invocation if we're generating only metadata.
val nativeStubs =
if (flavor == "wasm")
@@ -17,11 +17,11 @@ private fun mainImpl(args: Array<String>, konancMain: (Array<String>) -> Unit) {
konancMain(utilityArgs)
"cinterop" -> {
val konancArgs = invokeInterop("native", utilityArgs)
konancMain(konancArgs)
konancArgs?.let { konancMain(it) }
}
"jsinterop" -> {
val konancArgs = invokeInterop("wasm", utilityArgs)
konancMain(konancArgs)
konancArgs?.let { konancMain(it) }
}
"klib" ->
klibMain(utilityArgs)