simplex-chat/apps/multiplatform/desktop/build.gradle.kts

224 lines
7.5 KiB
Plaintext

import org.jetbrains.compose.desktop.application.dsl.TargetFormat
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
plugins {
kotlin("multiplatform")
id("org.jetbrains.compose")
id("io.github.tomtzook.gradle-cmake") version "1.2.2"
}
group = "chat.simplex"
version = extra["desktop.version_name"] as String
kotlin {
jvm {
jvmToolchain(11)
withJava()
}
sourceSets {
val jvmMain by getting {
dependencies {
implementation(project(":common"))
implementation(compose.desktop.currentOs)
implementation("net.java.dev.jna:jna:5.13.0")
}
}
val jvmTest by getting
}
}
// https://github.com/JetBrains/compose-multiplatform/tree/master/tutorials/Native_distributions_and_local_execution
compose {
desktop {
application {
// For debugging via VisualVM
val debugJava = false
if (debugJava) {
jvmArgs += listOf(
"-Dcom.sun.management.jmxremote.port=8080",
"-Dcom.sun.management.jmxremote.ssl=false",
"-Dcom.sun.management.jmxremote.authenticate=false"
)
}
mainClass = "chat.simplex.desktop.MainKt"
nativeDistributions {
// For debugging via VisualVM
if (debugJava) {
modules("jdk.zipfs", "jdk.unsupported", "jdk.management.agent")
} else {
// 'jdk.unsupported' is for vlcj
modules("jdk.zipfs", "jdk.unsupported")
}
//includeAllModules = true
outputBaseDir.set(project.file("../release"))
appResourcesRootDir.set(project.file("../build/links"))
targetFormats(
TargetFormat.Deb, TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Exe
//, TargetFormat.AppImage // Gradle doesn't sync on Mac with it
)
linux {
iconFile.set(project.file("src/jvmMain/resources/distribute/simplex.png"))
appCategory = "Messenger"
}
windows {
packageName = "SimpleX"
iconFile.set(project.file("src/jvmMain/resources/distribute/simplex.ico"))
console = false
perUserInstall = false
dirChooser = true
shortcut = true
upgradeUuid = "CC9EFBC8-AFFF-40D8-BB69-FCD7CE99EFB9"
}
macOS {
packageName = "SimpleX"
iconFile.set(project.file("src/jvmMain/resources/distribute/simplex.icns"))
appCategory = "public.app-category.social-networking"
bundleID = "chat.simplex.app"
val identity = rootProject.extra["desktop.mac.signing.identity"] as String?
val keychain = rootProject.extra["desktop.mac.signing.keychain"] as String?
val appleId = rootProject.extra["desktop.mac.notarization.apple_id"] as String?
val password = rootProject.extra["desktop.mac.notarization.password"] as String?
val teamId = rootProject.extra["desktop.mac.notarization.team_id"] as String?
if (identity != null && keychain != null && appleId != null && password != null) {
signing {
sign.set(true)
this.identity.set(identity)
this.keychain.set(keychain)
}
notarization {
this.appleID.set(appleId)
this.password.set(password)
this.teamID.set(teamId)
}
}
}
val os = System.getProperty("os.name", "generic").toLowerCaseAsciiOnly()
if (os.contains("mac") || os.contains("win")) {
packageName = "SimpleX"
} else {
packageName = "simplex"
}
// Packaging requires to have version like MAJOR.MINOR.PATCH
var adjustedVersion = rootProject.extra["desktop.version_name"] as String
adjustedVersion = adjustedVersion.replace(Regex("[^0-9.]"), "")
val split = adjustedVersion.split(".")
adjustedVersion = split[0] + "." + (split.getOrNull(1) ?: "0") + "." + (split.getOrNull(2) ?: "0")
version = adjustedVersion
}
}
}
}
val cppPath = "../common/src/commonMain/cpp"
cmake {
// Run this command to make build for all targets:
// ./gradlew common:cmakeBuild -PcrossCompile
if (project.hasProperty("crossCompile")) {
machines.customMachines.register("linux-amd64") {
toolchainFile.set(project.file("$cppPath/toolchains/x86_64-linux-gnu-gcc.cmake"))
}
/*machines.customMachines.register("linux-aarch64") {
toolchainFile.set(project.file("$cppPath/toolchains/aarch64-linux-gnu-gcc.cmake"))
}*/
/*machines.customMachines.register("win-amd64") {
toolchainFile.set(project.file("$cppPath/toolchains/x86_64-windows-mingw32-gcc.cmake"))
}*/
if (machines.host.name == "mac-amd64") {
machines.customMachines.register("mac-amd64") {
toolchainFile.set(project.file("$cppPath/toolchains/x86_64-mac-apple-darwin-gcc.cmake"))
}
}
if (machines.host.name == "mac-aarch64") {
machines.customMachines.register("mac-aarch64") {
toolchainFile.set(project.file("$cppPath/toolchains/aarch64-mac-apple-darwin-gcc.cmake"))
}
}
}
val compileMachineTargets = arrayListOf<com.github.tomtzook.gcmake.targets.TargetMachine>(machines.host)
compileMachineTargets.addAll(machines.customMachines)
targets {
val main by creating {
cmakeLists.set(file("$cppPath/desktop/CMakeLists.txt"))
targetMachines.addAll(compileMachineTargets.toSet())
//if (machines.host.name.contains("win")) {
// cmakeArgs.add("-G MinGW Makefiles")
//}
}
}
}
tasks.named("clean") {
dependsOn("cmakeClean")
}
tasks.named("compileJava") {
dependsOn("cmakeBuildAndCopy")
}
afterEvaluate {
tasks.create("cmakeBuildAndCopy") {
dependsOn("cmakeBuild")
doLast {
copy {
from("${project(":desktop").buildDir}/cmake/main/linux-amd64")
into("$cppPath/desktop/libs/linux-x86_64")
include("*.so*")
eachFile {
path = name
}
includeEmptyDirs = false
duplicatesStrategy = DuplicatesStrategy.INCLUDE
}
copy {
from("${project(":desktop").buildDir}/cmake/main/linux-aarch64")
into("$cppPath/desktop/libs/linux-aarch64")
include("*.so*")
eachFile {
path = name
}
includeEmptyDirs = false
duplicatesStrategy = DuplicatesStrategy.INCLUDE
}
copy {
from("${project(":desktop").buildDir}/cmake/main/windows-amd64")
into("$cppPath/desktop/libs/windows-x86_64")
include("*.dll")
eachFile {
path = name
}
includeEmptyDirs = false
duplicatesStrategy = DuplicatesStrategy.INCLUDE
}
copy {
from("${project(":desktop").buildDir}/cmake/main/windows-amd64")
into("../build/links/windows-x64")
include("*.dll")
eachFile {
path = name
}
includeEmptyDirs = false
duplicatesStrategy = DuplicatesStrategy.INCLUDE
}
copy {
from("${project(":desktop").buildDir}/cmake/main/mac-x86_64")
into("$cppPath/desktop/libs/mac-x86_64")
include("*.dylib")
eachFile {
path = name
}
includeEmptyDirs = false
duplicatesStrategy = DuplicatesStrategy.INCLUDE
}
copy {
from("${project(":desktop").buildDir}/cmake/main/mac-aarch64")
into("$cppPath/desktop/libs/mac-aarch64")
include("*.dylib")
eachFile {
path = name
}
includeEmptyDirs = false
duplicatesStrategy = DuplicatesStrategy.INCLUDE
}
}
}
}