[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 "org.jetbrains.kotlin:kotlin-native-shared:$konanVersion"
|
||||
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 "org.jetbrains.kotlin:kotlin-test-junit:$buildKotlinVersion"
|
||||
|
||||
+3
-3
@@ -4,6 +4,7 @@
|
||||
*/
|
||||
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.InteropConfiguration
|
||||
import org.jetbrains.kotlin.native.interop.gen.jvm.KotlinPlatform
|
||||
@@ -101,8 +102,7 @@ class StubIrDriver(
|
||||
sealed class Result {
|
||||
object SourceCode : Result()
|
||||
|
||||
// Will contain Km* objects.
|
||||
class Metadata(): Result()
|
||||
class Metadata(val metadata: KlibModuleMetadata): Result()
|
||||
}
|
||||
|
||||
fun run(): Result {
|
||||
@@ -133,7 +133,7 @@ class StubIrDriver(
|
||||
}
|
||||
|
||||
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) {
|
||||
|
||||
+13
-2
@@ -4,18 +4,22 @@
|
||||
*/
|
||||
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.metadata.KlibMetadataVersion
|
||||
import org.jetbrains.kotlin.konan.CompilerVersion
|
||||
import org.jetbrains.kotlin.konan.CURRENT
|
||||
import org.jetbrains.kotlin.konan.CompilerVersion
|
||||
import org.jetbrains.kotlin.konan.file.File
|
||||
import org.jetbrains.kotlin.konan.library.impl.KonanLibraryWriterImpl
|
||||
import org.jetbrains.kotlin.konan.target.KonanTarget
|
||||
import org.jetbrains.kotlin.library.KotlinLibraryVersioning
|
||||
import org.jetbrains.kotlin.library.KotlinAbiVersion
|
||||
import org.jetbrains.kotlin.library.SerializedMetadata
|
||||
import org.jetbrains.kotlin.util.removeSuffixIfPresent
|
||||
import java.util.*
|
||||
|
||||
data class LibraryCreationArguments(
|
||||
val metadata: KlibModuleMetadata,
|
||||
val outputPath: String,
|
||||
val moduleName: String,
|
||||
val nativeBitcodePath: String,
|
||||
@@ -31,9 +35,16 @@ fun createInteropLibrary(arguments: LibraryCreationArguments) {
|
||||
metadataVersion = KlibMetadataVersion.INSTANCE.toString(),
|
||||
irVersion = KlibIrVersion.INSTANCE.toString()
|
||||
)
|
||||
val outputPathWithoutExtension = arguments.outputPath.removeSuffixIfPresent(".klib")
|
||||
KonanLibraryWriterImpl(
|
||||
File(arguments.outputPath),arguments.moduleName, version, arguments.target
|
||||
File(outputPathWithoutExtension),
|
||||
arguments.moduleName,
|
||||
version,
|
||||
arguments.target
|
||||
).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)
|
||||
addManifestAddend(arguments.manifest)
|
||||
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.tool.*
|
||||
import kotlinx.cli.ArgParser
|
||||
import org.jetbrains.kotlin.konan.library.KLIB_INTEROP_IR_PROVIDER_IDENTIFIER
|
||||
import org.jetbrains.kotlin.konan.target.KonanTarget
|
||||
import java.io.File
|
||||
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 moduleName = File(cinteropArguments.output).nameWithoutExtension
|
||||
|
||||
// Our current approach to arm64_32 support is to compile armv7k version of bitcode
|
||||
// for arm64_32. That's the reason for this substitution.
|
||||
// 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
|
||||
}
|
||||
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)
|
||||
stubIrDriver.run()
|
||||
}
|
||||
@@ -272,9 +275,10 @@ private fun processCLib(args: Array<String>, additionalArgs: Map<String, Any> =
|
||||
_, oldValue, newValue ->
|
||||
warn("The package value `$oldValue` specified in .def file is overridden with explicit $newValue")
|
||||
}
|
||||
|
||||
def.manifestAddendProperties["interop"] = "true"
|
||||
|
||||
if (stubIrOutput is StubIrDriver.Result.Metadata) {
|
||||
def.manifestAddendProperties["ir_provider"] = KLIB_INTEROP_IR_PROVIDER_IDENTIFIER
|
||||
}
|
||||
stubIrContext.addManifestProperties(def.manifestAddendProperties)
|
||||
|
||||
manifestAddend?.parentFile?.mkdirs()
|
||||
@@ -310,8 +314,8 @@ private fun processCLib(args: Array<String>, additionalArgs: Map<String, Any> =
|
||||
argsToCompiler(staticLibraries, libraryPaths)
|
||||
}
|
||||
is StubIrDriver.Result.Metadata -> {
|
||||
val moduleName = File(cinteropArguments.output).nameWithoutExtension
|
||||
val args = LibraryCreationArguments(
|
||||
metadata = stubIrOutput.metadata,
|
||||
nativeBitcodePath = nativeOutputPath,
|
||||
target = tool.target,
|
||||
moduleName = moduleName,
|
||||
|
||||
+9
-1
@@ -102,6 +102,9 @@ allprojects {
|
||||
maven {
|
||||
url kotlinCompilerRepo
|
||||
}
|
||||
maven {
|
||||
url "https://dl.bintray.com/kotlin/kotlin-dev"
|
||||
}
|
||||
}
|
||||
|
||||
setupHostAndTarget()
|
||||
@@ -266,6 +269,11 @@ task detectJarCollision(type: CollisionDetector) {
|
||||
resolvingRules["META-INF/metadata.kotlin_module"] = "kotlin-compiler"
|
||||
resolvingRules["META-INF/type-system.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/collections/collections.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["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"
|
||||
librariesWithIgnoredClassCollisions.addAll(["kotlin-util-klib", "kotlin-util-io"])
|
||||
librariesWithIgnoredClassCollisions.addAll(["kotlin-util-klib", "kotlin-util-io", "kotlinx-metadata-klib"])
|
||||
if (project.hasProperty('kotlinProjectPath')) {
|
||||
resolvingRulesWithRegexes[new Regex("META-INF/.+\\.kotlin_module")] = "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-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.kotlinx:kotlinx-metadata-klib") with project(':kotlinx-metadata-klib')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user