From 4468167a64309b839269954e8ed4ebefac1265fc Mon Sep 17 00:00:00 2001 From: Alexander Shabalin Date: Fri, 2 Feb 2024 20:50:18 +0100 Subject: [PATCH] [K/N] Move kotlin-native/utilities/basic-utils to compiler/utils --- .../build.gradle.kts | 1 - ...andaloneSessionBuilderAgainstStdlibTest.kt | 4 +- .../kotlin/utils/KotlinNativePaths.kt | 52 +++++++++++++++++++ .../kotlin/utils}/NativeMemoryAllocator.kt | 14 +++-- .../Interop/Indexer/build.gradle.kts | 2 +- .../native/interop/indexer/IndexerTests.kt | 2 +- .../Interop/Runtime/build.gradle.kts | 2 +- .../kotlin/kotlinx/cinterop/JvmCallbacks.kt | 4 +- .../kotlin/kotlinx/cinterop/JvmNativeMem.kt | 2 +- .../jvm/kotlin/kotlinx/cinterop/JvmUtils.kt | 4 +- .../Interop/StubGenerator/build.gradle.kts | 1 - .../native/interop/gen/defFileDependencies.kt | 2 +- .../native/interop/gen/jvm/ToolConfig.kt | 4 +- .../kotlin/native/interop/gen/jvm/main.kt | 6 +-- .../native/interop/gen/InteropTestsBase.kt | 2 +- kotlin-native/backend.native/build.gradle | 1 - .../kotlin/backend/konan/KonanConfig.kt | 4 +- .../konan/driver/DynamicCompilerDriver.kt | 2 +- kotlin-native/build.gradle | 1 - kotlin-native/klib/build.gradle.kts | 1 - .../org/jetbrains/kotlin/cli/klib/main.kt | 10 ++-- .../build.gradle.kts | 1 - .../utilities/basic-utils/build.gradle.kts | 25 --------- .../src/main/kotlin/KonanHomeProvider.kt | 46 ---------------- .../utilities/cli-runner/build.gradle | 1 - .../utilities/GeneratePlatformLibraries.kt | 6 +-- .../kotlin/cli/utilities/InteropCompiler.kt | 6 +-- .../kotlin/cli/utilities/LlvmClang.kt | 4 +- .../jetbrains/kotlin/cli/utilities/main.kt | 2 +- settings.gradle | 1 - 30 files changed, 92 insertions(+), 121 deletions(-) create mode 100644 compiler/util/src/org/jetbrains/kotlin/utils/KotlinNativePaths.kt rename {kotlin-native/utilities/basic-utils/src/main/kotlin => compiler/util/src/org/jetbrains/kotlin/utils}/NativeMemoryAllocator.kt (96%) delete mode 100644 kotlin-native/utilities/basic-utils/build.gradle.kts delete mode 100644 kotlin-native/utilities/basic-utils/src/main/kotlin/KonanHomeProvider.kt diff --git a/analysis/analysis-api-standalone/analysis-api-standalone-native/build.gradle.kts b/analysis/analysis-api-standalone/analysis-api-standalone-native/build.gradle.kts index 928b1abfcc4..6e628791eaf 100644 --- a/analysis/analysis-api-standalone/analysis-api-standalone-native/build.gradle.kts +++ b/analysis/analysis-api-standalone/analysis-api-standalone-native/build.gradle.kts @@ -11,7 +11,6 @@ dependencies { testImplementation(projectTests(":analysis:analysis-test-framework")) testImplementation(projectTests(":native:native.tests")) testImplementation(project(":native:kotlin-native-utils")) - testImplementation(project(":kotlin-native:utilities:basic-utils")) testImplementation(platform(libs.junit.bom)) testImplementation(libs.junit.jupiter.api) diff --git a/analysis/analysis-api-standalone/analysis-api-standalone-native/tests/org/jetbrains/kotlin/analysis/api/standalone/konan/fir/test/cases/session/builder/NativeStandaloneSessionBuilderAgainstStdlibTest.kt b/analysis/analysis-api-standalone/analysis-api-standalone-native/tests/org/jetbrains/kotlin/analysis/api/standalone/konan/fir/test/cases/session/builder/NativeStandaloneSessionBuilderAgainstStdlibTest.kt index 96b780367c6..eccdd02f8bb 100644 --- a/analysis/analysis-api-standalone/analysis-api-standalone-native/tests/org/jetbrains/kotlin/analysis/api/standalone/konan/fir/test/cases/session/builder/NativeStandaloneSessionBuilderAgainstStdlibTest.kt +++ b/analysis/analysis-api-standalone/analysis-api-standalone-native/tests/org/jetbrains/kotlin/analysis/api/standalone/konan/fir/test/cases/session/builder/NativeStandaloneSessionBuilderAgainstStdlibTest.kt @@ -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.konan.library.KONAN_STDLIB_NAME 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.junit.jupiter.api.Test import java.io.File @@ -16,7 +16,7 @@ import java.io.File class NativeStandaloneSessionBuilderAgainstStdlibTest : AbstractStandaloneSessionBuilderAgainstStdlibTest() { @Test fun testKotlinStdlibJvm() { - val konanHome = File(KonanHomeProvider.determineKonanHome()) + val konanHome = KotlinNativePaths.homePath doTestKotlinStdLibResolve( NativePlatforms.unspecifiedNativePlatform, konanHome.resolve(konanCommonLibraryPath(KONAN_STDLIB_NAME)).toPath() diff --git a/compiler/util/src/org/jetbrains/kotlin/utils/KotlinNativePaths.kt b/compiler/util/src/org/jetbrains/kotlin/utils/KotlinNativePaths.kt new file mode 100644 index 00000000000..187d2850002 --- /dev/null +++ b/compiler/util/src/org/jetbrains/kotlin/utils/KotlinNativePaths.kt @@ -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 /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() +} \ No newline at end of file diff --git a/kotlin-native/utilities/basic-utils/src/main/kotlin/NativeMemoryAllocator.kt b/compiler/util/src/org/jetbrains/kotlin/utils/NativeMemoryAllocator.kt similarity index 96% rename from kotlin-native/utilities/basic-utils/src/main/kotlin/NativeMemoryAllocator.kt rename to compiler/util/src/org/jetbrains/kotlin/utils/NativeMemoryAllocator.kt index 0d18894fd58..0991ddefe61 100644 --- a/kotlin-native/utilities/basic-utils/src/main/kotlin/NativeMemoryAllocator.kt +++ b/compiler/util/src/org/jetbrains/kotlin/utils/NativeMemoryAllocator.kt @@ -1,15 +1,13 @@ /* - * 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. + * 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.konan.util +package org.jetbrains.kotlin.utils import sun.misc.Unsafe -class ThreadSafeDisposableHelper(create: () -> T, private val dispose: (T) -> Unit) { - private val create_ = create - +class ThreadSafeDisposableHelper(private val _create: () -> T, private val _dispose: (T) -> Unit) { var holder: T? = null private set @@ -20,7 +18,7 @@ class ThreadSafeDisposableHelper(create: () -> T, private val dispose: (T) -> synchronized(lock) { if (counter++ == 0) { check(holder == null) - holder = create_() + holder = _create() } } } @@ -28,7 +26,7 @@ class ThreadSafeDisposableHelper(create: () -> T, private val dispose: (T) -> fun dispose() { synchronized(lock) { if (--counter == 0) { - dispose(holder!!) + _dispose(holder!!) holder = null } } diff --git a/kotlin-native/Interop/Indexer/build.gradle.kts b/kotlin-native/Interop/Indexer/build.gradle.kts index d774ae85815..2b4d435689d 100644 --- a/kotlin-native/Interop/Indexer/build.gradle.kts +++ b/kotlin-native/Interop/Indexer/build.gradle.kts @@ -139,9 +139,9 @@ sourceSets { dependencies { api(project(":kotlin-stdlib")) api(project(":kotlin-native:Interop:Runtime")) - api(project(":kotlin-native:utilities:basic-utils")) testImplementation(kotlin("test-junit")) + testImplementation(project(":compiler:util")) } val nativelibs = project.tasks.register("nativelibs") { diff --git a/kotlin-native/Interop/Indexer/src/test/kotlin/org/jetbrains/kotlin/native/interop/indexer/IndexerTests.kt b/kotlin-native/Interop/Indexer/src/test/kotlin/org/jetbrains/kotlin/native/interop/indexer/IndexerTests.kt index d87e8500186..375ca8e25c9 100644 --- a/kotlin-native/Interop/Indexer/src/test/kotlin/org/jetbrains/kotlin/native/interop/indexer/IndexerTests.kt +++ b/kotlin-native/Interop/Indexer/src/test/kotlin/org/jetbrains/kotlin/native/interop/indexer/IndexerTests.kt @@ -6,7 +6,7 @@ package org.jetbrains.kotlin.native.interop.indexer import kotlinx.cinterop.JvmCInteropCallbacks -import org.jetbrains.kotlin.konan.util.NativeMemoryAllocator +import org.jetbrains.kotlin.utils.NativeMemoryAllocator import java.io.File import kotlin.test.AfterTest import kotlin.test.BeforeTest diff --git a/kotlin-native/Interop/Runtime/build.gradle.kts b/kotlin-native/Interop/Runtime/build.gradle.kts index c2ad59a3071..19ba5d283f7 100644 --- a/kotlin-native/Interop/Runtime/build.gradle.kts +++ b/kotlin-native/Interop/Runtime/build.gradle.kts @@ -47,7 +47,7 @@ native { } dependencies { - implementation(project(":kotlin-native:utilities:basic-utils")) + implementation(project(":compiler:util")) implementation(project(":kotlin-stdlib")) implementation(commonDependency("org.jetbrains.kotlin:kotlin-reflect")) { isTransitive = false } } diff --git a/kotlin-native/Interop/Runtime/src/jvm/kotlin/kotlinx/cinterop/JvmCallbacks.kt b/kotlin-native/Interop/Runtime/src/jvm/kotlin/kotlinx/cinterop/JvmCallbacks.kt index 9264b5138e3..49f5f8cf29f 100644 --- a/kotlin-native/Interop/Runtime/src/jvm/kotlin/kotlinx/cinterop/JvmCallbacks.kt +++ b/kotlin-native/Interop/Runtime/src/jvm/kotlin/kotlinx/cinterop/JvmCallbacks.kt @@ -16,8 +16,8 @@ package kotlinx.cinterop -import org.jetbrains.kotlin.konan.util.NativeMemoryAllocator -import org.jetbrains.kotlin.konan.util.ThreadSafeDisposableHelper +import org.jetbrains.kotlin.utils.NativeMemoryAllocator +import org.jetbrains.kotlin.utils.ThreadSafeDisposableHelper import sun.misc.Unsafe import java.util.concurrent.ConcurrentHashMap import java.util.function.LongConsumer diff --git a/kotlin-native/Interop/Runtime/src/jvm/kotlin/kotlinx/cinterop/JvmNativeMem.kt b/kotlin-native/Interop/Runtime/src/jvm/kotlin/kotlinx/cinterop/JvmNativeMem.kt index a93b51f10a9..cf1f2b9a655 100644 --- a/kotlin-native/Interop/Runtime/src/jvm/kotlin/kotlinx/cinterop/JvmNativeMem.kt +++ b/kotlin-native/Interop/Runtime/src/jvm/kotlin/kotlinx/cinterop/JvmNativeMem.kt @@ -16,7 +16,7 @@ package kotlinx.cinterop -import org.jetbrains.kotlin.konan.util.nativeMemoryAllocator +import org.jetbrains.kotlin.utils.nativeMemoryAllocator import sun.misc.Unsafe private val NativePointed.address: Long diff --git a/kotlin-native/Interop/Runtime/src/jvm/kotlin/kotlinx/cinterop/JvmUtils.kt b/kotlin-native/Interop/Runtime/src/jvm/kotlin/kotlinx/cinterop/JvmUtils.kt index 50df6a5e7f0..44bc49de139 100644 --- a/kotlin-native/Interop/Runtime/src/jvm/kotlin/kotlinx/cinterop/JvmUtils.kt +++ b/kotlin-native/Interop/Runtime/src/jvm/kotlin/kotlinx/cinterop/JvmUtils.kt @@ -16,7 +16,7 @@ package kotlinx.cinterop -import org.jetbrains.kotlin.konan.util.KonanHomeProvider +import org.jetbrains.kotlin.utils.KotlinNativePaths import java.io.File import java.nio.file.Files import java.nio.file.Paths @@ -192,7 +192,7 @@ fun loadKonanLibrary(name: String) { for (dir in paths) { if (tryLoadKonanLibrary(dir, fullLibraryName, runFromDaemon)) return } - val defaultNativeLibsDir = "${KonanHomeProvider.determineKonanHome()}/konan/nativelib" + val defaultNativeLibsDir = "${KotlinNativePaths.homePath.absolutePath}/konan/nativelib" if (tryLoadKonanLibrary(defaultNativeLibsDir, fullLibraryName, runFromDaemon)) return error("Lib $fullLibraryName is not found in $defaultNativeLibsDir and ${paths.joinToString { it }}") diff --git a/kotlin-native/Interop/StubGenerator/build.gradle.kts b/kotlin-native/Interop/StubGenerator/build.gradle.kts index e4e064d023f..57115599f0c 100644 --- a/kotlin-native/Interop/StubGenerator/build.gradle.kts +++ b/kotlin-native/Interop/StubGenerator/build.gradle.kts @@ -30,7 +30,6 @@ application { dependencies { implementation(project(":kotlin-native:Interop:Indexer")) - implementation(project(":kotlin-native:utilities:basic-utils")) implementation(project(path = ":kotlin-native:endorsedLibraries:kotlinx.cli", configuration = "jvmRuntimeElements")) api(project(":kotlin-stdlib")) diff --git a/kotlin-native/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/defFileDependencies.kt b/kotlin-native/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/defFileDependencies.kt index 81c2a20b416..7a8873d2811 100644 --- a/kotlin-native/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/defFileDependencies.kt +++ b/kotlin-native/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/defFileDependencies.kt @@ -2,7 +2,7 @@ package org.jetbrains.kotlin.native.interop.gen import kotlinx.cinterop.usingJvmCInteropCallbacks 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.buildNativeLibrary import org.jetbrains.kotlin.native.interop.gen.jvm.prepareTool diff --git a/kotlin-native/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/ToolConfig.kt b/kotlin-native/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/ToolConfig.kt index 6a0ff9397bc..4f27dfb6374 100644 --- a/kotlin-native/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/ToolConfig.kt +++ b/kotlin-native/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/ToolConfig.kt @@ -17,13 +17,13 @@ package org.jetbrains.kotlin.native.interop.tool 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.native.interop.gen.jvm.KotlinPlatform import org.jetbrains.kotlin.native.interop.indexer.Language class ToolConfig(userProvidedTargetName: String?, flavor: KotlinPlatform, propertyOverrides: Map, konanDataDir: String? = null) - : AbstractToolConfig(KonanHomeProvider.determineKonanHome(), userProvidedTargetName, propertyOverrides, konanDataDir) { + : AbstractToolConfig(KotlinNativePaths.homePath.absolutePath, userProvidedTargetName, propertyOverrides, konanDataDir) { val clang = when (flavor) { KotlinPlatform.JVM -> platform.clangForJni diff --git a/kotlin-native/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/main.kt b/kotlin-native/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/main.kt index 2be26b3d772..9b2eeed5bc4 100644 --- a/kotlin-native/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/main.kt +++ b/kotlin-native/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/main.kt @@ -29,8 +29,8 @@ import org.jetbrains.kotlin.konan.target.CompilerOutputKind import org.jetbrains.kotlin.konan.target.Distribution import org.jetbrains.kotlin.konan.target.KonanTarget import org.jetbrains.kotlin.konan.util.DefFile -import org.jetbrains.kotlin.konan.util.KonanHomeProvider -import org.jetbrains.kotlin.konan.util.usingNativeMemoryAllocator +import org.jetbrains.kotlin.utils.KotlinNativePaths +import org.jetbrains.kotlin.utils.usingNativeMemoryAllocator import org.jetbrains.kotlin.library.KLIB_PROPERTY_IR_PROVIDER import org.jetbrains.kotlin.library.KotlinLibrary import org.jetbrains.kotlin.library.metadata.resolver.TopologicalLibraryOrder @@ -486,7 +486,7 @@ private fun getLibraryResolver( repos, libraries.filter { it.contains(org.jetbrains.kotlin.konan.file.File.separator) }, target, - Distribution(KonanHomeProvider.determineKonanHome(), konanDataDir = cinteropArguments.konanDataDir) + Distribution(KotlinNativePaths.homePath.absolutePath, konanDataDir = cinteropArguments.konanDataDir) ).libraryResolver() } diff --git a/kotlin-native/Interop/StubGenerator/src/test/kotlin/org/jetbrains/kotlin/native/interop/gen/InteropTestsBase.kt b/kotlin-native/Interop/StubGenerator/src/test/kotlin/org/jetbrains/kotlin/native/interop/gen/InteropTestsBase.kt index 557c9c844e4..e80fc84476e 100644 --- a/kotlin-native/Interop/StubGenerator/src/test/kotlin/org/jetbrains/kotlin/native/interop/gen/InteropTestsBase.kt +++ b/kotlin-native/Interop/StubGenerator/src/test/kotlin/org/jetbrains/kotlin/native/interop/gen/InteropTestsBase.kt @@ -8,7 +8,7 @@ package org.jetbrains.kotlin.native.interop.gen import kotlinx.cinterop.JvmCInteropCallbacks import org.jetbrains.kotlin.konan.target.HostManager 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.buildNativeLibrary import org.jetbrains.kotlin.native.interop.gen.jvm.prepareTool diff --git a/kotlin-native/backend.native/build.gradle b/kotlin-native/backend.native/build.gradle index 865eba71693..a2a67fd4e81 100644 --- a/kotlin-native/backend.native/build.gradle +++ b/kotlin-native/backend.native/build.gradle @@ -154,7 +154,6 @@ dependencies { } 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-k1") compilerApi project(":native:base") diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfig.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfig.kt index 770cb85e8b7..572850069d4 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfig.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfig.kt @@ -18,7 +18,7 @@ import org.jetbrains.kotlin.konan.file.File import org.jetbrains.kotlin.konan.library.KonanLibrary import org.jetbrains.kotlin.konan.properties.loadProperties 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.library.metadata.resolver.TopologicalLibraryOrder import org.jetbrains.kotlin.util.removeSuffixIfPresent @@ -41,7 +41,7 @@ class KonanConfig(val project: Project, val configuration: CompilerConfiguration } Distribution( - configuration.get(KonanConfigKeys.KONAN_HOME) ?: KonanHomeProvider.determineKonanHome(), + configuration.get(KonanConfigKeys.KONAN_HOME) ?: KotlinNativePaths.homePath.absolutePath, false, configuration.get(KonanConfigKeys.RUNTIME_FILE), overridenProperties, diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/DynamicCompilerDriver.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/DynamicCompilerDriver.kt index 05af3ea30d2..d0ff59502a5 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/DynamicCompilerDriver.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/DynamicCompilerDriver.kt @@ -23,7 +23,7 @@ import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.config.CommonConfigurationKeys import org.jetbrains.kotlin.konan.file.File 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. diff --git a/kotlin-native/build.gradle b/kotlin-native/build.gradle index 412aca1f84c..f67d698ddb1 100644 --- a/kotlin-native/build.gradle +++ b/kotlin-native/build.gradle @@ -167,7 +167,6 @@ dependencies { distPack project(':native:objcexport-header-generator-k1') distPack project(':native:base') distPack project(':kotlin-native:utilities:cli-runner') - distPack project(':kotlin-native:utilities:basic-utils') distPack project(':kotlin-native:klib') distPack project(path: ':kotlin-native:backend.native', configuration: 'cli_bcApiElements') distPack project(path: ':kotlin-native:endorsedLibraries:kotlinx.cli', configuration: "jvmRuntimeElements") diff --git a/kotlin-native/klib/build.gradle.kts b/kotlin-native/klib/build.gradle.kts index 8f70b8f1e7a..5a0ca01e411 100644 --- a/kotlin-native/klib/build.gradle.kts +++ b/kotlin-native/klib/build.gradle.kts @@ -17,7 +17,6 @@ dependencies { implementation(project(":native:frontend.native")) implementation(project(":compiler:ir.psi2ir")) implementation(project(":compiler:ir.serialization.native")) - implementation(project(":kotlin-native:utilities:basic-utils")) implementation(project(":kotlin-util-klib-abi")) } diff --git a/kotlin-native/klib/src/main/kotlin/org/jetbrains/kotlin/cli/klib/main.kt b/kotlin-native/klib/src/main/kotlin/org/jetbrains/kotlin/cli/klib/main.kt index 557efdf7c6a..979e69164b2 100644 --- a/kotlin-native/klib/src/main/kotlin/org/jetbrains/kotlin/cli/klib/main.kt +++ b/kotlin-native/klib/src/main/kotlin/org/jetbrains/kotlin/cli/klib/main.kt @@ -36,7 +36,7 @@ import org.jetbrains.kotlin.konan.library.KonanLibrary import org.jetbrains.kotlin.konan.library.resolverByName import org.jetbrains.kotlin.konan.target.Distribution 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.abi.* import org.jetbrains.kotlin.library.metadata.KlibMetadataFactories @@ -447,10 +447,10 @@ class Library(val libraryNameOrPath: String, val requestedRepository: String?) { val defaultModules = mutableListOf() if (!module.isNativeStdlib()) { val resolver = resolverByName( - emptyList(), - distributionKlib = Distribution(KonanHomeProvider.determineKonanHome()).klib, - skipCurrentDir = true, - logger = KlibToolLogger + emptyList(), + distributionKlib = Distribution(KotlinNativePaths.homePath.absolutePath).klib, + skipCurrentDir = true, + logger = KlibToolLogger ) resolver.defaultLinks(false, true, true).mapTo(defaultModules) { KlibFactories.DefaultDeserializedDescriptorFactory.createDescriptor(it, versionSpec, storageManager, module.builtIns, null) diff --git a/kotlin-native/prepare/kotlin-native-compiler-embeddable/build.gradle.kts b/kotlin-native/prepare/kotlin-native-compiler-embeddable/build.gradle.kts index 86123538ac0..0c066335709 100644 --- a/kotlin-native/prepare/kotlin-native-compiler-embeddable/build.gradle.kts +++ b/kotlin-native/prepare/kotlin-native-compiler-embeddable/build.gradle.kts @@ -47,7 +47,6 @@ dependencies { kotlinNativeEmbedded(project(":kotlin-native:Interop:Skia")) kotlinNativeEmbedded(project(":kotlin-native:backend.native")) kotlinNativeEmbedded(project(":kotlin-native:utilities:cli-runner")) - kotlinNativeEmbedded(project(":kotlin-native:utilities:basic-utils")) kotlinNativeEmbedded(project(":kotlin-native:klib")) kotlinNativeEmbedded(project(":kotlin-native:backend.native", "cli_bcApiElements")) kotlinNativeEmbedded(project(":kotlin-native:endorsedLibraries:kotlinx.cli", "jvmRuntimeElements")) diff --git a/kotlin-native/utilities/basic-utils/build.gradle.kts b/kotlin-native/utilities/basic-utils/build.gradle.kts deleted file mode 100644 index 6fd49743b54..00000000000 --- a/kotlin-native/utilities/basic-utils/build.gradle.kts +++ /dev/null @@ -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("compileKotlin") { - kotlinOptions { - freeCompilerArgs += listOf("-Xskip-metadata-version-check") - } -} - -dependencies { - api(project(":kotlin-stdlib")) - implementation(project(":compiler:util")) -} diff --git a/kotlin-native/utilities/basic-utils/src/main/kotlin/KonanHomeProvider.kt b/kotlin-native/utilities/basic-utils/src/main/kotlin/KonanHomeProvider.kt deleted file mode 100644 index 45c803bb714..00000000000 --- a/kotlin-native/utilities/basic-utils/src/main/kotlin/KonanHomeProvider.kt +++ /dev/null @@ -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 /konan/lib. - jarPath.parentFile.parentFile.parentFile.absolutePath - } - } -} \ No newline at end of file diff --git a/kotlin-native/utilities/cli-runner/build.gradle b/kotlin-native/utilities/cli-runner/build.gradle index 6c401588bfd..8776cf729f0 100644 --- a/kotlin-native/utilities/cli-runner/build.gradle +++ b/kotlin-native/utilities/cli-runner/build.gradle @@ -22,7 +22,6 @@ dependencies { implementation project(":compiler:cli-common") implementation project(':kotlin-native:Interop:StubGenerator') implementation project(':kotlin-native:klib') - implementation project(":kotlin-native:utilities:basic-utils") implementation project(path: ":kotlin-native:endorsedLibraries:kotlinx.cli", configuration: "jvmRuntimeElements") implementation project(":native:kotlin-native-utils") } diff --git a/kotlin-native/utilities/cli-runner/src/main/kotlin/org/jetbrains/kotlin/cli/utilities/GeneratePlatformLibraries.kt b/kotlin-native/utilities/cli-runner/src/main/kotlin/org/jetbrains/kotlin/cli/utilities/GeneratePlatformLibraries.kt index 5e033b10a8d..83c3d55a19e 100644 --- a/kotlin-native/utilities/cli-runner/src/main/kotlin/org/jetbrains/kotlin/cli/utilities/GeneratePlatformLibraries.kt +++ b/kotlin-native/utilities/cli-runner/src/main/kotlin/org/jetbrains/kotlin/cli/utilities/GeneratePlatformLibraries.kt @@ -13,7 +13,7 @@ import org.jetbrains.kotlin.backend.konan.CachedLibraries import org.jetbrains.kotlin.backend.konan.OutputFiles import org.jetbrains.kotlin.backend.konan.files.renameAtomic 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.visibleName 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.util.concurrent.atomic.AtomicInteger 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. private class Logger(val level: Level = Level.NORMAL) { @@ -126,7 +126,7 @@ fun generatePlatformLibraries(args: Array) = usingNativeMemoryAllocator argParser.parse(args) val distribution = Distribution( - KonanHomeProvider.determineKonanHome(), + KotlinNativePaths.homePath.absolutePath, onlyDefaultProfiles = false, runtimeFileOverride = null, propertyOverrides = parseKeyValuePairs(overrideKonanProperties), diff --git a/kotlin-native/utilities/cli-runner/src/main/kotlin/org/jetbrains/kotlin/cli/utilities/InteropCompiler.kt b/kotlin-native/utilities/cli-runner/src/main/kotlin/org/jetbrains/kotlin/cli/utilities/InteropCompiler.kt index 8f025a941ee..411cb1f04aa 100644 --- a/kotlin-native/utilities/cli-runner/src/main/kotlin/org/jetbrains/kotlin/cli/utilities/InteropCompiler.kt +++ b/kotlin-native/utilities/cli-runner/src/main/kotlin/org/jetbrains/kotlin/cli/utilities/InteropCompiler.kt @@ -7,7 +7,7 @@ package org.jetbrains.kotlin.cli.utilities import org.jetbrains.kotlin.cli.common.arguments.K2NativeCompilerArguments import org.jetbrains.kotlin.konan.file.File 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.Interop import org.jetbrains.kotlin.native.interop.tool.* @@ -43,8 +43,8 @@ fun invokeInterop(flavor: String, args: Array, runFromDaemon: Boolean): val repos = arguments.repo val targetRequest = arguments.target val target = PlatformManager( - KonanHomeProvider.determineKonanHome(), - konanDataDir = arguments.konanDataDir).targetManager(targetRequest).target + KotlinNativePaths.homePath.absolutePath, + konanDataDir = arguments.konanDataDir).targetManager(targetRequest).target val cinteropArgsToCompiler = Interop().interop("native", args, InternalInteropOptions(generatedDir.absolutePath, diff --git a/kotlin-native/utilities/cli-runner/src/main/kotlin/org/jetbrains/kotlin/cli/utilities/LlvmClang.kt b/kotlin-native/utilities/cli-runner/src/main/kotlin/org/jetbrains/kotlin/cli/utilities/LlvmClang.kt index 44707ae6a0d..cd3275e122f 100644 --- a/kotlin-native/utilities/cli-runner/src/main/kotlin/org/jetbrains/kotlin/cli/utilities/LlvmClang.kt +++ b/kotlin-native/utilities/cli-runner/src/main/kotlin/org/jetbrains/kotlin/cli/utilities/LlvmClang.kt @@ -6,7 +6,7 @@ package org.jetbrains.kotlin.cli.utilities import org.jetbrains.kotlin.konan.exec.Command import org.jetbrains.kotlin.konan.target.PlatformManager -import org.jetbrains.kotlin.konan.util.KonanHomeProvider +import org.jetbrains.kotlin.utils.KotlinNativePaths fun runLlvmTool(args: Array) { val toolName = args[0] @@ -40,7 +40,7 @@ fun runLlvmClangToolWithTarget(args: Array) { runCommand(toolPath, *compilerArgs, *toolArguments.toTypedArray()) } -private fun platformManager() = PlatformManager(KonanHomeProvider.determineKonanHome()) +private fun platformManager() = PlatformManager(KotlinNativePaths.homePath.absolutePath) private fun runCommand(vararg args: String) { Command(*args) diff --git a/kotlin-native/utilities/cli-runner/src/main/kotlin/org/jetbrains/kotlin/cli/utilities/main.kt b/kotlin-native/utilities/cli-runner/src/main/kotlin/org/jetbrains/kotlin/cli/utilities/main.kt index 99aa3218712..17378d3892f 100644 --- a/kotlin-native/utilities/cli-runner/src/main/kotlin/org/jetbrains/kotlin/cli/utilities/main.kt +++ b/kotlin-native/utilities/cli-runner/src/main/kotlin/org/jetbrains/kotlin/cli/utilities/main.kt @@ -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.mainNoExitWithXcodeRenderer as konancMainWithXcodeRenderer 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, runFromDaemon: Boolean, konancMain: (Array) -> Unit) { val utilityName = args[0] diff --git a/settings.gradle b/settings.gradle index 34599899880..90b671beba2 100644 --- a/settings.gradle +++ b/settings.gradle @@ -869,7 +869,6 @@ if (buildProperties.isKotlinNativeEnabled) { include ':kotlin-native:Interop:Indexer' include ':kotlin-native:Interop:JsRuntime' include ':kotlin-native:Interop:Skia' - include ':kotlin-native:utilities:basic-utils' include ':kotlin-native:utilities:cli-runner' include ':kotlin-native:klib' include ':kotlin-native:common'