Add builtins_platform property to klib manifest

This commit is contained in:
Dmitry Savvinov
2020-02-19 18:55:52 +03:00
parent 8fcd98639d
commit b8b1dd753c
5 changed files with 27 additions and 6 deletions
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
import org.jetbrains.kotlin.descriptors.konan.DeserializedKlibModuleOrigin
import org.jetbrains.kotlin.konan.util.KlibMetadataFactories
import org.jetbrains.kotlin.library.*
import org.jetbrains.kotlin.library.impl.BuiltInsPlatform
import org.jetbrains.kotlin.library.impl.buildKoltinLibrary
import org.jetbrains.kotlin.library.metadata.NativeTypeTransformer
import org.jetbrains.kotlin.library.metadata.NullFlexibleTypeDeserializer
@@ -89,7 +90,8 @@ internal class K2MetadataKlibSerializer(private val metadataVersion: BuiltInsBin
configuration[CommonConfigurationKeys.MODULE_NAME]!!,
nopack = true,
manifestProperties = null,
dataFlowGraph = null
dataFlowGraph = null,
builtInsPlatform = BuiltInsPlatform.COMMON
)
}
}
@@ -37,6 +37,7 @@ import org.jetbrains.kotlin.js.config.JSConfigurationKeys
import org.jetbrains.kotlin.konan.properties.propertyList
import org.jetbrains.kotlin.konan.util.KlibMetadataFactories
import org.jetbrains.kotlin.library.*
import org.jetbrains.kotlin.library.impl.BuiltInsPlatform
import org.jetbrains.kotlin.library.impl.buildKoltinLibrary
import org.jetbrains.kotlin.library.resolver.KotlinLibraryResolveResult
import org.jetbrains.kotlin.library.resolver.TopologicalLibraryOrder
@@ -504,7 +505,8 @@ fun serializeModuleIntoKlib(
moduleName = moduleName,
nopack = nopack,
output = klibPath,
versions = versions
versions = versions,
builtInsPlatform = BuiltInsPlatform.JS
)
}
@@ -15,6 +15,7 @@ const val KLIB_PROPERTY_DEPENDS = "depends"
const val KLIB_PROPERTY_PACKAGE = "package"
const val KLIB_PROPERTY_INTEROP = "interop"
const val KLIB_PROPERTY_EXPORT_FORWARD_DECLARATIONS = "exportForwardDeclarations"
const val KLIB_PROPERTY_BUILTINS_PLATFORM = "builtins_platform"
/**
* Abstractions for getting access to the information stored inside of Kotlin/Native library.
@@ -22,6 +22,7 @@ open class BaseWriterImpl(
val libraryLayout: KotlinLibraryLayoutForWriter,
moduleName: String,
override val versions: KotlinLibraryVersioning,
builtInsPlatform: BuiltInsPlatform,
val nopack: Boolean = false
) : BaseWriter {
@@ -37,6 +38,8 @@ open class BaseWriterImpl(
// TODO: <name>:<hash> will go somewhere around here.
manifestProperties.setProperty(KLIB_PROPERTY_UNIQUE_NAME, moduleName)
manifestProperties.writeKonanLibraryVersioning(versions)
if (builtInsPlatform != BuiltInsPlatform.COMMON)
manifestProperties.setProperty(KLIB_PROPERTY_BUILTINS_PLATFORM, builtInsPlatform.name)
}
override fun addLinkDependencies(libraries: List<KotlinLibrary>) {
@@ -78,11 +81,12 @@ class KoltinLibraryWriterImpl(
libDir: File,
moduleName: String,
versions: KotlinLibraryVersioning,
builtInsPlatform: BuiltInsPlatform,
nopack: Boolean = false,
val layout: KotlinLibraryLayoutForWriter = KotlinLibraryLayoutForWriter(libDir),
val base: BaseWriter = BaseWriterImpl(layout, moduleName, versions, nopack),
val base: BaseWriter = BaseWriterImpl(layout, moduleName, versions, builtInsPlatform, nopack),
metadata: MetadataWriter = MetadataWriterImpl(layout),
ir: IrWriter = IrMonoliticWriterImpl(layout)
// ir: IrWriter = IrPerFileWriterImpl(layout)
@@ -98,10 +102,11 @@ fun buildKoltinLibrary(
moduleName: String,
nopack: Boolean,
manifestProperties: Properties?,
dataFlowGraph: ByteArray?
dataFlowGraph: ByteArray?,
builtInsPlatform: BuiltInsPlatform
): KotlinLibraryLayout {
val library = KoltinLibraryWriterImpl(File(output), moduleName, versions, nopack)
val library = KoltinLibraryWriterImpl(File(output), moduleName, versions, builtInsPlatform, nopack)
library.addMetadata(metadata)
@@ -115,4 +120,8 @@ fun buildKoltinLibrary(
library.commit()
return library.layout
}
enum class BuiltInsPlatform {
JVM, JS, NATIVE, COMMON
}
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.library.KotlinLibrary
import org.jetbrains.kotlin.library.SerializedMetadata
import org.jetbrains.kotlin.library.ToolingSingleFileKlibResolveStrategy
import org.jetbrains.kotlin.library.impl.BaseWriterImpl
import org.jetbrains.kotlin.library.impl.BuiltInsPlatform
import org.jetbrains.kotlin.library.impl.KoltinLibraryWriterImpl
import org.jetbrains.kotlin.library.resolveSingleFileKlib
import org.jetbrains.kotlin.name.Name
@@ -215,7 +216,13 @@ class NativeDistributionCommonizer(
manifestData: NativeSensitiveManifestData,
destination: File
) {
val library = KoltinLibraryWriterImpl(KFile(destination.path), manifestData.uniqueName, manifestData.versions, nopack = true)
val library = KoltinLibraryWriterImpl(
KFile(destination.path),
manifestData.uniqueName,
manifestData.versions,
BuiltInsPlatform.NATIVE,
nopack = true
)
library.addMetadata(metadata)
manifestData.applyTo(library.base as BaseWriterImpl)
library.commit()