[K/N] Move kotlin-native/utilities/basic-utils to compiler/utils

This commit is contained in:
Alexander Shabalin
2024-02-02 20:50:18 +01:00
committed by Space Team
parent 3ab6e9de28
commit 4468167a64
30 changed files with 92 additions and 121 deletions
@@ -11,7 +11,6 @@ dependencies {
testImplementation(projectTests(":analysis:analysis-test-framework")) testImplementation(projectTests(":analysis:analysis-test-framework"))
testImplementation(projectTests(":native:native.tests")) testImplementation(projectTests(":native:native.tests"))
testImplementation(project(":native:kotlin-native-utils")) testImplementation(project(":native:kotlin-native-utils"))
testImplementation(project(":kotlin-native:utilities:basic-utils"))
testImplementation(platform(libs.junit.bom)) testImplementation(platform(libs.junit.bom))
testImplementation(libs.junit.jupiter.api) testImplementation(libs.junit.jupiter.api)
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.analysis.api.standalone.konan.fir.test.cases.sessio
import org.jetbrains.kotlin.analysis.api.standalone.fir.test.cases.session.builder.AbstractStandaloneSessionBuilderAgainstStdlibTest import org.jetbrains.kotlin.analysis.api.standalone.fir.test.cases.session.builder.AbstractStandaloneSessionBuilderAgainstStdlibTest
import org.jetbrains.kotlin.konan.library.KONAN_STDLIB_NAME import org.jetbrains.kotlin.konan.library.KONAN_STDLIB_NAME
import org.jetbrains.kotlin.konan.library.konanCommonLibraryPath import org.jetbrains.kotlin.konan.library.konanCommonLibraryPath
import org.jetbrains.kotlin.konan.util.KonanHomeProvider import org.jetbrains.kotlin.utils.KotlinNativePaths
import org.jetbrains.kotlin.platform.konan.NativePlatforms import org.jetbrains.kotlin.platform.konan.NativePlatforms
import org.junit.jupiter.api.Test import org.junit.jupiter.api.Test
import java.io.File import java.io.File
@@ -16,7 +16,7 @@ import java.io.File
class NativeStandaloneSessionBuilderAgainstStdlibTest : AbstractStandaloneSessionBuilderAgainstStdlibTest() { class NativeStandaloneSessionBuilderAgainstStdlibTest : AbstractStandaloneSessionBuilderAgainstStdlibTest() {
@Test @Test
fun testKotlinStdlibJvm() { fun testKotlinStdlibJvm() {
val konanHome = File(KonanHomeProvider.determineKonanHome()) val konanHome = KotlinNativePaths.homePath
doTestKotlinStdLibResolve( doTestKotlinStdLibResolve(
NativePlatforms.unspecifiedNativePlatform, NativePlatforms.unspecifiedNativePlatform,
konanHome.resolve(konanCommonLibraryPath(KONAN_STDLIB_NAME)).toPath() konanHome.resolve(konanCommonLibraryPath(KONAN_STDLIB_NAME)).toPath()
@@ -0,0 +1,52 @@
/*
* Copyright 2010-2024 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.utils
import java.io.File
import java.nio.file.Paths
object KotlinNativePaths {
private val validPropertiesNames = listOf(
"kotlin.native.home", "org.jetbrains.kotlin.native.home", "konan.home"
)
private val kotlinNativeHome
get() = validPropertiesNames.firstNotNullOfOrNull(System::getProperty)
private fun defaultHomePath(): File {
val jarPath = PathUtil.getResourcePathForClass(this::class.java)
// Check that the path obtained really points to the distribution.
check(
jarPath.toPath().endsWith(Paths.get("konan/lib/kotlin-native.jar")) || jarPath.toPath()
.endsWith(Paths.get("konan/lib/kotlin-native-compiler-embeddable.jar"))
) {
val classesPath = if (jarPath.extension == "jar") jarPath else jarPath.parentFile
"""
Cannot determine a compiler distribution directory.
A path to compiler classes is not a part of a distribution: ${classesPath.absolutePath}.
Please set the konan.home system property to specify the distribution path manually.
""".trimIndent()
}
// The compiler jar is located in <dist>/konan/lib.
return jarPath.parentFile.parentFile.parentFile
}
/**
* Path to the current Kotlin/Native distribution
*
* - If one of `kotlin.native.home`, `org.jetbrains.kotlin.native.home`, `konan.home` is provided,
* it's value used
* - Otherwise determines a path to a jar containing this class.
*
* @throws IllegalStateException when cannot find Kotlin/Native distribution
*/
val homePath: File
get() = kotlinNativeHome?.let {
// KT-58979: KonanLibraryImpl needs normalized klib paths to correctly provide symbols from resolved klibs
File(it).normalize()
} ?: defaultHomePath()
}
@@ -1,15 +1,13 @@
/* /*
* Copyright 2010-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license * Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
* that can be found in the LICENSE file. * 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.konan.util package org.jetbrains.kotlin.utils
import sun.misc.Unsafe import sun.misc.Unsafe
class ThreadSafeDisposableHelper<T>(create: () -> T, private val dispose: (T) -> Unit) { class ThreadSafeDisposableHelper<T>(private val _create: () -> T, private val _dispose: (T) -> Unit) {
private val create_ = create
var holder: T? = null var holder: T? = null
private set private set
@@ -20,7 +18,7 @@ class ThreadSafeDisposableHelper<T>(create: () -> T, private val dispose: (T) ->
synchronized(lock) { synchronized(lock) {
if (counter++ == 0) { if (counter++ == 0) {
check(holder == null) check(holder == null)
holder = create_() holder = _create()
} }
} }
} }
@@ -28,7 +26,7 @@ class ThreadSafeDisposableHelper<T>(create: () -> T, private val dispose: (T) ->
fun dispose() { fun dispose() {
synchronized(lock) { synchronized(lock) {
if (--counter == 0) { if (--counter == 0) {
dispose(holder!!) _dispose(holder!!)
holder = null holder = null
} }
} }
@@ -139,9 +139,9 @@ sourceSets {
dependencies { dependencies {
api(project(":kotlin-stdlib")) api(project(":kotlin-stdlib"))
api(project(":kotlin-native:Interop:Runtime")) api(project(":kotlin-native:Interop:Runtime"))
api(project(":kotlin-native:utilities:basic-utils"))
testImplementation(kotlin("test-junit")) testImplementation(kotlin("test-junit"))
testImplementation(project(":compiler:util"))
} }
val nativelibs = project.tasks.register<Copy>("nativelibs") { val nativelibs = project.tasks.register<Copy>("nativelibs") {
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.native.interop.indexer package org.jetbrains.kotlin.native.interop.indexer
import kotlinx.cinterop.JvmCInteropCallbacks import kotlinx.cinterop.JvmCInteropCallbacks
import org.jetbrains.kotlin.konan.util.NativeMemoryAllocator import org.jetbrains.kotlin.utils.NativeMemoryAllocator
import java.io.File import java.io.File
import kotlin.test.AfterTest import kotlin.test.AfterTest
import kotlin.test.BeforeTest import kotlin.test.BeforeTest
@@ -47,7 +47,7 @@ native {
} }
dependencies { dependencies {
implementation(project(":kotlin-native:utilities:basic-utils")) implementation(project(":compiler:util"))
implementation(project(":kotlin-stdlib")) implementation(project(":kotlin-stdlib"))
implementation(commonDependency("org.jetbrains.kotlin:kotlin-reflect")) { isTransitive = false } implementation(commonDependency("org.jetbrains.kotlin:kotlin-reflect")) { isTransitive = false }
} }
@@ -16,8 +16,8 @@
package kotlinx.cinterop package kotlinx.cinterop
import org.jetbrains.kotlin.konan.util.NativeMemoryAllocator import org.jetbrains.kotlin.utils.NativeMemoryAllocator
import org.jetbrains.kotlin.konan.util.ThreadSafeDisposableHelper import org.jetbrains.kotlin.utils.ThreadSafeDisposableHelper
import sun.misc.Unsafe import sun.misc.Unsafe
import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.ConcurrentHashMap
import java.util.function.LongConsumer import java.util.function.LongConsumer
@@ -16,7 +16,7 @@
package kotlinx.cinterop package kotlinx.cinterop
import org.jetbrains.kotlin.konan.util.nativeMemoryAllocator import org.jetbrains.kotlin.utils.nativeMemoryAllocator
import sun.misc.Unsafe import sun.misc.Unsafe
private val NativePointed.address: Long private val NativePointed.address: Long
@@ -16,7 +16,7 @@
package kotlinx.cinterop package kotlinx.cinterop
import org.jetbrains.kotlin.konan.util.KonanHomeProvider import org.jetbrains.kotlin.utils.KotlinNativePaths
import java.io.File import java.io.File
import java.nio.file.Files import java.nio.file.Files
import java.nio.file.Paths import java.nio.file.Paths
@@ -192,7 +192,7 @@ fun loadKonanLibrary(name: String) {
for (dir in paths) { for (dir in paths) {
if (tryLoadKonanLibrary(dir, fullLibraryName, runFromDaemon)) return if (tryLoadKonanLibrary(dir, fullLibraryName, runFromDaemon)) return
} }
val defaultNativeLibsDir = "${KonanHomeProvider.determineKonanHome()}/konan/nativelib" val defaultNativeLibsDir = "${KotlinNativePaths.homePath.absolutePath}/konan/nativelib"
if (tryLoadKonanLibrary(defaultNativeLibsDir, fullLibraryName, runFromDaemon)) if (tryLoadKonanLibrary(defaultNativeLibsDir, fullLibraryName, runFromDaemon))
return return
error("Lib $fullLibraryName is not found in $defaultNativeLibsDir and ${paths.joinToString { it }}") error("Lib $fullLibraryName is not found in $defaultNativeLibsDir and ${paths.joinToString { it }}")
@@ -30,7 +30,6 @@ application {
dependencies { dependencies {
implementation(project(":kotlin-native:Interop:Indexer")) implementation(project(":kotlin-native:Interop:Indexer"))
implementation(project(":kotlin-native:utilities:basic-utils"))
implementation(project(path = ":kotlin-native:endorsedLibraries:kotlinx.cli", configuration = "jvmRuntimeElements")) implementation(project(path = ":kotlin-native:endorsedLibraries:kotlinx.cli", configuration = "jvmRuntimeElements"))
api(project(":kotlin-stdlib")) api(project(":kotlin-stdlib"))
@@ -2,7 +2,7 @@ package org.jetbrains.kotlin.native.interop.gen
import kotlinx.cinterop.usingJvmCInteropCallbacks import kotlinx.cinterop.usingJvmCInteropCallbacks
import org.jetbrains.kotlin.konan.util.DefFile import org.jetbrains.kotlin.konan.util.DefFile
import org.jetbrains.kotlin.konan.util.usingNativeMemoryAllocator import org.jetbrains.kotlin.utils.usingNativeMemoryAllocator
import org.jetbrains.kotlin.native.interop.gen.jvm.KotlinPlatform import org.jetbrains.kotlin.native.interop.gen.jvm.KotlinPlatform
import org.jetbrains.kotlin.native.interop.gen.jvm.buildNativeLibrary import org.jetbrains.kotlin.native.interop.gen.jvm.buildNativeLibrary
import org.jetbrains.kotlin.native.interop.gen.jvm.prepareTool import org.jetbrains.kotlin.native.interop.gen.jvm.prepareTool
@@ -17,13 +17,13 @@
package org.jetbrains.kotlin.native.interop.tool package org.jetbrains.kotlin.native.interop.tool
import org.jetbrains.kotlin.konan.target.* import org.jetbrains.kotlin.konan.target.*
import org.jetbrains.kotlin.konan.util.KonanHomeProvider import org.jetbrains.kotlin.utils.KotlinNativePaths
import org.jetbrains.kotlin.konan.target.AbstractToolConfig import org.jetbrains.kotlin.konan.target.AbstractToolConfig
import org.jetbrains.kotlin.native.interop.gen.jvm.KotlinPlatform import org.jetbrains.kotlin.native.interop.gen.jvm.KotlinPlatform
import org.jetbrains.kotlin.native.interop.indexer.Language import org.jetbrains.kotlin.native.interop.indexer.Language
class ToolConfig(userProvidedTargetName: String?, flavor: KotlinPlatform, propertyOverrides: Map<String, String>, konanDataDir: String? = null) class ToolConfig(userProvidedTargetName: String?, flavor: KotlinPlatform, propertyOverrides: Map<String, String>, konanDataDir: String? = null)
: AbstractToolConfig(KonanHomeProvider.determineKonanHome(), userProvidedTargetName, propertyOverrides, konanDataDir) { : AbstractToolConfig(KotlinNativePaths.homePath.absolutePath, userProvidedTargetName, propertyOverrides, konanDataDir) {
val clang = when (flavor) { val clang = when (flavor) {
KotlinPlatform.JVM -> platform.clangForJni KotlinPlatform.JVM -> platform.clangForJni
@@ -29,8 +29,8 @@ import org.jetbrains.kotlin.konan.target.CompilerOutputKind
import org.jetbrains.kotlin.konan.target.Distribution import org.jetbrains.kotlin.konan.target.Distribution
import org.jetbrains.kotlin.konan.target.KonanTarget import org.jetbrains.kotlin.konan.target.KonanTarget
import org.jetbrains.kotlin.konan.util.DefFile import org.jetbrains.kotlin.konan.util.DefFile
import org.jetbrains.kotlin.konan.util.KonanHomeProvider import org.jetbrains.kotlin.utils.KotlinNativePaths
import org.jetbrains.kotlin.konan.util.usingNativeMemoryAllocator import org.jetbrains.kotlin.utils.usingNativeMemoryAllocator
import org.jetbrains.kotlin.library.KLIB_PROPERTY_IR_PROVIDER import org.jetbrains.kotlin.library.KLIB_PROPERTY_IR_PROVIDER
import org.jetbrains.kotlin.library.KotlinLibrary import org.jetbrains.kotlin.library.KotlinLibrary
import org.jetbrains.kotlin.library.metadata.resolver.TopologicalLibraryOrder import org.jetbrains.kotlin.library.metadata.resolver.TopologicalLibraryOrder
@@ -486,7 +486,7 @@ private fun getLibraryResolver(
repos, repos,
libraries.filter { it.contains(org.jetbrains.kotlin.konan.file.File.separator) }, libraries.filter { it.contains(org.jetbrains.kotlin.konan.file.File.separator) },
target, target,
Distribution(KonanHomeProvider.determineKonanHome(), konanDataDir = cinteropArguments.konanDataDir) Distribution(KotlinNativePaths.homePath.absolutePath, konanDataDir = cinteropArguments.konanDataDir)
).libraryResolver() ).libraryResolver()
} }
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.native.interop.gen
import kotlinx.cinterop.JvmCInteropCallbacks import kotlinx.cinterop.JvmCInteropCallbacks
import org.jetbrains.kotlin.konan.target.HostManager import org.jetbrains.kotlin.konan.target.HostManager
import org.jetbrains.kotlin.konan.util.DefFile import org.jetbrains.kotlin.konan.util.DefFile
import org.jetbrains.kotlin.konan.util.NativeMemoryAllocator import org.jetbrains.kotlin.utils.NativeMemoryAllocator
import org.jetbrains.kotlin.native.interop.gen.jvm.KotlinPlatform import org.jetbrains.kotlin.native.interop.gen.jvm.KotlinPlatform
import org.jetbrains.kotlin.native.interop.gen.jvm.buildNativeLibrary import org.jetbrains.kotlin.native.interop.gen.jvm.buildNativeLibrary
import org.jetbrains.kotlin.native.interop.gen.jvm.prepareTool import org.jetbrains.kotlin.native.interop.gen.jvm.prepareTool
@@ -154,7 +154,6 @@ dependencies {
} }
kotlin_script_runtime_jar project(":kotlin-script-runtime") kotlin_script_runtime_jar project(":kotlin-script-runtime")
compilerApi project(":kotlin-native:utilities:basic-utils")
compilerApi project(":native:objcexport-header-generator") compilerApi project(":native:objcexport-header-generator")
compilerApi project(":native:objcexport-header-generator-k1") compilerApi project(":native:objcexport-header-generator-k1")
compilerApi project(":native:base") compilerApi project(":native:base")
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.konan.file.File
import org.jetbrains.kotlin.konan.library.KonanLibrary import org.jetbrains.kotlin.konan.library.KonanLibrary
import org.jetbrains.kotlin.konan.properties.loadProperties import org.jetbrains.kotlin.konan.properties.loadProperties
import org.jetbrains.kotlin.konan.target.* import org.jetbrains.kotlin.konan.target.*
import org.jetbrains.kotlin.konan.util.KonanHomeProvider import org.jetbrains.kotlin.utils.KotlinNativePaths
import org.jetbrains.kotlin.konan.util.visibleName import org.jetbrains.kotlin.konan.util.visibleName
import org.jetbrains.kotlin.library.metadata.resolver.TopologicalLibraryOrder import org.jetbrains.kotlin.library.metadata.resolver.TopologicalLibraryOrder
import org.jetbrains.kotlin.util.removeSuffixIfPresent import org.jetbrains.kotlin.util.removeSuffixIfPresent
@@ -41,7 +41,7 @@ class KonanConfig(val project: Project, val configuration: CompilerConfiguration
} }
Distribution( Distribution(
configuration.get(KonanConfigKeys.KONAN_HOME) ?: KonanHomeProvider.determineKonanHome(), configuration.get(KonanConfigKeys.KONAN_HOME) ?: KotlinNativePaths.homePath.absolutePath,
false, false,
configuration.get(KonanConfigKeys.RUNTIME_FILE), configuration.get(KonanConfigKeys.RUNTIME_FILE),
overridenProperties, overridenProperties,
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.config.CommonConfigurationKeys import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.konan.file.File import org.jetbrains.kotlin.konan.file.File
import org.jetbrains.kotlin.konan.target.CompilerOutputKind import org.jetbrains.kotlin.konan.target.CompilerOutputKind
import org.jetbrains.kotlin.konan.util.usingNativeMemoryAllocator import org.jetbrains.kotlin.utils.usingNativeMemoryAllocator
/** /**
* Dynamic driver does not "know" upfront which phases will be executed. * Dynamic driver does not "know" upfront which phases will be executed.
-1
View File
@@ -167,7 +167,6 @@ dependencies {
distPack project(':native:objcexport-header-generator-k1') distPack project(':native:objcexport-header-generator-k1')
distPack project(':native:base') distPack project(':native:base')
distPack project(':kotlin-native:utilities:cli-runner') distPack project(':kotlin-native:utilities:cli-runner')
distPack project(':kotlin-native:utilities:basic-utils')
distPack project(':kotlin-native:klib') distPack project(':kotlin-native:klib')
distPack project(path: ':kotlin-native:backend.native', configuration: 'cli_bcApiElements') distPack project(path: ':kotlin-native:backend.native', configuration: 'cli_bcApiElements')
distPack project(path: ':kotlin-native:endorsedLibraries:kotlinx.cli', configuration: "jvmRuntimeElements") distPack project(path: ':kotlin-native:endorsedLibraries:kotlinx.cli', configuration: "jvmRuntimeElements")
-1
View File
@@ -17,7 +17,6 @@ dependencies {
implementation(project(":native:frontend.native")) implementation(project(":native:frontend.native"))
implementation(project(":compiler:ir.psi2ir")) implementation(project(":compiler:ir.psi2ir"))
implementation(project(":compiler:ir.serialization.native")) implementation(project(":compiler:ir.serialization.native"))
implementation(project(":kotlin-native:utilities:basic-utils"))
implementation(project(":kotlin-util-klib-abi")) implementation(project(":kotlin-util-klib-abi"))
} }
@@ -36,7 +36,7 @@ import org.jetbrains.kotlin.konan.library.KonanLibrary
import org.jetbrains.kotlin.konan.library.resolverByName import org.jetbrains.kotlin.konan.library.resolverByName
import org.jetbrains.kotlin.konan.target.Distribution import org.jetbrains.kotlin.konan.target.Distribution
import org.jetbrains.kotlin.konan.util.DependencyDirectories import org.jetbrains.kotlin.konan.util.DependencyDirectories
import org.jetbrains.kotlin.konan.util.KonanHomeProvider import org.jetbrains.kotlin.utils.KotlinNativePaths
import org.jetbrains.kotlin.library.* import org.jetbrains.kotlin.library.*
import org.jetbrains.kotlin.library.abi.* import org.jetbrains.kotlin.library.abi.*
import org.jetbrains.kotlin.library.metadata.KlibMetadataFactories import org.jetbrains.kotlin.library.metadata.KlibMetadataFactories
@@ -447,10 +447,10 @@ class Library(val libraryNameOrPath: String, val requestedRepository: String?) {
val defaultModules = mutableListOf<ModuleDescriptorImpl>() val defaultModules = mutableListOf<ModuleDescriptorImpl>()
if (!module.isNativeStdlib()) { if (!module.isNativeStdlib()) {
val resolver = resolverByName( val resolver = resolverByName(
emptyList(), emptyList(),
distributionKlib = Distribution(KonanHomeProvider.determineKonanHome()).klib, distributionKlib = Distribution(KotlinNativePaths.homePath.absolutePath).klib,
skipCurrentDir = true, skipCurrentDir = true,
logger = KlibToolLogger logger = KlibToolLogger
) )
resolver.defaultLinks(false, true, true).mapTo(defaultModules) { resolver.defaultLinks(false, true, true).mapTo(defaultModules) {
KlibFactories.DefaultDeserializedDescriptorFactory.createDescriptor(it, versionSpec, storageManager, module.builtIns, null) KlibFactories.DefaultDeserializedDescriptorFactory.createDescriptor(it, versionSpec, storageManager, module.builtIns, null)
@@ -47,7 +47,6 @@ dependencies {
kotlinNativeEmbedded(project(":kotlin-native:Interop:Skia")) kotlinNativeEmbedded(project(":kotlin-native:Interop:Skia"))
kotlinNativeEmbedded(project(":kotlin-native:backend.native")) kotlinNativeEmbedded(project(":kotlin-native:backend.native"))
kotlinNativeEmbedded(project(":kotlin-native:utilities:cli-runner")) kotlinNativeEmbedded(project(":kotlin-native:utilities:cli-runner"))
kotlinNativeEmbedded(project(":kotlin-native:utilities:basic-utils"))
kotlinNativeEmbedded(project(":kotlin-native:klib")) kotlinNativeEmbedded(project(":kotlin-native:klib"))
kotlinNativeEmbedded(project(":kotlin-native:backend.native", "cli_bcApiElements")) kotlinNativeEmbedded(project(":kotlin-native:backend.native", "cli_bcApiElements"))
kotlinNativeEmbedded(project(":kotlin-native:endorsedLibraries:kotlinx.cli", "jvmRuntimeElements")) kotlinNativeEmbedded(project(":kotlin-native:endorsedLibraries:kotlinx.cli", "jvmRuntimeElements"))
@@ -1,25 +0,0 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the LICENSE file.
*/
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
buildscript {
apply(from = "$rootDir/kotlin-native/gradle/kotlinGradlePlugin.gradle")
}
plugins {
kotlin("jvm")
}
tasks.named<KotlinCompile>("compileKotlin") {
kotlinOptions {
freeCompilerArgs += listOf("-Xskip-metadata-version-check")
}
}
dependencies {
api(project(":kotlin-stdlib"))
implementation(project(":compiler:util"))
}
@@ -1,46 +0,0 @@
package org.jetbrains.kotlin.konan.util
import org.jetbrains.kotlin.utils.PathUtil
import org.jetbrains.kotlin.*
import java.io.File
import java.nio.file.Paths
object KonanHomeProvider {
internal val validPropertiesNames = listOf("kotlin.native.home",
"org.jetbrains.kotlin.native.home",
"konan.home")
internal val kotlinNativeHome
get() = validPropertiesNames.mapNotNull(System::getProperty).firstOrNull()
/**
* Determines a path to the current Kotlin/Native distribution.
*
* - If the system property "konan.home" is set, the method returns its normalized value.
* - Otherwise, it determines a path to a jar containing this class. If this path corresponds to the jar path
* inside a distribution, the method calculates the path to the distribution on the basis of this jar path.
* Otherwise an IllegalStateException is thrown.
*/
fun determineKonanHome(): String {
val propertyValue = kotlinNativeHome
return if (propertyValue != null) {
// KT-58979: KonanLibraryImpl needs normalized klib paths to correctly provide symbols from resolved klibs
// For extra safety, path to "konan.home" is also normalized here
Paths.get(File(propertyValue).absolutePath).normalize().toString()
} else {
val jarPath = PathUtil.getResourcePathForClass(this::class.java)
// Check that the path obtained really points to the distribution.
check(jarPath.toPath().endsWith(Paths.get("konan/lib/kotlin-native.jar")) ||
jarPath.toPath().endsWith(Paths.get("konan/lib/kotlin-native-compiler-embeddable.jar"))) {
val classesPath = if (jarPath.extension == "jar") jarPath else jarPath.parentFile
"""
Cannot determine a compiler distribution directory.
A path to compiler classes is not a part of a distribution: ${classesPath.absolutePath}.
Please set the konan.home system property to specify the distribution path manually.
""".trimIndent()
}
// The compiler jar is located in <dist>/konan/lib.
jarPath.parentFile.parentFile.parentFile.absolutePath
}
}
}
@@ -22,7 +22,6 @@ dependencies {
implementation project(":compiler:cli-common") implementation project(":compiler:cli-common")
implementation project(':kotlin-native:Interop:StubGenerator') implementation project(':kotlin-native:Interop:StubGenerator')
implementation project(':kotlin-native:klib') implementation project(':kotlin-native:klib')
implementation project(":kotlin-native:utilities:basic-utils")
implementation project(path: ":kotlin-native:endorsedLibraries:kotlinx.cli", configuration: "jvmRuntimeElements") implementation project(path: ":kotlin-native:endorsedLibraries:kotlinx.cli", configuration: "jvmRuntimeElements")
implementation project(":native:kotlin-native-utils") implementation project(":native:kotlin-native-utils")
} }
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.backend.konan.CachedLibraries
import org.jetbrains.kotlin.backend.konan.OutputFiles import org.jetbrains.kotlin.backend.konan.OutputFiles
import org.jetbrains.kotlin.backend.konan.files.renameAtomic import org.jetbrains.kotlin.backend.konan.files.renameAtomic
import org.jetbrains.kotlin.konan.target.* import org.jetbrains.kotlin.konan.target.*
import org.jetbrains.kotlin.konan.util.KonanHomeProvider import org.jetbrains.kotlin.utils.KotlinNativePaths
import org.jetbrains.kotlin.konan.util.PlatformLibsInfo import org.jetbrains.kotlin.konan.util.PlatformLibsInfo
import org.jetbrains.kotlin.konan.util.visibleName import org.jetbrains.kotlin.konan.util.visibleName
import org.jetbrains.kotlin.native.interop.gen.jvm.parseKeyValuePairs import org.jetbrains.kotlin.native.interop.gen.jvm.parseKeyValuePairs
@@ -24,7 +24,7 @@ import java.nio.file.Files
import java.nio.file.Paths import java.nio.file.Paths
import java.util.concurrent.atomic.AtomicInteger import java.util.concurrent.atomic.AtomicInteger
import kotlin.system.exitProcess import kotlin.system.exitProcess
import org.jetbrains.kotlin.konan.util.usingNativeMemoryAllocator import org.jetbrains.kotlin.utils.usingNativeMemoryAllocator
// TODO: We definitely need to unify logging in different parts of the compiler. // TODO: We definitely need to unify logging in different parts of the compiler.
private class Logger(val level: Level = Level.NORMAL) { private class Logger(val level: Level = Level.NORMAL) {
@@ -126,7 +126,7 @@ fun generatePlatformLibraries(args: Array<String>) = usingNativeMemoryAllocator
argParser.parse(args) argParser.parse(args)
val distribution = Distribution( val distribution = Distribution(
KonanHomeProvider.determineKonanHome(), KotlinNativePaths.homePath.absolutePath,
onlyDefaultProfiles = false, onlyDefaultProfiles = false,
runtimeFileOverride = null, runtimeFileOverride = null,
propertyOverrides = parseKeyValuePairs(overrideKonanProperties), propertyOverrides = parseKeyValuePairs(overrideKonanProperties),
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.cli.utilities
import org.jetbrains.kotlin.cli.common.arguments.K2NativeCompilerArguments import org.jetbrains.kotlin.cli.common.arguments.K2NativeCompilerArguments
import org.jetbrains.kotlin.konan.file.File import org.jetbrains.kotlin.konan.file.File
import org.jetbrains.kotlin.konan.target.PlatformManager import org.jetbrains.kotlin.konan.target.PlatformManager
import org.jetbrains.kotlin.konan.util.KonanHomeProvider import org.jetbrains.kotlin.utils.KotlinNativePaths
import org.jetbrains.kotlin.native.interop.gen.jvm.InternalInteropOptions import org.jetbrains.kotlin.native.interop.gen.jvm.InternalInteropOptions
import org.jetbrains.kotlin.native.interop.gen.jvm.Interop import org.jetbrains.kotlin.native.interop.gen.jvm.Interop
import org.jetbrains.kotlin.native.interop.tool.* import org.jetbrains.kotlin.native.interop.tool.*
@@ -43,8 +43,8 @@ fun invokeInterop(flavor: String, args: Array<String>, runFromDaemon: Boolean):
val repos = arguments.repo val repos = arguments.repo
val targetRequest = arguments.target val targetRequest = arguments.target
val target = PlatformManager( val target = PlatformManager(
KonanHomeProvider.determineKonanHome(), KotlinNativePaths.homePath.absolutePath,
konanDataDir = arguments.konanDataDir).targetManager(targetRequest).target konanDataDir = arguments.konanDataDir).targetManager(targetRequest).target
val cinteropArgsToCompiler = Interop().interop("native", args, val cinteropArgsToCompiler = Interop().interop("native", args,
InternalInteropOptions(generatedDir.absolutePath, InternalInteropOptions(generatedDir.absolutePath,
@@ -6,7 +6,7 @@ package org.jetbrains.kotlin.cli.utilities
import org.jetbrains.kotlin.konan.exec.Command import org.jetbrains.kotlin.konan.exec.Command
import org.jetbrains.kotlin.konan.target.PlatformManager import org.jetbrains.kotlin.konan.target.PlatformManager
import org.jetbrains.kotlin.konan.util.KonanHomeProvider import org.jetbrains.kotlin.utils.KotlinNativePaths
fun runLlvmTool(args: Array<String>) { fun runLlvmTool(args: Array<String>) {
val toolName = args[0] val toolName = args[0]
@@ -40,7 +40,7 @@ fun runLlvmClangToolWithTarget(args: Array<String>) {
runCommand(toolPath, *compilerArgs, *toolArguments.toTypedArray()) runCommand(toolPath, *compilerArgs, *toolArguments.toTypedArray())
} }
private fun platformManager() = PlatformManager(KonanHomeProvider.determineKonanHome()) private fun platformManager() = PlatformManager(KotlinNativePaths.homePath.absolutePath)
private fun runCommand(vararg args: String) { private fun runCommand(vararg args: String) {
Command(*args) Command(*args)
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.cli.klib.main as klibMain
import org.jetbrains.kotlin.cli.bc.mainNoExitWithGradleRenderer as konancMainWithGradleRenderer import org.jetbrains.kotlin.cli.bc.mainNoExitWithGradleRenderer as konancMainWithGradleRenderer
import org.jetbrains.kotlin.cli.bc.mainNoExitWithXcodeRenderer as konancMainWithXcodeRenderer import org.jetbrains.kotlin.cli.bc.mainNoExitWithXcodeRenderer as konancMainWithXcodeRenderer
import org.jetbrains.kotlin.backend.konan.env.setEnv import org.jetbrains.kotlin.backend.konan.env.setEnv
import org.jetbrains.kotlin.konan.util.usingNativeMemoryAllocator import org.jetbrains.kotlin.utils.usingNativeMemoryAllocator
private fun mainImpl(args: Array<String>, runFromDaemon: Boolean, konancMain: (Array<String>) -> Unit) { private fun mainImpl(args: Array<String>, runFromDaemon: Boolean, konancMain: (Array<String>) -> Unit) {
val utilityName = args[0] val utilityName = args[0]
-1
View File
@@ -869,7 +869,6 @@ if (buildProperties.isKotlinNativeEnabled) {
include ':kotlin-native:Interop:Indexer' include ':kotlin-native:Interop:Indexer'
include ':kotlin-native:Interop:JsRuntime' include ':kotlin-native:Interop:JsRuntime'
include ':kotlin-native:Interop:Skia' include ':kotlin-native:Interop:Skia'
include ':kotlin-native:utilities:basic-utils'
include ':kotlin-native:utilities:cli-runner' include ':kotlin-native:utilities:cli-runner'
include ':kotlin-native:klib' include ':kotlin-native:klib'
include ':kotlin-native:common' include ':kotlin-native:common'