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.descriptors.konan.DeserializedKlibModuleOrigin
import org.jetbrains.kotlin.konan.util.KlibMetadataFactories import org.jetbrains.kotlin.konan.util.KlibMetadataFactories
import org.jetbrains.kotlin.library.* import org.jetbrains.kotlin.library.*
import org.jetbrains.kotlin.library.impl.BuiltInsPlatform
import org.jetbrains.kotlin.library.impl.buildKoltinLibrary import org.jetbrains.kotlin.library.impl.buildKoltinLibrary
import org.jetbrains.kotlin.library.metadata.NativeTypeTransformer import org.jetbrains.kotlin.library.metadata.NativeTypeTransformer
import org.jetbrains.kotlin.library.metadata.NullFlexibleTypeDeserializer import org.jetbrains.kotlin.library.metadata.NullFlexibleTypeDeserializer
@@ -89,7 +90,8 @@ internal class K2MetadataKlibSerializer(private val metadataVersion: BuiltInsBin
configuration[CommonConfigurationKeys.MODULE_NAME]!!, configuration[CommonConfigurationKeys.MODULE_NAME]!!,
nopack = true, nopack = true,
manifestProperties = null, 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.properties.propertyList
import org.jetbrains.kotlin.konan.util.KlibMetadataFactories import org.jetbrains.kotlin.konan.util.KlibMetadataFactories
import org.jetbrains.kotlin.library.* import org.jetbrains.kotlin.library.*
import org.jetbrains.kotlin.library.impl.BuiltInsPlatform
import org.jetbrains.kotlin.library.impl.buildKoltinLibrary import org.jetbrains.kotlin.library.impl.buildKoltinLibrary
import org.jetbrains.kotlin.library.resolver.KotlinLibraryResolveResult import org.jetbrains.kotlin.library.resolver.KotlinLibraryResolveResult
import org.jetbrains.kotlin.library.resolver.TopologicalLibraryOrder import org.jetbrains.kotlin.library.resolver.TopologicalLibraryOrder
@@ -504,7 +505,8 @@ fun serializeModuleIntoKlib(
moduleName = moduleName, moduleName = moduleName,
nopack = nopack, nopack = nopack,
output = klibPath, 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_PACKAGE = "package"
const val KLIB_PROPERTY_INTEROP = "interop" const val KLIB_PROPERTY_INTEROP = "interop"
const val KLIB_PROPERTY_EXPORT_FORWARD_DECLARATIONS = "exportForwardDeclarations" 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. * Abstractions for getting access to the information stored inside of Kotlin/Native library.
@@ -22,6 +22,7 @@ open class BaseWriterImpl(
val libraryLayout: KotlinLibraryLayoutForWriter, val libraryLayout: KotlinLibraryLayoutForWriter,
moduleName: String, moduleName: String,
override val versions: KotlinLibraryVersioning, override val versions: KotlinLibraryVersioning,
builtInsPlatform: BuiltInsPlatform,
val nopack: Boolean = false val nopack: Boolean = false
) : BaseWriter { ) : BaseWriter {
@@ -37,6 +38,8 @@ open class BaseWriterImpl(
// TODO: <name>:<hash> will go somewhere around here. // TODO: <name>:<hash> will go somewhere around here.
manifestProperties.setProperty(KLIB_PROPERTY_UNIQUE_NAME, moduleName) manifestProperties.setProperty(KLIB_PROPERTY_UNIQUE_NAME, moduleName)
manifestProperties.writeKonanLibraryVersioning(versions) manifestProperties.writeKonanLibraryVersioning(versions)
if (builtInsPlatform != BuiltInsPlatform.COMMON)
manifestProperties.setProperty(KLIB_PROPERTY_BUILTINS_PLATFORM, builtInsPlatform.name)
} }
override fun addLinkDependencies(libraries: List<KotlinLibrary>) { override fun addLinkDependencies(libraries: List<KotlinLibrary>) {
@@ -78,11 +81,12 @@ class KoltinLibraryWriterImpl(
libDir: File, libDir: File,
moduleName: String, moduleName: String,
versions: KotlinLibraryVersioning, versions: KotlinLibraryVersioning,
builtInsPlatform: BuiltInsPlatform,
nopack: Boolean = false, nopack: Boolean = false,
val layout: KotlinLibraryLayoutForWriter = KotlinLibraryLayoutForWriter(libDir), 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), metadata: MetadataWriter = MetadataWriterImpl(layout),
ir: IrWriter = IrMonoliticWriterImpl(layout) ir: IrWriter = IrMonoliticWriterImpl(layout)
// ir: IrWriter = IrPerFileWriterImpl(layout) // ir: IrWriter = IrPerFileWriterImpl(layout)
@@ -98,10 +102,11 @@ fun buildKoltinLibrary(
moduleName: String, moduleName: String,
nopack: Boolean, nopack: Boolean,
manifestProperties: Properties?, manifestProperties: Properties?,
dataFlowGraph: ByteArray? dataFlowGraph: ByteArray?,
builtInsPlatform: BuiltInsPlatform
): KotlinLibraryLayout { ): KotlinLibraryLayout {
val library = KoltinLibraryWriterImpl(File(output), moduleName, versions, nopack) val library = KoltinLibraryWriterImpl(File(output), moduleName, versions, builtInsPlatform, nopack)
library.addMetadata(metadata) library.addMetadata(metadata)
@@ -115,4 +120,8 @@ fun buildKoltinLibrary(
library.commit() library.commit()
return library.layout 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.SerializedMetadata
import org.jetbrains.kotlin.library.ToolingSingleFileKlibResolveStrategy import org.jetbrains.kotlin.library.ToolingSingleFileKlibResolveStrategy
import org.jetbrains.kotlin.library.impl.BaseWriterImpl 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.impl.KoltinLibraryWriterImpl
import org.jetbrains.kotlin.library.resolveSingleFileKlib import org.jetbrains.kotlin.library.resolveSingleFileKlib
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -215,7 +216,13 @@ class NativeDistributionCommonizer(
manifestData: NativeSensitiveManifestData, manifestData: NativeSensitiveManifestData,
destination: File 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) library.addMetadata(metadata)
manifestData.applyTo(library.base as BaseWriterImpl) manifestData.applyTo(library.base as BaseWriterImpl)
library.commit() library.commit()