diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/SetupConfiguration.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/SetupConfiguration.kt index c43ad3ee585..bbbcfb78f46 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/SetupConfiguration.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/SetupConfiguration.kt @@ -324,6 +324,7 @@ internal fun CompilerConfiguration.setupCommonOptionsForCaches(konanConfig: Kona put(BinaryOptions.runtimeAssertionsMode, konanConfig.runtimeAssertsMode) put(LAZY_IR_FOR_CACHES, konanConfig.lazyIrForCaches) put(CommonConfigurationKeys.PARALLEL_BACKEND_THREADS, konanConfig.threadsCount) + putIfNotNull(KONAN_DATA_DIR, konanConfig.distribution.localKonanDir.absolutePath) } private fun Array?.toNonNullList() = this?.asList().orEmpty() diff --git a/kotlin-native/build.gradle b/kotlin-native/build.gradle index fc6b314932d..10135ac5a48 100644 --- a/kotlin-native/build.gradle +++ b/kotlin-native/build.gradle @@ -54,14 +54,10 @@ apply plugin: "kotlin.native.build-tools-conventions" ext { distDir = UtilsKt.getKotlinNativeDist(project) - // TODO(Dmitrii Krasnov): remove else branch after KT-50463 will be in current bootstrap - def konanDataDir = project.findProperty('konan.data.dir') - dependenciesDir = konanDataDir != null ? - DependencyDirectories.INSTANCE.getDependenciesRoot(konanDataDir.toString()) - : DependencyDirectories.defaultDependenciesRoot + def konanDataDir = project.hasProperty('konan.data.dir') ? project.property('konan.data.dir').toString() : null + dependenciesDir = DependencyDirectories.INSTANCE.getDependenciesRoot(konanDataDir) experimentalEnabled = project.hasProperty("org.jetbrains.kotlin.native.experimentalTargets") - // TODO(Dmitrii Krasnov): add konanDataDir to the buildDistribution after KT-50463 will be in current bootstrap - platformManager = new PlatformManager(DistributionKt.buildDistribution(projectDir.absolutePath), + platformManager = new PlatformManager(DistributionKt.buildDistribution(projectDir.absolutePath, konanDataDir), ext.experimentalEnabled) cacheableTargetNames = platformManager.hostPlatform.cacheableTargets 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 79c80fbc249..d0899432c68 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 @@ -120,7 +120,6 @@ object KlibToolLogger : Logger, IrMessageLogger { } } -// TODO(Dmitrii Krasnov): I'm not sure that we should put konan distribution dir here val defaultRepository = File(DependencyDirectories.localKonanDir.resolve("klib").absolutePath) open class ModuleDeserializer(val library: ByteArray) { diff --git a/kotlin-native/performance/build.gradle b/kotlin-native/performance/build.gradle index 51edd5756b0..6019eaee916 100644 --- a/kotlin-native/performance/build.gradle +++ b/kotlin-native/performance/build.gradle @@ -43,8 +43,8 @@ project.logger.info("kotlin_root: $kotlin_root") globalProperties.load(new java.io.FileReader(project.file("$kotlin_root/gradle.properties"))) ext.kotlinNativeVersionInResources = true -// TODO(Dmitrii Krasnov): add konanDataDir to the buildDistribution after KT-50463 will be in current bootstrap -def platformManager = new PlatformManager(DistributionKt.buildDistribution(UtilsKt.getKotlinNativeDist(project).path), false) +def konanDataDir = project.hasProperty('konan.data.dir') ? project.property('konan.data.dir').toString() : null +def platformManager = new PlatformManager(DistributionKt.buildDistribution(UtilsKt.getKotlinNativeDist(project).path, konanDataDir), false) def kotlinDist = null if (hasProperty("kotlin_dist")) { kotlinDist = file(findProperty("kotlin_dist")) diff --git a/kotlin-native/performance/swiftinterop/build.gradle.kts b/kotlin-native/performance/swiftinterop/build.gradle.kts index 91f081f2d48..53d41ded5ee 100644 --- a/kotlin-native/performance/swiftinterop/build.gradle.kts +++ b/kotlin-native/performance/swiftinterop/build.gradle.kts @@ -12,8 +12,8 @@ plugins { val toolsPath = "../../tools" val targetExtension = "Macos" -// TODO: add konanDataDir to the buildDistribution after KT-50463 will be in current bootstrap -project.extra["platformManager"] = PlatformManager(buildDistribution(projectDir.parentFile.parentFile.absolutePath), false) +val konanDataDir = if (project.hasProperty("konan.data.dir")) project.property("konan.data.dir").toString() else null +project.extra["platformManager"] = PlatformManager(buildDistribution(projectDir.parentFile.parentFile.absolutePath, konanDataDir), false) swiftBenchmark { applicationName = "swiftInterop" commonSrcDirs = listOf("$toolsPath/benchmarks/shared/src/main/kotlin/report", "src", "../shared/src/main/kotlin") diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/nativeToolRunners.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/nativeToolRunners.kt index e0c05cab4c5..8849f9ec887 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/nativeToolRunners.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/nativeToolRunners.kt @@ -31,7 +31,8 @@ private val Project.jvmArgs get() = PropertiesProvider(this).nativeJvmArgs?.split("\\s+".toRegex()).orEmpty() internal val Project.konanHome: String - get() = PropertiesProvider(this).nativeHome?.let { file(it).absolutePath } + get() = PropertiesProvider(this).konanDataDir?.let { NativeCompilerDownloader(project).compilerDirectory.absolutePath } + ?: PropertiesProvider(this).nativeHome?.let { file(it).absolutePath } ?: NativeCompilerDownloader(project).compilerDirectory.absolutePath internal val Project.disableKonanDaemon: Boolean @@ -90,14 +91,14 @@ internal abstract class KotlinNativeToolRunner( val konanDataDir: String?, ) { companion object { - fun fromProject(project: Project) = Settings( + fun of(konanHome: String, konanDataDir: String?, project: Project) = Settings( konanVersion = project.konanVersion, - konanHome = project.konanHome, - konanPropertiesFile = project.file("${project.konanHome}/konan/konan.properties"), + konanHome = konanHome, + konanPropertiesFile = project.file("${konanHome}/konan/konan.properties"), useXcodeMessageStyle = project.useXcodeMessageStyle, jvmArgs = project.jvmArgs, - classpath = project.files(project.kotlinNativeCompilerJar, "${project.konanHome}/konan/lib/trove4j.jar"), - konanDataDir = project.konanDataDir + classpath = project.files(project.kotlinNativeCompilerJar, "${konanHome}/konan/lib/trove4j.jar"), + konanDataDir = konanDataDir ) } } @@ -146,15 +147,15 @@ internal abstract class KotlinNativeToolRunner( super.run(args + extractArgsFromSettings()) } - private fun extractArgsFromSettings(): List { - return settings.konanDataDir?.let { listOf("-Xkonan-data-dir", it) } ?: emptyList() + protected open fun extractArgsFromSettings(): List { + return settings.konanDataDir?.let { listOf("-Xkonan-data-dir=$it") } ?: emptyList() } } /** A common ancestor for all runners that run the cinterop tool. */ internal abstract class AbstractKotlinNativeCInteropRunner( toolName: String, - settings: Settings, + private val settings: Settings, executionContext: GradleExecutionContext, metricsReporter: BuildMetricsReporter ) : KotlinNativeToolRunner(toolName, settings, executionContext, metricsReporter) { @@ -171,6 +172,10 @@ internal abstract class AbstractKotlinNativeCInteropRunner( result } + override fun extractArgsFromSettings(): List { + return settings.konanDataDir?.let { listOf("-Xkonan-data-dir", it) } ?: emptyList() + } + private val llvmExecutablesPath: String? by lazy { if (HostManager.host == KonanTarget.MINGW_X64) { // TODO: Read it from Platform properties when it is accessible. @@ -222,8 +227,8 @@ internal class KotlinNativeCompilerRunner( val disableKonanDaemon: Boolean, ) { companion object { - fun fromProject(project: Project) = Settings( - parent = KotlinNativeToolRunner.Settings.fromProject(project), + fun of(konanHome: String, konanDataDir: String?, project: Project) = Settings( + parent = KotlinNativeToolRunner.Settings.of(konanHome, konanDataDir, project), disableKonanDaemon = project.disableKonanDaemon, ) } @@ -260,7 +265,7 @@ internal class KotlinNativeLibraryGenerationRunner( companion object { fun fromProject(project: Project) = KotlinNativeLibraryGenerationRunner( - settings = Settings.fromProject(project), + settings = Settings.of(project.konanHome, project.konanDataDir, project), executionContext = GradleExecutionContext.fromProject(project), metricsReporter = GradleBuildMetricsReporter() ) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/NativeCompilerDownloader.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/NativeCompilerDownloader.kt index b78191bfe7c..57a6175c5af 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/NativeCompilerDownloader.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/NativeCompilerDownloader.kt @@ -14,6 +14,7 @@ import org.gradle.api.logging.Logger import org.gradle.api.provider.ValueSource import org.gradle.api.provider.ValueSourceParameters import org.jetbrains.kotlin.compilerRunner.KotlinNativeToolRunner +import org.jetbrains.kotlin.compilerRunner.konanDataDir import org.jetbrains.kotlin.compilerRunner.konanHome import org.jetbrains.kotlin.compilerRunner.konanVersion import org.jetbrains.kotlin.gradle.logging.kotlinInfo @@ -48,7 +49,7 @@ class NativeCompilerDownloader( val compilerDirectory: File get() = DependencyDirectories - .getLocalKonanDir(project.kotlinPropertiesProvider.konanDataDir) + .getLocalKonanDir(project.konanDataDir) .resolve(dependencyNameWithOsAndVersion) private val logger: Logger @@ -200,7 +201,7 @@ class NativeCompilerDownloader( private fun checkClassPath() { project.providers.of(NativeCompilerDownloaderClassPathChecker::class.java) { - it.parameters.classPath.setFrom(KotlinNativeToolRunner.Settings.fromProject(project).classpath) + it.parameters.classPath.setFrom(KotlinNativeToolRunner.Settings.of(project.konanHome, project.konanDataDir, project).classpath) }.usedAtConfigurationTime(project.configurationTimePropertiesAccessor).get() } @@ -228,7 +229,6 @@ internal fun Project.setupNativeCompiler(konanTarget: KonanTarget) { } downloader.downloadIfNeeded() - logger.info("Kotlin/Native distribution: $konanHome") } else { logger.info("User-provided Kotlin/Native distribution: $konanHome") @@ -239,4 +239,3 @@ internal fun Project.setupNativeCompiler(konanTarget: KonanTarget) { PlatformLibrariesGenerator(project, konanTarget).generatePlatformLibsIfNeeded() } } - diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeLink.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeLink.kt index 2ff6eeb5d21..a51c29a511e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeLink.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeLink.kt @@ -63,7 +63,13 @@ constructor( val compilation: KotlinNativeCompilation get() = binary.compilation - private val runnerSettings = KotlinNativeCompilerRunner.Settings.fromProject(project) + @get:Internal + val konanDataDir: Provider = project.provider { project.konanDataDir } + + @get:Internal + val konanHome: Provider = project.provider { project.konanHome } + + private val runnerSettings = KotlinNativeCompilerRunner.Settings.of(konanHome.get(), konanDataDir.getOrNull(), project) final override val toolOptions: KotlinCommonCompilerToolOptions = objectFactory .newInstance() @@ -205,7 +211,7 @@ constructor( private val externalDependenciesArgs by lazy { ExternalDependenciesBuilder(project, compilation).buildCompilerArgs() } private val cacheBuilderSettings by lazy { - CacheBuilder.Settings.createWithProject(project, binary, konanTarget, toolOptions, externalDependenciesArgs) + CacheBuilder.Settings.createWithProject(konanHome.get(), konanDataDir.getOrNull(), project, binary, konanTarget, toolOptions, externalDependenciesArgs) } private class CacheSettings(val orchestration: NativeCacheOrchestration, val kind: NativeCacheKind, diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt index 0a8813b7df3..6b4dc74ba62 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt @@ -358,9 +358,11 @@ internal constructor( @get:Internal // these sources are normally a subset of `source` ones which are already tracked val commonSources: ConfigurableFileCollection = project.files() - @Optional - @get:Input - val konanDataDir: String? = project.konanDataDir + @get:Internal + val konanDataDir: Provider = project.provider { project.konanDataDir } + + @get:Internal + val konanHome: Provider = project.provider { project.konanHome } @get:Nested override val multiplatformStructure: K2MultiplatformStructure = objectFactory.newInstance() @@ -430,7 +432,7 @@ internal constructor( override val additionalCompilerOptions: Provider> get() = compilerOptions.freeCompilerArgs as Provider> - private val runnerSettings = KotlinNativeCompilerRunner.Settings.fromProject(project) + private val runnerSettings = KotlinNativeCompilerRunner.Settings.of(konanHome.get(), konanDataDir.getOrNull(), project) // endregion. @Suppress("DeprecatedCallableAddReplaceWith") @@ -759,6 +761,8 @@ internal class CacheBuilder( companion object { fun createWithProject( + konanHome: String, + konanDataDir: String?, project: Project, binary: NativeBinary, konanTarget: KonanTarget, @@ -767,7 +771,7 @@ internal class CacheBuilder( ): Settings { val konanCacheKind = project.getKonanCacheKind(konanTarget) return Settings( - runnerSettings = KotlinNativeCompilerRunner.Settings.fromProject(project), + runnerSettings = KotlinNativeCompilerRunner.Settings.of(konanHome, konanDataDir, project), konanCacheKind = konanCacheKind, libraries = binary.compilation.compileDependencyFiles, gradleUserHomeDir = project.gradle.gradleUserHomeDir, @@ -1074,8 +1078,13 @@ abstract class CInteropProcess @Inject internal constructor(params: Params) : val outputFile: File get() = outputFileProvider.get() - private val runnerSettings = KotlinNativeToolRunner.Settings.fromProject(project) + @get:Internal + val konanDataDir: Provider = project.provider { project.konanDataDir } + @get:Internal + val konanHome: Provider = project.provider { project.konanHome } + + private val runnerSettings = KotlinNativeToolRunner.Settings.of(konanHome.get(), konanDataDir.getOrNull(), project) // Inputs and outputs. @OutputFile diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/artifact/KotlinNativeLinkArtifactTask.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/artifact/KotlinNativeLinkArtifactTask.kt index 49a6ae65750..4091c416cb2 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/artifact/KotlinNativeLinkArtifactTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/artifact/KotlinNativeLinkArtifactTask.kt @@ -25,6 +25,8 @@ import org.jetbrains.kotlin.build.report.metrics.GradleBuildPerformanceMetric import org.jetbrains.kotlin.build.report.metrics.GradleBuildTime import org.jetbrains.kotlin.compilerRunner.KotlinNativeCompilerRunner import org.jetbrains.kotlin.compilerRunner.KotlinToolRunner +import org.jetbrains.kotlin.compilerRunner.konanDataDir +import org.jetbrains.kotlin.compilerRunner.konanHome import org.jetbrains.kotlin.compilerRunner.addBuildMetricsForTaskAction import org.jetbrains.kotlin.gradle.dsl.* import org.jetbrains.kotlin.gradle.internal.ensureParentDirsCreated @@ -175,7 +177,13 @@ abstract class KotlinNativeLinkArtifactTask @Inject constructor( val metrics: Property> = project.objects .property(GradleBuildMetricsReporter()) - private val runnerSettings = KotlinNativeCompilerRunner.Settings.fromProject(project) + @get:Internal + val konanDataDir: Provider = project.provider { project.konanDataDir } + + @get:Internal + val konanHome: Provider = project.provider { project.konanHome } + + private val runnerSettings = KotlinNativeCompilerRunner.Settings.of(konanHome.get(), konanDataDir.getOrNull(),project) init { baseName.convention(project.name) diff --git a/native/utils/src/org/jetbrains/kotlin/konan/target/Distribution.kt b/native/utils/src/org/jetbrains/kotlin/konan/target/Distribution.kt index fe14a8c0957..00c366d9b06 100644 --- a/native/utils/src/org/jetbrains/kotlin/konan/target/Distribution.kt +++ b/native/utils/src/org/jetbrains/kotlin/konan/target/Distribution.kt @@ -20,15 +20,6 @@ class Distribution private constructor(private val serialized: Serialized) : jav konanDataDir: String? = null ) : this(Serialized(konanHome, onlyDefaultProfiles, runtimeFileOverride, propertyOverrides, konanDataDir)) - // TODO: Remove after KT-50463 will be in current bootstrap - @Deprecated("Binary compatibility until bootstrap with KT-50463", level = DeprecationLevel.HIDDEN) - constructor( - konanHome: String, - onlyDefaultProfiles: Boolean = false, - runtimeFileOverride: String? = null, - propertyOverrides: Map? = null, - ) : this(Serialized(konanHome, onlyDefaultProfiles, runtimeFileOverride, propertyOverrides, null)) - val konanHome by serialized::konanHome private val onlyDefaultProfiles by serialized::onlyDefaultProfiles private val runtimeFileOverride by serialized::runtimeFileOverride @@ -151,10 +142,6 @@ class Distribution private constructor(private val serialized: Serialized) : jav } // TODO: Move into K/N? -fun buildDistribution(konanHome: String) = Distribution(konanHome,true, null) +fun buildDistribution(konanHome: String, konanDataDir: String? = null) = Distribution(konanHome,true, null, konanDataDir = konanDataDir) -fun buildDistribution(konanHome: String, konanDataDir: String?) = Distribution(konanHome,true, null, konanDataDir = konanDataDir) - -fun customerDistribution(konanHome: String) = Distribution(konanHome,false, null) - -fun customerDistribution(konanHome: String, konanDataDir: String?) = Distribution(konanHome,false, null, konanDataDir = konanDataDir) +fun customerDistribution(konanHome: String, konanDataDir: String? = null) = Distribution(konanHome,false, null, konanDataDir = konanDataDir)