[build][native] don't ever fix dist, take it with API

This commit is contained in:
Vasily Levchenko
2020-12-16 13:51:12 +01:00
parent ebeac62f17
commit 8a4b5efa9e
16 changed files with 52 additions and 44 deletions
+3 -2
View File
@@ -1,6 +1,6 @@
import org.jetbrains.kotlin.CopyCommonSources import org.jetbrains.kotlin.CopyCommonSources
import org.jetbrains.kotlin.konan.target.HostManager import org.jetbrains.kotlin.konan.target.HostManager
import org.jetbrains.kotlin.*
/* /*
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license * Copyright 2010-2018 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. * that can be found in the LICENSE file.
@@ -239,9 +239,10 @@ targetList.each { target ->
task("${target}Stdlib", type: JavaExec) { task("${target}Stdlib", type: JavaExec) {
main = 'org.jetbrains.kotlin.cli.bc.K2NativeKt' main = 'org.jetbrains.kotlin.cli.bc.K2NativeKt'
// This task depends on distCompiler, so the compiler jar is already in the dist directory. // This task depends on distCompiler, so the compiler jar is already in the dist directory.
classpath = fileTree("${rootProject.projectDir}/dist/konan/lib") { classpath = fileTree("${UtilsKt.getKotlinNativeDist(project)}/konan/lib") {
include "*.jar" include "*.jar"
} }
systemProperties "konan.home": UtilsKt.getKotlinNativeDist(project)
jvmArgs = konanJvmArgs jvmArgs = konanJvmArgs
def testAnnotationCommon = project(":kotlin-test:kotlin-test-annotations-common").files("src/main/kotlin").files def testAnnotationCommon = project(":kotlin-test:kotlin-test-annotations-common").files("src/main/kotlin").files
def testCommon = project(":kotlin-test:kotlin-test-common").files("src/main/kotlin").files def testCommon = project(":kotlin-test:kotlin-test-common").files("src/main/kotlin").files
@@ -4398,7 +4398,7 @@ standaloneTest("jsinterop_math") {
"$jsinterop -pkg kotlinx.interop.wasm.math -o $buildDir/jsmath -target wasm32".execute().waitFor() "$jsinterop -pkg kotlinx.interop.wasm.math -o $buildDir/jsmath -target wasm32".execute().waitFor()
} }
dependsOn ':wasm32PlatformLibs' dependsOn ':kotlin-native:wasm32PlatformLibs'
enabled = (project.testTarget == 'wasm32') enabled = (project.testTarget == 'wasm32')
goldValue = "e = 2.718281828459045, pi = 3.141592653589793, sin(pi) = 1.2246467991473532E-16, sin(pi/2) = 1.0, ln(1) = 0.0, ln(e) = 1.0\n" goldValue = "e = 2.718281828459045, pi = 3.141592653589793, sin(pi) = 1.2246467991473532E-16, sin(pi/2) = 1.0, ln(1) = 0.0, ln(e) = 1.0\n"
source = "jsinterop/math.kt" source = "jsinterop/math.kt"
@@ -4707,9 +4707,8 @@ if (isAppleTarget(project)) {
library(libraryName, targets: [target.name]) { library(libraryName, targets: [target.name]) {
srcDir "objcexport/library" srcDir "objcexport/library"
artifactName "test-library" artifactName "test-library"
delegate.getByTarget(target.name).configure{
if (!useCustomDist) { UtilsKt.dependsOnDist(it)
dependsOn ":kotlin-native:${target.name}CrossDistRuntime", ':kotlin-native:distCompiler'
} }
extraOpts "-Xshort-module-name=MyLibrary" extraOpts "-Xshort-module-name=MyLibrary"
@@ -4735,8 +4734,8 @@ if (isAppleTarget(project)) {
srcDir "objcexport/library" srcDir "objcexport/library"
artifactName "test-library" artifactName "test-library"
if (!useCustomDist) { delegate.getByTarget(target.name).configure{
dependsOn ":kotlin-native:${target.name}CrossDistRuntime", ':kotlin-native:distCompiler' UtilsKt.dependsOnDist(it)
} }
extraOpts "-Xshort-module-name=MyLibrary" extraOpts "-Xshort-module-name=MyLibrary"
@@ -5051,7 +5050,7 @@ private void configureStdlibTest(KonanGTest task, boolean inWorker) {
extraOpts inWorker ? '-trw' : '-tr', extraOpts inWorker ? '-trw' : '-tr',
'-Xverify-ir', '-Xverify-ir',
'-Xopt-in=kotlin.RequiresOptIn,kotlin.ExperimentalStdlibApi', '-Xopt-in=kotlin.RequiresOptIn,kotlin.ExperimentalStdlibApi',
"-friend-modules", project.rootProject.file("${project.properties['konan.home']}/klib/common/stdlib").absolutePath "-friend-modules", project.rootProject.file("${UtilsKt.getKotlinNativeDist(project)}/klib/common/stdlib").absolutePath
extraOpts project.globalTestArgs extraOpts project.globalTestArgs
} }
} }
@@ -21,6 +21,7 @@ import org.gradle.api.tasks.JavaExec
import org.gradle.api.tasks.TaskAction import org.gradle.api.tasks.TaskAction
import org.gradle.process.ExecResult import org.gradle.process.ExecResult
import org.jetbrains.kotlin.utils.DFS import org.jetbrains.kotlin.utils.DFS
import org.jetbrains.kotlin.*
import java.nio.file.Paths import java.nio.file.Paths
import java.util.function.Function import java.util.function.Function
@@ -83,6 +84,7 @@ class RunExternalTestGroup extends JavaExec implements CompilerRunner {
include '*.jar' include '*.jar'
} }
jvmArgs "-Xmx4G" jvmArgs "-Xmx4G"
jvmArgs "-Dkonan.home=${UtilsKt.getKotlinNativeDist(project)}"
enableAssertions = true enableAssertions = true
def sources = File.createTempFile(name,".lst") def sources = File.createTempFile(name,".lst")
sources.deleteOnExit() sources.deleteOnExit()
@@ -35,15 +35,7 @@ fun configureCacheTesting(project: Project): CacheTesting? {
cacheDir.mkdirs() cacheDir.mkdirs()
} }
if (!(project.property("useCustomDist") as Boolean)) { dependsOnDist()
val tasks = listOf(
"${target}CrossDist",
"${target}CrossDistRuntime",
"distCompiler"
).map { task -> project.rootProject.tasks.getByName(task) }
dependsOn(tasks)
}
commandLine( commandLine(
"$dist/bin/konanc", "$dist/bin/konanc",
@@ -50,10 +50,15 @@ val Project.testOutputFramework
val Project.testOutputExternal val Project.testOutputExternal
get() = (findProperty("testOutputExternal") as File).toString() get() = (findProperty("testOutputExternal") as File).toString()
val validPropertiesNames = listOf("kotlin.native.home",
"org.jetbrains.kotlin.native.home",
"konan.home")
val Project.kotlinNativeDist val Project.kotlinNativeDist
get() = this.rootProject.file(findProperty("kotlin.native.home") get() = rootProject.file(validPropertiesNames.firstOrNull{ hasProperty(it) }?.let{ findProperty(it) } ?: "dist")
?: findProperty("org.jetbrains.kotlin.native.home")
?: findProperty("konan.home") ?: "dist") val kotlinNativeHome
get() = validPropertiesNames.mapNotNull(System::getProperty).first()
val Project.useCustomDist val Project.useCustomDist
get() = hasProperty("kotlin.native.home") || get() = hasProperty("kotlin.native.home") ||
@@ -132,15 +137,12 @@ fun Project.dependsOnDist(taskName: String) {
} }
fun Task.dependsOnDist() { fun Task.dependsOnDist() {
// We don't build the compiler if a custom dist path is specified. dependsOn(":kotlin-native:dist")
if (!(project.findProperty("useCustomDist") as Boolean)) { val target = project.testTarget
dependsOn(":kotlin-native:dist") if (target != HostManager.host) {
val target = project.testTarget // if a test_target property is set then tests should depend on a crossDist
if (target != HostManager.host) { // otherwise, runtime components would not be build for a target.
// if a test_target property is set then tests should depend on a crossDist dependsOn(":kotlin-native:${target.name}CrossDist")
// otherwise, runtime components would not be build for a target.
dependsOn(":kotlin-native:${target.name}CrossDist")
}
} }
} }
+1 -1
View File
@@ -65,7 +65,7 @@ if (isMac()) {
} }
ext { ext {
distDir = rootProject.file('dist') distDir = UtilsKt.getKotlinNativeDist(project)
dependenciesDir = DependencyProcessor.defaultDependenciesRoot dependenciesDir = DependencyProcessor.defaultDependenciesRoot
experimentalEnabled = project.hasProperty("org.jetbrains.kotlin.native.experimentalTargets") experimentalEnabled = project.hasProperty("org.jetbrains.kotlin.native.experimentalTargets")
platformManager = new PlatformManager(DistributionKt.buildDistribution(projectDir.absolutePath), platformManager = new PlatformManager(DistributionKt.buildDistribution(projectDir.absolutePath),
+1
View File
@@ -66,6 +66,7 @@ java_opts=(-ea \
-Xmx3G \ -Xmx3G \
-XX:TieredStopAtLevel=1 \ -XX:TieredStopAtLevel=1 \
-Dfile.encoding=UTF-8 \ -Dfile.encoding=UTF-8 \
-Dkonan.home=$KONAN_HOME \
${JAVA_OPTS}) ${JAVA_OPTS})
# Unset some environment variables which are set by XCode and may potentially affect the tool executed. # Unset some environment variables which are set by XCode and may potentially affect the tool executed.
+1 -1
View File
@@ -57,11 +57,11 @@ set "KONAN_JAR=%KONAN_LIB%\kotlin-native.jar"
set TROVE_JAR="%KONAN_LIB%\trove4j.jar" set TROVE_JAR="%KONAN_LIB%\trove4j.jar"
set "KONAN_CLASSPATH=%KONAN_JAR%;%TROVE_JAR%" set "KONAN_CLASSPATH=%KONAN_JAR%;%TROVE_JAR%"
set JAVA_OPTS=-ea ^ set JAVA_OPTS=-ea ^
-Xmx3G ^ -Xmx3G ^
-XX:TieredStopAtLevel=1 ^ -XX:TieredStopAtLevel=1 ^
-Dfile.encoding=UTF-8 ^ -Dfile.encoding=UTF-8 ^
-Dkonan.home=%_KONAN_HOME% ^
%JAVA_OPTS% %JAVA_OPTS%
set LIBCLANG_DISABLE_CRASH_RECOVERY=1 set LIBCLANG_DISABLE_CRASH_RECOVERY=1
+3 -3
View File
@@ -59,7 +59,7 @@ targetList.each { target ->
def cacheTask = task("${target}Cache") def cacheTask = task("${target}Cache")
endorsedLibrariesList.each { library -> endorsedLibrariesList.each { library ->
def dist = rootProject.file("dist") def dist = UtilsKt.getKotlinNativeDist(project)
task("${target}${library.taskName}Cache", type: KonanCacheTask) { task("${target}${library.taskName}Cache", type: KonanCacheTask) {
it.target = target it.target = target
originalKlib = file("${project.buildDir}/${library.name}") originalKlib = file("${project.buildDir}/${library.name}")
@@ -78,7 +78,7 @@ targetList.each { target ->
endorsedLibrariesList.each { library -> endorsedLibrariesList.each { library ->
task("${library.taskName}CommonSources", type: Zip) { task("${library.taskName}CommonSources", type: Zip) {
destinationDirectory = file("${rootProject.projectDir}/dist/sources") destinationDirectory = file("${UtilsKt.getKotlinNativeDist(project)}/dist/sources")
archiveFileName = "${library.name}-common-sources.zip" archiveFileName = "${library.name}-common-sources.zip"
includeEmptyDirs = false includeEmptyDirs = false
@@ -87,7 +87,7 @@ endorsedLibrariesList.each { library ->
from(library.project.file('src/main/kotlin')) from(library.project.file('src/main/kotlin'))
} }
task("${library.taskName}NativeSources", type: Zip) { task("${library.taskName}NativeSources", type: Zip) {
destinationDirectory = file("${rootProject.projectDir}/dist/sources") destinationDirectory = file("${UtilsKt.getKotlinNativeDist(project)}/dist/sources")
archiveFileName = "${library.name}-native-sources.zip" archiveFileName = "${library.name}-native-sources.zip"
includeEmptyDirs = false includeEmptyDirs = false
@@ -1,5 +1,6 @@
import org.jetbrains.kotlin.konan.target.HostManager import org.jetbrains.kotlin.konan.target.HostManager
import org.jetbrains.kotlin.konan.util.PlatformLibsInfo import org.jetbrains.kotlin.konan.util.PlatformLibsInfo
import org.jetbrains.kotlin.*
buildscript { buildscript {
repositories { repositories {
@@ -82,9 +83,11 @@ targetList.each { target ->
dependsOn ":kotlin-native:distCompiler" dependsOn ":kotlin-native:distCompiler"
dependsOn ":kotlin-native:${target}CrossDistRuntime" dependsOn ":kotlin-native:${target}CrossDistRuntime"
def kotlinNativeDist = UtilsKt.getKotlinNativeDist(project)
systemProperties "konan.home": kotlinNativeDist
main = 'org.jetbrains.kotlin.cli.bc.K2NativeKt' main = 'org.jetbrains.kotlin.cli.bc.K2NativeKt'
// This task depends on distCompiler, so the compiler jar is already in the dist directory. // This task depends on distCompiler, so the compiler jar is already in the dist directory.
classpath = fileTree("${rootProject.projectDir}/dist/konan/lib") { classpath = fileTree("$kotlinNativeDist/konan/lib") {
include "*.jar" include "*.jar"
} }
jvmArgs = konanJvmArgs jvmArgs = konanJvmArgs
@@ -1,2 +1 @@
org.jetbrains.kotlin.native.home=../../dist
org.jetbrains.kotlin.native.jvmArgs=-Xmx6G org.jetbrains.kotlin.native.jvmArgs=-Xmx6G
@@ -44,6 +44,7 @@ import org.jetbrains.kotlin.konan.target.KonanTarget
import org.jetbrains.kotlin.konan.target.buildDistribution import org.jetbrains.kotlin.konan.target.buildDistribution
import org.jetbrains.kotlin.konan.target.customerDistribution import org.jetbrains.kotlin.konan.target.customerDistribution
import org.jetbrains.kotlin.konan.util.DependencyProcessor import org.jetbrains.kotlin.konan.util.DependencyProcessor
import org.jetbrains.kotlin.*
import java.io.File import java.io.File
import javax.inject.Inject import javax.inject.Inject
@@ -87,8 +88,7 @@ internal fun Project.setProperty(property: KonanPlugin.ProjectProperty, value: A
// konanHome extension is set by downloadKonanCompiler task. // konanHome extension is set by downloadKonanCompiler task.
internal val Project.konanHome: String internal val Project.konanHome: String
get() { get() {
assert(hasProperty(KonanPlugin.ProjectProperty.KONAN_HOME)) return project.kotlinNativeDist.absolutePath
return project.file(getProperty(KonanPlugin.ProjectProperty.KONAN_HOME)).canonicalPath
} }
internal val Project.konanVersion: CompilerVersion internal val Project.konanVersion: CompilerVersion
@@ -346,7 +346,7 @@ class KonanPlugin @Inject constructor(private val registry: ToolingModelBuilderR
project.warnAboutDeprecatedProperty(ProjectProperty.KONAN_HOME) project.warnAboutDeprecatedProperty(ProjectProperty.KONAN_HOME)
// Set additional project properties like org.jetbrains.kotlin.native.home, konan.build.targets etc. // Set additional project properties like org.jetbrains.kotlin.native.home, konan.build.targets etc.
if (!project.hasProperty(ProjectProperty.KONAN_HOME)) { if (!project.useCustomDist) {
project.setProperty(ProjectProperty.KONAN_HOME, project.konanCompilerDownloadDir()) project.setProperty(ProjectProperty.KONAN_HOME, project.konanCompilerDownloadDir())
project.setProperty(ProjectProperty.DOWNLOAD_COMPILER, true) project.setProperty(ProjectProperty.DOWNLOAD_COMPILER, true)
} }
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.konan.target.HostManager
import org.jetbrains.kotlin.konan.target.KonanTarget import org.jetbrains.kotlin.konan.target.KonanTarget
import org.jetbrains.kotlin.konan.util.DependencyProcessor import org.jetbrains.kotlin.konan.util.DependencyProcessor
import java.nio.file.Files import java.nio.file.Files
import org.jetbrains.kotlin.*
internal interface KonanToolRunner: Named { internal interface KonanToolRunner: Named {
val mainClass: String val mainClass: String
@@ -105,6 +106,7 @@ internal abstract class KonanCliRunner(
.escapeQuotesForWindows() .escapeQuotesForWindows()
.toMap() .toMap()
) )
exec.systemProperty("konan.home", project.kotlinNativeDist.absolutePath)
exec.args(listOf(toolName) + transformArgs(args)) exec.args(listOf(toolName) + transformArgs(args))
this@KonanCliRunner.blacklistEnvironment.forEach { environment.remove(it) } this@KonanCliRunner.blacklistEnvironment.forEach { environment.remove(it) }
exec.environment(environment) exec.environment(environment)
@@ -7,6 +7,7 @@ import org.jetbrains.kotlin.gradle.plugin.konan.KonanCompilerRunner
import org.jetbrains.kotlin.gradle.plugin.konan.konanHome import org.jetbrains.kotlin.gradle.plugin.konan.konanHome
import org.jetbrains.kotlin.konan.target.CompilerOutputKind import org.jetbrains.kotlin.konan.target.CompilerOutputKind
import org.jetbrains.kotlin.konan.target.PlatformManager import org.jetbrains.kotlin.konan.target.PlatformManager
import org.jetbrains.kotlin.*
import java.io.File import java.io.File
enum class KonanCacheKind(val outputKind: CompilerOutputKind) { enum class KonanCacheKind(val outputKind: CompilerOutputKind) {
@@ -45,7 +46,7 @@ open class KonanCacheTask: DefaultTask() {
@Input @Input
/** Path to a compiler distribution that is used to build this cache. */ /** Path to a compiler distribution that is used to build this cache. */
val compilerDistributionPath: Property<File> = project.objects.property(File::class.java).apply { val compilerDistributionPath: Property<File> = project.objects.property(File::class.java).apply {
set(project.provider { project.file(project.konanHome) }) set(project.provider { project.kotlinNativeDist })
} }
@TaskAction @TaskAction
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.konan.MetaVersion
import org.jetbrains.kotlin.konan.util.DependencyProcessor import org.jetbrains.kotlin.konan.util.DependencyProcessor
import org.jetbrains.kotlin.konan.util.DependencySource import org.jetbrains.kotlin.konan.util.DependencySource
import java.io.IOException import java.io.IOException
import org.jetbrains.kotlin.*
open class KonanCompilerDownloadTask : DefaultTask() { open class KonanCompilerDownloadTask : DefaultTask() {
@@ -40,7 +41,7 @@ open class KonanCompilerDownloadTask : DefaultTask() {
@TaskAction @TaskAction
fun downloadAndExtract() { fun downloadAndExtract() {
if (!project.hasProperty(KonanPlugin.ProjectProperty.DOWNLOAD_COMPILER)) { if (!project.hasProperty(KonanPlugin.ProjectProperty.DOWNLOAD_COMPILER)) {
val konanHome = project.getProperty(KonanPlugin.ProjectProperty.KONAN_HOME) val konanHome = project.kotlinNativeDist
logger.info("Use a user-defined compiler path: $konanHome") logger.info("Use a user-defined compiler path: $konanHome")
} else { } else {
try { try {
@@ -1,11 +1,16 @@
package org.jetbrains.kotlin.konan.util package org.jetbrains.kotlin.konan.util
import org.jetbrains.kotlin.utils.PathUtil import org.jetbrains.kotlin.utils.PathUtil
import org.jetbrains.kotlin.*
import java.io.File import java.io.File
import java.nio.file.Paths import java.nio.file.Paths
object KonanHomeProvider { object KonanHomeProvider {
internal val validPropertiesNames = listOf("kotlin.native.home",
"org.jetbrains.kotlin.native.home",
"konan.home")
internal val kotlinNativeHome
get() = validPropertiesNames.mapNotNull(System::getProperty).first()
/** /**
* Determines a path to the current Kotlin/Native distribution. * Determines a path to the current Kotlin/Native distribution.
* *
@@ -15,7 +20,7 @@ object KonanHomeProvider {
* Otherwise an IllegalStateException is thrown. * Otherwise an IllegalStateException is thrown.
*/ */
fun determineKonanHome(): String { fun determineKonanHome(): String {
val propertyValue = System.getProperty("konan.home") val propertyValue = kotlinNativeHome
return if (propertyValue != null) { return if (propertyValue != null) {
File(propertyValue).absolutePath File(propertyValue).absolutePath
} else { } else {