From ddfd94b3b225c612ec01864279dc3a28f901203f Mon Sep 17 00:00:00 2001 From: Sergej Jaskiewicz Date: Wed, 23 Aug 2023 16:59:34 +0200 Subject: [PATCH] [K/N] Move KonanMangler to a new common module ^KT-61248 Fixed --- .space/CODEOWNERS | 1 + build.gradle.kts | 1 + compiler/ir/serialization.native/ReadMe.md | 3 + .../ir/serialization.native/build.gradle.kts | 18 ++++++ .../konan/serialization/KonanMangler.kt | 64 ++++++------------- kotlin-native/backend.native/build.gradle | 1 + settings.gradle | 2 + 7 files changed, 46 insertions(+), 44 deletions(-) create mode 100644 compiler/ir/serialization.native/ReadMe.md create mode 100644 compiler/ir/serialization.native/build.gradle.kts rename {kotlin-native/backend.native/compiler/ir/backend.native => compiler/ir/serialization.native}/src/org/jetbrains/kotlin/backend/konan/serialization/KonanMangler.kt (80%) diff --git a/.space/CODEOWNERS b/.space/CODEOWNERS index 9ac5d370ef6..bbea8c0ac49 100644 --- a/.space/CODEOWNERS +++ b/.space/CODEOWNERS @@ -81,6 +81,7 @@ /compiler/ir/serialization.common/ "Kotlin Native" /compiler/ir/serialization.js/ "Kotlin JS" /compiler/ir/serialization.jvm/ "Kotlin JVM" +/compiler/ir/serialization.native/ "Kotlin Native" /compiler/javac-wrapper/ "Kotlin Compiler Core" /compiler/light-classes/ "Kotlin IDE Analysis Core" /compiler/plugin-api/ "Kotlin Compiler Core" diff --git a/build.gradle.kts b/build.gradle.kts index 88496670690..0620409971f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -108,6 +108,7 @@ val irCompilerModules = arrayOf( ":compiler:ir.serialization.common", ":compiler:ir.serialization.js", ":compiler:ir.serialization.jvm", + ":compiler:ir.serialization.native", ":compiler:ir.objcinterop", ":compiler:ir.backend.common", ":compiler:ir.interpreter", diff --git a/compiler/ir/serialization.native/ReadMe.md b/compiler/ir/serialization.native/ReadMe.md new file mode 100644 index 00000000000..5dd475d3798 --- /dev/null +++ b/compiler/ir/serialization.native/ReadMe.md @@ -0,0 +1,3 @@ +## KLIB serialization: Kotlin/Native + +This module contains Kotlin/Native-specific classes related to serializing IR to KLIBs. \ No newline at end of file diff --git a/compiler/ir/serialization.native/build.gradle.kts b/compiler/ir/serialization.native/build.gradle.kts new file mode 100644 index 00000000000..7da2a93a352 --- /dev/null +++ b/compiler/ir/serialization.native/build.gradle.kts @@ -0,0 +1,18 @@ +plugins { + kotlin("jvm") + id("jps-compatible") +} + +dependencies { + api(project(":compiler:ir.tree")) + api(project(":compiler:ir.serialization.common")) + + implementation(project(":compiler:ir.objcinterop")) + implementation(project(":core:compiler.common.native")) + + compileOnly(intellijCore()) +} + +sourceSets { + "main" { projectDefault() } +} diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanMangler.kt b/compiler/ir/serialization.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanMangler.kt similarity index 80% rename from kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanMangler.kt rename to compiler/ir/serialization.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanMangler.kt index c14e2ab3a2f..1185c8f8d9c 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanMangler.kt +++ b/compiler/ir/serialization.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanMangler.kt @@ -1,3 +1,8 @@ +/* + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + package org.jetbrains.kotlin.backend.konan.serialization import org.jetbrains.kotlin.backend.common.serialization.mangle.KotlinExportChecker @@ -9,13 +14,25 @@ import org.jetbrains.kotlin.backend.common.serialization.mangle.descriptor.Descr import org.jetbrains.kotlin.backend.common.serialization.mangle.ir.IrBasedKotlinManglerImpl import org.jetbrains.kotlin.backend.common.serialization.mangle.ir.IrExportCheckerVisitor import org.jetbrains.kotlin.backend.common.serialization.mangle.ir.IrMangleComputer -import org.jetbrains.kotlin.backend.konan.* import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.objcinterop.* import org.jetbrains.kotlin.ir.types.getClass import org.jetbrains.kotlin.ir.util.hasAnnotation +import org.jetbrains.kotlin.name.NativeRuntimeNames +import org.jetbrains.kotlin.name.NativeStandardInteropNames + +private val annotationsToTreatAsExported = listOf( + NativeRuntimeNames.Annotations.symbolNameClassId, + NativeRuntimeNames.Annotations.gcUnsafeCallClassId, + NativeRuntimeNames.Annotations.exportForCppRuntimeClassId, + NativeRuntimeNames.Annotations.cNameClassId, + NativeRuntimeNames.Annotations.exportForCompilerClassId, +) + +private val IrConstructor.isObjCConstructor: Boolean + get() = hasAnnotation(NativeStandardInteropNames.objCConstructorClassId) abstract class AbstractKonanIrMangler( private val withReturnType: Boolean, @@ -29,28 +46,7 @@ abstract class AbstractKonanIrMangler( override fun IrDeclaration.isPlatformSpecificExport(): Boolean { if (this is IrSimpleFunction) if (isFakeOverride) return false - // TODO: revise - if (annotations.hasAnnotation(RuntimeNames.symbolNameAnnotation)) { - // Treat any `@SymbolName` declaration as exported. - return true - } - if (annotations.hasAnnotation(KonanFqNames.gcUnsafeCall)) { - // Treat any `@GCUnsafeCall` declaration as exported. - return true - } - if (annotations.hasAnnotation(RuntimeNames.exportForCppRuntime)) { - // Treat any `@ExportForCppRuntime` declaration as exported. - return true - } - if (annotations.hasAnnotation(RuntimeNames.cnameAnnotation)) { - // Treat `@CName` declaration as exported. - return true - } - if (annotations.hasAnnotation(RuntimeNames.exportForCompilerAnnotation)) { - return true - } - - return false + return annotationsToTreatAsExported.any(this::hasAnnotation) } private inner class KonanIrExportChecker(compatibleMode: Boolean) : IrExportCheckerVisitor(compatibleMode) { @@ -125,28 +121,8 @@ abstract class AbstractKonanDescriptorMangler : DescriptorBasedKotlinManglerImpl if (this is SimpleFunctionDescriptor) { if (kind == CallableMemberDescriptor.Kind.FAKE_OVERRIDE) return false } - // TODO: revise - if (annotations.hasAnnotation(RuntimeNames.symbolNameAnnotation)) { - // Treat any `@SymbolName` declaration as exported. - return true - } - if (annotations.hasAnnotation(KonanFqNames.gcUnsafeCall)) { - // Treat any `@GCUnsafeCall` declaration as exported. - return true - } - if (annotations.hasAnnotation(RuntimeNames.exportForCppRuntime)) { - // Treat any `@ExportForCppRuntime` declaration as exported. - return true - } - if (annotations.hasAnnotation(RuntimeNames.cnameAnnotation)) { - // Treat `@CName` declaration as exported. - return true - } - if (annotations.hasAnnotation(RuntimeNames.exportForCompilerAnnotation)) { - return true - } - return false + return annotationsToTreatAsExported.any { annotations.hasAnnotation(it.asSingleFqName()) } } diff --git a/kotlin-native/backend.native/build.gradle b/kotlin-native/backend.native/build.gradle index 27cc2519dc5..8380bbc671b 100644 --- a/kotlin-native/backend.native/build.gradle +++ b/kotlin-native/backend.native/build.gradle @@ -171,6 +171,7 @@ dependencies { compilerApi project(":kotlin-util-klib") compilerApi project(":kotlin-util-klib-metadata") compilerApi project(":compiler:ir.serialization.common") + compilerApi project(":compiler:ir.serialization.native") compilerApi project(":compiler:fir:fir-serialization") compilerApi project(":compiler:fir:native") compilerApi project(":compiler:ir.psi2ir") diff --git a/settings.gradle b/settings.gradle index b287e9a0a7e..ca68c870709 100644 --- a/settings.gradle +++ b/settings.gradle @@ -69,6 +69,7 @@ include ":benchmarks", ":compiler:ir.serialization.common", ":compiler:ir.serialization.jvm", ":compiler:ir.serialization.js", + ":compiler:ir.serialization.native", ":compiler:ir.interpreter", ":compiler:backend.js", ":compiler:backend.wasm", @@ -684,6 +685,7 @@ project(':compiler:backend.jvm.entrypoint').projectDir = "$rootDir/compiler/ir/b project(':compiler:ir.serialization.common').projectDir = "$rootDir/compiler/ir/serialization.common" as File project(':compiler:ir.serialization.jvm').projectDir = "$rootDir/compiler/ir/serialization.jvm" as File project(':compiler:ir.serialization.js').projectDir = "$rootDir/compiler/ir/serialization.js" as File +project(':compiler:ir.serialization.native').projectDir = "$rootDir/compiler/ir/serialization.native" as File project(':compiler:ir.interpreter').projectDir = "$rootDir/compiler/ir/ir.interpreter" as File project(':kotlin-util-io').projectDir = "$rootDir/compiler/util-io" as File project(':kotlin-util-klib').projectDir = "$rootDir/compiler/util-klib" as File