From b157a8eae504df10230c3f0a0bdda0a9aa6bc11b Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Wed, 6 Mar 2024 10:57:50 +0000 Subject: [PATCH] [Wasm] Add wasm target to Klib manifest ^KT-66327 fixed --- .../src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt | 9 +++++++-- .../org/jetbrains/kotlin/cli/js/klib/compilerPipeline.kt | 2 ++ .../src/org/jetbrains/kotlin/ir/backend/js/klib.kt | 9 +++++++++ .../jetbrains/kotlin/klib/AbstractKlibIrTextTestCase.kt | 1 + .../kotlin/incremental/FirAbstractInvalidationTest.kt | 1 + .../wasm/test/converters/FirWasmKlibBackendFacade.kt | 3 ++- 6 files changed, 22 insertions(+), 3 deletions(-) diff --git a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt index 19ebf58b2d8..c16dd8a1c30 100644 --- a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt +++ b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt @@ -32,7 +32,10 @@ import org.jetbrains.kotlin.cli.js.klib.* import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.cli.jvm.plugins.PluginCliParser -import org.jetbrains.kotlin.config.* +import org.jetbrains.kotlin.config.CommonConfigurationKeys +import org.jetbrains.kotlin.config.CompilerConfiguration +import org.jetbrains.kotlin.config.Services +import org.jetbrains.kotlin.config.getModuleNameForSource import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory import org.jetbrains.kotlin.fir.pipeline.Fir2KlibMetadataSerializer import org.jetbrains.kotlin.incremental.components.ExpectActualTracker @@ -481,6 +484,7 @@ class K2JsIrCompiler : CLICompiler() { moduleFragment = moduleFragment, diagnosticReporter = diagnosticsReporter, builtInsPlatform = if (arguments.wasm) BuiltInsPlatform.WASM else BuiltInsPlatform.JS, + wasmTarget = if (!arguments.wasm) null else arguments.wasmTarget?.let(WasmTarget::fromName) ) val messageCollector = environmentForJS.configuration.getNotNull(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY) @@ -579,7 +583,8 @@ class K2JsIrCompiler : CLICompiler() { messageCollector = messageCollector, diagnosticsReporter = diagnosticsReporter, jsOutputName = arguments.irPerModuleOutputName, - useWasmPlatform = arguments.wasm + useWasmPlatform = arguments.wasm, + wasmTarget = arguments.wasmTarget?.let(WasmTarget::fromName) ) reportCollectedDiagnostics(moduleStructure.compilerConfiguration, diagnosticsReporter, messageCollector) diff --git a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/klib/compilerPipeline.kt b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/klib/compilerPipeline.kt index 1aeebfc356a..a5ea0a6698a 100644 --- a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/klib/compilerPipeline.kt +++ b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/klib/compilerPipeline.kt @@ -260,6 +260,7 @@ fun serializeFirKlib( diagnosticsReporter: BaseDiagnosticsCollector, jsOutputName: String?, useWasmPlatform: Boolean, + wasmTarget: WasmTarget?, ) { val fir2KlibMetadataSerializer = Fir2KlibMetadataSerializer( moduleStructure.compilerConfiguration, @@ -285,5 +286,6 @@ fun serializeFirKlib( abiVersion = KotlinAbiVersion.CURRENT, // TODO get from test file data jsOutputName = jsOutputName, builtInsPlatform = if (useWasmPlatform) BuiltInsPlatform.WASM else BuiltInsPlatform.JS, + wasmTarget = wasmTarget, ) } diff --git a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt index a42c51cd0e0..070e14ff07c 100644 --- a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt +++ b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt @@ -47,6 +47,7 @@ import org.jetbrains.kotlin.js.analyze.AbstractTopDownAnalyzerFacadeForWeb import org.jetbrains.kotlin.js.analyzer.JsAnalysisResult import org.jetbrains.kotlin.js.config.ErrorTolerancePolicy import org.jetbrains.kotlin.js.config.JSConfigurationKeys +import org.jetbrains.kotlin.js.config.WasmTarget import org.jetbrains.kotlin.konan.properties.Properties import org.jetbrains.kotlin.konan.properties.propertyList import org.jetbrains.kotlin.library.* @@ -65,6 +66,7 @@ import org.jetbrains.kotlin.psi2ir.generators.TypeTranslatorImpl import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.storage.LockBasedStorageManager import org.jetbrains.kotlin.storage.StorageManager +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly import org.jetbrains.kotlin.utils.DFS import org.jetbrains.kotlin.utils.addToStdlib.ifTrue import org.jetbrains.kotlin.utils.memoryOptimizedFilter @@ -103,6 +105,7 @@ fun generateKLib( moduleFragment: IrModuleFragment, diagnosticReporter: DiagnosticReporter, builtInsPlatform: BuiltInsPlatform = BuiltInsPlatform.JS, + wasmTarget: WasmTarget? = null, ) { val configuration = depsDescriptors.compilerConfiguration val allDependencies = depsDescriptors.allDependencies @@ -122,6 +125,7 @@ fun generateKLib( abiVersion, jsOutputName, builtInsPlatform, + wasmTarget, ) } @@ -615,6 +619,7 @@ fun serializeModuleIntoKlib( abiVersion: KotlinAbiVersion, jsOutputName: String?, builtInsPlatform: BuiltInsPlatform = BuiltInsPlatform.JS, + wasmTarget: WasmTarget? = null, ) { val moduleExportedNames = moduleFragment.collectExportedNames() val incrementalResultsConsumer = configuration.get(JSConfigurationKeys.INCREMENTAL_RESULTS_CONSUMER) @@ -690,6 +695,9 @@ fun serializeModuleIntoKlib( if (jsOutputName != null) { p.setProperty(KLIB_PROPERTY_JS_OUTPUT_NAME, jsOutputName) } + wasmTarget?.let { + p.setProperty(KLIB_PROPERTY_WASM_TARGET, it.name.toLowerCaseAsciiOnly()) + } if (containsErrorCode) { p.setProperty(KLIB_PROPERTY_CONTAINS_ERROR_CODE, "true") } @@ -717,6 +725,7 @@ fun serializeModuleIntoKlib( const val KLIB_PROPERTY_JS_OUTPUT_NAME = "jsOutputName" const val KLIB_PROPERTY_SERIALIZED_IR_FILE_FINGERPRINTS = "serializedIrFileFingerprints" const val KLIB_PROPERTY_SERIALIZED_KLIB_FINGERPRINT = "serializedKlibFingerprint" +const val KLIB_PROPERTY_WASM_TARGET = "wasm_target" fun shouldGoToNextIcRound( compilerConfiguration: CompilerConfiguration, diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/klib/AbstractKlibIrTextTestCase.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/klib/AbstractKlibIrTextTestCase.kt index 118322a12d2..492945b71fa 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/klib/AbstractKlibIrTextTestCase.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/klib/AbstractKlibIrTextTestCase.kt @@ -137,6 +137,7 @@ abstract class AbstractKlibIrTextTestCase : CodegenTestCase() { abiVersion = KotlinAbiVersion.CURRENT, jsOutputName = null, builtInsPlatform = BuiltInsPlatform.JS, + wasmTarget = null, ) return klibDir.canonicalPath } diff --git a/js/js.tests/test/org/jetbrains/kotlin/incremental/FirAbstractInvalidationTest.kt b/js/js.tests/test/org/jetbrains/kotlin/incremental/FirAbstractInvalidationTest.kt index 110803d47a4..76993e632ca 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/incremental/FirAbstractInvalidationTest.kt +++ b/js/js.tests/test/org/jetbrains/kotlin/incremental/FirAbstractInvalidationTest.kt @@ -125,6 +125,7 @@ abstract class FirAbstractInvalidationTest( diagnosticsReporter = diagnosticsReporter, jsOutputName = moduleName, useWasmPlatform = false, + wasmTarget = null, ) if (messageCollector.hasErrors()) { diff --git a/wasm/wasm.tests/test/org/jetbrains/kotlin/wasm/test/converters/FirWasmKlibBackendFacade.kt b/wasm/wasm.tests/test/org/jetbrains/kotlin/wasm/test/converters/FirWasmKlibBackendFacade.kt index 55d6db97b73..24b4ab5e6b2 100644 --- a/wasm/wasm.tests/test/org/jetbrains/kotlin/wasm/test/converters/FirWasmKlibBackendFacade.kt +++ b/wasm/wasm.tests/test/org/jetbrains/kotlin/wasm/test/converters/FirWasmKlibBackendFacade.kt @@ -69,7 +69,8 @@ class FirWasmKlibBackendFacade( perFile = false, containsErrorCode = inputArtifact.hasErrors, abiVersion = KotlinAbiVersion.CURRENT, // TODO get from test file data - jsOutputName = null + jsOutputName = null, + wasmTarget = target, ) }