Skip to content

Commit

Permalink
ktor 3.0.0-beta-2, wasm and linux support
Browse files Browse the repository at this point in the history
Upgrade ktor to 3.0.0-beta-2 that brings support to wasm and linux.
  • Loading branch information
programadorthi committed Aug 24, 2024
1 parent e8ff79a commit 8eb83c4
Show file tree
Hide file tree
Showing 17 changed files with 380 additions and 105 deletions.
1 change: 1 addition & 0 deletions buildSrc/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,5 @@ dependencies {
implementation(libs.plugin.kover)
// FIXME: Kotlin and AGP plugins need to be loaded in the same place
implementation(libs.plugin.android)
implementation(libs.tomlj)
}
10 changes: 3 additions & 7 deletions buildSrc/src/main/kotlin/BasicSetup.kt
Original file line number Diff line number Diff line change
@@ -1,13 +1,9 @@
import org.gradle.api.JavaVersion
import org.gradle.api.Project
import org.gradle.jvm.toolchain.JavaLanguageVersion
import org.gradle.jvm.toolchain.JvmVendorSpec
import org.gradle.kotlin.dsl.invoke
import org.gradle.kotlin.dsl.withType
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

Expand Down Expand Up @@ -39,9 +35,9 @@ fun KotlinMultiplatformExtension.setCompilationOptions() {

fun KotlinCompilation<KotlinCommonOptions>.configureCompilation() {
kotlinOptions {
if (platformType == KotlinPlatformType.jvm) {
allWarningsAsErrors = true
}
// if (platformType == KotlinPlatformType.jvm && !IDEA_ACTIVE) {
// allWarningsAsErrors = true
// }

freeCompilerArgs += "-opt-in=kotlin.RequiresOptIn"
freeCompilerArgs += "-Xexpect-actual-classes"
Expand Down
29 changes: 7 additions & 22 deletions buildSrc/src/main/kotlin/JsConfig.kt
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
/*
* Copyright 2014-2021 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.
*/
@file:Suppress("UNUSED_VARIABLE")

import org.gradle.api.*
import org.gradle.kotlin.dsl.*
import java.io.*
import java.io.File
import org.gradle.api.Project
import org.gradle.kotlin.dsl.getValue
import org.gradle.kotlin.dsl.getting
import org.gradle.kotlin.dsl.invoke

fun Project.configureJs() {
configureJsTasks()
Expand All @@ -14,7 +15,7 @@ fun Project.configureJs() {
sourceSets {
val jsTest by getting {
dependencies {
implementation(npm("puppeteer", "*"))
implementation(npm("puppeteer", Versions.puppeteer))
}
}
}
Expand Down Expand Up @@ -43,23 +44,7 @@ private fun Project.configureJsTasks() {
}
}

val main by compilations.getting
main.kotlinOptions.apply {
metaInfo = true
sourceMap = true
moduleKind = "umd"
this.main = "noCall"
sourceMapEmbedSources = "always"
}

val test by compilations.getting
test.kotlinOptions.apply {
metaInfo = true
sourceMap = true
moduleKind = "umd"
this.main = "call"
sourceMapEmbedSources = "always"
}
binaries.library()
}
}
}
Expand Down
18 changes: 11 additions & 7 deletions buildSrc/src/main/kotlin/JvmConfig.kt
Original file line number Diff line number Diff line change
@@ -1,14 +1,18 @@
/*
* Copyright 2014-2021 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.
*/
@file:Suppress("UNUSED_VARIABLE")

import org.gradle.api.*
import org.gradle.api.Project
import org.gradle.api.artifacts.VersionCatalogsExtension
import org.gradle.api.tasks.testing.*
import org.gradle.jvm.tasks.*
import org.gradle.kotlin.dsl.*
import org.jetbrains.kotlin.gradle.targets.jvm.tasks.*
import org.gradle.api.tasks.testing.Test
import org.gradle.jvm.tasks.Jar
import org.gradle.kotlin.dsl.create
import org.gradle.kotlin.dsl.creating
import org.gradle.kotlin.dsl.getByName
import org.gradle.kotlin.dsl.getByType
import org.gradle.kotlin.dsl.getValue
import org.gradle.kotlin.dsl.getting
import org.gradle.kotlin.dsl.register
import org.jetbrains.kotlin.gradle.targets.jvm.tasks.KotlinJvmTest

fun Project.configureJvm() {
val libs = extensions.getByType<VersionCatalogsExtension>().named("libs")
Expand Down
34 changes: 29 additions & 5 deletions buildSrc/src/main/kotlin/KotlinExtensions.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,10 @@

import org.gradle.api.NamedDomainObjectContainer
import org.gradle.api.Project
import org.gradle.kotlin.dsl.*
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.getValue
import org.gradle.kotlin.dsl.provideDelegate
import org.gradle.kotlin.dsl.the
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
import org.jetbrains.kotlin.gradle.plugin.mpp.DefaultCInteropSettings
Expand All @@ -21,10 +24,21 @@ fun KotlinMultiplatformExtension.createCInterop(
cinteropTargets: List<String>,
block: DefaultCInteropSettings.() -> Unit
) {
cinteropTargets.mapNotNull { targets.findByName(it) }.filterIsInstance<KotlinNativeTarget>().forEach {
val main by it.compilations
main.cinterops.create(name, block)
}
cinteropTargets.mapNotNull { targets.findByName(it) }.filterIsInstance<KotlinNativeTarget>()
.forEach {
val main by it.compilations
main.cinterops.create(name, block)
}
}

fun NamedDomainObjectContainer<KotlinSourceSet>.commonMain(block: KotlinSourceSet.() -> Unit) {
val sourceSet = getByName("commonMain")
block(sourceSet)
}

fun NamedDomainObjectContainer<KotlinSourceSet>.commonTest(block: KotlinSourceSet.() -> Unit) {
val sourceSet = getByName("commonTest")
block(sourceSet)
}

fun NamedDomainObjectContainer<KotlinSourceSet>.jvmAndNixMain(block: KotlinSourceSet.() -> Unit) {
Expand Down Expand Up @@ -67,6 +81,16 @@ fun NamedDomainObjectContainer<KotlinSourceSet>.jsTest(block: KotlinSourceSet.()
block(sourceSet)
}

fun NamedDomainObjectContainer<KotlinSourceSet>.wasmJsMain(block: KotlinSourceSet.() -> Unit) {
val sourceSet = findByName("wasmJsMain") ?: return
block(sourceSet)
}

fun NamedDomainObjectContainer<KotlinSourceSet>.wasmJsTest(block: KotlinSourceSet.() -> Unit) {
val sourceSet = findByName("wasmJsTest") ?: return
block(sourceSet)
}

fun NamedDomainObjectContainer<KotlinSourceSet>.desktopMain(block: KotlinSourceSet.() -> Unit) {
val sourceSet = findByName("desktopMain") ?: return
block(sourceSet)
Expand Down
104 changes: 45 additions & 59 deletions buildSrc/src/main/kotlin/NativeUtils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,79 +7,65 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
import org.jetbrains.kotlin.gradle.plugin.mpp.Framework
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget

fun Project.fastOr(block: () -> List<String>): List<String> {
return block()
}
fun Project.posixTargets(): List<String> = nixTargets() + windowsTargets()

fun Project.posixTargets(): List<String> = fastOr {
nixTargets() + windowsTargets()
}
fun Project.nixTargets(): List<String> = darwinTargets() + linuxTargets()

fun Project.nixTargets(): List<String> = fastOr {
darwinTargets() + kotlin.linuxX64().name
}
fun Project.linuxTargets(): List<String> = with(kotlin) {
listOf(
linuxX64(),
linuxArm64(),
)
}.map { it.name }

fun Project.darwinTargets(): List<String> = fastOr {
macosTargets() + iosTargets() + watchosTargets() + tvosTargets()
}
fun Project.darwinTargets(): List<String> = macosTargets() + iosTargets() + watchosTargets() + tvosTargets()

fun Project.macosTargets(): List<String> = fastOr {
with(kotlin) {
listOf(
macosX64(),
macosArm64()
).map { it.name }
}
fun Project.macosTargets(): List<String> = with(kotlin) {
listOf(
macosX64(),
macosArm64()
).map { it.name }
}

fun Project.iosTargets(): List<String> = fastOr {
with(kotlin) {
listOf(
iosX64(),
iosArm64(),
iosSimulatorArm64(),
).map { it.name }
}
fun Project.iosTargets(): List<String> = with(kotlin) {
listOf(
iosX64(),
iosArm64(),
iosSimulatorArm64(),
).map { it.name }
}

fun Project.watchosTargets(): List<String> = fastOr {
with(kotlin) {
listOf(
watchosX64(),
watchosArm32(),
watchosArm64(),
watchosSimulatorArm64(),
).map { it.name }
}
fun Project.watchosTargets(): List<String> = with(kotlin) {
listOf(
watchosX64(),
watchosArm32(),
watchosArm64(),
watchosSimulatorArm64(),
).map { it.name }
}

fun Project.tvosTargets(): List<String> = fastOr {
with(kotlin) {
listOf(
tvosX64(),
tvosArm64(),
tvosSimulatorArm64(),
).map { it.name }
}
fun Project.tvosTargets(): List<String> = with(kotlin) {
listOf(
tvosX64(),
tvosArm64(),
tvosSimulatorArm64(),
).map { it.name }
}

fun Project.desktopTargets(): List<String> = fastOr {
with(kotlin) {
listOf(
macosX64(),
macosArm64(),
linuxX64(),
mingwX64()
).map { it.name }
}
fun Project.desktopTargets(): List<String> = with(kotlin) {
listOf(
macosX64(),
macosArm64(),
linuxX64(),
linuxArm64(),
mingwX64()
).map { it.name }
}

fun Project.windowsTargets(): List<String> = fastOr {
with(kotlin) {
listOf(
mingwX64()
).map { it.name }
}
fun Project.windowsTargets(): List<String> = with(kotlin) {
listOf(
mingwX64()
).map { it.name }
}

fun Project.darwinTargetsFramework(
Expand Down
Loading

0 comments on commit 8eb83c4

Please sign in to comment.