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
         }
     }
 }