Add native metrics
diff --git a/compiler/build-tools/kotlin-build-statistics/src/org/jetbrains/kotlin/build/report/metrics/BuildMetricsReporter.kt b/compiler/build-tools/kotlin-build-statistics/src/org/jetbrains/kotlin/build/report/metrics/BuildMetricsReporter.kt
index c00a8c7..0f7cc30 100644
--- a/compiler/build-tools/kotlin-build-statistics/src/org/jetbrains/kotlin/build/report/metrics/BuildMetricsReporter.kt
+++ b/compiler/build-tools/kotlin-build-statistics/src/org/jetbrains/kotlin/build/report/metrics/BuildMetricsReporter.kt
@@ -30,7 +30,9 @@
inline fun <B : BuildTime, P : BuildPerformanceMetric, T> BuildMetricsReporter<B, P>.measure(time: B, fn: () -> T): T {
startMeasure(time)
try {
- return fn()
+ return fn().also {
+ println(it)
+ }
} finally {
endMeasure(time)
}
diff --git a/kotlin-native/utilities/cli-runner/build.gradle.kts b/kotlin-native/utilities/cli-runner/build.gradle.kts
index 3c62541..18cbc8c 100644
--- a/kotlin-native/utilities/cli-runner/build.gradle.kts
+++ b/kotlin-native/utilities/cli-runner/build.gradle.kts
@@ -6,6 +6,7 @@
dependencies {
implementation(project(":compiler:cli-common"))
+ implementation(project(":compiler:cli-base"))
implementation(project(":compiler:util"))
implementation(project(":kotlin-native:Interop:StubGenerator"))
implementation(project(":kotlin-native:backend.native")) // used by generatePlatformLibraries command for cache generation
diff --git a/kotlin-native/utilities/cli-runner/src/org/jetbrains/kotlin/cli/utilities/GeneratePlatformLibraries.kt b/kotlin-native/utilities/cli-runner/src/org/jetbrains/kotlin/cli/utilities/GeneratePlatformLibraries.kt
index 83c3d55..3d1dec6 100644
--- a/kotlin-native/utilities/cli-runner/src/org/jetbrains/kotlin/cli/utilities/GeneratePlatformLibraries.kt
+++ b/kotlin-native/utilities/cli-runner/src/org/jetbrains/kotlin/cli/utilities/GeneratePlatformLibraries.kt
@@ -328,6 +328,7 @@
)
logger.verbose("Run compiler with args: ${compilerArgs.joinToString(separator = " ")}")
K2Native.mainNoExit(compilerArgs)
+ return@with
}
private fun buildStdlibCache(
@@ -352,6 +353,7 @@
)
logger.verbose("Run compiler with args: ${compilerArgs.joinToString(separator = " ")}")
K2Native.mainNoExit(compilerArgs)
+ return@with
}
private fun generatePlatformLibraries(target: KonanTarget, cinteropOptions: CInteropOptions,
diff --git a/kotlin-native/utilities/cli-runner/src/org/jetbrains/kotlin/cli/utilities/main.kt b/kotlin-native/utilities/cli-runner/src/org/jetbrains/kotlin/cli/utilities/main.kt
index 17378d3..e8d9964 100644
--- a/kotlin-native/utilities/cli-runner/src/org/jetbrains/kotlin/cli/utilities/main.kt
+++ b/kotlin-native/utilities/cli-runner/src/org/jetbrains/kotlin/cli/utilities/main.kt
@@ -11,17 +11,17 @@
import org.jetbrains.kotlin.cli.bc.mainNoExitWithXcodeRenderer as konancMainWithXcodeRenderer
import org.jetbrains.kotlin.backend.konan.env.setEnv
import org.jetbrains.kotlin.utils.usingNativeMemoryAllocator
+import org.jetbrains.kotlin.cli.common.CommonCompilerPerformanceManager
-private fun mainImpl(args: Array<String>, runFromDaemon: Boolean, konancMain: (Array<String>) -> Unit) {
+private fun mainImpl(args: Array<String>, runFromDaemon: Boolean, konancMain: (Array<String>) -> CommonCompilerPerformanceManager?): CommonCompilerPerformanceManager? {
val utilityName = args[0]
val utilityArgs = args.drop(1).toTypedArray()
when (utilityName) {
- "konanc" ->
- konancMain(utilityArgs)
+ "konanc" -> return konancMain(utilityArgs)
"cinterop" -> {
val konancArgs = invokeInterop("native", utilityArgs, runFromDaemon)
- konancArgs?.let { konancMain(it) }
+ return konancArgs?.let { konancMain(it) }
}
"jsinterop" -> {
error("wasm target in Kotlin/Native is removed. See https://kotl.in/native-targets-tiers")
@@ -39,21 +39,28 @@
else ->
error("Unexpected utility name")
}
+ return null
}
-fun main(args: Array<String>) = mainImpl(args, false, ::konancMain)
+fun main(args: Array<String>) {
+ mainImpl(args, false, ::konancMain)
+}
private fun setupClangEnv() {
setEnv("LIBCLANG_DISABLE_CRASH_RECOVERY", "1")
}
-fun daemonMain(args: Array<String>) = inProcessMain(args, ::konancMainWithGradleRenderer)
+fun daemonMain(args: Array<String>):CommonCompilerPerformanceManager? = inProcessMain(args, ::konancMainWithGradleRenderer)
-fun daemonMainWithXcodeRenderer(args: Array<String>) = inProcessMain(args, ::konancMainWithXcodeRenderer)
+fun daemonMainWithXcodeRenderer(args: Array<String>):CommonCompilerPerformanceManager? = inProcessMain(args, ::konancMainWithXcodeRenderer)
-private fun inProcessMain(args: Array<String>, konancMain: (Array<String>) -> Unit) {
- usingNativeMemoryAllocator {
- setupClangEnv() // For in-process invocation have to setup proper environment manually.
- mainImpl(args, true, konancMain)
- }
-}
+private fun inProcessMain(args: Array<String>, konancMain: (Array<String>) -> CommonCompilerPerformanceManager) =
+ usingNativeMemoryAllocator {
+ setupClangEnv() // For in-process invocation have to setup proper environment manually.
+ mainImpl(args, true, konancMain)
+ }.also {
+ println("____DEBUG_____")
+ println(it)
+ }
+
+
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/NativeIncrementalCompilationIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/NativeIncrementalCompilationIT.kt
index a494180..0b9630d 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/NativeIncrementalCompilationIT.kt
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/NativeIncrementalCompilationIT.kt
@@ -91,11 +91,12 @@
@DisplayName("Smoke test")
@GradleTest
fun checkIncrementalCacheIsCreated(gradleVersion: GradleVersion) {
- nativeProject("native-incremental-simple", gradleVersion) {
+ nativeProject("native-incremental-simple", gradleVersion, enableGradleDebug = true) {
build("linkDebugExecutableHost") {
assertDirectoryExists(
getFileCache("native-incremental-simple", "src/hostMain/kotlin/main.kt")
)
+ printBuildOutput()
}
}
}
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/KotlinToolRunner.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/KotlinToolRunner.kt
index 2f83fec..b87d422 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/KotlinToolRunner.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/KotlinToolRunner.kt
@@ -14,6 +14,7 @@
import org.gradle.process.ExecResult
import org.gradle.process.JavaExecSpec
import org.jetbrains.kotlin.build.report.metrics.*
+import org.jetbrains.kotlin.cli.common.CommonCompilerPerformanceManager
import org.jetbrains.kotlin.gradle.logging.gradleLogLevel
import org.jetbrains.kotlin.konan.target.HostManager
import java.io.File
@@ -205,7 +206,8 @@
.singleOrNull { it.name == daemonEntryPoint } ?: error("Couldn't find daemon entry point '$daemonEntryPoint'")
metricsReporter.measure(GradleBuildTime.RUN_ENTRY_POINT) {
- entryPoint.invoke(null, transformedArgs.toTypedArray())
+ val performanceManager = entryPoint.invoke(null, transformedArgs.toTypedArray()) as CommonCompilerPerformanceManager
+ System.out.println(performanceManager)
}
} catch (t: InvocationTargetException) {
throw t.targetException
diff --git a/native/cli-native/src/org/jetbrains/kotlin/cli/bc/K2Native.kt b/native/cli-native/src/org/jetbrains/kotlin/cli/bc/K2Native.kt
index 7ae61e2..367dada 100644
--- a/native/cli-native/src/org/jetbrains/kotlin/cli/bc/K2Native.kt
+++ b/native/cli-native/src/org/jetbrains/kotlin/cli/bc/K2Native.kt
@@ -170,26 +170,33 @@
override fun executableScriptFileName() = "kotlinc-native"
companion object {
- @JvmStatic fun main(args: Array<String>) {
+ @JvmStatic fun main(args: Array<String>): CommonCompilerPerformanceManager {
+ val k2Native = K2Native()
profile("Total compiler main()") {
- doMain(K2Native(), args)
+ doMain(k2Native, args)
}
+ return k2Native.defaultPerformanceManager
}
- @JvmStatic fun mainNoExit(args: Array<String>) {
+ @JvmStatic fun mainNoExit(args: Array<String>): CommonCompilerPerformanceManager {
+ val k2Native = K2Native()
profile("Total compiler main()") {
- if (doMainNoExit(K2Native(), args) != ExitCode.OK) {
+ if (doMainNoExit(k2Native, args) != ExitCode.OK) {
throw KonanCompilationException("Compilation finished with errors")
}
}
+ return k2Native.defaultPerformanceManager
+
}
- @JvmStatic fun mainNoExitWithRenderer(args: Array<String>, messageRenderer: MessageRenderer) {
+ @JvmStatic fun mainNoExitWithRenderer(args: Array<String>, messageRenderer: MessageRenderer): CommonCompilerPerformanceManager {
+ val k2Native = K2Native()
profile("Total compiler main()") {
- if (doMainNoExit(K2Native(), args, messageRenderer) != ExitCode.OK) {
+ if (doMainNoExit(k2Native, args, messageRenderer) != ExitCode.OK) {
throw KonanCompilationException("Compilation finished with errors")
}
}
+ return k2Native.defaultPerformanceManager
}
}
}