blyat multi arch gcc

This commit is contained in:
2026-05-27 16:22:27 +03:00
parent 62f32c97c3
commit f05b8dc72d
2 changed files with 90 additions and 64 deletions

View File

@ -24,8 +24,12 @@ kotlin {
jvmToolchain(25)
}
val targets = listOf(
"x86_64-linux-gnu" to "linux-x86_64",
"aarch64-linux-gnu" to "linux-aarch64"
)
tasks.jar {
dependsOn("buildTunLib")
dependsOn(configurations.runtimeClasspath)
manifest {
@ -85,7 +89,7 @@ tasks.register("generateTestClientConfig") {
file.writeText("""
{
"type": "client",
"host": "192.168.88.247",
"host": "192.168.88.227",
"address": "10.1.0.2",
"port": 9093
}
@ -93,67 +97,79 @@ tasks.register("generateTestClientConfig") {
}
}
tasks.register<JavaExec>("runServer") {
group = "app"
description = "Run server"
classpath = sourceSets["main"].runtimeClasspath
mainClass.set("su.sonoma.MainKt")
args = listOf("${projectDir}/build/tmp/server.json")
jvmArgs = listOf(
"--add-opens=java.base/java.io=ALL-UNNAMED"
)
dependsOn("buildTunLib")
dependsOn("generateTestServerConfig")
targets.forEach { (toolchain, folder) ->
tasks.register<JavaExec>("runClient_$folder") {
group = "app/$folder"
description = "Run client"
classpath = sourceSets["main"].runtimeClasspath
mainClass.set("su.sonoma.MainKt")
args = listOf("${projectDir}/build/tmp/client.json")
jvmArgs = listOf(
"--add-opens=java.base/java.io=ALL-UNNAMED"
)
dependsOn("buildTunLib_$folder")
dependsOn("generateTestClientConfig")
systemProperty(
"java.library.path",
"${projectDir}/build/native/"
)
systemProperty(
"java.library.path",
"${projectDir}/build/native/$folder/"
)
}
}
tasks.register<JavaExec>("runClient") {
group = "app"
description = "Run client"
classpath = sourceSets["main"].runtimeClasspath
mainClass.set("su.sonoma.MainKt")
args = listOf("${projectDir}/build/tmp/client.json")
jvmArgs = listOf(
"--add-opens=java.base/java.io=ALL-UNNAMED"
)
dependsOn("buildTunLib")
dependsOn("generateTestClientConfig")
targets.forEach { (toolchain, folder) ->
tasks.register<JavaExec>("runServer_$folder") {
group = "app/$folder"
description = "Run server"
classpath = sourceSets["main"].runtimeClasspath
mainClass.set("su.sonoma.MainKt")
args = listOf("${projectDir}/build/tmp/server.json")
jvmArgs = listOf(
"--add-opens=java.base/java.io=ALL-UNNAMED"
)
dependsOn("buildTunLib_$folder")
dependsOn("generateTestServerConfig")
systemProperty(
"java.library.path",
"${projectDir}/build/native/"
)
systemProperty(
"java.library.path",
"${projectDir}/build/native/$folder/"
)
}
}
val javaHome = Jvm.current().javaHome.absolutePath
tasks.register<Exec>("buildTunLib") {
group = "build"
val outputDir = layout.buildDirectory.dir("native").get().asFile
targets.forEach { (toolchain, folder) ->
tasks.register<Exec>("buildTunLib_$folder") {
group = "build"
doFirst {
outputDir.mkdirs()
val outputDir = layout.buildDirectory.dir("native/$folder").get().asFile
doFirst {
outputDir.mkdirs()
}
commandLine(
"$toolchain-gcc",
"-shared",
"-fPIC",
"-z", "noexecstack",
"-o",
"${outputDir.absolutePath}/libtun.so",
"src/main/c/tun.c",
"-I$javaHome/include",
"-I$javaHome/include/linux"
)
}
}
commandLine(
"gcc",
"-shared",
"-fPIC",
"-z", "noexecstack",
"-o",
"${outputDir.absolutePath}/libtun.so",
"src/main/c/tun.c",
"-I$javaHome/include",
"-I$javaHome/include/linux"
)
tasks.register("buildTunLib") {
group = "build"
dependsOn(tasks.matching { it.name.startsWith("buildTunLib_") })
}
tasks.register("generateRunScript") {
@ -181,26 +197,35 @@ tasks.register("generateRunScript") {
}
}
tasks.register<Tar>("packageApp") {
group = "build"
targets.forEach { (toolchain, folder) ->
tasks.register<Tar>("packageApp_$folder") {
group = "build"
destinationDirectory.set(layout.buildDirectory.dir("dist"))
destinationDirectory.set(layout.buildDirectory.dir("dist/$folder"))
compression = Compression.GZIP
compression = Compression.GZIP
dependsOn("jar")
dependsOn("generateRunScript")
dependsOn("jar")
dependsOn("buildTunLib_$folder")
dependsOn("generateRunScript")
val name = rootProject.name.plus('-').plus(version)
val jarName = name.plus(".jar")
val name = rootProject.name.plus('-').plus(version)
val jarName = name.plus(".jar")
archiveFileName.set("$name.tar.gz")
archiveFileName.set("$name-$folder.tar.gz")
from("build/libs/$jarName")
from("build/native/libtun.so")
from("build/native/$folder/libtun.so")
from("build/tmp/${rootProject.name}")
}
}
}
tasks.register("packageApp") {
group = "build"
dependsOn(tasks.matching { it.name.startsWith("packageApp_") })
}