Added build metrics for Kotlin/Native tasks
#KT-58315 Fixed Co-authored-by: Nataliya Valtman <Nataliya.Valtman@jetbrains.com> Merge-request: KT-MR-11343 Merged-by: Dmitrii Krasnov <Dmitrii.Krasnov@jetbrains.com>
This commit is contained in:
committed by
Space Team
parent
7cbf3b28ca
commit
2719dd188f
+8
-2
@@ -50,6 +50,9 @@ enum class JpsBuildTime(private val parent: JpsBuildTime? = null, private val re
|
|||||||
|
|
||||||
@Suppress("Reformat")
|
@Suppress("Reformat")
|
||||||
enum class GradleBuildTime(private val parent: GradleBuildTime? = null, private val readableString: String) : BuildTime {
|
enum class GradleBuildTime(private val parent: GradleBuildTime? = null, private val readableString: String) : BuildTime {
|
||||||
|
// We use tabs to organize the hierarchy of metrics,
|
||||||
|
// that's why the formatter is disabled.
|
||||||
|
// @formatter:off
|
||||||
GRADLE_TASK(readableString = "Total Gradle task time"),
|
GRADLE_TASK(readableString = "Total Gradle task time"),
|
||||||
GRADLE_TASK_PREPARATION(readableString = "Spent time before task action"),
|
GRADLE_TASK_PREPARATION(readableString = "Spent time before task action"),
|
||||||
GRADLE_TASK_ACTION(readableString = "Task action"),
|
GRADLE_TASK_ACTION(readableString = "Task action"),
|
||||||
@@ -65,6 +68,9 @@ enum class GradleBuildTime(private val parent: GradleBuildTime? = null, private
|
|||||||
CONNECT_TO_DAEMON(RUN_COMPILATION_IN_WORKER, "Connect to Kotlin daemon"),
|
CONNECT_TO_DAEMON(RUN_COMPILATION_IN_WORKER, "Connect to Kotlin daemon"),
|
||||||
CALCULATE_OUTPUT_SIZE(RUN_COMPILATION_IN_WORKER, "Calculate output size"),
|
CALCULATE_OUTPUT_SIZE(RUN_COMPILATION_IN_WORKER, "Calculate output size"),
|
||||||
RUN_COMPILATION(RUN_COMPILATION_IN_WORKER, "Run compilation"),
|
RUN_COMPILATION(RUN_COMPILATION_IN_WORKER, "Run compilation"),
|
||||||
|
NATIVE_IN_PROCESS(RUN_COMPILATION, "Run native in process"),
|
||||||
|
RUN_ENTRY_POINT(NATIVE_IN_PROCESS, "Run entry point"),
|
||||||
|
NATIVE_IN_EXECUTOR(RUN_COMPILATION, "Run native in executor"),
|
||||||
NON_INCREMENTAL_COMPILATION_IN_PROCESS(RUN_COMPILATION, "Non incremental inprocess compilation"),
|
NON_INCREMENTAL_COMPILATION_IN_PROCESS(RUN_COMPILATION, "Non incremental inprocess compilation"),
|
||||||
NON_INCREMENTAL_COMPILATION_OUT_OF_PROCESS(RUN_COMPILATION, "Non incremental out of process compilation"),
|
NON_INCREMENTAL_COMPILATION_OUT_OF_PROCESS(RUN_COMPILATION, "Non incremental out of process compilation"),
|
||||||
NON_INCREMENTAL_COMPILATION_DAEMON(RUN_COMPILATION, "Non incremental compilation in daemon"),
|
NON_INCREMENTAL_COMPILATION_DAEMON(RUN_COMPILATION, "Non incremental compilation in daemon"),
|
||||||
@@ -116,8 +122,8 @@ enum class GradleBuildTime(private val parent: GradleBuildTime? = null, private
|
|||||||
SNAPSHOT_KOTLIN_CLASSES(parent = SNAPSHOT_CLASSES, "Snapshot Kotlin classes"),
|
SNAPSHOT_KOTLIN_CLASSES(parent = SNAPSHOT_CLASSES, "Snapshot Kotlin classes"),
|
||||||
SNAPSHOT_JAVA_CLASSES(parent = SNAPSHOT_CLASSES, "Snapshot Java classes"),
|
SNAPSHOT_JAVA_CLASSES(parent = SNAPSHOT_CLASSES, "Snapshot Java classes"),
|
||||||
SAVE_CLASSPATH_ENTRY_SNAPSHOT(parent = CLASSPATH_ENTRY_SNAPSHOT_TRANSFORM, "Save classpath entry snapshot"),
|
SAVE_CLASSPATH_ENTRY_SNAPSHOT(parent = CLASSPATH_ENTRY_SNAPSHOT_TRANSFORM, "Save classpath entry snapshot"),
|
||||||
|
|
||||||
;
|
;
|
||||||
|
// @formatter:on
|
||||||
|
|
||||||
override fun getReadableString(): String = readableString
|
override fun getReadableString(): String = readableString
|
||||||
override fun getParent(): BuildTime? = parent
|
override fun getParent(): BuildTime? = parent
|
||||||
@@ -130,7 +136,7 @@ enum class GradleBuildTime(private val parent: GradleBuildTime? = null, private
|
|||||||
return entries
|
return entries
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getName(): String = this.name
|
override fun getName(): String = this.name
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val serialVersionUID = 1L
|
const val serialVersionUID = 1L
|
||||||
|
|||||||
+90
-9
@@ -15,9 +15,9 @@ import io.ktor.server.netty.*
|
|||||||
import io.ktor.server.request.*
|
import io.ktor.server.request.*
|
||||||
import io.ktor.server.response.*
|
import io.ktor.server.response.*
|
||||||
import io.ktor.server.routing.*
|
import io.ktor.server.routing.*
|
||||||
import io.ktor.util.*
|
import org.gradle.api.logging.LogLevel
|
||||||
import io.ktor.util.collections.*
|
|
||||||
import org.gradle.util.GradleVersion
|
import org.gradle.util.GradleVersion
|
||||||
|
import org.jetbrains.kotlin.build.report.metrics.GradleBuildTime
|
||||||
import org.jetbrains.kotlin.build.report.statistics.*
|
import org.jetbrains.kotlin.build.report.statistics.*
|
||||||
import org.jetbrains.kotlin.gradle.report.BuildReportType
|
import org.jetbrains.kotlin.gradle.report.BuildReportType
|
||||||
import org.jetbrains.kotlin.gradle.report.data.GradleCompileStatisticsData
|
import org.jetbrains.kotlin.gradle.report.data.GradleCompileStatisticsData
|
||||||
@@ -28,13 +28,11 @@ import java.net.HttpURLConnection
|
|||||||
import java.net.InetSocketAddress
|
import java.net.InetSocketAddress
|
||||||
import java.net.ServerSocket
|
import java.net.ServerSocket
|
||||||
import java.net.URL
|
import java.net.URL
|
||||||
import java.util.*
|
|
||||||
import java.util.concurrent.ArrayBlockingQueue
|
import java.util.concurrent.ArrayBlockingQueue
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
import kotlin.test.*
|
import kotlin.test.*
|
||||||
|
|
||||||
@DisplayName("Build statistics")
|
@DisplayName("Build statistics")
|
||||||
@JvmGradlePluginTests
|
|
||||||
class BuildStatisticsWithKtorIT : KGPBaseTest() {
|
class BuildStatisticsWithKtorIT : KGPBaseTest() {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
@@ -152,6 +150,7 @@ class BuildStatisticsWithKtorIT : KGPBaseTest() {
|
|||||||
|
|
||||||
@DisplayName("Http build report request problems are logged only ones")
|
@DisplayName("Http build report request problems are logged only ones")
|
||||||
@GradleTest
|
@GradleTest
|
||||||
|
@JvmGradlePluginTests
|
||||||
fun testHttpServiceWithBadRequest(gradleVersion: GradleVersion) {
|
fun testHttpServiceWithBadRequest(gradleVersion: GradleVersion) {
|
||||||
runWithKtorService { port ->
|
runWithKtorService { port ->
|
||||||
project("incrementalMultiproject", gradleVersion) {
|
project("incrementalMultiproject", gradleVersion) {
|
||||||
@@ -192,6 +191,7 @@ class BuildStatisticsWithKtorIT : KGPBaseTest() {
|
|||||||
|
|
||||||
@DisplayName("Validate mandatory field for http request body")
|
@DisplayName("Validate mandatory field for http request body")
|
||||||
@GradleTest
|
@GradleTest
|
||||||
|
@JvmGradlePluginTests
|
||||||
fun testHttpRequest(gradleVersion: GradleVersion) {
|
fun testHttpRequest(gradleVersion: GradleVersion) {
|
||||||
simpleTestHttpReport(gradleVersion) { taskData ->
|
simpleTestHttpReport(gradleVersion) { taskData ->
|
||||||
assertContains(taskData.getTags(), StatTag.NON_INCREMENTAL)
|
assertContains(taskData.getTags(), StatTag.NON_INCREMENTAL)
|
||||||
@@ -208,6 +208,7 @@ class BuildStatisticsWithKtorIT : KGPBaseTest() {
|
|||||||
|
|
||||||
@DisplayName("Compiler arguments reporting can be disabled")
|
@DisplayName("Compiler arguments reporting can be disabled")
|
||||||
@GradleTest
|
@GradleTest
|
||||||
|
@JvmGradlePluginTests
|
||||||
fun testDisablingCompilerArgumentsReporting(gradleVersion: GradleVersion) {
|
fun testDisablingCompilerArgumentsReporting(gradleVersion: GradleVersion) {
|
||||||
simpleTestHttpReport(gradleVersion, { project ->
|
simpleTestHttpReport(gradleVersion, { project ->
|
||||||
project.gradleProperties.append(
|
project.gradleProperties.append(
|
||||||
@@ -231,6 +232,7 @@ class BuildStatisticsWithKtorIT : KGPBaseTest() {
|
|||||||
|
|
||||||
@DisplayName("Validate configuration cache tag")
|
@DisplayName("Validate configuration cache tag")
|
||||||
@GradleTest
|
@GradleTest
|
||||||
|
@JvmGradlePluginTests
|
||||||
fun testConfigurationCache(gradleVersion: GradleVersion) {
|
fun testConfigurationCache(gradleVersion: GradleVersion) {
|
||||||
runWithKtorService { port ->
|
runWithKtorService { port ->
|
||||||
|
|
||||||
@@ -253,16 +255,24 @@ class BuildStatisticsWithKtorIT : KGPBaseTest() {
|
|||||||
StatTag.NON_INCREMENTAL,
|
StatTag.NON_INCREMENTAL,
|
||||||
StatTag.CONFIGURATION_CACHE,
|
StatTag.CONFIGURATION_CACHE,
|
||||||
StatTag.KOTLIN_1,
|
StatTag.KOTLIN_1,
|
||||||
), taskData.getTags().sorted(),
|
),
|
||||||
|
taskData.getTags().sorted(),
|
||||||
)
|
)
|
||||||
assertEquals(
|
assertEquals(
|
||||||
defaultBuildOptions.kotlinVersion, taskData.getKotlinVersion(),
|
defaultBuildOptions.kotlinVersion, taskData.getKotlinVersion(),
|
||||||
"Unexpected kotlinVersion: ${taskData.getKotlinVersion()} instead of ${defaultBuildOptions.kotlinVersion}"
|
"Unexpected kotlinVersion: ${taskData.getKotlinVersion()} instead of ${defaultBuildOptions.kotlinVersion}"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
validateTaskData(port) { taskData ->
|
validateTaskData(port) { taskData ->
|
||||||
assertEquals(":app:compileKotlin", taskData.getTaskName())
|
assertEquals(":app:compileKotlin", taskData.getTaskName())
|
||||||
assertContentEquals(listOf(StatTag.ARTIFACT_TRANSFORM, StatTag.NON_INCREMENTAL, StatTag.CONFIGURATION_CACHE, StatTag.KOTLIN_1), taskData.getTags().sorted())
|
assertContentEquals(
|
||||||
|
listOf(
|
||||||
|
StatTag.ARTIFACT_TRANSFORM,
|
||||||
|
StatTag.NON_INCREMENTAL,
|
||||||
|
StatTag.CONFIGURATION_CACHE,
|
||||||
|
StatTag.KOTLIN_1
|
||||||
|
), taskData.getTags().sorted()
|
||||||
|
)
|
||||||
assertEquals(
|
assertEquals(
|
||||||
defaultBuildOptions.kotlinVersion, taskData.getKotlinVersion(),
|
defaultBuildOptions.kotlinVersion, taskData.getKotlinVersion(),
|
||||||
"Unexpected kotlinVersion: ${taskData.getKotlinVersion()} instead of ${defaultBuildOptions.kotlinVersion}"
|
"Unexpected kotlinVersion: ${taskData.getKotlinVersion()} instead of ${defaultBuildOptions.kotlinVersion}"
|
||||||
@@ -274,15 +284,86 @@ class BuildStatisticsWithKtorIT : KGPBaseTest() {
|
|||||||
//second build
|
//second build
|
||||||
validateTaskData(port) { taskData ->
|
validateTaskData(port) { taskData ->
|
||||||
assertEquals(":lib:compileKotlin", taskData.getTaskName())
|
assertEquals(":lib:compileKotlin", taskData.getTaskName())
|
||||||
assertContentEquals(listOf(StatTag.ARTIFACT_TRANSFORM, StatTag.INCREMENTAL, StatTag.CONFIGURATION_CACHE, StatTag.KOTLIN_1), taskData.getTags().sorted())
|
assertContentEquals(
|
||||||
|
listOf(StatTag.ARTIFACT_TRANSFORM, StatTag.INCREMENTAL, StatTag.CONFIGURATION_CACHE, StatTag.KOTLIN_1),
|
||||||
|
taskData.getTags().sorted()
|
||||||
|
)
|
||||||
}
|
}
|
||||||
validateTaskData(port) { taskData ->
|
validateTaskData(port) { taskData ->
|
||||||
assertEquals(":app:compileKotlin", taskData.getTaskName())
|
assertEquals(":app:compileKotlin", taskData.getTaskName())
|
||||||
assertContentEquals(listOf(StatTag.ARTIFACT_TRANSFORM, StatTag.INCREMENTAL, StatTag.CONFIGURATION_CACHE, StatTag.KOTLIN_1), taskData.getTags().sorted())
|
assertContentEquals(
|
||||||
|
listOf(StatTag.ARTIFACT_TRANSFORM, StatTag.INCREMENTAL, StatTag.CONFIGURATION_CACHE, StatTag.KOTLIN_1),
|
||||||
|
taskData.getTags().sorted()
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@DisplayName("Build reports for native")
|
||||||
|
@GradleTest
|
||||||
|
@NativeGradlePluginTests
|
||||||
|
fun buildReportForNative(gradleVersion: GradleVersion) {
|
||||||
|
runWithKtorService { port ->
|
||||||
|
nativeProject(
|
||||||
|
"k2-native-intermediate-metadata",
|
||||||
|
gradleVersion,
|
||||||
|
buildOptions = defaultBuildOptions.copy(logLevel = LogLevel.WARN)
|
||||||
|
) {
|
||||||
|
setProjectForTest(port)
|
||||||
|
build(
|
||||||
|
"build",
|
||||||
|
// Disables cache for explicit task execution and metric collection
|
||||||
|
"-Pkotlin.mpp.enableNativeDistributionCommonizationCache=false",
|
||||||
|
) {
|
||||||
|
assertOutputDoesNotContain("Failed to send statistic to")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
val commonizerNativeDistributionTask = ":commonizeNativeDistribution"
|
||||||
|
validateTaskData(port) { taskReport ->
|
||||||
|
assertEquals(commonizerNativeDistributionTask, taskReport.getTaskName())
|
||||||
|
|
||||||
|
|
||||||
|
assertContains(
|
||||||
|
taskReport.getBuildTimesMetrics().keys,
|
||||||
|
GradleBuildTime.NATIVE_IN_EXECUTOR,
|
||||||
|
"Assertion failed for task \"$commonizerNativeDistributionTask\""
|
||||||
|
)
|
||||||
|
assertEquals(
|
||||||
|
defaultBuildOptions.kotlinVersion, taskReport.getKotlinVersion(),
|
||||||
|
"Unexpected kotlinVersion: ${taskReport.getKotlinVersion()} instead of ${defaultBuildOptions.kotlinVersion}"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
val compileNativeTasks = listOf(
|
||||||
|
":compileCommonMainKotlinMetadata",
|
||||||
|
":compileNativeMainKotlinMetadata",
|
||||||
|
)
|
||||||
|
|
||||||
|
for (task in compileNativeTasks) {
|
||||||
|
validateTaskData(port) { taskReport ->
|
||||||
|
//can be sure in task execution order
|
||||||
|
assertEquals(task, taskReport.getTaskName())
|
||||||
|
|
||||||
|
assertContains(
|
||||||
|
taskReport.getBuildTimesMetrics().keys,
|
||||||
|
GradleBuildTime.NATIVE_IN_PROCESS,
|
||||||
|
"Assertion failed for task \"$task\""
|
||||||
|
)
|
||||||
|
assertContains(
|
||||||
|
taskReport.getBuildTimesMetrics().keys,
|
||||||
|
GradleBuildTime.RUN_ENTRY_POINT,
|
||||||
|
"Assertion failed for task \"$task\""
|
||||||
|
)
|
||||||
|
assertEquals(
|
||||||
|
defaultBuildOptions.kotlinVersion, taskReport.getKotlinVersion(),
|
||||||
|
"Unexpected kotlinVersion: ${taskReport.getKotlinVersion()} instead of ${defaultBuildOptions.kotlinVersion}"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private fun TestProject.setProjectForTest(port: Int) {
|
private fun TestProject.setProjectForTest(port: Int) {
|
||||||
enableStatisticReports(BuildReportType.HTTP, "http://localhost:$port/put")
|
enableStatisticReports(BuildReportType.HTTP, "http://localhost:$port/put")
|
||||||
}
|
}
|
||||||
|
|||||||
+34
-3
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.cli.common.arguments.K2NativeCompilerArguments
|
|||||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics
|
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics
|
||||||
import org.jetbrains.kotlin.gradle.testbase.*
|
import org.jetbrains.kotlin.gradle.testbase.*
|
||||||
import org.jetbrains.kotlin.gradle.util.parseCompilerArgumentsFromBuildOutput
|
import org.jetbrains.kotlin.gradle.util.parseCompilerArgumentsFromBuildOutput
|
||||||
|
import org.jetbrains.kotlin.konan.target.HostManager
|
||||||
import org.junit.jupiter.api.DisplayName
|
import org.junit.jupiter.api.DisplayName
|
||||||
import kotlin.io.path.appendText
|
import kotlin.io.path.appendText
|
||||||
|
|
||||||
@@ -65,7 +66,7 @@ class TryK2IT : KGPBaseTest() {
|
|||||||
) {
|
) {
|
||||||
build("build") {
|
build("build") {
|
||||||
assertOutputDoesNotContain(
|
assertOutputDoesNotContain(
|
||||||
"##### 'kotlin.experimental.tryK2' results (Kotlin/Native not checked) #####"
|
"##### 'kotlin.experimental.tryK2' results #####"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -85,7 +86,7 @@ class TryK2IT : KGPBaseTest() {
|
|||||||
build("build") {
|
build("build") {
|
||||||
assertOutputContains(
|
assertOutputContains(
|
||||||
"""
|
"""
|
||||||
|##### 'kotlin.experimental.tryK2' results (Kotlin/Native not checked) #####
|
|##### 'kotlin.experimental.tryK2' results #####
|
||||||
|:lib:compileKotlin: 2.0 language version
|
|:lib:compileKotlin: 2.0 language version
|
||||||
|:app:compileKotlin: 2.0 language version
|
|:app:compileKotlin: 2.0 language version
|
||||||
|##### 100% (2/2) tasks have been compiled with Kotlin 2.0 #####
|
|##### 100% (2/2) tasks have been compiled with Kotlin 2.0 #####
|
||||||
@@ -95,6 +96,36 @@ class TryK2IT : KGPBaseTest() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@DisplayName("Native: report is printed at the end of the build")
|
||||||
|
@MppGradlePluginTests
|
||||||
|
@GradleTest
|
||||||
|
fun buildReportForNative(gradleVersion: GradleVersion) {
|
||||||
|
project(
|
||||||
|
"k2-native-intermediate-metadata",
|
||||||
|
gradleVersion,
|
||||||
|
buildOptions = defaultBuildOptions.copy(logLevel = LogLevel.WARN)
|
||||||
|
) {
|
||||||
|
enableTryK2()
|
||||||
|
|
||||||
|
build("build") {
|
||||||
|
assertOutputContains(
|
||||||
|
"""
|
||||||
|
|##### 'kotlin.experimental.tryK2' results #####
|
||||||
|
|:compileCommonMainKotlinMetadata: 2.0 language version
|
||||||
|
|:compileNativeMainKotlinMetadata: 2.0 language version
|
||||||
|
|:compileKotlinLinuxX64: 2.0 language version${
|
||||||
|
if (HostManager.hostIsMac)
|
||||||
|
"\n|:compileKotlinMacosArm64: 2.0 language version\n|:compileKotlinMacosX64: 2.0 language version"
|
||||||
|
else ""
|
||||||
|
}
|
||||||
|
|:compileKotlinMingwX64: 2.0 language version
|
||||||
|
|##### 100% ${if (HostManager.hostIsMac) "(6/6)" else "(4/4)"} tasks have been compiled with Kotlin 2.0 #####
|
||||||
|
""".trimMargin().normalizeLineEndings()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@DisplayName("JVM: report is printed at the end of the build in case of compilation error")
|
@DisplayName("JVM: report is printed at the end of the build in case of compilation error")
|
||||||
@JvmGradlePluginTests
|
@JvmGradlePluginTests
|
||||||
@GradleTest
|
@GradleTest
|
||||||
@@ -116,7 +147,7 @@ class TryK2IT : KGPBaseTest() {
|
|||||||
buildAndFail("build", forceOutput = true) {
|
buildAndFail("build", forceOutput = true) {
|
||||||
assertOutputContains(
|
assertOutputContains(
|
||||||
"""
|
"""
|
||||||
|##### 'kotlin.experimental.tryK2' results (Kotlin/Native not checked) #####
|
|##### 'kotlin.experimental.tryK2' results #####
|
||||||
|:lib:compileKotlin: 2.0 language version
|
|:lib:compileKotlin: 2.0 language version
|
||||||
|:app:compileKotlin: 2.0 language version
|
|:app:compileKotlin: 2.0 language version
|
||||||
|##### 100% (2/2) tasks have been compiled with Kotlin 2.0 #####
|
|##### 100% (2/2) tasks have been compiled with Kotlin 2.0 #####
|
||||||
|
|||||||
-6
@@ -243,12 +243,6 @@ internal open class GradleCompilerRunner(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
//Copy of CommonCompilerArguments.parseOrConfigureLanguageVersion to avoid direct dependency
|
|
||||||
private fun parseLanguageVersion(languageVersion: String?, useK2: Boolean): KotlinVersion {
|
|
||||||
val explicitVersion = languageVersion?.let { KotlinVersion.fromVersion(languageVersion) } ?: KotlinVersion.DEFAULT
|
|
||||||
return if (useK2 && (explicitVersion < KotlinVersion.KOTLIN_2_0)) KotlinVersion.KOTLIN_2_0 else explicitVersion
|
|
||||||
}
|
|
||||||
|
|
||||||
protected open fun runCompilerAsync(
|
protected open fun runCompilerAsync(
|
||||||
workArgs: GradleKotlinCompilerWorkArguments,
|
workArgs: GradleKotlinCompilerWorkArguments,
|
||||||
taskOutputsBackup: TaskOutputsBackup?
|
taskOutputsBackup: TaskOutputsBackup?
|
||||||
|
|||||||
+5
-1
@@ -5,12 +5,16 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.compilerRunner
|
package org.jetbrains.kotlin.compilerRunner
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.build.report.metrics.BuildMetricsReporter
|
||||||
|
import org.jetbrains.kotlin.build.report.metrics.GradleBuildPerformanceMetric
|
||||||
|
import org.jetbrains.kotlin.build.report.metrics.GradleBuildTime
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
internal class KotlinNativeCommonizerToolRunner(
|
internal class KotlinNativeCommonizerToolRunner(
|
||||||
context: GradleExecutionContext,
|
context: GradleExecutionContext,
|
||||||
private val settings: Settings,
|
private val settings: Settings,
|
||||||
) : KotlinToolRunner(context) {
|
metricsReporter: BuildMetricsReporter<GradleBuildTime, GradleBuildPerformanceMetric>
|
||||||
|
) : KotlinToolRunner(context, metricsReporter) {
|
||||||
|
|
||||||
class Settings(
|
class Settings(
|
||||||
val kotlinPluginVersion: String,
|
val kotlinPluginVersion: String,
|
||||||
|
|||||||
+69
-58
@@ -13,6 +13,7 @@ import org.gradle.api.model.ObjectFactory
|
|||||||
import org.gradle.process.ExecOperations
|
import org.gradle.process.ExecOperations
|
||||||
import org.gradle.process.ExecResult
|
import org.gradle.process.ExecResult
|
||||||
import org.gradle.process.JavaExecSpec
|
import org.gradle.process.JavaExecSpec
|
||||||
|
import org.jetbrains.kotlin.build.report.metrics.*
|
||||||
import org.jetbrains.kotlin.konan.target.HostManager
|
import org.jetbrains.kotlin.konan.target.HostManager
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.lang.reflect.InvocationTargetException
|
import java.lang.reflect.InvocationTargetException
|
||||||
@@ -22,14 +23,15 @@ import java.util.concurrent.ConcurrentHashMap
|
|||||||
|
|
||||||
// Note: this class is public because it is used in the K/N build infrastructure.
|
// Note: this class is public because it is used in the K/N build infrastructure.
|
||||||
abstract class KotlinToolRunner(
|
abstract class KotlinToolRunner(
|
||||||
private val executionContext: GradleExecutionContext
|
private val executionContext: GradleExecutionContext,
|
||||||
|
private val metricsReporter: BuildMetricsReporter<GradleBuildTime, GradleBuildPerformanceMetric> = DoNothingBuildMetricsReporter
|
||||||
) {
|
) {
|
||||||
@Deprecated(
|
@Deprecated(
|
||||||
"Using Project object is not compatible with Gradle Configuration Cache",
|
"Using Project object is not compatible with Gradle Configuration Cache",
|
||||||
ReplaceWith("KotlinToolRunner(GradleExecutionContext.fromTaskContext())"),
|
ReplaceWith("KotlinToolRunner(GradleExecutionContext.fromTaskContext())"),
|
||||||
DeprecationLevel.WARNING
|
DeprecationLevel.WARNING
|
||||||
)
|
)
|
||||||
constructor(project: Project): this(GradleExecutionContext.fromProject(project))
|
constructor(project: Project) : this(GradleExecutionContext.fromProject(project))
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Context Services that are required for [KotlinToolRunner] during Gradle Task Execution Phase
|
* Context Services that are required for [KotlinToolRunner] during Gradle Task Execution Phase
|
||||||
@@ -60,7 +62,7 @@ abstract class KotlinToolRunner(
|
|||||||
fun fromTaskContext(
|
fun fromTaskContext(
|
||||||
objectFactory: ObjectFactory,
|
objectFactory: ObjectFactory,
|
||||||
execOperations: ExecOperations,
|
execOperations: ExecOperations,
|
||||||
logger: Logger
|
logger: Logger,
|
||||||
) = GradleExecutionContext(
|
) = GradleExecutionContext(
|
||||||
filesProvider = objectFactory.fileCollection()::from,
|
filesProvider = objectFactory.fileCollection()::from,
|
||||||
javaexec = { spec -> execOperations.javaexec(spec) }, // execOperations::javaexec won't work due to different Classloaders
|
javaexec = { spec -> execOperations.javaexec(spec) }, // execOperations::javaexec won't work due to different Classloaders
|
||||||
@@ -127,68 +129,77 @@ abstract class KotlinToolRunner(
|
|||||||
}
|
}
|
||||||
|
|
||||||
open fun run(args: List<String>) {
|
open fun run(args: List<String>) {
|
||||||
checkClasspath()
|
metricsReporter.measure(GradleBuildTime.RUN_COMPILATION_IN_WORKER) {
|
||||||
|
checkClasspath()
|
||||||
|
|
||||||
if (mustRunViaExec) runViaExec(args) else runInProcess(args)
|
if (mustRunViaExec) runViaExec(args, metricsReporter) else runInProcess(args, metricsReporter)
|
||||||
}
|
|
||||||
|
|
||||||
private fun runViaExec(args: List<String>) {
|
|
||||||
val transformedArgs = transformArgs(args)
|
|
||||||
val classpath = executionContext.filesProvider(classpath)
|
|
||||||
val systemProperties = System.getProperties()
|
|
||||||
/* Capture 'System.getProperties()' current state to avoid potential 'ConcurrentModificationException' */
|
|
||||||
.snapshot()
|
|
||||||
.asSequence()
|
|
||||||
.map { (k, v) -> k.toString() to v.toString() }
|
|
||||||
.filter { (k, _) -> k !in execSystemPropertiesBlacklist }
|
|
||||||
.escapeQuotesForWindows()
|
|
||||||
.toMap() + execSystemProperties
|
|
||||||
|
|
||||||
executionContext.logger.info(
|
|
||||||
"""|Run "$displayName" tool in a separate JVM process
|
|
||||||
|Main class = $mainClass
|
|
||||||
|Arguments = ${args.toPrettyString()}
|
|
||||||
|Transformed arguments = ${if (transformedArgs == args) "same as arguments" else transformedArgs.toPrettyString()}
|
|
||||||
|Classpath = ${classpath.files.map { it.absolutePath }.toPrettyString()}
|
|
||||||
|JVM options = ${jvmArgs.toPrettyString()}
|
|
||||||
|Java system properties = ${systemProperties.toPrettyString()}
|
|
||||||
|Suppressed ENV variables = ${execEnvironmentBlacklist.toPrettyString()}
|
|
||||||
|Custom ENV variables = ${execEnvironment.toPrettyString()}
|
|
||||||
""".trimMargin()
|
|
||||||
)
|
|
||||||
|
|
||||||
executionContext.javaexec { spec ->
|
|
||||||
spec.mainClass.set(mainClass)
|
|
||||||
spec.classpath = classpath
|
|
||||||
spec.jvmArgs(jvmArgs)
|
|
||||||
spec.systemProperties(systemProperties)
|
|
||||||
execEnvironmentBlacklist.forEach { spec.environment.remove(it) }
|
|
||||||
spec.environment(execEnvironment)
|
|
||||||
spec.args(transformedArgs)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun runInProcess(args: List<String>) {
|
|
||||||
val transformedArgs = transformArgs(args)
|
|
||||||
val isolatedClassLoader = getIsolatedClassLoader()
|
|
||||||
|
|
||||||
executionContext.logger.info(
|
private fun runViaExec(args: List<String>, metricsReporter: BuildMetricsReporter<GradleBuildTime, GradleBuildPerformanceMetric>) {
|
||||||
"""|Run in-process tool "$displayName"
|
metricsReporter.measure(GradleBuildTime.NATIVE_IN_EXECUTOR) {
|
||||||
|Entry point method = $mainClass.$daemonEntryPoint
|
val transformedArgs = transformArgs(args)
|
||||||
|Classpath = ${isolatedClassLoader.urLs.map { it.file }.toPrettyString()}
|
val classpath = executionContext.filesProvider(classpath)
|
||||||
|Arguments = ${args.toPrettyString()}
|
val systemProperties = System.getProperties()
|
||||||
|Transformed arguments = ${if (transformedArgs == args) "same as arguments" else transformedArgs.toPrettyString()}
|
/* Capture 'System.getProperties()' current state to avoid potential 'ConcurrentModificationException' */
|
||||||
""".trimMargin()
|
.snapshot()
|
||||||
)
|
.asSequence()
|
||||||
|
.map { (k, v) -> k.toString() to v.toString() }
|
||||||
|
.filter { (k, _) -> k !in execSystemPropertiesBlacklist }
|
||||||
|
.escapeQuotesForWindows()
|
||||||
|
.toMap() + execSystemProperties
|
||||||
|
|
||||||
try {
|
executionContext.logger.info(
|
||||||
val mainClass = isolatedClassLoader.loadClass(mainClass)
|
"""|Run "$displayName" tool in a separate JVM process
|
||||||
val entryPoint = mainClass.methods
|
|Main class = $mainClass
|
||||||
.singleOrNull { it.name == daemonEntryPoint } ?: error("Couldn't find daemon entry point '$daemonEntryPoint'")
|
|Arguments = ${args.toPrettyString()}
|
||||||
|
|Transformed arguments = ${if (transformedArgs == args) "same as arguments" else transformedArgs.toPrettyString()}
|
||||||
|
|Classpath = ${classpath.files.map { it.absolutePath }.toPrettyString()}
|
||||||
|
|JVM options = ${jvmArgs.toPrettyString()}
|
||||||
|
|Java system properties = ${systemProperties.toPrettyString()}
|
||||||
|
|Suppressed ENV variables = ${execEnvironmentBlacklist.toPrettyString()}
|
||||||
|
|Custom ENV variables = ${execEnvironment.toPrettyString()}
|
||||||
|
""".trimMargin()
|
||||||
|
)
|
||||||
|
|
||||||
entryPoint.invoke(null, transformedArgs.toTypedArray())
|
executionContext.javaexec { spec ->
|
||||||
} catch (t: InvocationTargetException) {
|
spec.mainClass.set(mainClass)
|
||||||
throw t.targetException
|
spec.classpath = classpath
|
||||||
|
spec.jvmArgs(jvmArgs)
|
||||||
|
spec.systemProperties(systemProperties)
|
||||||
|
execEnvironmentBlacklist.forEach { spec.environment.remove(it) }
|
||||||
|
spec.environment(execEnvironment)
|
||||||
|
spec.args(transformedArgs)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun runInProcess(args: List<String>, metricsReporter: BuildMetricsReporter<GradleBuildTime, GradleBuildPerformanceMetric> = DoNothingBuildMetricsReporter) {
|
||||||
|
metricsReporter.measure(GradleBuildTime.NATIVE_IN_PROCESS) {
|
||||||
|
val transformedArgs = transformArgs(args)
|
||||||
|
val isolatedClassLoader = getIsolatedClassLoader()
|
||||||
|
|
||||||
|
executionContext.logger.info(
|
||||||
|
"""|Run in-process tool "$displayName"
|
||||||
|
|Entry point method = $mainClass.$daemonEntryPoint
|
||||||
|
|Classpath = ${isolatedClassLoader.urLs.map { it.file }.toPrettyString()}
|
||||||
|
|Arguments = ${args.toPrettyString()}
|
||||||
|
|Transformed arguments = ${if (transformedArgs == args) "same as arguments" else transformedArgs.toPrettyString()}
|
||||||
|
""".trimMargin()
|
||||||
|
)
|
||||||
|
|
||||||
|
try {
|
||||||
|
val mainClass = isolatedClassLoader.loadClass(mainClass)
|
||||||
|
val entryPoint = mainClass.methods
|
||||||
|
.singleOrNull { it.name == daemonEntryPoint } ?: error("Couldn't find daemon entry point '$daemonEntryPoint'")
|
||||||
|
|
||||||
|
metricsReporter.measure(GradleBuildTime.RUN_ENTRY_POINT) {
|
||||||
|
entryPoint.invoke(null, transformedArgs.toTypedArray())
|
||||||
|
}
|
||||||
|
} catch (t: InvocationTargetException) {
|
||||||
|
throw t.targetException
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+18
-7
@@ -7,12 +7,16 @@ package org.jetbrains.kotlin.compilerRunner
|
|||||||
|
|
||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
import org.gradle.api.file.FileCollection
|
import org.gradle.api.file.FileCollection
|
||||||
|
import org.jetbrains.kotlin.build.report.metrics.BuildMetricsReporter
|
||||||
|
import org.jetbrains.kotlin.build.report.metrics.GradleBuildPerformanceMetric
|
||||||
|
import org.jetbrains.kotlin.build.report.metrics.GradleBuildTime
|
||||||
import org.jetbrains.kotlin.cli.common.messages.MessageRenderer
|
import org.jetbrains.kotlin.cli.common.messages.MessageRenderer
|
||||||
import org.jetbrains.kotlin.gradle.dsl.NativeCacheKind
|
import org.jetbrains.kotlin.gradle.dsl.NativeCacheKind
|
||||||
import org.jetbrains.kotlin.gradle.dsl.NativeCacheOrchestration
|
import org.jetbrains.kotlin.gradle.dsl.NativeCacheOrchestration
|
||||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
|
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.apple.useXcodeMessageStyle
|
import org.jetbrains.kotlin.gradle.plugin.mpp.apple.useXcodeMessageStyle
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.nativeUseEmbeddableCompilerJar
|
import org.jetbrains.kotlin.gradle.plugin.mpp.nativeUseEmbeddableCompilerJar
|
||||||
|
import org.jetbrains.kotlin.gradle.report.GradleBuildMetricsReporter
|
||||||
import org.jetbrains.kotlin.gradle.targets.native.KonanPropertiesBuildService
|
import org.jetbrains.kotlin.gradle.targets.native.KonanPropertiesBuildService
|
||||||
import org.jetbrains.kotlin.gradle.utils.NativeCompilerDownloader
|
import org.jetbrains.kotlin.gradle.utils.NativeCompilerDownloader
|
||||||
import org.jetbrains.kotlin.konan.properties.resolvablePropertyString
|
import org.jetbrains.kotlin.konan.properties.resolvablePropertyString
|
||||||
@@ -73,7 +77,8 @@ internal abstract class KotlinNativeToolRunner(
|
|||||||
protected val toolName: String,
|
protected val toolName: String,
|
||||||
private val settings: Settings,
|
private val settings: Settings,
|
||||||
executionContext: GradleExecutionContext,
|
executionContext: GradleExecutionContext,
|
||||||
) : KotlinToolRunner(executionContext) {
|
metricsReporter: BuildMetricsReporter<GradleBuildTime, GradleBuildPerformanceMetric>
|
||||||
|
) : KotlinToolRunner(executionContext, metricsReporter) {
|
||||||
|
|
||||||
class Settings(
|
class Settings(
|
||||||
val konanVersion: String,
|
val konanVersion: String,
|
||||||
@@ -151,7 +156,8 @@ internal abstract class AbstractKotlinNativeCInteropRunner(
|
|||||||
toolName: String,
|
toolName: String,
|
||||||
settings: Settings,
|
settings: Settings,
|
||||||
executionContext: GradleExecutionContext,
|
executionContext: GradleExecutionContext,
|
||||||
) : KotlinNativeToolRunner(toolName, settings, executionContext) {
|
metricsReporter: BuildMetricsReporter<GradleBuildTime, GradleBuildPerformanceMetric>
|
||||||
|
) : KotlinNativeToolRunner(toolName, settings, executionContext, metricsReporter) {
|
||||||
|
|
||||||
override val mustRunViaExec get() = true
|
override val mustRunViaExec get() = true
|
||||||
|
|
||||||
@@ -187,17 +193,19 @@ internal class KotlinNativeCInteropRunner
|
|||||||
private constructor(
|
private constructor(
|
||||||
private val settings: Settings,
|
private val settings: Settings,
|
||||||
gradleExecutionContext: GradleExecutionContext,
|
gradleExecutionContext: GradleExecutionContext,
|
||||||
) : AbstractKotlinNativeCInteropRunner("cinterop", settings, gradleExecutionContext) {
|
metricsReporter: BuildMetricsReporter<GradleBuildTime, GradleBuildPerformanceMetric>
|
||||||
|
) : AbstractKotlinNativeCInteropRunner("cinterop", settings, gradleExecutionContext, metricsReporter) {
|
||||||
|
|
||||||
interface ExecutionContext {
|
interface ExecutionContext {
|
||||||
val runnerSettings: Settings
|
val runnerSettings: Settings
|
||||||
val gradleExecutionContext: GradleExecutionContext
|
val gradleExecutionContext: GradleExecutionContext
|
||||||
|
val metricsReporter: BuildMetricsReporter<GradleBuildTime, GradleBuildPerformanceMetric>
|
||||||
fun runWithContext(action: () -> Unit)
|
fun runWithContext(action: () -> Unit)
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun ExecutionContext.run(args: List<String>) {
|
fun ExecutionContext.run(args: List<String>) {
|
||||||
val runner = KotlinNativeCInteropRunner(runnerSettings, gradleExecutionContext)
|
val runner = KotlinNativeCInteropRunner(runnerSettings, gradleExecutionContext, metricsReporter)
|
||||||
runWithContext { runner.run(args) }
|
runWithContext { runner.run(args) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -207,7 +215,8 @@ private constructor(
|
|||||||
internal class KotlinNativeCompilerRunner(
|
internal class KotlinNativeCompilerRunner(
|
||||||
private val settings: Settings,
|
private val settings: Settings,
|
||||||
executionContext: GradleExecutionContext,
|
executionContext: GradleExecutionContext,
|
||||||
) : KotlinNativeToolRunner("konanc", settings.parent, executionContext) {
|
metricsReporter: BuildMetricsReporter<GradleBuildTime, GradleBuildPerformanceMetric>
|
||||||
|
) : KotlinNativeToolRunner("konanc", settings.parent, executionContext, metricsReporter) {
|
||||||
class Settings(
|
class Settings(
|
||||||
val parent: KotlinNativeToolRunner.Settings,
|
val parent: KotlinNativeToolRunner.Settings,
|
||||||
val disableKonanDaemon: Boolean,
|
val disableKonanDaemon: Boolean,
|
||||||
@@ -245,13 +254,15 @@ internal class KotlinNativeCompilerRunner(
|
|||||||
internal class KotlinNativeLibraryGenerationRunner(
|
internal class KotlinNativeLibraryGenerationRunner(
|
||||||
private val settings: Settings,
|
private val settings: Settings,
|
||||||
executionContext: GradleExecutionContext,
|
executionContext: GradleExecutionContext,
|
||||||
|
metricsReporter: BuildMetricsReporter<GradleBuildTime, GradleBuildPerformanceMetric>
|
||||||
) :
|
) :
|
||||||
AbstractKotlinNativeCInteropRunner("generatePlatformLibraries", settings, executionContext) {
|
AbstractKotlinNativeCInteropRunner("generatePlatformLibraries", settings, executionContext, metricsReporter) {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun fromProject(project: Project) = KotlinNativeLibraryGenerationRunner(
|
fun fromProject(project: Project) = KotlinNativeLibraryGenerationRunner(
|
||||||
settings = Settings.fromProject(project),
|
settings = Settings.fromProject(project),
|
||||||
executionContext = GradleExecutionContext.fromProject(project)
|
executionContext = GradleExecutionContext.fromProject(project),
|
||||||
|
metricsReporter = GradleBuildMetricsReporter()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+41
-2
@@ -16,7 +16,10 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.compilerRunner
|
package org.jetbrains.kotlin.compilerRunner
|
||||||
|
|
||||||
import org.gradle.internal.impldep.org.apache.commons.lang.StringEscapeUtils
|
import org.jetbrains.kotlin.build.report.metrics.BuildMetrics
|
||||||
|
import org.jetbrains.kotlin.build.report.metrics.BuildMetricsReporter
|
||||||
|
import org.jetbrains.kotlin.build.report.metrics.GradleBuildPerformanceMetric
|
||||||
|
import org.jetbrains.kotlin.build.report.metrics.GradleBuildTime
|
||||||
import org.jetbrains.kotlin.buildtools.api.KotlinLogger
|
import org.jetbrains.kotlin.buildtools.api.KotlinLogger
|
||||||
import org.jetbrains.kotlin.cli.common.ExitCode
|
import org.jetbrains.kotlin.cli.common.ExitCode
|
||||||
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
|
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
|
||||||
@@ -26,8 +29,13 @@ import org.jetbrains.kotlin.cli.common.messages.MessageRenderer
|
|||||||
import org.jetbrains.kotlin.config.KotlinCompilerVersion
|
import org.jetbrains.kotlin.config.KotlinCompilerVersion
|
||||||
import org.jetbrains.kotlin.daemon.client.DaemonReportingTargets
|
import org.jetbrains.kotlin.daemon.client.DaemonReportingTargets
|
||||||
import org.jetbrains.kotlin.daemon.client.launchProcessWithFallback
|
import org.jetbrains.kotlin.daemon.client.launchProcessWithFallback
|
||||||
|
import org.jetbrains.kotlin.gradle.dsl.KotlinVersion
|
||||||
import org.jetbrains.kotlin.gradle.logging.GradleErrorMessageCollector
|
import org.jetbrains.kotlin.gradle.logging.GradleErrorMessageCollector
|
||||||
import org.jetbrains.kotlin.gradle.logging.GradleKotlinLogger
|
import org.jetbrains.kotlin.gradle.logging.GradleKotlinLogger
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.internal.state.TaskExecutionResults
|
||||||
|
import org.jetbrains.kotlin.gradle.report.TaskExecutionInfo
|
||||||
|
import org.jetbrains.kotlin.gradle.report.TaskExecutionResult
|
||||||
|
import org.jetbrains.kotlin.gradle.report.UsesBuildMetricsService
|
||||||
import org.jetbrains.kotlin.gradle.tasks.KotlinCompilerExecutionStrategy
|
import org.jetbrains.kotlin.gradle.tasks.KotlinCompilerExecutionStrategy
|
||||||
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
|
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
|
||||||
import org.jetbrains.org.objectweb.asm.ClassReader
|
import org.jetbrains.org.objectweb.asm.ClassReader
|
||||||
@@ -35,7 +43,6 @@ import org.jetbrains.org.objectweb.asm.ClassVisitor
|
|||||||
import org.jetbrains.org.objectweb.asm.FieldVisitor
|
import org.jetbrains.org.objectweb.asm.FieldVisitor
|
||||||
import org.jetbrains.org.objectweb.asm.Opcodes
|
import org.jetbrains.org.objectweb.asm.Opcodes
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.StringWriter
|
|
||||||
import java.nio.file.Files
|
import java.nio.file.Files
|
||||||
import java.time.LocalDateTime
|
import java.time.LocalDateTime
|
||||||
import java.time.format.DateTimeFormatter
|
import java.time.format.DateTimeFormatter
|
||||||
@@ -240,4 +247,36 @@ internal fun exitCodeFromProcessExitCode(log: KotlinLogger, code: Int): ExitCode
|
|||||||
|
|
||||||
log.debug("Could not find exit code by value: $code")
|
log.debug("Could not find exit code by value: $code")
|
||||||
return if (code == 0) ExitCode.OK else ExitCode.COMPILATION_ERROR
|
return if (code == 0) ExitCode.OK else ExitCode.COMPILATION_ERROR
|
||||||
|
}
|
||||||
|
|
||||||
|
//Copy of CommonCompilerArguments.parseOrConfigureLanguageVersion to avoid direct dependency
|
||||||
|
internal fun parseLanguageVersion(languageVersion: String?, useK2: Boolean): KotlinVersion {
|
||||||
|
val explicitVersion = languageVersion?.let { KotlinVersion.fromVersion(languageVersion) } ?: KotlinVersion.DEFAULT
|
||||||
|
return if (useK2 && (explicitVersion < KotlinVersion.KOTLIN_2_0)) KotlinVersion.KOTLIN_2_0 else explicitVersion
|
||||||
|
}
|
||||||
|
|
||||||
|
internal fun parseLanguageVersion(args: List<String>): KotlinVersion {
|
||||||
|
val languageVersionIndex = args.indexOf("-language-version")
|
||||||
|
val languageVersion = if (languageVersionIndex >= 0) {
|
||||||
|
args[languageVersionIndex + 1]
|
||||||
|
} else null
|
||||||
|
val useK2 = args.indexOf("-Xuse-k2") >= 0
|
||||||
|
return parseLanguageVersion(languageVersion, useK2)
|
||||||
|
}
|
||||||
|
|
||||||
|
internal fun UsesBuildMetricsService.addBuildMetricsForTaskAction(
|
||||||
|
metricsReporter: BuildMetricsReporter<GradleBuildTime, GradleBuildPerformanceMetric>,
|
||||||
|
languageVersion: KotlinVersion?,
|
||||||
|
fn: () -> Any
|
||||||
|
) {
|
||||||
|
metricsReporter.addTimeMetric(GradleBuildPerformanceMetric.START_TASK_ACTION_EXECUTION)
|
||||||
|
buildMetricsService.orNull?.also { it.addTask(path, this.javaClass, metricsReporter) }
|
||||||
|
|
||||||
|
try {
|
||||||
|
fn.invoke()
|
||||||
|
} finally {
|
||||||
|
val result = TaskExecutionResult(buildMetrics = BuildMetrics(), taskInfo = TaskExecutionInfo(kotlinLanguageVersion = languageVersion))
|
||||||
|
TaskExecutionResults[path] = result
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
+1
@@ -288,6 +288,7 @@ abstract class BuildMetricsService : BuildService<BuildMetricsService.Parameters
|
|||||||
fun registerIfAbsent(project: Project) = registerIfAbsentImpl(project)?.also { serviceProvider ->
|
fun registerIfAbsent(project: Project) = registerIfAbsentImpl(project)?.also { serviceProvider ->
|
||||||
SingleActionPerProject.run(project, UsesBuildMetricsService::class.java.name) {
|
SingleActionPerProject.run(project, UsesBuildMetricsService::class.java.name) {
|
||||||
project.tasks.withType<UsesBuildMetricsService>().configureEach { task ->
|
project.tasks.withType<UsesBuildMetricsService>().configureEach { task ->
|
||||||
|
task.buildMetricsService.value(serviceProvider).disallowChanges()
|
||||||
task.usesService(serviceProvider)
|
task.usesService(serviceProvider)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -270,7 +270,7 @@ class BuildReportsService {
|
|||||||
// Filtering by only KGP tasks and by those that actually do compilation
|
// Filtering by only KGP tasks and by those that actually do compilation
|
||||||
it.isFromKotlinPlugin && it.kotlinLanguageVersion != null
|
it.isFromKotlinPlugin && it.kotlinLanguageVersion != null
|
||||||
}
|
}
|
||||||
log.warn("##### 'kotlin.experimental.tryK2' results (Kotlin/Native not checked) #####")
|
log.warn("##### 'kotlin.experimental.tryK2' results #####")
|
||||||
if (tasksData.isEmpty()) {
|
if (tasksData.isEmpty()) {
|
||||||
log.warn("No Kotlin compilation tasks have been run")
|
log.warn("No Kotlin compilation tasks have been run")
|
||||||
log.warn("#####")
|
log.warn("#####")
|
||||||
|
|||||||
-6
@@ -6,7 +6,6 @@
|
|||||||
package org.jetbrains.kotlin.gradle.targets.js.ir
|
package org.jetbrains.kotlin.gradle.targets.js.ir
|
||||||
|
|
||||||
import org.gradle.api.Action
|
import org.gradle.api.Action
|
||||||
import org.gradle.api.DomainObjectCollection
|
|
||||||
import org.gradle.api.DomainObjectSet
|
import org.gradle.api.DomainObjectSet
|
||||||
import org.gradle.api.Task
|
import org.gradle.api.Task
|
||||||
import org.gradle.api.provider.Property
|
import org.gradle.api.provider.Property
|
||||||
@@ -16,9 +15,7 @@ import org.gradle.language.base.plugins.LifecycleBasePlugin
|
|||||||
import org.jetbrains.kotlin.gradle.dsl.JsModuleKind
|
import org.jetbrains.kotlin.gradle.dsl.JsModuleKind
|
||||||
import org.jetbrains.kotlin.gradle.dsl.KotlinJsDce
|
import org.jetbrains.kotlin.gradle.dsl.KotlinJsDce
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.archivesName
|
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.archivesName
|
||||||
import org.jetbrains.kotlin.gradle.report.BuildMetricsService
|
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalDceDsl
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalDceDsl
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBrowserDsl
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBrowserDsl
|
||||||
@@ -225,9 +222,6 @@ abstract class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) :
|
|||||||
task.description = "build webpack ${mode.name.toLowerCaseAsciiOnly()} bundle"
|
task.description = "build webpack ${mode.name.toLowerCaseAsciiOnly()} bundle"
|
||||||
task.outputDirectory.fileValue(binary.distribution.directory).finalizeValueOnRead()
|
task.outputDirectory.fileValue(binary.distribution.directory).finalizeValueOnRead()
|
||||||
|
|
||||||
BuildMetricsService.registerIfAbsent(project)?.let {
|
|
||||||
task.buildMetricsService.value(it)
|
|
||||||
}
|
|
||||||
|
|
||||||
task.dependsOn(
|
task.dependsOn(
|
||||||
distributeResourcesTask
|
distributeResourcesTask
|
||||||
|
|||||||
-4
@@ -8,14 +8,10 @@ package org.jetbrains.kotlin.gradle.targets.js.npm
|
|||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
import org.gradle.api.Task
|
import org.gradle.api.Task
|
||||||
import org.gradle.api.file.ArchiveOperations
|
import org.gradle.api.file.ArchiveOperations
|
||||||
import org.gradle.api.file.DirectoryProperty
|
|
||||||
import org.gradle.api.file.FileSystemOperations
|
import org.gradle.api.file.FileSystemOperations
|
||||||
import org.gradle.api.provider.Property
|
import org.gradle.api.provider.Property
|
||||||
import org.gradle.api.provider.Provider
|
import org.gradle.api.provider.Provider
|
||||||
import org.gradle.api.tasks.Internal
|
import org.gradle.api.tasks.Internal
|
||||||
import org.jetbrains.kotlin.gradle.report.BuildMetricsService
|
|
||||||
import org.jetbrains.kotlin.gradle.report.UsesBuildMetricsService
|
|
||||||
import org.jetbrains.kotlin.gradle.report.reportingSettings
|
|
||||||
import org.jetbrains.kotlin.gradle.tasks.withType
|
import org.jetbrains.kotlin.gradle.tasks.withType
|
||||||
import org.jetbrains.kotlin.gradle.utils.SingleActionPerProject
|
import org.jetbrains.kotlin.gradle.utils.SingleActionPerProject
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|||||||
-5
@@ -19,7 +19,6 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.isMain
|
|||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.isTest
|
import org.jetbrains.kotlin.gradle.plugin.mpp.isTest
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.archivesName
|
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.archivesName
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.distsDirectory
|
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.distsDirectory
|
||||||
import org.jetbrains.kotlin.gradle.report.BuildMetricsService
|
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget
|
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.*
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.*
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.ir.executeTaskBaseName
|
import org.jetbrains.kotlin.gradle.targets.js.ir.executeTaskBaseName
|
||||||
@@ -230,10 +229,6 @@ abstract class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) :
|
|||||||
task.description = "build webpack ${type.name.toLowerCaseAsciiOnly()} bundle"
|
task.description = "build webpack ${type.name.toLowerCaseAsciiOnly()} bundle"
|
||||||
task.outputDirectory.fileValue(distribution.directory).finalizeValueOnRead()
|
task.outputDirectory.fileValue(distribution.directory).finalizeValueOnRead()
|
||||||
|
|
||||||
BuildMetricsService.registerIfAbsent(project)?.let {
|
|
||||||
task.buildMetricsService.value(it)
|
|
||||||
}
|
|
||||||
|
|
||||||
task.commonConfigure(
|
task.commonConfigure(
|
||||||
compilation = compilation,
|
compilation = compilation,
|
||||||
dceTaskProvider = dceTaskProvider,
|
dceTaskProvider = dceTaskProvider,
|
||||||
|
|||||||
+1
-5
@@ -27,7 +27,6 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation.Companion.TEST_COMPI
|
|||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationInfo.KPM
|
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationInfo.KPM
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPluginLifecycle.Stage.ReadyForExecution
|
import org.jetbrains.kotlin.gradle.plugin.KotlinPluginLifecycle.Stage.ReadyForExecution
|
||||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.KOTLIN_NATIVE_IGNORE_INCORRECT_DEPENDENCIES
|
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.KOTLIN_NATIVE_IGNORE_INCORRECT_DEPENDENCIES
|
||||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.kotlinPropertiesProvider
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.internal.artifactTypeAttribute
|
import org.jetbrains.kotlin.gradle.plugin.internal.artifactTypeAttribute
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.*
|
import org.jetbrains.kotlin.gradle.plugin.mpp.*
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.apple.XcodeVersionTask
|
import org.jetbrains.kotlin.gradle.plugin.mpp.apple.XcodeVersionTask
|
||||||
@@ -38,10 +37,6 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.copyAttributes
|
|||||||
import org.jetbrains.kotlin.gradle.targets.metadata.isKotlinGranularMetadataEnabled
|
import org.jetbrains.kotlin.gradle.targets.metadata.isKotlinGranularMetadataEnabled
|
||||||
import org.jetbrains.kotlin.gradle.targets.native.*
|
import org.jetbrains.kotlin.gradle.targets.native.*
|
||||||
import org.jetbrains.kotlin.gradle.targets.native.internal.*
|
import org.jetbrains.kotlin.gradle.targets.native.internal.*
|
||||||
import org.jetbrains.kotlin.gradle.targets.native.internal.commonizeCInteropTask
|
|
||||||
import org.jetbrains.kotlin.gradle.targets.native.internal.createCInteropApiElementsKlibArtifact
|
|
||||||
import org.jetbrains.kotlin.gradle.targets.native.internal.locateOrCreateCInteropApiElementsConfiguration
|
|
||||||
import org.jetbrains.kotlin.gradle.targets.native.internal.locateOrCreateCInteropDependencyConfiguration
|
|
||||||
import org.jetbrains.kotlin.gradle.targets.native.tasks.KotlinNativeHostTest
|
import org.jetbrains.kotlin.gradle.targets.native.tasks.KotlinNativeHostTest
|
||||||
import org.jetbrains.kotlin.gradle.targets.native.tasks.KotlinNativeSimulatorTest
|
import org.jetbrains.kotlin.gradle.targets.native.tasks.KotlinNativeSimulatorTest
|
||||||
import org.jetbrains.kotlin.gradle.targets.native.tasks.KotlinNativeTest
|
import org.jetbrains.kotlin.gradle.targets.native.tasks.KotlinNativeTest
|
||||||
@@ -415,6 +410,7 @@ open class KotlinNativeTargetConfigurator<T : KotlinNativeTarget> : AbstractKotl
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
.finalizeValueOnRead()
|
.finalizeValueOnRead()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
compilationInfo.classesDirs.from(compileTaskProvider.map { it.outputFile })
|
compilationInfo.classesDirs.from(compileTaskProvider.map { it.outputFile })
|
||||||
|
|||||||
+2
-1
@@ -13,13 +13,14 @@ import org.jetbrains.kotlin.commonizer.CommonizerOutputFileLayout
|
|||||||
import org.jetbrains.kotlin.commonizer.CommonizerOutputFileLayout.base64Hash
|
import org.jetbrains.kotlin.commonizer.CommonizerOutputFileLayout.base64Hash
|
||||||
import org.jetbrains.kotlin.commonizer.CommonizerOutputFileLayout.ensureMaxFileNameLength
|
import org.jetbrains.kotlin.commonizer.CommonizerOutputFileLayout.ensureMaxFileNameLength
|
||||||
import org.jetbrains.kotlin.commonizer.identityString
|
import org.jetbrains.kotlin.commonizer.identityString
|
||||||
|
import org.jetbrains.kotlin.gradle.report.UsesBuildMetricsService
|
||||||
import org.jetbrains.kotlin.gradle.utils.changing
|
import org.jetbrains.kotlin.gradle.utils.changing
|
||||||
import org.jetbrains.kotlin.gradle.utils.future
|
import org.jetbrains.kotlin.gradle.utils.future
|
||||||
import org.jetbrains.kotlin.gradle.utils.outputFilesProvider
|
import org.jetbrains.kotlin.gradle.utils.outputFilesProvider
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
@DisableCachingByDefault(because = "Abstract super-class, not to be instantiated directly")
|
@DisableCachingByDefault(because = "Abstract super-class, not to be instantiated directly")
|
||||||
internal abstract class AbstractCInteropCommonizerTask : DefaultTask() {
|
internal abstract class AbstractCInteropCommonizerTask : DefaultTask(), UsesBuildMetricsService {
|
||||||
@get:OutputDirectory
|
@get:OutputDirectory
|
||||||
abstract val outputDirectory: File
|
abstract val outputDirectory: File
|
||||||
|
|
||||||
|
|||||||
+16
-4
@@ -15,10 +15,13 @@ import org.gradle.api.provider.Provider
|
|||||||
import org.gradle.api.provider.SetProperty
|
import org.gradle.api.provider.SetProperty
|
||||||
import org.gradle.api.tasks.*
|
import org.gradle.api.tasks.*
|
||||||
import org.gradle.process.ExecOperations
|
import org.gradle.process.ExecOperations
|
||||||
|
import org.jetbrains.kotlin.build.report.metrics.BuildMetricsReporter
|
||||||
|
import org.jetbrains.kotlin.build.report.metrics.GradleBuildPerformanceMetric
|
||||||
|
import org.jetbrains.kotlin.build.report.metrics.GradleBuildTime
|
||||||
import org.jetbrains.kotlin.commonizer.*
|
import org.jetbrains.kotlin.commonizer.*
|
||||||
|
import org.jetbrains.kotlin.compilerRunner.*
|
||||||
import org.jetbrains.kotlin.compilerRunner.GradleCliCommonizer
|
import org.jetbrains.kotlin.compilerRunner.GradleCliCommonizer
|
||||||
import org.jetbrains.kotlin.compilerRunner.KotlinNativeCommonizerToolRunner
|
import org.jetbrains.kotlin.compilerRunner.KotlinNativeCommonizerToolRunner
|
||||||
import org.jetbrains.kotlin.compilerRunner.KotlinToolRunner
|
|
||||||
import org.jetbrains.kotlin.compilerRunner.konanHome
|
import org.jetbrains.kotlin.compilerRunner.konanHome
|
||||||
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension
|
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension
|
||||||
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull
|
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull
|
||||||
@@ -26,6 +29,7 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
|||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinSharedNativeCompilation
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinSharedNativeCompilation
|
||||||
import org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSet
|
import org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSet
|
||||||
import org.jetbrains.kotlin.gradle.plugin.sources.withDependsOnClosure
|
import org.jetbrains.kotlin.gradle.plugin.sources.withDependsOnClosure
|
||||||
|
import org.jetbrains.kotlin.gradle.report.GradleBuildMetricsReporter
|
||||||
import org.jetbrains.kotlin.gradle.targets.native.internal.CInteropCommonizerTask.CInteropCommonizerDependencies
|
import org.jetbrains.kotlin.gradle.targets.native.internal.CInteropCommonizerTask.CInteropCommonizerDependencies
|
||||||
import org.jetbrains.kotlin.gradle.targets.native.internal.CInteropCommonizerTask.CInteropGist
|
import org.jetbrains.kotlin.gradle.targets.native.internal.CInteropCommonizerTask.CInteropGist
|
||||||
import org.jetbrains.kotlin.gradle.tasks.CInteropProcess
|
import org.jetbrains.kotlin.gradle.tasks.CInteropProcess
|
||||||
@@ -38,7 +42,7 @@ private typealias GroupedCommonizerDependencies = Map<CInteropCommonizerGroup, L
|
|||||||
|
|
||||||
|
|
||||||
@CacheableTask
|
@CacheableTask
|
||||||
internal open class CInteropCommonizerTask
|
internal abstract class CInteropCommonizerTask
|
||||||
@Inject constructor(
|
@Inject constructor(
|
||||||
private val objectFactory: ObjectFactory,
|
private val objectFactory: ObjectFactory,
|
||||||
private val execOperations: ExecOperations,
|
private val execOperations: ExecOperations,
|
||||||
@@ -177,6 +181,10 @@ internal open class CInteropCommonizerTask
|
|||||||
val allOutputDirectories: Set<File>
|
val allOutputDirectories: Set<File>
|
||||||
get() = allInteropGroups.getOrThrow().map { outputDirectory(it) }.toSet()
|
get() = allInteropGroups.getOrThrow().map { outputDirectory(it) }.toSet()
|
||||||
|
|
||||||
|
@get:Internal
|
||||||
|
val metrics: Property<BuildMetricsReporter<GradleBuildTime, GradleBuildPerformanceMetric>> = project.objects
|
||||||
|
.property(GradleBuildMetricsReporter())
|
||||||
|
|
||||||
internal fun from(task: TaskProvider<CInteropProcess>) {
|
internal fun from(task: TaskProvider<CInteropProcess>) {
|
||||||
dependsOn(task)
|
dependsOn(task)
|
||||||
cinterops.add(task.map { it.toGist() })
|
cinterops.add(task.map { it.toGist() })
|
||||||
@@ -185,7 +193,10 @@ internal open class CInteropCommonizerTask
|
|||||||
|
|
||||||
@TaskAction
|
@TaskAction
|
||||||
protected fun commonizeCInteropLibraries() {
|
protected fun commonizeCInteropLibraries() {
|
||||||
allInteropGroups.getOrThrow().forEach(::commonize)
|
val metricReporter = metrics.get()
|
||||||
|
addBuildMetricsForTaskAction(metricsReporter = metricReporter, languageVersion = null) {
|
||||||
|
allInteropGroups.getOrThrow().forEach(::commonize)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun commonize(group: CInteropCommonizerGroup) {
|
private fun commonize(group: CInteropCommonizerGroup) {
|
||||||
@@ -195,7 +206,8 @@ internal open class CInteropCommonizerTask
|
|||||||
|
|
||||||
val commonizerRunner = KotlinNativeCommonizerToolRunner(
|
val commonizerRunner = KotlinNativeCommonizerToolRunner(
|
||||||
context = KotlinToolRunner.GradleExecutionContext.fromTaskContext(objectFactory, execOperations, logger),
|
context = KotlinToolRunner.GradleExecutionContext.fromTaskContext(objectFactory, execOperations, logger),
|
||||||
settings = runnerSettings.get()
|
settings = runnerSettings.get(),
|
||||||
|
metricsReporter = metrics.get(),
|
||||||
)
|
)
|
||||||
|
|
||||||
GradleCliCommonizer(commonizerRunner).commonizeLibraries(
|
GradleCliCommonizer(commonizerRunner).commonizeLibraries(
|
||||||
|
|||||||
+22
-8
@@ -5,15 +5,22 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.gradle.targets.native.internal
|
package org.jetbrains.kotlin.gradle.targets.native.internal
|
||||||
|
|
||||||
|
import org.gradle.api.provider.Property
|
||||||
import org.gradle.api.provider.Provider
|
import org.gradle.api.provider.Provider
|
||||||
import org.gradle.api.tasks.*
|
import org.gradle.api.tasks.*
|
||||||
import org.gradle.work.DisableCachingByDefault
|
import org.gradle.work.DisableCachingByDefault
|
||||||
import org.gradle.work.NormalizeLineEndings
|
import org.gradle.work.NormalizeLineEndings
|
||||||
|
import org.jetbrains.kotlin.build.report.metrics.BuildMetricsReporter
|
||||||
|
import org.jetbrains.kotlin.build.report.metrics.GradleBuildPerformanceMetric
|
||||||
|
import org.jetbrains.kotlin.build.report.metrics.GradleBuildTime
|
||||||
|
import org.jetbrains.kotlin.compilerRunner.addBuildMetricsForTaskAction
|
||||||
|
import org.jetbrains.kotlin.gradle.report.GradleBuildMetricsReporter
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.property
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@DisableCachingByDefault
|
@DisableCachingByDefault
|
||||||
internal open class CopyCommonizeCInteropForIdeTask @Inject constructor(
|
internal abstract class CopyCommonizeCInteropForIdeTask @Inject constructor(
|
||||||
private val commonizeCInteropTask: TaskProvider<CInteropCommonizerTask>
|
private val commonizeCInteropTask: TaskProvider<CInteropCommonizerTask>
|
||||||
) : AbstractCInteropCommonizerTask() {
|
) : AbstractCInteropCommonizerTask() {
|
||||||
|
|
||||||
@@ -32,15 +39,22 @@ internal open class CopyCommonizeCInteropForIdeTask @Inject constructor(
|
|||||||
return commonizeCInteropTask.get().findInteropsGroup(dependent)
|
return commonizeCInteropTask.get().findInteropsGroup(dependent)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@get:Internal
|
||||||
|
val metrics: Property<BuildMetricsReporter<GradleBuildTime, GradleBuildPerformanceMetric>> = project.objects
|
||||||
|
.property(GradleBuildMetricsReporter())
|
||||||
|
|
||||||
@TaskAction
|
@TaskAction
|
||||||
protected fun copy() {
|
protected fun copy() {
|
||||||
outputDirectory.mkdirs()
|
val metricReporter = metrics.get()
|
||||||
for (group in commonizeCInteropTask.get().allInteropGroups.getOrThrow()) {
|
addBuildMetricsForTaskAction(metricsReporter = metricReporter, languageVersion = null) {
|
||||||
val source = commonizeCInteropTask.get().outputDirectory(group)
|
outputDirectory.mkdirs()
|
||||||
if (!source.exists()) continue
|
for (group in commonizeCInteropTask.get().allInteropGroups.getOrThrow()) {
|
||||||
val target = outputDirectory(group)
|
val source = commonizeCInteropTask.get().outputDirectory(group)
|
||||||
if (target.exists()) target.deleteRecursively()
|
if (!source.exists()) continue
|
||||||
source.copyRecursively(target, true)
|
val target = outputDirectory(group)
|
||||||
|
if (target.exists()) target.deleteRecursively()
|
||||||
|
source.copyRecursively(target, true)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+26
-12
@@ -18,14 +18,19 @@ import org.gradle.api.tasks.Internal
|
|||||||
import org.gradle.api.tasks.TaskAction
|
import org.gradle.api.tasks.TaskAction
|
||||||
import org.gradle.process.ExecOperations
|
import org.gradle.process.ExecOperations
|
||||||
import org.gradle.work.DisableCachingByDefault
|
import org.gradle.work.DisableCachingByDefault
|
||||||
|
import org.jetbrains.kotlin.build.report.metrics.BuildMetricsReporter
|
||||||
|
import org.jetbrains.kotlin.build.report.metrics.GradleBuildPerformanceMetric
|
||||||
|
import org.jetbrains.kotlin.build.report.metrics.GradleBuildTime
|
||||||
import org.jetbrains.kotlin.commonizer.SharedCommonizerTarget
|
import org.jetbrains.kotlin.commonizer.SharedCommonizerTarget
|
||||||
|
import org.jetbrains.kotlin.compilerRunner.*
|
||||||
import org.jetbrains.kotlin.compilerRunner.GradleCliCommonizer
|
import org.jetbrains.kotlin.compilerRunner.GradleCliCommonizer
|
||||||
import org.jetbrains.kotlin.compilerRunner.KotlinNativeCommonizerToolRunner
|
import org.jetbrains.kotlin.compilerRunner.KotlinNativeCommonizerToolRunner
|
||||||
import org.jetbrains.kotlin.compilerRunner.KotlinToolRunner
|
|
||||||
import org.jetbrains.kotlin.compilerRunner.konanHome
|
import org.jetbrains.kotlin.compilerRunner.konanHome
|
||||||
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull
|
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull
|
||||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.kotlinPropertiesProvider
|
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.kotlinPropertiesProvider
|
||||||
import org.jetbrains.kotlin.gradle.plugin.getKotlinPluginVersion
|
import org.jetbrains.kotlin.gradle.plugin.getKotlinPluginVersion
|
||||||
|
import org.jetbrains.kotlin.gradle.report.GradleBuildMetricsReporter
|
||||||
|
import org.jetbrains.kotlin.gradle.report.UsesBuildMetricsService
|
||||||
import org.jetbrains.kotlin.gradle.utils.chainedFinalizeValueOnRead
|
import org.jetbrains.kotlin.gradle.utils.chainedFinalizeValueOnRead
|
||||||
import org.jetbrains.kotlin.gradle.utils.listProperty
|
import org.jetbrains.kotlin.gradle.utils.listProperty
|
||||||
import org.jetbrains.kotlin.gradle.utils.property
|
import org.jetbrains.kotlin.gradle.utils.property
|
||||||
@@ -36,11 +41,11 @@ import java.net.URLEncoder
|
|||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@DisableCachingByDefault(because = "Native Distribution Commonizer Task uses internal caching mechanism with fine grained cache control")
|
@DisableCachingByDefault(because = "Native Distribution Commonizer Task uses internal caching mechanism with fine grained cache control")
|
||||||
internal open class NativeDistributionCommonizerTask
|
internal abstract class NativeDistributionCommonizerTask
|
||||||
@Inject constructor(
|
@Inject constructor(
|
||||||
private val objectFactory: ObjectFactory,
|
private val objectFactory: ObjectFactory,
|
||||||
private val execOperations: ExecOperations,
|
private val execOperations: ExecOperations,
|
||||||
) : DefaultTask() {
|
) : DefaultTask(), UsesBuildMetricsService {
|
||||||
|
|
||||||
private val konanHome = project.file(project.konanHome)
|
private val konanHome = project.file(project.konanHome)
|
||||||
|
|
||||||
@@ -89,19 +94,28 @@ internal open class NativeDistributionCommonizerTask
|
|||||||
isCachingEnabled = project.kotlinPropertiesProvider.enableNativeDistributionCommonizationCache
|
isCachingEnabled = project.kotlinPropertiesProvider.enableNativeDistributionCommonizationCache
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@get:Internal
|
||||||
|
val metrics: Property<BuildMetricsReporter<GradleBuildTime, GradleBuildPerformanceMetric>> = project.objects
|
||||||
|
.property(GradleBuildMetricsReporter())
|
||||||
|
|
||||||
@TaskAction
|
@TaskAction
|
||||||
protected fun run() {
|
protected fun run() {
|
||||||
val commonizerRunner = KotlinNativeCommonizerToolRunner(
|
val metricsReporter = metrics.get()
|
||||||
context = KotlinToolRunner.GradleExecutionContext.fromTaskContext(objectFactory, execOperations, logger),
|
|
||||||
settings = runnerSettings.get()
|
|
||||||
)
|
|
||||||
|
|
||||||
commonizerCache.writeCacheForUncachedTargets(commonizerTargets) { todoOutputTargets ->
|
addBuildMetricsForTaskAction(metricsReporter = metricsReporter, languageVersion = null) {
|
||||||
val commonizer = GradleCliCommonizer(commonizerRunner)
|
val commonizerRunner = KotlinNativeCommonizerToolRunner(
|
||||||
/* Invoke commonizer with only 'to do' targets */
|
context = KotlinToolRunner.GradleExecutionContext.fromTaskContext(objectFactory, execOperations, logger),
|
||||||
commonizer.commonizeNativeDistribution(
|
settings = runnerSettings.get(),
|
||||||
konanHome, rootOutputDirectory, todoOutputTargets, logLevel, additionalSettings
|
metricsReporter = metricsReporter,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
commonizerCache.writeCacheForUncachedTargets(commonizerTargets) { todoOutputTargets ->
|
||||||
|
val commonizer = GradleCliCommonizer(commonizerRunner)
|
||||||
|
/* Invoke commonizer with only 'to do' targets */
|
||||||
|
commonizer.commonizeNativeDistribution(
|
||||||
|
konanHome, rootOutputDirectory, todoOutputTargets, logLevel, additionalSettings
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+13
-5
@@ -6,23 +6,30 @@
|
|||||||
package org.jetbrains.kotlin.gradle.targets.native.tasks
|
package org.jetbrains.kotlin.gradle.targets.native.tasks
|
||||||
|
|
||||||
import org.gradle.api.Task
|
import org.gradle.api.Task
|
||||||
|
import org.jetbrains.kotlin.build.report.metrics.BuildMetrics
|
||||||
|
import org.jetbrains.kotlin.build.report.metrics.BuildMetricsReporter
|
||||||
|
import org.jetbrains.kotlin.build.report.metrics.GradleBuildPerformanceMetric
|
||||||
|
import org.jetbrains.kotlin.build.report.metrics.GradleBuildTime
|
||||||
import org.jetbrains.kotlin.compilerRunner.KotlinNativeCInteropRunner
|
import org.jetbrains.kotlin.compilerRunner.KotlinNativeCInteropRunner
|
||||||
import org.jetbrains.kotlin.compilerRunner.KotlinNativeToolRunner
|
import org.jetbrains.kotlin.compilerRunner.KotlinNativeToolRunner
|
||||||
import org.jetbrains.kotlin.compilerRunner.KotlinToolRunner
|
import org.jetbrains.kotlin.compilerRunner.KotlinToolRunner
|
||||||
|
import org.jetbrains.kotlin.gradle.report.GradleBuildMetricsReporter
|
||||||
|
|
||||||
internal fun KotlinNativeCInteropRunner.Companion.createExecutionContext(
|
internal fun KotlinNativeCInteropRunner.Companion.createExecutionContext(
|
||||||
task: Task,
|
task: Task,
|
||||||
isInIdeaSync: Boolean,
|
isInIdeaSync: Boolean,
|
||||||
runnerSettings: KotlinNativeToolRunner.Settings,
|
runnerSettings: KotlinNativeToolRunner.Settings,
|
||||||
gradleExecutionContext: KotlinToolRunner.GradleExecutionContext
|
gradleExecutionContext: KotlinToolRunner.GradleExecutionContext,
|
||||||
|
metricsReporter: BuildMetricsReporter<GradleBuildTime, GradleBuildPerformanceMetric>
|
||||||
): KotlinNativeCInteropRunner.ExecutionContext {
|
): KotlinNativeCInteropRunner.ExecutionContext {
|
||||||
return if (isInIdeaSync) IdeaSyncKotlinNativeCInteropRunnerExecutionContext(runnerSettings, gradleExecutionContext, task)
|
return if (isInIdeaSync) IdeaSyncKotlinNativeCInteropRunnerExecutionContext(runnerSettings, gradleExecutionContext, task, metricsReporter)
|
||||||
else DefaultKotlinNativeCInteropRunnerExecutionContext(runnerSettings, gradleExecutionContext)
|
else DefaultKotlinNativeCInteropRunnerExecutionContext(runnerSettings, gradleExecutionContext, metricsReporter)
|
||||||
}
|
}
|
||||||
|
|
||||||
private class DefaultKotlinNativeCInteropRunnerExecutionContext(
|
private class DefaultKotlinNativeCInteropRunnerExecutionContext(
|
||||||
override val runnerSettings: KotlinNativeToolRunner.Settings,
|
override val runnerSettings: KotlinNativeToolRunner.Settings,
|
||||||
override val gradleExecutionContext: KotlinToolRunner.GradleExecutionContext
|
override val gradleExecutionContext: KotlinToolRunner.GradleExecutionContext,
|
||||||
|
override val metricsReporter: BuildMetricsReporter<GradleBuildTime, GradleBuildPerformanceMetric>
|
||||||
) : KotlinNativeCInteropRunner.ExecutionContext {
|
) : KotlinNativeCInteropRunner.ExecutionContext {
|
||||||
override fun runWithContext(action: () -> Unit) = action()
|
override fun runWithContext(action: () -> Unit) = action()
|
||||||
}
|
}
|
||||||
@@ -30,7 +37,8 @@ private class DefaultKotlinNativeCInteropRunnerExecutionContext(
|
|||||||
private class IdeaSyncKotlinNativeCInteropRunnerExecutionContext(
|
private class IdeaSyncKotlinNativeCInteropRunnerExecutionContext(
|
||||||
override val runnerSettings: KotlinNativeToolRunner.Settings,
|
override val runnerSettings: KotlinNativeToolRunner.Settings,
|
||||||
override val gradleExecutionContext: KotlinToolRunner.GradleExecutionContext,
|
override val gradleExecutionContext: KotlinToolRunner.GradleExecutionContext,
|
||||||
private val task: Task
|
private val task: Task,
|
||||||
|
override val metricsReporter: BuildMetricsReporter<GradleBuildTime, GradleBuildPerformanceMetric>
|
||||||
) : KotlinNativeCInteropRunner.ExecutionContext {
|
) : KotlinNativeCInteropRunner.ExecutionContext {
|
||||||
|
|
||||||
override fun runWithContext(action: () -> Unit) {
|
override fun runWithContext(action: () -> Unit) {
|
||||||
|
|||||||
+53
-38
@@ -14,9 +14,13 @@ import org.gradle.api.file.ConfigurableFileCollection
|
|||||||
import org.gradle.api.file.DirectoryProperty
|
import org.gradle.api.file.DirectoryProperty
|
||||||
import org.gradle.api.file.FileCollection
|
import org.gradle.api.file.FileCollection
|
||||||
import org.gradle.api.model.ObjectFactory
|
import org.gradle.api.model.ObjectFactory
|
||||||
|
import org.gradle.api.provider.Property
|
||||||
import org.gradle.api.provider.Provider
|
import org.gradle.api.provider.Provider
|
||||||
import org.gradle.api.tasks.*
|
import org.gradle.api.tasks.*
|
||||||
import org.gradle.process.ExecOperations
|
import org.gradle.process.ExecOperations
|
||||||
|
import org.jetbrains.kotlin.build.report.metrics.BuildMetricsReporter
|
||||||
|
import org.jetbrains.kotlin.build.report.metrics.GradleBuildPerformanceMetric
|
||||||
|
import org.jetbrains.kotlin.build.report.metrics.GradleBuildTime
|
||||||
import org.jetbrains.kotlin.cli.common.arguments.K2NativeCompilerArguments
|
import org.jetbrains.kotlin.cli.common.arguments.K2NativeCompilerArguments
|
||||||
import org.jetbrains.kotlin.compilerRunner.*
|
import org.jetbrains.kotlin.compilerRunner.*
|
||||||
import org.jetbrains.kotlin.gradle.dsl.*
|
import org.jetbrains.kotlin.gradle.dsl.*
|
||||||
@@ -25,6 +29,8 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinCompilerArgumentsProducer.Create
|
|||||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
|
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
|
||||||
import org.jetbrains.kotlin.gradle.plugin.cocoapods.asValidFrameworkName
|
import org.jetbrains.kotlin.gradle.plugin.cocoapods.asValidFrameworkName
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.*
|
import org.jetbrains.kotlin.gradle.plugin.mpp.*
|
||||||
|
import org.jetbrains.kotlin.gradle.report.GradleBuildMetricsReporter
|
||||||
|
import org.jetbrains.kotlin.gradle.report.UsesBuildMetricsService
|
||||||
import org.jetbrains.kotlin.gradle.targets.native.UsesKonanPropertiesBuildService
|
import org.jetbrains.kotlin.gradle.targets.native.UsesKonanPropertiesBuildService
|
||||||
import org.jetbrains.kotlin.gradle.targets.native.tasks.CompilerPluginData
|
import org.jetbrains.kotlin.gradle.targets.native.tasks.CompilerPluginData
|
||||||
import org.jetbrains.kotlin.gradle.utils.*
|
import org.jetbrains.kotlin.gradle.utils.*
|
||||||
@@ -49,6 +55,7 @@ constructor(
|
|||||||
private val execOperations: ExecOperations,
|
private val execOperations: ExecOperations,
|
||||||
) : AbstractKotlinCompileTool<K2NativeCompilerArguments>(objectFactory),
|
) : AbstractKotlinCompileTool<K2NativeCompilerArguments>(objectFactory),
|
||||||
UsesKonanPropertiesBuildService,
|
UsesKonanPropertiesBuildService,
|
||||||
|
UsesBuildMetricsService,
|
||||||
KotlinToolTask<KotlinCommonCompilerToolOptions> {
|
KotlinToolTask<KotlinCommonCompilerToolOptions> {
|
||||||
|
|
||||||
@Deprecated("Visibility will be lifted to private in the future releases")
|
@Deprecated("Visibility will be lifted to private in the future releases")
|
||||||
@@ -346,52 +353,60 @@ constructor(
|
|||||||
|
|
||||||
@TaskAction
|
@TaskAction
|
||||||
fun compile() {
|
fun compile() {
|
||||||
validatedExportedLibraries()
|
val metricsReporter = metrics.get()
|
||||||
|
|
||||||
val output = outputFile.get()
|
addBuildMetricsForTaskAction(metricsReporter = metricsReporter, languageVersion = parseLanguageVersion(externalDependenciesArgs)) {
|
||||||
output.parentFile.mkdirs()
|
validatedExportedLibraries()
|
||||||
|
|
||||||
val executionContext = KotlinToolRunner.GradleExecutionContext.fromTaskContext(objectFactory, execOperations, logger)
|
val output = outputFile.get()
|
||||||
val additionalOptions = mutableListOf<String>().apply {
|
output.parentFile.mkdirs()
|
||||||
addAll(externalDependenciesArgs)
|
|
||||||
when (cacheSettings.orchestration) {
|
val executionContext = KotlinToolRunner.GradleExecutionContext.fromTaskContext(objectFactory, execOperations, logger)
|
||||||
NativeCacheOrchestration.Compiler -> {
|
val additionalOptions = mutableListOf<String>().apply {
|
||||||
if (cacheSettings.kind != NativeCacheKind.NONE
|
addAll(externalDependenciesArgs)
|
||||||
&& !optimized
|
when (cacheSettings.orchestration) {
|
||||||
&& konanPropertiesService.get().cacheWorksFor(konanTarget)
|
NativeCacheOrchestration.Compiler -> {
|
||||||
) {
|
if (cacheSettings.kind != NativeCacheKind.NONE
|
||||||
add("-Xauto-cache-from=${cacheSettings.gradleUserHomeDir}")
|
&& !optimized
|
||||||
add("-Xbackend-threads=${cacheSettings.threads}")
|
&& konanPropertiesService.get().cacheWorksFor(konanTarget)
|
||||||
if (cacheSettings.icEnabled) {
|
) {
|
||||||
val icCacheDir = cacheSettings.gradleBuildDir.resolve("kotlin-native-ic-cache")
|
add("-Xauto-cache-from=${cacheSettings.gradleUserHomeDir}")
|
||||||
icCacheDir.mkdirs()
|
add("-Xbackend-threads=${cacheSettings.threads}")
|
||||||
add("-Xenable-incremental-compilation")
|
if (cacheSettings.icEnabled) {
|
||||||
add("-Xic-cache-dir=$icCacheDir")
|
val icCacheDir = cacheSettings.gradleBuildDir.resolve("kotlin-native-ic-cache")
|
||||||
|
icCacheDir.mkdirs()
|
||||||
|
add("-Xenable-incremental-compilation")
|
||||||
|
add("-Xic-cache-dir=$icCacheDir")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
NativeCacheOrchestration.Gradle -> {
|
||||||
NativeCacheOrchestration.Gradle -> {
|
if (cacheSettings.icEnabled) {
|
||||||
if (cacheSettings.icEnabled) {
|
executionContext.logger.warn(
|
||||||
executionContext.logger.warn(
|
"K/N incremental compilation only works in conjunction with kotlin.native.cacheOrchestration=compiler"
|
||||||
"K/N incremental compilation only works in conjunction with kotlin.native.cacheOrchestration=compiler")
|
)
|
||||||
|
}
|
||||||
|
val cacheBuilder = CacheBuilder(
|
||||||
|
executionContext = executionContext,
|
||||||
|
settings = cacheBuilderSettings,
|
||||||
|
konanPropertiesService = konanPropertiesService.get(),
|
||||||
|
metricsReporter = metricsReporter
|
||||||
|
)
|
||||||
|
addAll(cacheBuilder.buildCompilerArgs(resolvedConfiguration))
|
||||||
}
|
}
|
||||||
val cacheBuilder = CacheBuilder(
|
|
||||||
executionContext = executionContext,
|
|
||||||
settings = cacheBuilderSettings,
|
|
||||||
konanPropertiesService = konanPropertiesService.get()
|
|
||||||
)
|
|
||||||
addAll(cacheBuilder.buildCompilerArgs(resolvedConfiguration))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val arguments = createCompilerArguments()
|
||||||
|
val buildArguments = ArgumentUtils.convertArgumentsToStringList(arguments) + additionalOptions
|
||||||
|
|
||||||
|
KotlinNativeCompilerRunner(
|
||||||
|
settings = runnerSettings,
|
||||||
|
executionContext = executionContext,
|
||||||
|
metricsReporter = metricsReporter
|
||||||
|
|
||||||
|
).run(buildArguments)
|
||||||
}
|
}
|
||||||
|
|
||||||
val arguments = createCompilerArguments()
|
|
||||||
val buildArguments = ArgumentUtils.convertArgumentsToStringList(arguments) + additionalOptions
|
|
||||||
|
|
||||||
KotlinNativeCompilerRunner(
|
|
||||||
settings = runnerSettings,
|
|
||||||
executionContext = executionContext
|
|
||||||
).run(buildArguments)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private inline fun <reified T : Any> lazyConvention(noinline lazyConventionValue: () -> T): Provider<T> {
|
private inline fun <reified T : Any> lazyConvention(noinline lazyConventionValue: () -> T): Provider<T> {
|
||||||
|
|||||||
+81
-55
@@ -23,6 +23,7 @@ import org.gradle.api.tasks.*
|
|||||||
import org.gradle.process.ExecOperations
|
import org.gradle.process.ExecOperations
|
||||||
import org.gradle.work.DisableCachingByDefault
|
import org.gradle.work.DisableCachingByDefault
|
||||||
import org.gradle.work.NormalizeLineEndings
|
import org.gradle.work.NormalizeLineEndings
|
||||||
|
import org.jetbrains.kotlin.build.report.metrics.*
|
||||||
import org.jetbrains.kotlin.cli.common.arguments.*
|
import org.jetbrains.kotlin.cli.common.arguments.*
|
||||||
import org.jetbrains.kotlin.compilerRunner.*
|
import org.jetbrains.kotlin.compilerRunner.*
|
||||||
import org.jetbrains.kotlin.compilerRunner.KotlinNativeCInteropRunner.Companion.run
|
import org.jetbrains.kotlin.compilerRunner.KotlinNativeCInteropRunner.Companion.run
|
||||||
@@ -39,9 +40,12 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.*
|
|||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmMetadataCompilationData
|
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmMetadataCompilationData
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmNativeCompilationData
|
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmNativeCompilationData
|
||||||
import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService
|
import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService
|
||||||
|
import org.jetbrains.kotlin.gradle.report.*
|
||||||
|
import org.jetbrains.kotlin.gradle.report.UsesBuildMetricsService
|
||||||
import org.jetbrains.kotlin.gradle.targets.native.KonanPropertiesBuildService
|
import org.jetbrains.kotlin.gradle.targets.native.KonanPropertiesBuildService
|
||||||
import org.jetbrains.kotlin.gradle.targets.native.tasks.*
|
import org.jetbrains.kotlin.gradle.targets.native.tasks.*
|
||||||
import org.jetbrains.kotlin.gradle.utils.*
|
import org.jetbrains.kotlin.gradle.utils.*
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.GradleLoggerAdapter
|
||||||
import org.jetbrains.kotlin.gradle.utils.listFilesOrEmpty
|
import org.jetbrains.kotlin.gradle.utils.listFilesOrEmpty
|
||||||
import org.jetbrains.kotlin.ir.linkage.partial.PartialLinkageMode
|
import org.jetbrains.kotlin.ir.linkage.partial.PartialLinkageMode
|
||||||
import org.jetbrains.kotlin.konan.library.KLIB_INTEROP_IR_PROVIDER_IDENTIFIER
|
import org.jetbrains.kotlin.konan.library.KLIB_INTEROP_IR_PROVIDER_IDENTIFIER
|
||||||
@@ -122,10 +126,10 @@ internal fun FileCollection.filterKlibsPassedToCompiler(): FileCollection = filt
|
|||||||
@DisableCachingByDefault(because = "Abstract super-class, not to be instantiated directly")
|
@DisableCachingByDefault(because = "Abstract super-class, not to be instantiated directly")
|
||||||
abstract class AbstractKotlinNativeCompile<
|
abstract class AbstractKotlinNativeCompile<
|
||||||
T : KotlinCommonToolOptions,
|
T : KotlinCommonToolOptions,
|
||||||
M : CommonToolArguments
|
M : CommonToolArguments,
|
||||||
>
|
>
|
||||||
@Inject constructor(
|
@Inject constructor(
|
||||||
private val objectFactory: ObjectFactory
|
private val objectFactory: ObjectFactory,
|
||||||
) : AbstractKotlinCompileTool<M>(objectFactory) {
|
) : AbstractKotlinCompileTool<M>(objectFactory) {
|
||||||
|
|
||||||
@get:Inject
|
@get:Inject
|
||||||
@@ -309,10 +313,11 @@ internal constructor(
|
|||||||
override val compilerOptions: KotlinNativeCompilerOptions,
|
override val compilerOptions: KotlinNativeCompilerOptions,
|
||||||
private val objectFactory: ObjectFactory,
|
private val objectFactory: ObjectFactory,
|
||||||
private val providerFactory: ProviderFactory,
|
private val providerFactory: ProviderFactory,
|
||||||
private val execOperations: ExecOperations
|
private val execOperations: ExecOperations,
|
||||||
) : AbstractKotlinNativeCompile<KotlinCommonOptions, K2NativeCompilerArguments>(objectFactory),
|
) : AbstractKotlinNativeCompile<KotlinCommonOptions, K2NativeCompilerArguments>(objectFactory),
|
||||||
KotlinCompile<KotlinCommonOptions>,
|
KotlinCompile<KotlinCommonOptions>,
|
||||||
K2MultiplatformCompilationTask,
|
K2MultiplatformCompilationTask,
|
||||||
|
UsesBuildMetricsService,
|
||||||
KotlinCompilationTask<KotlinNativeCompilerOptions> {
|
KotlinCompilationTask<KotlinNativeCompilerOptions> {
|
||||||
|
|
||||||
@get:Input
|
@get:Input
|
||||||
@@ -518,17 +523,27 @@ internal constructor(
|
|||||||
|
|
||||||
@TaskAction
|
@TaskAction
|
||||||
fun compile() {
|
fun compile() {
|
||||||
val output = outputFile.get()
|
val buildMetrics = metrics.get()
|
||||||
output.parentFile.mkdirs()
|
addBuildMetricsForTaskAction(
|
||||||
|
metricsReporter = buildMetrics,
|
||||||
|
languageVersion = parseLanguageVersion(compilerOptions.languageVersion.orNull?.version, compilerOptions.useK2.get())
|
||||||
|
) {
|
||||||
|
val arguments = createCompilerArguments()
|
||||||
|
val buildArguments = buildMetrics.measure(GradleBuildTime.OUT_OF_WORKER_TASK_ACTION) {
|
||||||
|
val output = outputFile.get()
|
||||||
|
output.parentFile.mkdirs()
|
||||||
|
|
||||||
collectCommonCompilerStats()
|
collectCommonCompilerStats()
|
||||||
val arguments = createCompilerArguments()
|
ArgumentUtils.convertArgumentsToStringList(arguments)
|
||||||
val buildArguments = ArgumentUtils.convertArgumentsToStringList(arguments)
|
}
|
||||||
|
|
||||||
|
KotlinNativeCompilerRunner(
|
||||||
|
settings = runnerSettings,
|
||||||
|
executionContext = KotlinToolRunner.GradleExecutionContext.fromTaskContext(objectFactory, execOperations, logger),
|
||||||
|
metricsReporter = buildMetrics
|
||||||
|
).run(buildArguments)
|
||||||
|
}
|
||||||
|
|
||||||
KotlinNativeCompilerRunner(
|
|
||||||
settings = runnerSettings,
|
|
||||||
executionContext = KotlinToolRunner.GradleExecutionContext.fromTaskContext(objectFactory, execOperations, logger)
|
|
||||||
).run(buildArguments)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun collectCommonCompilerStats() {
|
private fun collectCommonCompilerStats() {
|
||||||
@@ -547,7 +562,7 @@ internal constructor(
|
|||||||
internal class ExternalDependenciesBuilder(
|
internal class ExternalDependenciesBuilder(
|
||||||
val project: Project,
|
val project: Project,
|
||||||
val compilation: KotlinCompilation<*>,
|
val compilation: KotlinCompilation<*>,
|
||||||
intermediateLibraryName: String?
|
intermediateLibraryName: String?,
|
||||||
) {
|
) {
|
||||||
constructor(project: Project, compilation: KotlinNativeCompilation) : this(
|
constructor(project: Project, compilation: KotlinNativeCompilation) : this(
|
||||||
project, compilation, compilation.compileKotlinTask.moduleName
|
project, compilation, compilation.compileKotlinTask.moduleName
|
||||||
@@ -721,6 +736,7 @@ internal class CacheBuilder(
|
|||||||
private val executionContext: KotlinToolRunner.GradleExecutionContext,
|
private val executionContext: KotlinToolRunner.GradleExecutionContext,
|
||||||
private val settings: Settings,
|
private val settings: Settings,
|
||||||
private val konanPropertiesService: KonanPropertiesBuildService,
|
private val konanPropertiesService: KonanPropertiesBuildService,
|
||||||
|
private val metricsReporter: BuildMetricsReporter<GradleBuildTime, GradleBuildPerformanceMetric>
|
||||||
) {
|
) {
|
||||||
class Settings(
|
class Settings(
|
||||||
val runnerSettings: KotlinNativeCompilerRunner.Settings,
|
val runnerSettings: KotlinNativeCompilerRunner.Settings,
|
||||||
@@ -747,7 +763,7 @@ internal class CacheBuilder(
|
|||||||
binary: NativeBinary,
|
binary: NativeBinary,
|
||||||
konanTarget: KonanTarget,
|
konanTarget: KonanTarget,
|
||||||
toolOptions: KotlinCommonCompilerToolOptions,
|
toolOptions: KotlinCommonCompilerToolOptions,
|
||||||
externalDependenciesArgs: List<String>
|
externalDependenciesArgs: List<String>,
|
||||||
): Settings {
|
): Settings {
|
||||||
val konanCacheKind = project.getKonanCacheKind(konanTarget)
|
val konanCacheKind = project.getKonanCacheKind(konanTarget)
|
||||||
return Settings(
|
return Settings(
|
||||||
@@ -800,7 +816,7 @@ internal class CacheBuilder(
|
|||||||
|
|
||||||
private fun getCacheDirectory(
|
private fun getCacheDirectory(
|
||||||
resolvedConfiguration: LazyResolvedConfiguration,
|
resolvedConfiguration: LazyResolvedConfiguration,
|
||||||
dependency: ResolvedDependencyResult
|
dependency: ResolvedDependencyResult,
|
||||||
): File = getCacheDirectory(
|
): File = getCacheDirectory(
|
||||||
rootCacheDirectory = rootCacheDirectory,
|
rootCacheDirectory = rootCacheDirectory,
|
||||||
dependency = dependency,
|
dependency = dependency,
|
||||||
@@ -814,7 +830,7 @@ internal class CacheBuilder(
|
|||||||
|
|
||||||
private fun LazyResolvedConfiguration.ensureDependencyPrecached(
|
private fun LazyResolvedConfiguration.ensureDependencyPrecached(
|
||||||
dependency: ResolvedDependencyResult,
|
dependency: ResolvedDependencyResult,
|
||||||
visitedDependencies: MutableSet<ResolvedDependencyResult>
|
visitedDependencies: MutableSet<ResolvedDependencyResult>,
|
||||||
) {
|
) {
|
||||||
if (dependency in visitedDependencies)
|
if (dependency in visitedDependencies)
|
||||||
return
|
return
|
||||||
@@ -903,7 +919,7 @@ internal class CacheBuilder(
|
|||||||
args += "-l"
|
args += "-l"
|
||||||
args += it.libraryFile.absolutePath
|
args += it.libraryFile.absolutePath
|
||||||
}
|
}
|
||||||
KotlinNativeCompilerRunner(settings.runnerSettings, executionContext).run(args)
|
KotlinNativeCompilerRunner(settings.runnerSettings, executionContext, GradleBuildMetricsReporter()).run(args)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -913,7 +929,7 @@ internal class CacheBuilder(
|
|||||||
private fun ensureCompilerProvidedLibPrecached(
|
private fun ensureCompilerProvidedLibPrecached(
|
||||||
platformLibName: String,
|
platformLibName: String,
|
||||||
platformLibs: Map<String, File>,
|
platformLibs: Map<String, File>,
|
||||||
visitedLibs: MutableSet<String>
|
visitedLibs: MutableSet<String>,
|
||||||
) {
|
) {
|
||||||
if (platformLibName in visitedLibs)
|
if (platformLibName in visitedLibs)
|
||||||
return
|
return
|
||||||
@@ -944,7 +960,7 @@ internal class CacheBuilder(
|
|||||||
}
|
}
|
||||||
args += "-Xadd-cache=${platformLib.absolutePath}"
|
args += "-Xadd-cache=${platformLib.absolutePath}"
|
||||||
args += "-Xcache-directory=${rootCacheDirectory.absolutePath}"
|
args += "-Xcache-directory=${rootCacheDirectory.absolutePath}"
|
||||||
KotlinNativeCompilerRunner(settings.runnerSettings, executionContext).run(args)
|
KotlinNativeCompilerRunner(settings.runnerSettings, executionContext, metricsReporter).run(args)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun ensureCompilerProvidedLibsPrecached() {
|
private fun ensureCompilerProvidedLibsPrecached() {
|
||||||
@@ -995,7 +1011,8 @@ internal class CacheBuilder(
|
|||||||
}
|
}
|
||||||
|
|
||||||
@CacheableTask
|
@CacheableTask
|
||||||
open class CInteropProcess @Inject internal constructor(params: Params) : DefaultTask() {
|
abstract class CInteropProcess @Inject internal constructor(params: Params) :
|
||||||
|
DefaultTask(), UsesBuildMetricsService {
|
||||||
|
|
||||||
internal class Params(
|
internal class Params(
|
||||||
val settings: DefaultCInteropSettings,
|
val settings: DefaultCInteropSettings,
|
||||||
@@ -1003,11 +1020,11 @@ open class CInteropProcess @Inject internal constructor(params: Params) : Defaul
|
|||||||
val compilationName: String,
|
val compilationName: String,
|
||||||
val konanTarget: KonanTarget,
|
val konanTarget: KonanTarget,
|
||||||
val baseKlibName: String,
|
val baseKlibName: String,
|
||||||
val services: Services
|
val services: Services,
|
||||||
) {
|
) {
|
||||||
internal open class Services @Inject constructor(
|
internal open class Services @Inject constructor(
|
||||||
val objectFactory: ObjectFactory,
|
val objectFactory: ObjectFactory,
|
||||||
val execOperations: ExecOperations
|
val execOperations: ExecOperations,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1104,48 +1121,57 @@ open class CInteropProcess @Inject internal constructor(params: Params) : Defaul
|
|||||||
@get:Input
|
@get:Input
|
||||||
val extraOpts: List<String> get() = settings.extraOpts
|
val extraOpts: List<String> get() = settings.extraOpts
|
||||||
|
|
||||||
|
@get:Internal
|
||||||
|
val metrics: Property<BuildMetricsReporter<GradleBuildTime, GradleBuildPerformanceMetric>> = project.objects
|
||||||
|
.property(GradleBuildMetricsReporter())
|
||||||
|
|
||||||
private val isInIdeaSync = project.isInIdeaSync
|
private val isInIdeaSync = project.isInIdeaSync
|
||||||
|
|
||||||
// Task action.
|
// Task action.
|
||||||
@TaskAction
|
@TaskAction
|
||||||
fun processInterop() {
|
fun processInterop() {
|
||||||
val args = mutableListOf<String>().apply {
|
val buildMetrics = metrics.get()
|
||||||
addArg("-o", outputFile.absolutePath)
|
|
||||||
|
|
||||||
addArgIfNotNull("-target", konanTarget.visibleName)
|
val args =
|
||||||
addArgIfNotNull("-def", defFile.canonicalPath)
|
mutableListOf<String>().apply {
|
||||||
addArgIfNotNull("-pkg", packageName)
|
addArg("-o", outputFile.absolutePath)
|
||||||
|
|
||||||
addFileArgs("-header", headers)
|
addArgIfNotNull("-target", konanTarget.visibleName)
|
||||||
|
addArgIfNotNull("-def", defFile.canonicalPath)
|
||||||
|
addArgIfNotNull("-pkg", packageName)
|
||||||
|
|
||||||
|
addFileArgs("-header", headers)
|
||||||
|
|
||||||
|
compilerOpts.forEach {
|
||||||
|
addArg("-compiler-option", it)
|
||||||
|
}
|
||||||
|
|
||||||
|
linkerOpts.forEach {
|
||||||
|
addArg("-linker-option", it)
|
||||||
|
}
|
||||||
|
|
||||||
|
libraries.files.filterKlibsPassedToCompiler().forEach { library ->
|
||||||
|
addArg("-library", library.absolutePath)
|
||||||
|
}
|
||||||
|
|
||||||
|
addArgs("-compiler-option", allHeadersDirs.map { "-I${it.absolutePath}" })
|
||||||
|
addArgs("-headerFilterAdditionalSearchPrefix", headerFilterDirs.map { it.absolutePath })
|
||||||
|
addArg("-Xmodule-name", moduleName)
|
||||||
|
|
||||||
|
addArg("-libraryVersion", libraryVersion)
|
||||||
|
|
||||||
|
addAll(extraOpts)
|
||||||
|
|
||||||
compilerOpts.forEach {
|
|
||||||
addArg("-compiler-option", it)
|
|
||||||
}
|
}
|
||||||
|
addBuildMetricsForTaskAction(buildMetrics, languageVersion = parseLanguageVersion(args)) {
|
||||||
linkerOpts.forEach {
|
outputFile.parentFile.mkdirs()
|
||||||
addArg("-linker-option", it)
|
KotlinNativeCInteropRunner.createExecutionContext(
|
||||||
}
|
task = this,
|
||||||
|
isInIdeaSync = isInIdeaSync,
|
||||||
libraries.files.filterKlibsPassedToCompiler().forEach { library ->
|
runnerSettings = runnerSettings,
|
||||||
addArg("-library", library.absolutePath)
|
gradleExecutionContext = KotlinToolRunner.GradleExecutionContext.fromTaskContext(objectFactory, execOperations, logger),
|
||||||
}
|
metricsReporter = buildMetrics
|
||||||
|
).run(args)
|
||||||
addArgs("-compiler-option", allHeadersDirs.map { "-I${it.absolutePath}" })
|
|
||||||
addArgs("-headerFilterAdditionalSearchPrefix", headerFilterDirs.map { it.absolutePath })
|
|
||||||
addArg("-Xmodule-name", moduleName)
|
|
||||||
|
|
||||||
// TODO: uncomment after advancing bootstrap.
|
|
||||||
//addArg("-libraryVersion", libraryVersion)
|
|
||||||
|
|
||||||
addAll(extraOpts)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
outputFile.parentFile.mkdirs()
|
|
||||||
KotlinNativeCInteropRunner.createExecutionContext(
|
|
||||||
task = this,
|
|
||||||
isInIdeaSync = isInIdeaSync,
|
|
||||||
runnerSettings = runnerSettings,
|
|
||||||
gradleExecutionContext = KotlinToolRunner.GradleExecutionContext.fromTaskContext(objectFactory, execOperations, logger)
|
|
||||||
).run(args)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-1
@@ -10,7 +10,10 @@ import org.gradle.api.Task
|
|||||||
import org.gradle.api.plugins.BasePlugin
|
import org.gradle.api.plugins.BasePlugin
|
||||||
import org.gradle.api.plugins.ExtensionAware
|
import org.gradle.api.plugins.ExtensionAware
|
||||||
import org.gradle.language.base.plugins.LifecycleBasePlugin
|
import org.gradle.language.base.plugins.LifecycleBasePlugin
|
||||||
import org.jetbrains.kotlin.gradle.dsl.*
|
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonCompilerToolOptions
|
||||||
|
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonToolOptions
|
||||||
|
import org.jetbrains.kotlin.gradle.dsl.KotlinNativeLibrary
|
||||||
|
import org.jetbrains.kotlin.gradle.dsl.KotlinNativeLibraryConfig
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType
|
import org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.NativeOutputKind
|
import org.jetbrains.kotlin.gradle.plugin.mpp.NativeOutputKind
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.enabledOnCurrentHost
|
import org.jetbrains.kotlin.gradle.plugin.mpp.enabledOnCurrentHost
|
||||||
|
|||||||
+45
-27
@@ -20,16 +20,23 @@ import org.gradle.api.provider.Provider
|
|||||||
import org.gradle.api.tasks.*
|
import org.gradle.api.tasks.*
|
||||||
import org.gradle.process.ExecOperations
|
import org.gradle.process.ExecOperations
|
||||||
import org.gradle.work.DisableCachingByDefault
|
import org.gradle.work.DisableCachingByDefault
|
||||||
|
import org.jetbrains.kotlin.build.report.metrics.BuildMetricsReporter
|
||||||
|
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.KotlinNativeCompilerRunner
|
||||||
import org.jetbrains.kotlin.compilerRunner.KotlinToolRunner
|
import org.jetbrains.kotlin.compilerRunner.KotlinToolRunner
|
||||||
|
import org.jetbrains.kotlin.compilerRunner.addBuildMetricsForTaskAction
|
||||||
import org.jetbrains.kotlin.gradle.dsl.*
|
import org.jetbrains.kotlin.gradle.dsl.*
|
||||||
import org.jetbrains.kotlin.gradle.internal.ensureParentDirsCreated
|
import org.jetbrains.kotlin.gradle.internal.ensureParentDirsCreated
|
||||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
|
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.BitcodeEmbeddingMode
|
import org.jetbrains.kotlin.gradle.plugin.mpp.BitcodeEmbeddingMode
|
||||||
|
import org.jetbrains.kotlin.gradle.report.GradleBuildMetricsReporter
|
||||||
|
import org.jetbrains.kotlin.gradle.report.UsesBuildMetricsService
|
||||||
import org.jetbrains.kotlin.gradle.targets.native.tasks.buildKotlinNativeBinaryLinkerArgs
|
import org.jetbrains.kotlin.gradle.targets.native.tasks.buildKotlinNativeBinaryLinkerArgs
|
||||||
import org.jetbrains.kotlin.gradle.tasks.KotlinToolTask
|
import org.jetbrains.kotlin.gradle.tasks.KotlinToolTask
|
||||||
import org.jetbrains.kotlin.gradle.utils.XcodeUtils
|
import org.jetbrains.kotlin.gradle.utils.XcodeUtils
|
||||||
import org.jetbrains.kotlin.gradle.utils.newInstance
|
import org.jetbrains.kotlin.gradle.utils.newInstance
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.property
|
||||||
import org.jetbrains.kotlin.konan.target.CompilerOutputKind
|
import org.jetbrains.kotlin.konan.target.CompilerOutputKind
|
||||||
import org.jetbrains.kotlin.konan.target.KonanTarget
|
import org.jetbrains.kotlin.konan.target.KonanTarget
|
||||||
import org.jetbrains.kotlin.konan.util.visibleName
|
import org.jetbrains.kotlin.konan.util.visibleName
|
||||||
@@ -45,6 +52,7 @@ abstract class KotlinNativeLinkArtifactTask @Inject constructor(
|
|||||||
private val execOperations: ExecOperations,
|
private val execOperations: ExecOperations,
|
||||||
private val projectLayout: ProjectLayout
|
private val projectLayout: ProjectLayout
|
||||||
) : DefaultTask(),
|
) : DefaultTask(),
|
||||||
|
UsesBuildMetricsService,
|
||||||
KotlinToolTask<KotlinCommonCompilerToolOptions> {
|
KotlinToolTask<KotlinCommonCompilerToolOptions> {
|
||||||
|
|
||||||
@get:Input
|
@get:Input
|
||||||
@@ -163,6 +171,10 @@ abstract class KotlinNativeLinkArtifactTask @Inject constructor(
|
|||||||
destinationDir.asFile.get().resolve(outFileName)
|
destinationDir.asFile.get().resolve(outFileName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@get:Internal
|
||||||
|
val metrics: Property<BuildMetricsReporter<GradleBuildTime, GradleBuildPerformanceMetric>> = project.objects
|
||||||
|
.property(GradleBuildMetricsReporter())
|
||||||
|
|
||||||
private val runnerSettings = KotlinNativeCompilerRunner.Settings.fromProject(project)
|
private val runnerSettings = KotlinNativeCompilerRunner.Settings.fromProject(project)
|
||||||
|
|
||||||
init {
|
init {
|
||||||
@@ -183,36 +195,42 @@ abstract class KotlinNativeLinkArtifactTask @Inject constructor(
|
|||||||
|
|
||||||
@TaskAction
|
@TaskAction
|
||||||
fun link() {
|
fun link() {
|
||||||
val outFile = outputFile.get()
|
val metricReporter = metrics.get()
|
||||||
outFile.ensureParentDirsCreated()
|
|
||||||
|
|
||||||
fun FileCollection.klibs() = files.filter { it.extension == "klib" }
|
addBuildMetricsForTaskAction(metricsReporter = metricReporter, languageVersion = null) {
|
||||||
|
|
||||||
val buildArgs = buildKotlinNativeBinaryLinkerArgs(
|
val outFile = outputFile.get()
|
||||||
outFile = outFile,
|
outFile.ensureParentDirsCreated()
|
||||||
optimized = optimized.get(),
|
|
||||||
debuggable = debuggable.get(),
|
|
||||||
target = konanTarget,
|
|
||||||
outputKind = outputKind,
|
|
||||||
libraries = libraries.klibs(),
|
|
||||||
friendModules = emptyList(), //FriendModules aren't needed here because it's no test artifact
|
|
||||||
toolOptions = toolOptions,
|
|
||||||
compilerPlugins = emptyList(),//CompilerPlugins aren't needed here because it's no compilation but linking
|
|
||||||
processTests = processTests.get(),
|
|
||||||
entryPoint = entryPoint.getOrNull(),
|
|
||||||
embedBitcode = bitcodeEmbeddingMode(),
|
|
||||||
linkerOpts = linkerOptions.get(),
|
|
||||||
binaryOptions = allBinaryOptions.get(),
|
|
||||||
isStaticFramework = staticFramework.get(),
|
|
||||||
exportLibraries = exportLibraries.klibs(),
|
|
||||||
includeLibraries = includeLibraries.klibs(),
|
|
||||||
additionalOptions = emptyList()//todo support org.jetbrains.kotlin.gradle.tasks.CacheBuilder and org.jetbrains.kotlin.gradle.tasks.ExternalDependenciesBuilder
|
|
||||||
)
|
|
||||||
|
|
||||||
KotlinNativeCompilerRunner(
|
fun FileCollection.klibs() = files.filter { it.extension == "klib" }
|
||||||
settings = runnerSettings,
|
|
||||||
executionContext = KotlinToolRunner.GradleExecutionContext.fromTaskContext(objectFactory, execOperations, logger)
|
val buildArgs = buildKotlinNativeBinaryLinkerArgs(
|
||||||
).run(buildArgs)
|
outFile = outFile,
|
||||||
|
optimized = optimized.get(),
|
||||||
|
debuggable = debuggable.get(),
|
||||||
|
target = konanTarget,
|
||||||
|
outputKind = outputKind,
|
||||||
|
libraries = libraries.klibs(),
|
||||||
|
friendModules = emptyList(), //FriendModules aren't needed here because it's no test artifact
|
||||||
|
toolOptions = toolOptions,
|
||||||
|
compilerPlugins = emptyList(),//CompilerPlugins aren't needed here because it's no compilation but linking
|
||||||
|
processTests = processTests.get(),
|
||||||
|
entryPoint = entryPoint.getOrNull(),
|
||||||
|
embedBitcode = bitcodeEmbeddingMode(),
|
||||||
|
linkerOpts = linkerOptions.get(),
|
||||||
|
binaryOptions = allBinaryOptions.get(),
|
||||||
|
isStaticFramework = staticFramework.get(),
|
||||||
|
exportLibraries = exportLibraries.klibs(),
|
||||||
|
includeLibraries = includeLibraries.klibs(),
|
||||||
|
additionalOptions = emptyList()//todo support org.jetbrains.kotlin.gradle.tasks.CacheBuilder and org.jetbrains.kotlin.gradle.tasks.ExternalDependenciesBuilder
|
||||||
|
)
|
||||||
|
|
||||||
|
KotlinNativeCompilerRunner(
|
||||||
|
settings = runnerSettings,
|
||||||
|
executionContext = KotlinToolRunner.GradleExecutionContext.fromTaskContext(objectFactory, execOperations, logger),
|
||||||
|
metricReporter,
|
||||||
|
).run(buildArgs)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun bitcodeEmbeddingMode(): BitcodeEmbeddingMode {
|
private fun bitcodeEmbeddingMode(): BitcodeEmbeddingMode {
|
||||||
|
|||||||
-5
@@ -25,7 +25,6 @@ import org.jetbrains.kotlin.gradle.plugin.internal.BuildIdService
|
|||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmAndroidCompilation
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmAndroidCompilation
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMetadataTarget
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMetadataTarget
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.internal
|
import org.jetbrains.kotlin.gradle.plugin.mpp.internal
|
||||||
import org.jetbrains.kotlin.gradle.report.BuildMetricsService
|
|
||||||
import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile
|
import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile
|
||||||
import org.jetbrains.kotlin.gradle.tasks.KOTLIN_BUILD_DIR_NAME
|
import org.jetbrains.kotlin.gradle.tasks.KOTLIN_BUILD_DIR_NAME
|
||||||
import org.jetbrains.kotlin.gradle.utils.providerWithLazyConvention
|
import org.jetbrains.kotlin.gradle.utils.providerWithLazyConvention
|
||||||
@@ -43,7 +42,6 @@ internal abstract class AbstractKotlinCompileConfig<TASK : AbstractKotlinCompile
|
|||||||
|
|
||||||
init {
|
init {
|
||||||
val compilerSystemPropertiesService = CompilerSystemPropertiesService.registerIfAbsent(project)
|
val compilerSystemPropertiesService = CompilerSystemPropertiesService.registerIfAbsent(project)
|
||||||
val buildMetricsService = BuildMetricsService.registerIfAbsent(project)
|
|
||||||
val incrementalModuleInfoProvider =
|
val incrementalModuleInfoProvider =
|
||||||
IncrementalModuleInfoBuildService.registerIfAbsent(project, objectFactory.providerWithLazyConvention {
|
IncrementalModuleInfoBuildService.registerIfAbsent(project, objectFactory.providerWithLazyConvention {
|
||||||
GradleCompilerRunner.buildModulesInfo(project.gradle)
|
GradleCompilerRunner.buildModulesInfo(project.gradle)
|
||||||
@@ -62,9 +60,6 @@ internal abstract class AbstractKotlinCompileConfig<TASK : AbstractKotlinCompile
|
|||||||
.disallowChanges()
|
.disallowChanges()
|
||||||
|
|
||||||
task.localStateDirectories.from(task.taskBuildLocalStateDirectory).disallowChanges()
|
task.localStateDirectories.from(task.taskBuildLocalStateDirectory).disallowChanges()
|
||||||
buildMetricsService?.also { metricsService ->
|
|
||||||
task.buildMetricsService.value(metricsService).disallowChanges()
|
|
||||||
}
|
|
||||||
task.systemPropertiesService.value(compilerSystemPropertiesService).disallowChanges()
|
task.systemPropertiesService.value(compilerSystemPropertiesService).disallowChanges()
|
||||||
task.incrementalModuleInfoProvider.value(incrementalModuleInfoProvider).disallowChanges()
|
task.incrementalModuleInfoProvider.value(incrementalModuleInfoProvider).disallowChanges()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user