Skip to content
This repository has been archived by the owner on Jul 8, 2022. It is now read-only.

Commit

Permalink
Some fixes and improvementst
Browse files Browse the repository at this point in the history
  • Loading branch information
soywiz committed Mar 2, 2022
1 parent 53b8f66 commit c7ffaf9
Show file tree
Hide file tree
Showing 16 changed files with 142 additions and 186 deletions.
81 changes: 8 additions & 73 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import com.soywiz.korlibs.modules.*
import com.soywiz.korlibs.util.*
import org.gradle.kotlin.dsl.kotlin
import org.jetbrains.kotlin.gradle.plugin.*
import org.jetbrains.kotlin.gradle.plugin.mpp.*
import java.io.File

buildscript {
Expand All @@ -26,11 +27,8 @@ buildscript {
}

plugins {
val kotlinVersion: String by project
val realKotlinVersion = (System.getenv("FORCED_KOTLIN_VERSION") ?: kotlinVersion)

java
kotlin("multiplatform") //version realKotlinVersion
kotlin("multiplatform")
signing
`maven-publish`
}
Expand Down Expand Up @@ -71,43 +69,6 @@ allprojects {
}
}

val enableKotlinNative: String by project
val doEnableKotlinNative get() = enableKotlinNative == "true"

val enableKotlinAndroid: String by project
val doEnableKotlinAndroid get() = enableKotlinAndroid == "true"

val enableKotlinMobile:String by project
val doEnableKotlinMobile get() = enableKotlinMobile == "true"

val enableKotlinRaspberryPi: String by project
val doEnableKotlinRaspberryPi get() = enableKotlinRaspberryPi == "true"

val KotlinTarget.isLinuxX64 get() = this.name == "linuxX64"
val KotlinTarget.isLinuxArm32Hfp get() = this.name == "linuxArm32Hfp" && doEnableKotlinRaspberryPi
val KotlinTarget.isLinux get() = isLinuxX64 || isLinuxArm32Hfp
val KotlinTarget.isWin get() = this.name == "mingwX64"
val KotlinTarget.isMacosX64 get() = this.name == "macosX64"
val KotlinTarget.isMacosArm64 get() = this.name == "macosArm64"
val KotlinTarget.isMacos get() = isMacosX64 || isMacosArm64
val KotlinTarget.isIosArm64 get() = this.name == "iosArm64"
val KotlinTarget.isIosX64 get() = this.name == "iosX64"
val KotlinTarget.isIosSimulatorArm64 get() = this.name == "iosSimulatorArm64"
val KotlinTarget.isIos get() = isIosArm64 || isIosX64 || isIosSimulatorArm64
val KotlinTarget.isWatchosX86 get() = this.name == "watchosX86"
val KotlinTarget.isWatchosArm32 get() = this.name == "watchosArm32"
val KotlinTarget.isWatchosArm64 get() = this.name == "watchosArm64"
val KotlinTarget.isWatchos get() = isWatchosX86 || isWatchosArm32 || isWatchosArm64
val KotlinTarget.isTvosX64 get() = this.name == "tvosX64"
val KotlinTarget.isTvosArm64 get() = this.name == "tvosArm64"
val KotlinTarget.isTvos get() = isTvosX64 || isTvosArm64
val KotlinTarget.isDesktop get() = isWin || isLinux || isMacos

val isWindows get() = org.apache.tools.ant.taskdefs.condition.Os.isFamily(org.apache.tools.ant.taskdefs.condition.Os.FAMILY_WINDOWS)
val isMacos get() = org.apache.tools.ant.taskdefs.condition.Os.isFamily(org.apache.tools.ant.taskdefs.condition.Os.FAMILY_MAC)
val isArm get() = listOf("arm", "arm64", "aarch64").any { org.apache.tools.ant.taskdefs.condition.Os.isArch(it) }
val isLinux get() = !isWindows && !isMacos

