Fixed konan.data.dir with caches

Removed TODOs after updating to kotlin bootstrap version with konan.data.dir gradle property changes

Fixed warning of incorrect passing -Xkonan-data-dir arg in konanc from KGP and fixed setting konan-data-dir in SetupConfiguration#setupCommonOptionsForCaches

#KT-60660 Fixed

Merge-request: KT-MR-11299
Merged-by: Dmitrii Krasnov <Dmitrii.Krasnov@jetbrains.com>
This commit is contained in:
Dmitrii Krasnov
2023-08-22 07:56:26 +00:00
committed by Space Team
parent e8905ea849
commit ade88e2b0f
11 changed files with 62 additions and 52 deletions
@@ -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<String> {
return settings.konanDataDir?.let { listOf("-Xkonan-data-dir", it) } ?: emptyList()
protected open fun extractArgsFromSettings(): List<String> {
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<GradleBuildTime, GradleBuildPerformanceMetric>
) : KotlinNativeToolRunner(toolName, settings, executionContext, metricsReporter) {
@@ -171,6 +172,10 @@ internal abstract class AbstractKotlinNativeCInteropRunner(
result
}
override fun extractArgsFromSettings(): List<String> {
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()
)
@@ -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()
}
}
@@ -63,7 +63,13 @@ constructor(
val compilation: KotlinNativeCompilation
get() = binary.compilation
private val runnerSettings = KotlinNativeCompilerRunner.Settings.fromProject(project)
@get:Internal
val konanDataDir: Provider<String?> = project.provider { project.konanDataDir }
@get:Internal
val konanHome: Provider<String> = project.provider { project.konanHome }
private val runnerSettings = KotlinNativeCompilerRunner.Settings.of(konanHome.get(), konanDataDir.getOrNull(), project)
final override val toolOptions: KotlinCommonCompilerToolOptions = objectFactory
.newInstance<KotlinCommonCompilerToolOptionsDefault>()
@@ -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,
@@ -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<String?> = project.provider { project.konanDataDir }
@get:Internal
val konanHome: Provider<String> = project.provider { project.konanHome }
@get:Nested
override val multiplatformStructure: K2MultiplatformStructure = objectFactory.newInstance()
@@ -430,7 +432,7 @@ internal constructor(
override val additionalCompilerOptions: Provider<Collection<String>>
get() = compilerOptions.freeCompilerArgs as Provider<Collection<String>>
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<String?> = project.provider { project.konanDataDir }
@get:Internal
val konanHome: Provider<String> = project.provider { project.konanHome }
private val runnerSettings = KotlinNativeToolRunner.Settings.of(konanHome.get(), konanDataDir.getOrNull(), project)
// Inputs and outputs.
@OutputFile
@@ -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<BuildMetricsReporter<GradleBuildTime, GradleBuildPerformanceMetric>> = project.objects
.property(GradleBuildMetricsReporter())
private val runnerSettings = KotlinNativeCompilerRunner.Settings.fromProject(project)
@get:Internal
val konanDataDir: Provider<String?> = project.provider { project.konanDataDir }
@get:Internal
val konanHome: Provider<String> = project.provider { project.konanHome }
private val runnerSettings = KotlinNativeCompilerRunner.Settings.of(konanHome.get(), konanDataDir.getOrNull(),project)
init {
baseName.convention(project.name)