[Interop] Add dependency on kotlinx-metadata-klib
This commit is contained in:
committed by
Sergey Bogolepov
parent
f25b4bf75f
commit
2e22d5a389
@@ -35,6 +35,7 @@ dependencies {
|
|||||||
compile project(':Interop:Indexer')
|
compile project(':Interop:Indexer')
|
||||||
compile "org.jetbrains.kotlin:kotlin-native-shared:$konanVersion"
|
compile "org.jetbrains.kotlin:kotlin-native-shared:$konanVersion"
|
||||||
compile project(path: ":endorsedLibraries:kotlinx.cli", configuration: "jvmRuntimeElements")
|
compile project(path: ":endorsedLibraries:kotlinx.cli", configuration: "jvmRuntimeElements")
|
||||||
|
compile "org.jetbrains.kotlinx:kotlinx-metadata-klib:0.0.1-dev-4"
|
||||||
|
|
||||||
testCompile "junit:junit:4.12"
|
testCompile "junit:junit:4.12"
|
||||||
testCompile "org.jetbrains.kotlin:kotlin-test-junit:$buildKotlinVersion"
|
testCompile "org.jetbrains.kotlin:kotlin-test-junit:$buildKotlinVersion"
|
||||||
|
|||||||
+3
-3
@@ -4,6 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.jetbrains.kotlin.native.interop.gen
|
package org.jetbrains.kotlin.native.interop.gen
|
||||||
|
|
||||||
|
import kotlinx.metadata.klib.KlibModuleMetadata
|
||||||
import org.jetbrains.kotlin.native.interop.gen.jvm.GenerationMode
|
import org.jetbrains.kotlin.native.interop.gen.jvm.GenerationMode
|
||||||
import org.jetbrains.kotlin.native.interop.gen.jvm.InteropConfiguration
|
import org.jetbrains.kotlin.native.interop.gen.jvm.InteropConfiguration
|
||||||
import org.jetbrains.kotlin.native.interop.gen.jvm.KotlinPlatform
|
import org.jetbrains.kotlin.native.interop.gen.jvm.KotlinPlatform
|
||||||
@@ -101,8 +102,7 @@ class StubIrDriver(
|
|||||||
sealed class Result {
|
sealed class Result {
|
||||||
object SourceCode : Result()
|
object SourceCode : Result()
|
||||||
|
|
||||||
// Will contain Km* objects.
|
class Metadata(val metadata: KlibModuleMetadata): Result()
|
||||||
class Metadata(): Result()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun run(): Result {
|
fun run(): Result {
|
||||||
@@ -133,7 +133,7 @@ class StubIrDriver(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun emitMetadata(builderResult: StubIrBuilderResult): Result.Metadata {
|
private fun emitMetadata(builderResult: StubIrBuilderResult): Result.Metadata {
|
||||||
return Result.Metadata()
|
return Result.Metadata(KlibModuleMetadata("test", emptyList(), emptyList()))
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun emitCFile(context: StubIrContext, cFile: Appendable, entryPoint: String?, nativeBridges: NativeBridges) {
|
private fun emitCFile(context: StubIrContext, cFile: Appendable, entryPoint: String?, nativeBridges: NativeBridges) {
|
||||||
|
|||||||
+13
-2
@@ -4,18 +4,22 @@
|
|||||||
*/
|
*/
|
||||||
package org.jetbrains.kotlin.native.interop.gen.jvm
|
package org.jetbrains.kotlin.native.interop.gen.jvm
|
||||||
|
|
||||||
|
import kotlinx.metadata.klib.KlibModuleMetadata
|
||||||
import org.jetbrains.kotlin.backend.common.serialization.KlibIrVersion
|
import org.jetbrains.kotlin.backend.common.serialization.KlibIrVersion
|
||||||
import org.jetbrains.kotlin.backend.common.serialization.metadata.KlibMetadataVersion
|
import org.jetbrains.kotlin.backend.common.serialization.metadata.KlibMetadataVersion
|
||||||
import org.jetbrains.kotlin.konan.CompilerVersion
|
|
||||||
import org.jetbrains.kotlin.konan.CURRENT
|
import org.jetbrains.kotlin.konan.CURRENT
|
||||||
|
import org.jetbrains.kotlin.konan.CompilerVersion
|
||||||
import org.jetbrains.kotlin.konan.file.File
|
import org.jetbrains.kotlin.konan.file.File
|
||||||
import org.jetbrains.kotlin.konan.library.impl.KonanLibraryWriterImpl
|
import org.jetbrains.kotlin.konan.library.impl.KonanLibraryWriterImpl
|
||||||
import org.jetbrains.kotlin.konan.target.KonanTarget
|
import org.jetbrains.kotlin.konan.target.KonanTarget
|
||||||
import org.jetbrains.kotlin.library.KotlinLibraryVersioning
|
import org.jetbrains.kotlin.library.KotlinLibraryVersioning
|
||||||
import org.jetbrains.kotlin.library.KotlinAbiVersion
|
import org.jetbrains.kotlin.library.KotlinAbiVersion
|
||||||
|
import org.jetbrains.kotlin.library.SerializedMetadata
|
||||||
|
import org.jetbrains.kotlin.util.removeSuffixIfPresent
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
data class LibraryCreationArguments(
|
data class LibraryCreationArguments(
|
||||||
|
val metadata: KlibModuleMetadata,
|
||||||
val outputPath: String,
|
val outputPath: String,
|
||||||
val moduleName: String,
|
val moduleName: String,
|
||||||
val nativeBitcodePath: String,
|
val nativeBitcodePath: String,
|
||||||
@@ -31,9 +35,16 @@ fun createInteropLibrary(arguments: LibraryCreationArguments) {
|
|||||||
metadataVersion = KlibMetadataVersion.INSTANCE.toString(),
|
metadataVersion = KlibMetadataVersion.INSTANCE.toString(),
|
||||||
irVersion = KlibIrVersion.INSTANCE.toString()
|
irVersion = KlibIrVersion.INSTANCE.toString()
|
||||||
)
|
)
|
||||||
|
val outputPathWithoutExtension = arguments.outputPath.removeSuffixIfPresent(".klib")
|
||||||
KonanLibraryWriterImpl(
|
KonanLibraryWriterImpl(
|
||||||
File(arguments.outputPath),arguments.moduleName, version, arguments.target
|
File(outputPathWithoutExtension),
|
||||||
|
arguments.moduleName,
|
||||||
|
version,
|
||||||
|
arguments.target
|
||||||
).apply {
|
).apply {
|
||||||
|
// TODO: Add write strategy that splits big fragments.
|
||||||
|
val metadata = arguments.metadata.write()
|
||||||
|
addMetadata(SerializedMetadata(metadata.header, metadata.fragments, metadata.fragmentNames))
|
||||||
addNativeBitcode(arguments.nativeBitcodePath)
|
addNativeBitcode(arguments.nativeBitcodePath)
|
||||||
addManifestAddend(arguments.manifest)
|
addManifestAddend(arguments.manifest)
|
||||||
commit()
|
commit()
|
||||||
|
|||||||
+8
-4
@@ -24,6 +24,7 @@ import org.jetbrains.kotlin.native.interop.gen.wasm.processIdlLib
|
|||||||
import org.jetbrains.kotlin.native.interop.indexer.*
|
import org.jetbrains.kotlin.native.interop.indexer.*
|
||||||
import org.jetbrains.kotlin.native.interop.tool.*
|
import org.jetbrains.kotlin.native.interop.tool.*
|
||||||
import kotlinx.cli.ArgParser
|
import kotlinx.cli.ArgParser
|
||||||
|
import org.jetbrains.kotlin.konan.library.KLIB_INTEROP_IR_PROVIDER_IDENTIFIER
|
||||||
import org.jetbrains.kotlin.konan.target.KonanTarget
|
import org.jetbrains.kotlin.konan.target.KonanTarget
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.lang.IllegalArgumentException
|
import java.lang.IllegalArgumentException
|
||||||
@@ -218,6 +219,8 @@ private fun processCLib(args: Array<String>, additionalArgs: Map<String, Any> =
|
|||||||
|
|
||||||
val (nativeIndex, compilation) = buildNativeIndex(library, verbose)
|
val (nativeIndex, compilation) = buildNativeIndex(library, verbose)
|
||||||
|
|
||||||
|
val moduleName = File(cinteropArguments.output).nameWithoutExtension
|
||||||
|
|
||||||
// Our current approach to arm64_32 support is to compile armv7k version of bitcode
|
// Our current approach to arm64_32 support is to compile armv7k version of bitcode
|
||||||
// for arm64_32. That's the reason for this substitution.
|
// for arm64_32. That's the reason for this substitution.
|
||||||
// TODO: Add proper support with the next LLVM update.
|
// TODO: Add proper support with the next LLVM update.
|
||||||
@@ -260,7 +263,7 @@ private fun processCLib(args: Array<String>, additionalArgs: Map<String, Any> =
|
|||||||
file.parentFile.mkdirs()
|
file.parentFile.mkdirs()
|
||||||
file
|
file
|
||||||
}
|
}
|
||||||
val driverOptions = StubIrDriver.DriverOptions(mode, entryPoint, File(outCFile.absolutePath), outKtFileCreator)
|
val driverOptions = StubIrDriver.DriverOptions(mode, entryPoint, moduleName, File(outCFile.absolutePath), outKtFileCreator)
|
||||||
val stubIrDriver = StubIrDriver(stubIrContext, driverOptions)
|
val stubIrDriver = StubIrDriver(stubIrContext, driverOptions)
|
||||||
stubIrDriver.run()
|
stubIrDriver.run()
|
||||||
}
|
}
|
||||||
@@ -272,9 +275,10 @@ private fun processCLib(args: Array<String>, additionalArgs: Map<String, Any> =
|
|||||||
_, oldValue, newValue ->
|
_, oldValue, newValue ->
|
||||||
warn("The package value `$oldValue` specified in .def file is overridden with explicit $newValue")
|
warn("The package value `$oldValue` specified in .def file is overridden with explicit $newValue")
|
||||||
}
|
}
|
||||||
|
|
||||||
def.manifestAddendProperties["interop"] = "true"
|
def.manifestAddendProperties["interop"] = "true"
|
||||||
|
if (stubIrOutput is StubIrDriver.Result.Metadata) {
|
||||||
|
def.manifestAddendProperties["ir_provider"] = KLIB_INTEROP_IR_PROVIDER_IDENTIFIER
|
||||||
|
}
|
||||||
stubIrContext.addManifestProperties(def.manifestAddendProperties)
|
stubIrContext.addManifestProperties(def.manifestAddendProperties)
|
||||||
|
|
||||||
manifestAddend?.parentFile?.mkdirs()
|
manifestAddend?.parentFile?.mkdirs()
|
||||||
@@ -310,8 +314,8 @@ private fun processCLib(args: Array<String>, additionalArgs: Map<String, Any> =
|
|||||||
argsToCompiler(staticLibraries, libraryPaths)
|
argsToCompiler(staticLibraries, libraryPaths)
|
||||||
}
|
}
|
||||||
is StubIrDriver.Result.Metadata -> {
|
is StubIrDriver.Result.Metadata -> {
|
||||||
val moduleName = File(cinteropArguments.output).nameWithoutExtension
|
|
||||||
val args = LibraryCreationArguments(
|
val args = LibraryCreationArguments(
|
||||||
|
metadata = stubIrOutput.metadata,
|
||||||
nativeBitcodePath = nativeOutputPath,
|
nativeBitcodePath = nativeOutputPath,
|
||||||
target = tool.target,
|
target = tool.target,
|
||||||
moduleName = moduleName,
|
moduleName = moduleName,
|
||||||
|
|||||||
+9
-1
@@ -102,6 +102,9 @@ allprojects {
|
|||||||
maven {
|
maven {
|
||||||
url kotlinCompilerRepo
|
url kotlinCompilerRepo
|
||||||
}
|
}
|
||||||
|
maven {
|
||||||
|
url "https://dl.bintray.com/kotlin/kotlin-dev"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
setupHostAndTarget()
|
setupHostAndTarget()
|
||||||
@@ -266,6 +269,11 @@ task detectJarCollision(type: CollisionDetector) {
|
|||||||
resolvingRules["META-INF/metadata.kotlin_module"] = "kotlin-compiler"
|
resolvingRules["META-INF/metadata.kotlin_module"] = "kotlin-compiler"
|
||||||
resolvingRules["META-INF/type-system.kotlin_module"] = "kotlin-compiler"
|
resolvingRules["META-INF/type-system.kotlin_module"] = "kotlin-compiler"
|
||||||
resolvingRules["META-INF/util.runtime.kotlin_module"] = "kotlin-compiler"
|
resolvingRules["META-INF/util.runtime.kotlin_module"] = "kotlin-compiler"
|
||||||
|
|
||||||
|
// These collisions are introduced by kotlinx-metadata-klib.
|
||||||
|
resolvingRules["META-INF/serialization.kotlin_module"] = "kotlin-compiler"
|
||||||
|
resolvingRules["META-INF/kotlin-util-klib-metadata.kotlin_module"] = "kotlin-compiler"
|
||||||
|
|
||||||
resolvingRules["kotlin/annotation/annotation.kotlin_builtins"] = "kotlin-compiler"
|
resolvingRules["kotlin/annotation/annotation.kotlin_builtins"] = "kotlin-compiler"
|
||||||
resolvingRules["kotlin/collections/collections.kotlin_builtins"] = "kotlin-compiler"
|
resolvingRules["kotlin/collections/collections.kotlin_builtins"] = "kotlin-compiler"
|
||||||
resolvingRules["kotlin/coroutines/coroutines.kotlin_builtins"] = "kotlin-compiler"
|
resolvingRules["kotlin/coroutines/coroutines.kotlin_builtins"] = "kotlin-compiler"
|
||||||
@@ -275,7 +283,7 @@ task detectJarCollision(type: CollisionDetector) {
|
|||||||
resolvingRules["kotlin/reflect/reflect.kotlin_builtins"] = "kotlin-compiler"
|
resolvingRules["kotlin/reflect/reflect.kotlin_builtins"] = "kotlin-compiler"
|
||||||
resolvingRules["META-INF/maven/com.google.protobuf/protobuf-java/pom.properties"] = "kotlin-compiler"
|
resolvingRules["META-INF/maven/com.google.protobuf/protobuf-java/pom.properties"] = "kotlin-compiler"
|
||||||
resolvingRules["META-INF/maven/com.google.protobuf/protobuf-java/pom.xml"] = "kotlin-compiler"
|
resolvingRules["META-INF/maven/com.google.protobuf/protobuf-java/pom.xml"] = "kotlin-compiler"
|
||||||
librariesWithIgnoredClassCollisions.addAll(["kotlin-util-klib", "kotlin-util-io"])
|
librariesWithIgnoredClassCollisions.addAll(["kotlin-util-klib", "kotlin-util-io", "kotlinx-metadata-klib"])
|
||||||
if (project.hasProperty('kotlinProjectPath')) {
|
if (project.hasProperty('kotlinProjectPath')) {
|
||||||
resolvingRulesWithRegexes[new Regex("META-INF/.+\\.kotlin_module")] = "kotlin-compiler"
|
resolvingRulesWithRegexes[new Regex("META-INF/.+\\.kotlin_module")] = "kotlin-compiler"
|
||||||
resolvingRules["META-INF/extensions/compiler.xml"] = "kotlin-compiler"
|
resolvingRules["META-INF/extensions/compiler.xml"] = "kotlin-compiler"
|
||||||
|
|||||||
@@ -63,6 +63,7 @@ if (hasProperty("kotlinProjectPath")) {
|
|||||||
substitute module("org.jetbrains.kotlin:kotlin-util-klib-metadata:$kotlinVersion") with project(':kotlin-util-klib-metadata')
|
substitute module("org.jetbrains.kotlin:kotlin-util-klib-metadata:$kotlinVersion") with project(':kotlin-util-klib-metadata')
|
||||||
substitute module("org.jetbrains.kotlin:kotlin-native-utils:$kotlinVersion") with project(':kotlin-native:kotlin-native-utils')
|
substitute module("org.jetbrains.kotlin:kotlin-native-utils:$kotlinVersion") with project(':kotlin-native:kotlin-native-utils')
|
||||||
substitute module("org.jetbrains.kotlin:kotlin-reflect:$kotlinVersion") with project(':kotlin-reflect')
|
substitute module("org.jetbrains.kotlin:kotlin-reflect:$kotlinVersion") with project(':kotlin-reflect')
|
||||||
|
substitute module("org.jetbrains.kotlinx:kotlinx-metadata-klib") with project(':kotlinx-metadata-klib')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user