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
@@ -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<String>?.toNonNullList() = this?.asList().orEmpty()
+3 -7
View File
@@ -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
@@ -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) {
+2 -2
View File
@@ -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"))
@@ -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")
@@ -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)
@@ -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<String, String>? = 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)