From f05b8dc72d4788936628c8c6f0ca6e8abd641506 Mon Sep 17 00:00:00 2001 From: saddydead Date: Wed, 27 May 2026 16:22:27 +0300 Subject: [PATCH] blyat multi arch gcc --- build.gradle.kts | 149 ++++++++++++++++++++++---------------- src/main/kotlin/Client.kt | 5 +- 2 files changed, 90 insertions(+), 64 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 12624cd..68c63cd 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -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("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("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("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("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("buildTunLib") { - group = "build" - val outputDir = layout.buildDirectory.dir("native").get().asFile +targets.forEach { (toolchain, folder) -> + tasks.register("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("packageApp") { - group = "build" +targets.forEach { (toolchain, folder) -> + tasks.register("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}") -} \ No newline at end of file + } +} + +tasks.register("packageApp") { + group = "build" + dependsOn(tasks.matching { it.name.startsWith("packageApp_") }) +} + diff --git a/src/main/kotlin/Client.kt b/src/main/kotlin/Client.kt index db6151a..578f948 100644 --- a/src/main/kotlin/Client.kt +++ b/src/main/kotlin/Client.kt @@ -14,13 +14,14 @@ fun startClient(host: String, address: String, port: Int) = runBlocking { val input = socket.getInputStream() val output = socket.getOutputStream() + println("Client trying to pair") + launch { val buffer = ByteArray(32768) - println("Client trying to pair") + println("Client connected - $host:$port") while (true) { val len = tun.input.read(buffer) - println("Client connected - $host:$port") if (len > 0) { output.write(len shr 8)