fun guessAndroidSdkPath(): String? {
val userHome = System.getProperty("user.home")
return listOfNotNull(
Expand Down Expand Up @@ -136,32 +97,6 @@ kotlin {
jvm { }
}

fun org.jetbrains.kotlin.gradle.dsl.KotlinTargetContainerWithPresetFunctions.nativeTargets(): List<org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget> {
return when {
isWindows -> listOfNotNull(mingwX64())
isMacos -> listOf(
macosX64(), macosArm64(),
//linuxX64(),
//mingwX64(),
//linuxArm32Hfp(),
)
else -> listOfNotNull(
linuxX64(),
mingwX64(),
macosX64(), macosArm64(),
if (doEnableKotlinRaspberryPi) linuxArm32Hfp() else null
)
}
}

fun org.jetbrains.kotlin.gradle.dsl.KotlinTargetContainerWithPresetFunctions.mobileTargets(): List<org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget> {
return listOf(
iosX64(), iosArm64(), iosSimulatorArm64(),
//iosX64(), iosArm32(), iosArm64(), iosSimulatorArm64(),
//watchosX86(), watchosX64(), watchosArm32(), watchosArm64(), watchosSimulatorArm64(),
//tvosX64(), tvosArm64(), tvosSimulatorArm64(),
)
}

//apply(from = "${rootProject.rootDir}/build.idea.gradle")

Expand Down Expand Up @@ -318,8 +253,8 @@ subprojects {
}

val desktopAndMobileTargets = ArrayList<org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget>().apply {
if (doEnableKotlinNative) addAll(nativeTargets())
if (doEnableKotlinMobile) addAll(mobileTargets())
if (doEnableKotlinNative) addAll(nativeTargets(project))
if (doEnableKotlinMobile) addAll(mobileTargets(project))
}.toList()

for (target in desktopAndMobileTargets) {
Expand Down Expand Up @@ -425,7 +360,7 @@ subprojects {
val macos by lazy { createPairSourceSet("macos", darwin) }
val mingw by lazy { createPairSourceSet("mingw", native) }

val nativeTargets = nativeTargets()
val nativeTargets = nativeTargets(project)

for (target in nativeTargets) {
val native = createPairSourceSet(target.name)
Expand All @@ -449,7 +384,7 @@ subprojects {
val tvos by lazy { createPairSourceSet("tvos", iosTvos) }
val ios by lazy { createPairSourceSet("ios", iosTvos) }

for (target in mobileTargets()) {
for (target in mobileTargets(project)) {
val native = createPairSourceSet(target.name)
when (target.name) {
"iosX64" -> native.dependsOn(ios)
Expand Down Expand Up @@ -790,7 +725,7 @@ samples {
}

if (doEnableKotlinNative) {
for (target in nativeTargets()) {
for (target in nativeTargets(project)) {
target.apply {
binaries {
executable {
Expand Down Expand Up @@ -827,7 +762,7 @@ samples {
}
}

val nativeDesktopTargets = nativeTargets()
val nativeDesktopTargets = nativeTargets(project)
val allNativeTargets = nativeDesktopTargets

//for (target in nativeDesktopTargets) {
Expand Down
75 changes: 75 additions & 0 deletions buildSrc/src/main/kotlin/com/soywiz/korlibs/modules/Targets.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package com.soywiz.korlibs.modules

import org.gradle.api.*
import org.gradle.kotlin.dsl.*
import org.jetbrains.kotlin.gradle.plugin.*
import org.jetbrains.kotlin.gradle.plugin.mpp.*

val Project.doEnableKotlinNative: Boolean get() = rootProject.findProperty("enableKotlinNative") == "true"
val Project.doEnableKotlinAndroid: Boolean get() = rootProject.findProperty("enableKotlinAndroid") == "true"
val Project.doEnableKotlinMobile: Boolean get() = rootProject.findProperty("enableKotlinMobile") == "true"
val Project.doEnableKotlinMobileTvos: Boolean get() = rootProject.findProperty("enableKotlinMobileTvos") == "true"
val Project.doEnableKotlinMobileWatchos: Boolean get() = rootProject.findProperty("enableKotlinMobileWatchos") == "true"
val Project.doEnableKotlinRaspberryPi: Boolean get() = rootProject.findProperty("enableKotlinRaspberryPi") == "true"

val KotlinTarget.isLinuxX64: Boolean get() = this.name == "linuxX64"
val KotlinTarget.isLinuxArm64: Boolean get() = this.name == "linuxArm64"
val KotlinTarget.isLinuxArm32Hfp: Boolean get() = this.name == "linuxArm32Hfp" && project.doEnableKotlinRaspberryPi
val KotlinTarget.isLinux: Boolean get() = isLinuxX64 || isLinuxArm32Hfp || isLinuxArm64
val KotlinTarget.isWin: Boolean get() = this.name == "mingwX64"
val KotlinTarget.isMacosX64: Boolean get() = this.name == "macosX64"
val KotlinTarget.isMacosArm64: Boolean get() = this.name == "macosArm64"
val KotlinTarget.isMacos: Boolean get() = isMacosX64 || isMacosArm64
val KotlinTarget.isIosArm64: Boolean get() = this.name == "iosArm64"
val KotlinTarget.isIosX64: Boolean get() = this.name == "iosX64"
val KotlinTarget.isIosSimulatorArm64: Boolean get() = this.name == "iosSimulatorArm64"
val KotlinTarget.isIos: Boolean get() = isIosArm64 || isIosX64 || isIosSimulatorArm64
val KotlinTarget.isWatchosX86: Boolean get() = this.name == "watchosX86"
val KotlinTarget.isWatchosArm32: Boolean get() = this.name == "watchosArm32"
val KotlinTarget.isWatchosArm64: Boolean get() = this.name == "watchosArm64"
val KotlinTarget.isWatchos: Boolean get() = isWatchosX86 || isWatchosArm32 || isWatchosArm64
val KotlinTarget.isTvosX64: Boolean get() = this.name == "tvosX64"
val KotlinTarget.isTvosArm64: Boolean get() = this.name == "tvosArm64"
val KotlinTarget.isTvos: Boolean get() = isTvosX64 || isTvosArm64
val KotlinTarget.isDesktop: Boolean get() = isWin || isLinux || isMacos

val isWindows: Boolean get() = org.apache.tools.ant.taskdefs.condition.Os.isFamily(org.apache.tools.ant.taskdefs.condition.Os.FAMILY_WINDOWS)
val isMacos: Boolean get() = org.apache.tools.ant.taskdefs.condition.Os.isFamily(org.apache.tools.ant.taskdefs.condition.Os.FAMILY_MAC)
val isArm: Boolean get() = listOf("arm", "arm64", "aarch64").any { org.apache.tools.ant.taskdefs.condition.Os.isArch(it) }
val isLinux: Boolean get() = !isWindows && !isMacos

val Project.hasAndroid get() = rootProject.extensions.findByName("android") != null

fun org.jetbrains.kotlin.gradle.dsl.KotlinTargetContainerWithPresetFunctions.nativeTargets(project: Project): List<org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget> {
return when {
isWindows -> listOfNotNull(mingwX64())
isMacos -> listOf(
macosX64(), macosArm64(),
//linuxX64(),
//mingwX64(),
//linuxArm32Hfp(),
)
else -> listOfNotNull(
linuxX64(),
mingwX64(),
macosX64(), macosArm64(),
if (project.doEnableKotlinRaspberryPi) linuxArm32Hfp() else null
)
}
}

fun org.jetbrains.kotlin.gradle.dsl.KotlinTargetContainerWithPresetFunctions.mobileTargets(project: Project): List<org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget> {
val out = arrayListOf<KotlinNativeTarget>()
out.addAll(listOf(iosX64(), iosArm32(), iosArm64(), iosSimulatorArm64()))
if (project.doEnableKotlinMobileWatchos) {
out.addAll(listOf(watchosX86(), watchosX64(), watchosArm32(), watchosArm64(), watchosSimulatorArm64()))
}
if (project.doEnableKotlinMobileTvos) {
out.addAll(listOf(tvosX64(), tvosArm64(), tvosSimulatorArm64()))
}
return out
}

fun org.jetbrains.kotlin.gradle.dsl.KotlinTargetContainerWithPresetFunctions.allNativeTargets(project: Project): List<org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget> {
return nativeTargets(project) + mobileTargets(project)
}
5 changes: 5 additions & 0 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,17 @@ enableKotlinNativeLinux=true
enableKotlinMobile=true
enableKotlinAndroid=true
enableKotlinRaspberryPi=false
#enableKotlinMobileTvos=true
#enableKotlinMobileWatchos=true
enableKotlinMobileTvos=false
enableKotlinMobileWatchos=false

#org.gradle.jvmargs=-Xmx3600m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
#org.gradle.jvmargs=-Xmx4600m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
#org.gradle.jvmargs=-Xmx4400m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
#org.gradle.jvmargs=-Xmx4800m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.jvmargs=-Xmx2g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
#org.gradle.jvmargs=-Xmx3g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.daemon=true
org.gradle.configureondemand=true

Expand Down
25 changes: 3 additions & 22 deletions kmem/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import com.soywiz.korlibs.modules.*

description = "Memory utilities for Kotlin"

/*
Expand All @@ -12,33 +14,12 @@ project.ext.props = [
]
*/

val enableKotlinNative: String by project
val doEnableKotlinNative get() = enableKotlinNative == "true"

val enableKotlinRaspberryPi: String by project
val doEnableKotlinRaspberryPi get() = enableKotlinRaspberryPi == "true"

val isWindows get() = org.apache.tools.ant.taskdefs.condition.Os.isFamily(org.apache.tools.ant.taskdefs.condition.Os.FAMILY_WINDOWS)
val isMacos get() = org.apache.tools.ant.taskdefs.condition.Os.isFamily(org.apache.tools.ant.taskdefs.condition.Os.FAMILY_MAC)

dependencies {
//add("androidMainApi", "com.implimentz:unsafe:0.0.6")
}

fun org.jetbrains.kotlin.gradle.dsl.KotlinTargetContainerWithPresetFunctions.nativeTargets(): List<org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget> {
return when {
isWindows -> listOf(mingwX64())
isMacos -> listOf(macosX64(), macosArm64(), iosArm64(), iosX64())
else -> listOfNotNull(
linuxX64(),
if (doEnableKotlinRaspberryPi) linuxArm32Hfp() else null,
mingwX64(), macosX64(), macosArm64(), iosArm64(), iosX64()
)
}
}

kotlin {
for (target in nativeTargets() ) {
for (target in allNativeTargets(project) ) {
target.compilations["main"].cinterops {
maybeCreate("fastmem")
}
Expand Down
25 changes: 3 additions & 22 deletions korau/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,31 +1,12 @@
import com.soywiz.korlibs.modules.*

description = "Portable Audio library for Kotlin"

val jnaVersion: String by project

val enableKotlinNative: String by project
val doEnableKotlinNative get() = enableKotlinNative == "true"

val enableKotlinRaspberryPi: String by project
val doEnableKotlinRaspberryPi get() = enableKotlinRaspberryPi == "true"

val isWindows get() = org.apache.tools.ant.taskdefs.condition.Os.isFamily(org.apache.tools.ant.taskdefs.condition.Os.FAMILY_WINDOWS)
val isMacos get() = org.apache.tools.ant.taskdefs.condition.Os.isFamily(org.apache.tools.ant.taskdefs.condition.Os.FAMILY_MAC)

fun org.jetbrains.kotlin.gradle.dsl.KotlinTargetContainerWithPresetFunctions.nativeTargets(): List<org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget> {
return when {
isWindows -> listOf(mingwX64())
isMacos -> listOf(macosX64(), macosArm64(), iosX64(), iosArm64(), iosSimulatorArm64())
else -> listOfNotNull(
linuxX64(),
if (doEnableKotlinRaspberryPi) linuxArm32Hfp() else null,
mingwX64(), macosX64(), macosArm64(), iosX64(), iosArm64(), iosSimulatorArm64()
)
}
}

if (doEnableKotlinNative) {
kotlin {
for (target in nativeTargets()) {
for (target in allNativeTargets(project)) {
target.compilations["main"].cinterops {
maybeCreate("minimp3")
maybeCreate("stb_vorbis")
Expand Down
2 changes: 1 addition & 1 deletion korge-sandbox/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.soywiz.korge.editor">
<manifest package="com.soywiz.korge.sandbox">
</manifest>
30 changes: 5 additions & 25 deletions korgw/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,34 +1,14 @@
import com.soywiz.korlibs.modules.*

description = "Portable UI with accelerated graphics support for Kotlin"

val jnaVersion: String by project

val enableKotlinNative: String by project
val doEnableKotlinNative get() = enableKotlinNative == "true"

val enableKotlinRaspberryPi: String by project
val doEnableKotlinRaspberryPi get() = enableKotlinRaspberryPi == "true"

val isWindows get() = org.apache.tools.ant.taskdefs.condition.Os.isFamily(org.apache.tools.ant.taskdefs.condition.Os.FAMILY_WINDOWS)
val isMacos get() = org.apache.tools.ant.taskdefs.condition.Os.isFamily(org.apache.tools.ant.taskdefs.condition.Os.FAMILY_MAC)
val hasAndroid = project.extensions.findByName("android") != null

fun org.jetbrains.kotlin.gradle.dsl.KotlinTargetContainerWithPresetFunctions.nativeTargets(): List<org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget> {
return when {
isWindows -> listOfNotNull(mingwX64())
isMacos -> listOfNotNull(macosX64(), macosArm64(), iosArm64(), iosX64())
else -> listOfNotNull(
linuxX64(),
if (doEnableKotlinRaspberryPi) linuxArm32Hfp() else null,
mingwX64(), macosX64(), macosArm64()
)
}
}

if (doEnableKotlinNative) {
kotlin {
for (target in nativeTargets()) {
target.compilations["main"].cinterops {
if (target.name == "linuxX64" || target.name == "linuxArm32Hfp") {
for (target in nativeTargets(project)) {
if (target.name == "linuxX64" || target.name == "linuxArm32Hfp") {
target.compilations["main"].cinterops {
maybeCreate("X11_embed")
}
//if (target.name == "linuxX64") maybeCreate("X11")
Expand Down
31 changes: 7 additions & 24 deletions korim/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,31 +1,14 @@
description = "Korim: Kotlin cORoutines IMaging utilities for JVM, JS, Native and Common"

val enableKotlinNative: String by project
val doEnableKotlinNative get() = enableKotlinNative == "true"

val enableKotlinRaspberryPi: String by project
val doEnableKotlinRaspberryPi get() = enableKotlinRaspberryPi == "true"

val isWindows get() = org.apache.tools.ant.taskdefs.condition.Os.isFamily(org.apache.tools.ant.taskdefs.condition.Os.FAMILY_WINDOWS)
val isMacos get() = org.apache.tools.ant.taskdefs.condition.Os.isFamily(org.apache.tools.ant.taskdefs.condition.Os.FAMILY_MAC)
import com.soywiz.korlibs.modules.*

fun org.jetbrains.kotlin.gradle.dsl.KotlinTargetContainerWithPresetFunctions.nativeTargets(): List<org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget> {
return when {
isWindows -> listOfNotNull(mingwX64())
isMacos -> listOfNotNull(macosX64(), macosArm64(), iosX64(), iosArm64(), iosSimulatorArm64())
else -> listOfNotNull(
linuxX64(),
if (doEnableKotlinRaspberryPi) linuxArm32Hfp() else null,
mingwX64(), macosX64(), macosArm64(), iosX64(), iosArm64(), iosSimulatorArm64()
)
}
}
description = "Korim: Kotlin cORoutines IMaging utilities for JVM, JS, Native and Common"

if (doEnableKotlinNative) {
kotlin {
for (target in nativeTargets()) {
target.compilations["main"].cinterops {
maybeCreate("stb_image")
for (target in nativeTargets(project)) {
if (target.isLinux) {
target.compilations["main"].cinterops {
maybeCreate("stb_image")
}
}
}
}
Expand Down
Loading

0 comments on commit c7ffaf9

Please sign in to comment.