Skip to content

Commit 269b098

Browse files
authored
Merge pull request #118 from Kotlin/qurbonzoda/fix-build
Opt-in for ExperimentalNativeApi to fix aggregate build
2 parents 061d79a + e8a993b commit 269b098

File tree

4 files changed

+47
-29
lines changed

4 files changed

+47
-29
lines changed

gradle.properties

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ infra_version=0.3.0-dev-73
77
kotlin.code.style=official
88
kotlin.incremental.multiplatform=true
99
kotlin.mpp.enableGranularSourceSetsMetadata=true
10-
kotlin.mpp.enableCompatibilityMetadataVariant=true
1110
kotlin.native.distribution.type=prebuilt
1211

1312
org.gradle.jvmargs=-Xmx4g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

integration/build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ val createClasspathManifest by tasks.registering {
5454
dependsOn(artifactsTask("jvm"))
5555
dependsOn(artifactsTask("jsIr"))
5656
dependsOn(artifactsTask("wasm"))
57-
dependsOn(artifactsTask("metadata"))
57+
dependsOn(artifactsTask("allMetadata"))
5858
dependsOn(artifactsTaskNativeKlibs())
5959

6060
val outputDir = file("$buildDir/$name")
@@ -63,7 +63,7 @@ val createClasspathManifest by tasks.registering {
6363
outputDir.apply {
6464
mkdirs()
6565
resolve("plugin-classpath.txt").writeText(plugin.classpath().resolve("plugin-classpath.txt").readText())
66-
resolve("runtime-metadata.txt").writeText(artifactsTask("metadata").archiveFilePath)
66+
resolve("runtime-metadata.txt").writeText(artifactsTask("allMetadata").archiveFilePath)
6767
resolve("runtime-jvm.txt").writeText(artifactsTask("jvm").archiveFilePath)
6868
resolve("runtime-jsIr.txt").writeText(artifactsTask("jsIr").archiveFilePath)
6969
resolve("runtime-wasm.txt").writeText(artifactsTask("wasm").archiveFilePath)

runtime/build.gradle

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,24 +8,40 @@ repositories {
88

99
kotlin {
1010
infra {
11-
target('linuxX64')
12-
target('mingwX64')
11+
// According to https://kotlinlang.org/docs/native-target-support.html
12+
13+
// Tier 1
14+
target("linuxX64")
15+
16+
// Tier 2
17+
target("linuxArm64")
18+
19+
// Tier 3
20+
target("androidNativeArm32")
21+
target("androidNativeArm64")
22+
target("androidNativeX86")
23+
target("androidNativeX64")
24+
target("mingwX64")
1325

1426
common("darwin") {
27+
// Tier 1
1528
target("macosX64")
1629
target("macosArm64")
17-
target("iosX64")
18-
target("iosArm64")
19-
target("iosArm32")
2030
target("iosSimulatorArm64")
31+
target("iosX64")
32+
33+
// Tier 2
34+
target("watchosSimulatorArm64")
35+
target("watchosX64")
2136
target("watchosArm32")
2237
target("watchosArm64")
23-
target("watchosX86")
24-
target("watchosX64")
25-
target("watchosSimulatorArm64")
26-
target("tvosArm64")
27-
target("tvosX64")
2838
target("tvosSimulatorArm64")
39+
target("tvosX64")
40+
target("tvosArm64")
41+
target("iosArm64")
42+
43+
// Tier 3
44+
target("watchosDeviceArm64")
2945
}
3046
}
3147

@@ -38,6 +54,7 @@ kotlin {
3854
resources.srcDirs = ["$it.name/resources"]
3955
languageSettings {
4056
progressiveMode = true
57+
optIn('kotlin.experimental.ExperimentalNativeApi')
4158
optIn("kotlinx.cinterop.ExperimentalForeignApi")
4259
}
4360
}

runtime/nativeMain/src/kotlinx/benchmark/native/NativeExecutor.kt

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package kotlinx.benchmark.native
22

33
import kotlinx.benchmark.*
44
import kotlin.native.internal.GC
5-
import kotlin.system.*
5+
import kotlin.time.*
66

77
class NativeExecutor(
88
name: String,
@@ -218,25 +218,28 @@ class NativeExecutor(
218218
return getStackTrace().joinToString("\n") + "\nCause: ${nested.message}\n" + nested.stacktrace()
219219
}
220220

221+
@OptIn(ExperimentalTime::class)
221222
private inline fun measure(
222223
cycles: Int,
223224
nativeGCAfterIteration: Boolean,
224225
body: () -> Unit,
225226
): Double {
226-
var counter = cycles
227227
if (nativeGCAfterIteration)
228228
GC.collect()
229-
val startTime = getTimeNanos()
230-
while (counter-- > 0) {
231-
body()
229+
230+
val duration = measureTime {
231+
var counter = cycles
232+
while (counter-- > 0) {
233+
body()
234+
}
235+
if (nativeGCAfterIteration)
236+
GC.collect()
232237
}
233-
if (nativeGCAfterIteration)
234-
GC.collect()
235-
val endTime = getTimeNanos()
236-
val time = endTime - startTime
237-
return time.toDouble() / cycles
238+
239+
return duration.toDouble(DurationUnit.NANOSECONDS) / cycles
238240
}
239241

242+
@OptIn(ExperimentalTime::class)
240243
private inline fun <T> measureWarmup(
241244
name: String,
242245
config: BenchmarkConfiguration,
@@ -256,19 +259,18 @@ class NativeExecutor(
256259

257260
if (config.nativeGCAfterIteration)
258261
GC.collect()
259-
val startTime = getTimeNanos()
260-
var endTime = startTime
262+
val startTime = TimeSource.Monotonic.markNow()
263+
var duration = Duration.ZERO
261264
iterations = 0
262-
while (endTime - startTime < benchmarkNanos) {
265+
while (duration.inWholeNanoseconds < benchmarkNanos) {
263266
body()
264-
endTime = getTimeNanos()
267+
duration = startTime.elapsedNow()
265268
iterations++
266269
}
267270
if (config.nativeGCAfterIteration)
268271
GC.collect()
269272

270-
val time = endTime - startTime
271-
val metric = time.toDouble() / iterations // TODO: metric
273+
val metric = duration.toDouble(DurationUnit.NANOSECONDS) / iterations // TODO: metric
272274
val sample = metric.nanosToText(config.mode, config.outputTimeUnit)
273275
val iterationNumber = currentIteration ?: iteration
274276
reporter.output(name, benchmark.name, "Warm-up #$iterationNumber: $sample")

0 commit comments

Comments
 (0)