[Swift export][KT-65672] Update SwiftExportRunner
1. Add a trivial logger interface as a way to communicate with environment 2. Add a settings key for bridge module name.
This commit is contained in:
committed by
Space Team
parent
5e4c0186ac
commit
f5b273a6d9
+48
-3
@@ -5,7 +5,9 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.swiftexport.standalone
|
package org.jetbrains.kotlin.swiftexport.standalone
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.swiftexport.standalone.SwiftExportConfig.Companion.BRIDGE_MODULE_NAME
|
||||||
import org.jetbrains.kotlin.swiftexport.standalone.SwiftExportConfig.Companion.DEBUG_MODE_ENABLED
|
import org.jetbrains.kotlin.swiftexport.standalone.SwiftExportConfig.Companion.DEBUG_MODE_ENABLED
|
||||||
|
import org.jetbrains.kotlin.swiftexport.standalone.SwiftExportConfig.Companion.DEFAULT_BRIDGE_MODULE_NAME
|
||||||
import org.jetbrains.kotlin.swiftexport.standalone.builders.buildFunctionBridges
|
import org.jetbrains.kotlin.swiftexport.standalone.builders.buildFunctionBridges
|
||||||
import org.jetbrains.kotlin.swiftexport.standalone.builders.buildSwiftModule
|
import org.jetbrains.kotlin.swiftexport.standalone.builders.buildSwiftModule
|
||||||
import org.jetbrains.kotlin.swiftexport.standalone.transformation.transformToSwift
|
import org.jetbrains.kotlin.swiftexport.standalone.transformation.transformToSwift
|
||||||
@@ -13,10 +15,22 @@ import org.jetbrains.kotlin.swiftexport.standalone.writer.dumpResultToFiles
|
|||||||
import java.nio.file.Path
|
import java.nio.file.Path
|
||||||
|
|
||||||
public data class SwiftExportConfig(
|
public data class SwiftExportConfig(
|
||||||
val settings: Map<String, String>
|
val settings: Map<String, String>,
|
||||||
|
val logger: SwiftExportLogger,
|
||||||
) {
|
) {
|
||||||
public companion object {
|
public companion object {
|
||||||
public const val DEBUG_MODE_ENABLED: String = "DEBUG_MODE_ENABLED"
|
public const val DEBUG_MODE_ENABLED: String = "DEBUG_MODE_ENABLED"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* How should the generated stubs refer to C bridging module?
|
||||||
|
* ```swift
|
||||||
|
* import $BRIDGE_MODULE_NAME
|
||||||
|
* ...
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
public const val BRIDGE_MODULE_NAME: String = "BRIDGE_MODULE_NAME"
|
||||||
|
|
||||||
|
public const val DEFAULT_BRIDGE_MODULE_NAME: String = "KotlinBridges"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -31,15 +45,46 @@ public data class SwiftExportOutput(
|
|||||||
val cHeaderBridges: Path,
|
val cHeaderBridges: Path,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Trivial logging interface that should be implemented
|
||||||
|
* by the environment to report messages from Swift export.
|
||||||
|
*/
|
||||||
|
public interface SwiftExportLogger {
|
||||||
|
public enum class Severity {
|
||||||
|
Info,
|
||||||
|
Warning,
|
||||||
|
Error,
|
||||||
|
}
|
||||||
|
|
||||||
|
public fun report(severity: Severity, message: String)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Primitive implementation of [SwiftExportLogger] which should be sufficient for testing purposes.
|
||||||
|
*/
|
||||||
|
public fun createDummyLogger(): SwiftExportLogger = object : SwiftExportLogger {
|
||||||
|
override fun report(severity: SwiftExportLogger.Severity, message: String) {
|
||||||
|
println("$severity: $message")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A root function for running Swift Export from build tool
|
* A root function for running Swift Export from build tool
|
||||||
*/
|
*/
|
||||||
public fun runSwiftExport(
|
public fun runSwiftExport(
|
||||||
input: SwiftExportInput,
|
input: SwiftExportInput,
|
||||||
config: SwiftExportConfig = SwiftExportConfig(emptyMap()),
|
config: SwiftExportConfig = SwiftExportConfig(emptyMap(), createDummyLogger()),
|
||||||
output: SwiftExportOutput,
|
output: SwiftExportOutput,
|
||||||
) {
|
) {
|
||||||
val module = buildSwiftModule(input, config.settings.containsKey(DEBUG_MODE_ENABLED))
|
val isDebugModeEnabled = config.settings.containsKey(DEBUG_MODE_ENABLED)
|
||||||
|
val bridgeModuleName = config.settings.getOrElse(BRIDGE_MODULE_NAME) {
|
||||||
|
config.logger.report(SwiftExportLogger.Severity.Warning,
|
||||||
|
"Bridging header is not set. Using $DEFAULT_BRIDGE_MODULE_NAME instead")
|
||||||
|
DEFAULT_BRIDGE_MODULE_NAME
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
val module = buildSwiftModule(input, isDebugModeEnabled)
|
||||||
.transformToSwift()
|
.transformToSwift()
|
||||||
val bridgeRequests = module.buildFunctionBridges()
|
val bridgeRequests = module.buildFunctionBridges()
|
||||||
module.dumpResultToFiles(bridgeRequests, output)
|
module.dumpResultToFiles(bridgeRequests, output)
|
||||||
|
|||||||
+4
-1
@@ -18,7 +18,10 @@ import org.jetbrains.kotlin.sir.builder.buildModule
|
|||||||
import org.jetbrains.kotlin.swiftexport.standalone.SwiftExportInput
|
import org.jetbrains.kotlin.swiftexport.standalone.SwiftExportInput
|
||||||
|
|
||||||
@OptIn(KtAnalysisApiInternals::class)
|
@OptIn(KtAnalysisApiInternals::class)
|
||||||
internal fun buildSwiftModule(input: SwiftExportInput, shouldSortInputFiles: Boolean): SirModule {
|
internal fun buildSwiftModule(
|
||||||
|
input: SwiftExportInput,
|
||||||
|
shouldSortInputFiles: Boolean,
|
||||||
|
): SirModule {
|
||||||
val session = buildStandaloneAnalysisAPISession {
|
val session = buildStandaloneAnalysisAPISession {
|
||||||
registerProjectService(KtLifetimeTokenProvider::class.java, KtAlwaysAccessibleLifetimeTokenProvider())
|
registerProjectService(KtLifetimeTokenProvider::class.java, KtAlwaysAccessibleLifetimeTokenProvider())
|
||||||
|
|
||||||
|
|||||||
+4
-2
@@ -38,8 +38,10 @@ abstract class AbstractSwiftRunnerTestBase {
|
|||||||
output = output,
|
output = output,
|
||||||
config = SwiftExportConfig(
|
config = SwiftExportConfig(
|
||||||
settings = mapOf(
|
settings = mapOf(
|
||||||
SwiftExportConfig.DEBUG_MODE_ENABLED to "true"
|
SwiftExportConfig.DEBUG_MODE_ENABLED to "true",
|
||||||
)
|
SwiftExportConfig.BRIDGE_MODULE_NAME to SwiftExportConfig.DEFAULT_BRIDGE_MODULE_NAME,
|
||||||
|
),
|
||||||
|
logger = createDummyLogger()
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user