Add kotlin runtime modulemap for swift export as part of kotlin-native dist #KT-65673 fixed

Co-authored-by: Alexander Shabalin <alexander.shabalin@ashabalin.me>

Merge-request: KT-MR-14493
Merged-by: Artem Olkov <artem.olkov@jetbrains.com>
This commit is contained in:
Artem Olkov
2024-02-26 12:51:57 +00:00
committed by Space Team
parent 28a305a826
commit dd9332d9e1
13 changed files with 110 additions and 36 deletions
@@ -7,10 +7,12 @@ package org.jetbrains.kotlin.konan.test.blackbox
import org.jetbrains.kotlin.cli.common.ExitCode
import org.jetbrains.kotlin.konan.target.AppleConfigurables
import org.jetbrains.kotlin.konan.target.Distribution
import org.jetbrains.kotlin.konan.target.withOSVersion
import org.jetbrains.kotlin.konan.test.blackbox.support.compilation.invokeSwiftC
import org.jetbrains.kotlin.konan.test.blackbox.support.settings.configurables
import org.jetbrains.kotlin.konan.test.blackbox.support.util.createModuleMap
import org.jetbrains.kotlin.utils.KotlinNativePaths
import org.jetbrains.kotlin.utils.fileUtils.withReplacedExtensionOrNull
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assumptions
@@ -55,10 +57,13 @@ abstract class SwiftTypeCheckBaseTest : AbstractNativeSimpleTest() {
val swiftTarget = configs.targetTriple.withOSVersion(configs.osVersionMin).toString()
val bridgeModuleFile = createModuleMap(buildDir, cHeader)
val kotlinRuntimeModuleMapFile = Distribution(KotlinNativePaths.homePath.absolutePath)
.kotlinRuntimeForSwiftModuleMap
val args = listOf(
"-typecheck", swiftFile.absolutePath,
"-Xcc", "-fmodule-map-file=${bridgeModuleFile.absolutePath}",
"-Xcc", "-fmodule-map-file=${kotlinRuntimeModuleMapFile}",
"-sdk", configs.absoluteTargetSysRoot, "-target", swiftTarget
)
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.konan.target.Distribution
import org.jetbrains.kotlin.platform.konan.NativePlatforms
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.sir.SirModule
import org.jetbrains.kotlin.sir.builder.SirImportBuilder
import org.jetbrains.kotlin.sir.builder.buildImport
import org.jetbrains.kotlin.sir.builder.buildModule
import org.jetbrains.kotlin.swiftexport.standalone.SwiftExportInput
@@ -68,6 +69,9 @@ internal fun buildSwiftModule(
declarations += buildImport {
moduleName = bridgeModuleName
}
declarations += buildImport {
moduleName = KOTLIN_RUNTIME_MODULE_NAME
}
ktFiles.forEach { file ->
declarations += buildSirDeclarationList(file)
}
@@ -75,4 +79,6 @@ internal fun buildSwiftModule(
declarations.forEach { it.parent = this }
}
}
}
}
private const val KOTLIN_RUNTIME_MODULE_NAME: String = "KotlinRuntime"
@@ -1,4 +1,5 @@
import KotlinBridges
import KotlinRuntime
/**
* Function foo description
@@ -1,4 +1,5 @@
import KotlinBridges
import KotlinRuntime
public enum namespace1 {
public enum local_functions {
@@ -1,4 +1,5 @@
import KotlinBridges
import KotlinRuntime
public func meaningOfLife() -> Swift.Int32 {
return __root___meaningOfLife()
@@ -1,4 +1,5 @@
import KotlinBridges
import KotlinRuntime
public enum namespace {
public enum main {
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.konan.properties.Properties
import org.jetbrains.kotlin.konan.properties.keepOnlyDefaultProfiles
import org.jetbrains.kotlin.konan.properties.loadProperties
import org.jetbrains.kotlin.konan.util.DependencyDirectories
import java.nio.file.Path
class Distribution private constructor(private val serialized: Serialized) : java.io.Serializable {
constructor(
@@ -88,6 +89,9 @@ class Distribution private constructor(private val serialized: Serialized) : jav
val stdlib = "$klib/common/stdlib"
val stdlibDefaultComponent = "$stdlib/default"
val kotlinRuntimeForSwiftHome = "$konanHome/konan/swift_export/kotlin_runtime"
val kotlinRuntimeForSwiftModuleMap = "$kotlinRuntimeForSwiftHome/module.modulemap"
fun defaultNatives(target: KonanTarget) = "$konanHome/konan/targets/${target.visibleName}/native"
fun runtime(target: KonanTarget) = runtimeFileOverride ?: "${defaultNatives(target)}/runtime.bc"