mirror of
https://github.com/yairm210/Unciv.git
synced 2024-12-22 16:14:24 +07:00
172 lines
5.8 KiB
Plaintext
172 lines
5.8 KiB
Plaintext
import com.unciv.build.BuildConfig
|
|
|
|
plugins {
|
|
id("kotlin")
|
|
}
|
|
|
|
sourceSets {
|
|
main {
|
|
java.srcDir("src/")
|
|
}
|
|
}
|
|
|
|
val mainClassName = "com.unciv.app.server.UncivServer"
|
|
val assetsDir = file("../android/assets")
|
|
val deployFolder = file("../deploy")
|
|
|
|
// See https://github.com/libgdx/libgdx/wiki/Starter-classes-and-configuration#common-issues
|
|
// and https://github.com/yairm210/Unciv/issues/5679
|
|
val jvmArgsForMac = listOf("-XstartOnFirstThread", "-Djava.awt.headless=true")
|
|
tasks.register<JavaExec>("run") {
|
|
jvmArgs = mutableListOf<String>()
|
|
if ("mac" in System.getProperty("os.name").lowercase())
|
|
(jvmArgs as MutableList<String>).addAll(jvmArgsForMac)
|
|
// These are non-standard, only available/necessary on Mac.
|
|
|
|
dependsOn(tasks.getByName("classes"))
|
|
|
|
mainClass.set(mainClassName)
|
|
classpath = sourceSets.main.get().runtimeClasspath
|
|
standardInput = System.`in`
|
|
workingDir = assetsDir
|
|
isIgnoreExitValue = true
|
|
}
|
|
|
|
tasks.register<JavaExec>("debug") {
|
|
jvmArgs = jvmArgsForMac
|
|
dependsOn(tasks.getByName("classes"))
|
|
mainClass.set(mainClassName)
|
|
classpath = sourceSets.main.get().runtimeClasspath
|
|
standardInput = System.`in`
|
|
workingDir = assetsDir
|
|
isIgnoreExitValue = true
|
|
debug = true
|
|
}
|
|
|
|
tasks.register<Jar>("dist") { // Compiles the jar file
|
|
dependsOn(tasks.getByName("classes"))
|
|
|
|
// META-INF/INDEX.LIST and META-INF/io.netty.versions.properties are duplicated, but I don't know why
|
|
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
|
|
|
from(files(sourceSets.main.get().output.resourcesDir))
|
|
from(files(sourceSets.main.get().output.classesDirs))
|
|
// see Laurent1967's comment on https://github.com/libgdx/libgdx/issues/5491
|
|
from({ configurations.compileClasspath.get().resolve().map { if (it.isDirectory) it else zipTree(it) } })
|
|
archiveFileName.set("UncivServer.jar")
|
|
|
|
manifest {
|
|
attributes(mapOf("Main-Class" to mainClassName, "Specification-Version" to BuildConfig.appVersion))
|
|
}
|
|
}
|
|
|
|
enum class Platform(val desc: String) {
|
|
Windows32("windows32"), Windows64("windows64"), Linux32("linux32"), Linux64("linux64"), MacOS("mac");
|
|
}
|
|
|
|
class PackrConfig(
|
|
var platform: Platform? = null,
|
|
var jdk: String? = null,
|
|
var executable: String? = null,
|
|
var classpath: List<String>? = null,
|
|
var removePlatformLibs: List<String>? = null,
|
|
var mainClass: String? = null,
|
|
var vmArgs: List<String>? = null,
|
|
var minimizeJre: String? = null,
|
|
var cacheJre: File? = null,
|
|
var resources: List<File>? = null,
|
|
var outDir: File? = null,
|
|
var platformLibsOutDir: File? = null,
|
|
var iconResource: File? = null,
|
|
var bundleIdentifier: String? = null
|
|
)
|
|
|
|
for (platform in Platform.values()) {
|
|
val platformName = platform.toString()
|
|
|
|
tasks.create("packr${platformName}") {
|
|
dependsOn(tasks.getByName("dist"))
|
|
|
|
// Needs to be here and not in doLast because the zip task depends on the outDir
|
|
val jarFile = "$rootDir/server/build/libs/UncivServer.jar"
|
|
val config = PackrConfig()
|
|
config.platform = platform
|
|
|
|
config.apply {
|
|
executable = "UncivServer"
|
|
classpath = listOf(jarFile)
|
|
removePlatformLibs = config.classpath
|
|
mainClass = mainClassName
|
|
vmArgs = listOf("Xmx1G")
|
|
minimizeJre = "server/packrConfig.json"
|
|
outDir = file("packr")
|
|
}
|
|
|
|
|
|
doLast {
|
|
// https://gist.github.com/seanf/58b76e278f4b7ec0a2920d8e5870eed6
|
|
fun String.runCommand(workingDir: File) {
|
|
val process = ProcessBuilder(*split(" ").toTypedArray())
|
|
.directory(workingDir)
|
|
.redirectOutput(ProcessBuilder.Redirect.PIPE)
|
|
.redirectError(ProcessBuilder.Redirect.PIPE)
|
|
.start()
|
|
|
|
if (!process.waitFor(30, TimeUnit.SECONDS)) {
|
|
process.destroy()
|
|
throw RuntimeException("execution timed out: $this")
|
|
}
|
|
if (process.exitValue() != 0) {
|
|
println("execution returned code ${process.exitValue()}: $this")
|
|
}
|
|
println(process.inputStream.bufferedReader().readText())
|
|
}
|
|
|
|
|
|
if (config.outDir!!.exists()) delete(config.outDir)
|
|
|
|
// Requires that both packr and the jre are downloaded, as per buildAndDeploy.yml, "Upload to itch.io"
|
|
|
|
val jdkFile =
|
|
when (platform) {
|
|
Platform.Linux64 -> "jre-linux-64.tar.gz"
|
|
Platform.Windows64 -> "jdk-windows-64.zip"
|
|
else -> "jre-macOS.tar.gz"
|
|
}
|
|
|
|
val platformNameForPackrCmd =
|
|
if (platform == Platform.MacOS) "mac"
|
|
else platform.name.lowercase()
|
|
|
|
val command = "java -jar $rootDir/packr-all-4.0.0.jar" +
|
|
" --platform $platformNameForPackrCmd" +
|
|
" --jdk $jdkFile" +
|
|
" --executable UncivServer" +
|
|
" --classpath $jarFile" +
|
|
" --mainclass $mainClassName" +
|
|
" --vmargs Xmx1G " +
|
|
(if (platform == Platform.MacOS) jvmArgsForMac.joinToString(" ") {
|
|
it.removePrefix("-")
|
|
}
|
|
else "") +
|
|
" --output ${config.outDir}"
|
|
command.runCommand(rootDir)
|
|
|
|
}
|
|
|
|
tasks.register<Zip>("zip${platformName}") {
|
|
archiveFileName.set("UncivServer-${platformName}.zip")
|
|
from(config.outDir)
|
|
destinationDirectory.set(deployFolder)
|
|
}
|
|
|
|
finalizedBy("zip${platformName}")
|
|
}
|
|
}
|
|
|
|
tasks.register<Zip>("zipLinuxFilesForJar") {
|
|
archiveFileName.set("linuxFilesForJar.zip")
|
|
from(file("linuxFilesForJar"))
|
|
destinationDirectory.set(deployFolder)
|
|
}
|