[Native] JDK toolchains in KonanToolRunner
Use JDK toolchains in KonanToolRunner to make build able to change JDK Use JDK 17 for MacOS aarch64 hosts
This commit is contained in:
@@ -3,6 +3,8 @@ import org.jetbrains.kotlin.gradle.plugin.konan.tasks.KonanCacheTask
|
||||
import org.jetbrains.kotlin.EndorsedLibraryInfo
|
||||
import org.jetbrains.kotlin.UtilsKt
|
||||
|
||||
apply plugin: 'java'
|
||||
|
||||
buildscript {
|
||||
repositories {
|
||||
if (UtilsKt.getCacheRedirectorEnabled(project))
|
||||
@@ -20,7 +22,7 @@ ext {
|
||||
|
||||
Collection<EndorsedLibraryInfo> endorsedLibrariesList = ext.endorsedLibraries.values()
|
||||
|
||||
task clean {
|
||||
tasks.named("clean") {
|
||||
doFirst {
|
||||
delete buildDir
|
||||
}
|
||||
|
||||
+44
-32
@@ -20,7 +20,11 @@ import org.gradle.api.Named
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.file.FileCollection
|
||||
import org.gradle.api.Action
|
||||
import org.gradle.process.JavaExecSpec
|
||||
import org.gradle.api.plugins.JavaPluginExtension
|
||||
import org.gradle.api.provider.Property
|
||||
import org.gradle.jvm.toolchain.JavaLauncher
|
||||
import org.gradle.jvm.toolchain.JavaToolchainService
|
||||
import org.gradle.process.ExecSpec
|
||||
import org.jetbrains.kotlin.gradle.plugin.konan.KonanPlugin.ProjectProperty.KONAN_HOME
|
||||
import org.jetbrains.kotlin.konan.target.Family
|
||||
import org.jetbrains.kotlin.konan.target.HostManager
|
||||
@@ -29,7 +33,7 @@ import org.jetbrains.kotlin.konan.util.DependencyProcessor
|
||||
import java.nio.file.Files
|
||||
import org.jetbrains.kotlin.*
|
||||
|
||||
internal interface KonanToolRunner: Named {
|
||||
internal interface KonanToolRunner : Named {
|
||||
val mainClass: String
|
||||
val classpath: FileCollection
|
||||
val jvmArgs: List<String>
|
||||
@@ -45,7 +49,7 @@ internal abstract class KonanCliRunner(
|
||||
val project: Project,
|
||||
private val additionalJvmArgs: List<String>,
|
||||
private val konanHome: String
|
||||
): KonanToolRunner {
|
||||
) : KonanToolRunner {
|
||||
override val mainClass = "org.jetbrains.kotlin.cli.utilities.MainKt"
|
||||
|
||||
override fun getName() = toolName
|
||||
@@ -58,18 +62,18 @@ internal abstract class KonanCliRunner(
|
||||
}
|
||||
|
||||
protected val blacklistProperties: Set<String> =
|
||||
setOf(
|
||||
"java.endorsed.dirs", // Fix for KT-25887
|
||||
"user.dir" // Don't propagate the working dir of the current Gradle process
|
||||
)
|
||||
setOf(
|
||||
"java.endorsed.dirs", // Fix for KT-25887
|
||||
"user.dir" // Don't propagate the working dir of the current Gradle process
|
||||
)
|
||||
|
||||
override val classpath: FileCollection =
|
||||
project.fileTree("$konanHome/konan/lib/")
|
||||
.apply { include("*.jar") }
|
||||
.apply { include("*.jar") }
|
||||
|
||||
override val jvmArgs = HostManager.defaultJvmArgs.toMutableList().apply {
|
||||
if (additionalJvmArgs.none { it.startsWith("-Xmx") } &&
|
||||
project.jvmArgs.none { it.startsWith("-Xmx") }) {
|
||||
project.jvmArgs.none { it.startsWith("-Xmx") }) {
|
||||
add("-Xmx3G")
|
||||
}
|
||||
addAll(additionalJvmArgs)
|
||||
@@ -81,11 +85,11 @@ internal abstract class KonanCliRunner(
|
||||
private fun String.escapeQuotes() = replace("\"", "\\\"")
|
||||
|
||||
private fun Sequence<Pair<String, String>>.escapeQuotesForWindows() =
|
||||
if (HostManager.hostIsMingw) {
|
||||
map { (key, value) -> key.escapeQuotes() to value.escapeQuotes() }
|
||||
} else {
|
||||
this
|
||||
}
|
||||
if (HostManager.hostIsMingw) {
|
||||
map { (key, value) -> key.escapeQuotes() to value.escapeQuotes() }
|
||||
} else {
|
||||
this
|
||||
}
|
||||
|
||||
open protected fun transformArgs(args: List<String>): List<String> = args
|
||||
|
||||
@@ -97,21 +101,30 @@ internal abstract class KonanCliRunner(
|
||||
"Please change it to the compiler root directory and rerun the build.")
|
||||
}
|
||||
|
||||
project.javaexec(object :Action<JavaExecSpec> {
|
||||
override fun execute(exec: JavaExecSpec) {
|
||||
exec.main = mainClass
|
||||
exec.classpath = classpath
|
||||
exec.jvmArgs(jvmArgs)
|
||||
exec.systemProperties(
|
||||
System.getProperties().asSequence()
|
||||
val toolchain = project.extensions.getByType(JavaPluginExtension::class.java).toolchain
|
||||
val launcher = project.extensions.getByType(JavaToolchainService::class.java).launcherFor(toolchain)
|
||||
|
||||
project.exec(object : Action<ExecSpec> {
|
||||
override fun execute(exec: ExecSpec) {
|
||||
exec.executable = launcher.get().executablePath.toString()
|
||||
val properties = System.getProperties().asSequence()
|
||||
.map { (k, v) -> k.toString() to v.toString() }
|
||||
.filter { (k, _) -> k !in this@KonanCliRunner.blacklistProperties }
|
||||
.filter { (k, _) -> !k.startsWith("sun") && !k.startsWith("java") }
|
||||
.escapeQuotesForWindows()
|
||||
.toMap()
|
||||
)
|
||||
exec.systemProperty("konan.home", project.kotlinNativeDist.absolutePath)
|
||||
exec.args(listOf(toolName) + transformArgs(args))
|
||||
this@KonanCliRunner.blacklistEnvironment.forEach { environment.remove(it) }
|
||||
.toMutableMap()
|
||||
properties.put("konan.home", project.kotlinNativeDist.absolutePath)
|
||||
|
||||
exec.args(mutableListOf<String>().apply {
|
||||
addAll(jvmArgs)
|
||||
addAll(properties.entries.map { "-D${it.key}=${it.value}" })
|
||||
add("-cp")
|
||||
add(classpath.joinToString(separator = System.getProperty("path.separator")))
|
||||
add(mainClass)
|
||||
addAll(listOf(toolName) + transformArgs(args))
|
||||
})
|
||||
blacklistEnvironment.forEach { environment.remove(it) }
|
||||
exec.environment(environment)
|
||||
}
|
||||
})
|
||||
@@ -125,7 +138,7 @@ internal class KonanInteropRunner(
|
||||
) : KonanCliRunner("cinterop", "Kotlin/Native cinterop tool", project, additionalJvmArgs, konanHome) {
|
||||
init {
|
||||
if (HostManager.host == KonanTarget.MINGW_X64) {
|
||||
//TODO: Oh-ho-ho fix it in more convinient way.
|
||||
//TODO: Oh-ho-ho fix it in more convinient way.
|
||||
environment.put("PATH", DependencyProcessor.defaultDependenciesRoot.absolutePath +
|
||||
"\\llvm-11.1.0-windows-x64" +
|
||||
"\\bin;${environment.get("PATH")}")
|
||||
@@ -134,12 +147,11 @@ internal class KonanInteropRunner(
|
||||
}
|
||||
|
||||
internal class KonanCompilerRunner(
|
||||
project: Project,
|
||||
additionalJvmArgs: List<String> = emptyList(),
|
||||
val useArgFile: Boolean = true,
|
||||
konanHome: String = project.konanHome
|
||||
) : KonanCliRunner("konanc", "Kotlin/Native compiler", project, additionalJvmArgs, konanHome)
|
||||
{
|
||||
project: Project,
|
||||
additionalJvmArgs: List<String> = emptyList(),
|
||||
val useArgFile: Boolean = true,
|
||||
konanHome: String = project.konanHome
|
||||
) : KonanCliRunner("konanc", "Kotlin/Native compiler", project, additionalJvmArgs, konanHome) {
|
||||
override fun transformArgs(args: List<String>): List<String> {
|
||||
if (!useArgFile) {
|
||||
return args
|
||||
|
||||
Reference in New Issue
Block a user