diff --git a/benchmarks/build.gradle.kts b/benchmarks/build.gradle.kts index da19e723..b489c25f 100644 --- a/benchmarks/build.gradle.kts +++ b/benchmarks/build.gradle.kts @@ -1,5 +1,6 @@ import kotlinx.benchmark.gradle.JvmBenchmarkTarget import org.gradle.jvm.tasks.Jar +import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl plugins { id("kotlin-multiplatform") @@ -30,6 +31,7 @@ kotlin { } } + @OptIn(ExperimentalWasmDsl::class) wasmJs { nodejs() } diff --git a/benchmarks/runner/build.gradle b/benchmarks/runner/build.gradle deleted file mode 100644 index 9d7f3728..00000000 --- a/benchmarks/runner/build.gradle +++ /dev/null @@ -1,111 +0,0 @@ -plugins { - id 'org.jetbrains.kotlin.jvm' -} - -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib" - implementation 'org.openjdk.jmh:jmh-core:1.21' - - runtimeOnly project(path: ':benchmarks', configuration: 'benchmarksJar') - runtimeOnly project(path: ':kotlinx-collections-immutable') -} - -sourceSets.main.kotlin.srcDirs "src" - -// map -task benchmarkHashMap(type: JavaExec, group: "Benchmark") { - main = 'runners.HashMapRunnerKt' -} - -task benchmarkHashMapBuilder(type: JavaExec, group: "Benchmark") { - main = 'runners.HashMapBuilderRunnerKt' -} - -task benchmarkOrderedMap(type: JavaExec, group: "Benchmark") { - main = 'runners.OrderedMapRunnerKt' -} - -task benchmarkOrderedMapBuilder(type: JavaExec, group: "Benchmark") { - main = 'runners.OrderedMapBuilderRunnerKt' -} - -task benchmarkAllMaps(group: "Benchmark") { - dependsOn benchmarkHashMap - dependsOn benchmarkHashMapBuilder - dependsOn benchmarkOrderedMap - dependsOn benchmarkOrderedMapBuilder -} - -// set -task benchmarkHashSet(type: JavaExec, group: "Benchmark") { - main = 'runners.HashSetRunnerKt' -} - -task benchmarkHashSetBuilder(type: JavaExec, group: "Benchmark") { - main = 'runners.HashSetBuilderRunnerKt' -} - -task benchmarkOrderedSet(type: JavaExec, group: "Benchmark") { - main = 'runners.OrderedSetRunnerKt' -} - -task benchmarkOrderedSetBuilder(type: JavaExec, group: "Benchmark") { - main = 'runners.OrderedSetBuilderRunnerKt' -} - -task benchmarkAllSets(group: "Benchmark") { - dependsOn benchmarkHashSet - dependsOn benchmarkHashSetBuilder - dependsOn benchmarkOrderedSet - dependsOn benchmarkOrderedSetBuilder -} - -// list -task benchmarkList(type: JavaExec, group: "Benchmark") { - main = 'runners.ListRunnerKt' -} - -task benchmarkListBuilder(type: JavaExec, group: "Benchmark") { - main = 'runners.ListBuilderRunnerKt' -} - -task benchmarkAllLists(group: "Benchmark") { - dependsOn benchmarkList - dependsOn benchmarkListBuilder -} - -// all -task benchmarkAll(group: "Benchmark") { - dependsOn benchmarkAllMaps - dependsOn benchmarkAllSets - dependsOn benchmarkAllLists -} - - -// configure runner tasks - -def benchmarkParams = [ - 'remote', - 'forks', - 'measurementIterations', - 'measurementTime', - 'warmupIterations', - 'warmupTime', -// 'exclude', -// 'include', - 'size', - 'hashCodeType', - 'immutablePercentage' -] - -tasks.withType(JavaExec) { - if (group == "Benchmark") { - classpath = sourceSets.main.runtimeClasspath - - benchmarkParams.forEach { param -> - if (project.hasProperty(param)) { - systemProperty(param, project.property(param)) - } - } - } -} \ No newline at end of file diff --git a/benchmarks/runner/build.gradle.kts b/benchmarks/runner/build.gradle.kts new file mode 100644 index 00000000..254851eb --- /dev/null +++ b/benchmarks/runner/build.gradle.kts @@ -0,0 +1,126 @@ +plugins { + id("org.jetbrains.kotlin.jvm") +} + +dependencies { + implementation("org.jetbrains.kotlin:kotlin-stdlib") + implementation("org.openjdk.jmh:jmh-core:1.21") + + runtimeOnly(project(path = ":benchmarks", configuration = "benchmarksJar")) + runtimeOnly(project(":kotlinx-collections-immutable")) +} + +sourceSets.main { + kotlin.srcDirs("src") +} + +// map +val benchmarkHashMap by tasks.registering(JavaExec::class) { + group = "Benchmark" + mainClass = "runners.HashMapRunnerKt" +} + +val benchmarkHashMapBuilder by tasks.registering(JavaExec::class) { + group = "Benchmark" + mainClass = "runners.HashMapBuilderRunnerKt" +} + +val benchmarkOrderedMap by tasks.registering(JavaExec::class) { + group = "Benchmark" + mainClass = "runners.OrderedMapRunnerKt" +} + +val benchmarkOrderedMapBuilder by tasks.registering(JavaExec::class) { + group = "Benchmark" + mainClass = "runners.OrderedMapBuilderRunnerKt" +} + +val benchmarkAllMaps by tasks.registering { + group = "Benchmark" + dependsOn(benchmarkHashMap) + dependsOn(benchmarkHashMapBuilder) + dependsOn(benchmarkOrderedMap) + dependsOn(benchmarkOrderedMapBuilder) +} + +// set +val benchmarkHashSet by tasks.registering(JavaExec::class) { + group = "Benchmark" + mainClass = "runners.HashSetRunnerKt" +} + +val benchmarkHashSetBuilder by tasks.registering(JavaExec::class) { + group = "Benchmark" + mainClass = "runners.HashSetBuilderRunnerKt" +} + +val benchmarkOrderedSet by tasks.registering(JavaExec::class) { + group = "Benchmark" + mainClass = "runners.OrderedSetRunnerKt" +} + +val benchmarkOrderedSetBuilder by tasks.registering(JavaExec::class) { + group = "Benchmark" + mainClass = "runners.OrderedSetBuilderRunnerKt" +} + +val benchmarkAllSets by tasks.registering { + group = "Benchmark" + dependsOn(benchmarkHashSet) + dependsOn(benchmarkHashSetBuilder) + dependsOn(benchmarkOrderedSet) + dependsOn(benchmarkOrderedSetBuilder) +} + +// list +val benchmarkList by tasks.registering(JavaExec::class) { + group = "Benchmark" + mainClass = "runners.ListRunnerKt" +} + +val benchmarkListBuilder by tasks.registering(JavaExec::class) { + group = "Benchmark" + mainClass = "runners.ListBuilderRunnerKt" +} + +val benchmarkAllLists by tasks.registering { + group = "Benchmark" + dependsOn(benchmarkList) + dependsOn(benchmarkListBuilder) +} + +// all +val benchmarkAll by tasks.registering { + group = "Benchmark" + dependsOn(benchmarkAllMaps) + dependsOn(benchmarkAllSets) + dependsOn(benchmarkAllLists) +} + +// configure runner tasks + +val benchmarkParams = listOf( + "remote", + "forks", + "measurementIterations", + "measurementTime", + "warmupIterations", + "warmupTime", +// "exclude", +// "include", + "size", + "hashCodeType", + "immutablePercentage" +) + +tasks.withType().configureEach { + if (group == "Benchmark") { + classpath = sourceSets.main.get().runtimeClasspath + + benchmarkParams.forEach { param -> + if (project.hasProperty(param)) { + systemProperty(param, requireNotNull(project.property(param))) + } + } + } +} diff --git a/core/build.gradle.kts b/core/build.gradle.kts index e3f2e6f7..534c3bf1 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -1,4 +1,5 @@ import kotlinx.team.infra.mavenPublicationsPom +import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl plugins { id("kotlin-multiplatform") @@ -6,11 +7,11 @@ plugins { } base { - archivesBaseName = "kotlinx-collections-immutable" // doesn't work + archivesName = "kotlinx-collections-immutable" // doesn't work } mavenPublicationsPom { - description.set("Kotlin Immutable Collections multiplatform library") + description = "Kotlin Immutable Collections multiplatform library" } kotlin { @@ -69,6 +70,7 @@ kotlin { } } + @OptIn(ExperimentalWasmDsl::class) wasmJs { nodejs { testTask { @@ -79,6 +81,7 @@ kotlin { } } + @OptIn(ExperimentalWasmDsl::class) wasmWasi { nodejs { testTask { diff --git a/settings.gradle b/settings.gradle deleted file mode 100644 index 3708b453..00000000 --- a/settings.gradle +++ /dev/null @@ -1,14 +0,0 @@ -pluginManagement { - repositories { - maven { url 'https://maven.pkg.jetbrains.space/kotlin/p/kotlinx/maven' } - gradlePluginPortal() - } -} - -rootProject.name = 'Kotlin-Immutable-Collections' // TODO: Make readable name when it's not used in js module names - -include ':core' -project(":core").name='kotlinx-collections-immutable' - -include ':benchmarks' -include ':benchmarks:runner' \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 00000000..1d4d5c9d --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1,16 @@ +pluginManagement { + repositories { + maven("https://maven.pkg.jetbrains.space/kotlin/p/kotlinx/maven") + gradlePluginPortal() + } +} + +rootProject.name = "Kotlin-Immutable-Collections" // TODO: Make readable name when it's not used in js module names + +include(":core") +project(":core").name="kotlinx-collections-immutable" + +include( + ":benchmarks", + ":benchmarks:runner" +)