diff --git a/buildSrc/src/main/java/com/github/kr328/clash/tools/ClashBuildTask.kt b/buildSrc/src/main/java/com/github/kr328/clash/tools/ClashBuildTask.kt index 01baa3c7..eb5aff5e 100644 --- a/buildSrc/src/main/java/com/github/kr328/clash/tools/ClashBuildTask.kt +++ b/buildSrc/src/main/java/com/github/kr328/clash/tools/ClashBuildTask.kt @@ -39,8 +39,8 @@ abstract class ClashBuildTask : DefaultTask() { config.abis.forEach { Command.ofGoRun( "make/make.go", - listOf("bridge", "native", "build", "android", it.goArch), - input.resolve("tun2socket/bridge"), + listOf("tun2socket", ".", "android", it.goArch), + input.resolve("tun2socket"), environment.ofLwipBuild(it) ).exec() diff --git a/buildSrc/src/main/java/com/github/kr328/clash/tools/ClashCleanTask.kt b/buildSrc/src/main/java/com/github/kr328/clash/tools/ClashCleanTask.kt index e4451bed..305dccca 100644 --- a/buildSrc/src/main/java/com/github/kr328/clash/tools/ClashCleanTask.kt +++ b/buildSrc/src/main/java/com/github/kr328/clash/tools/ClashCleanTask.kt @@ -6,7 +6,7 @@ import golangSource abstract class ClashCleanTask : Delete() { fun applyFrom(project: Project, abis: List) { - val bridge = project.golangSource.resolve("tun2socket/bridge") + val bridge = project.golangSource.resolve("tun2socket") delete(bridge.resolve("build")) diff --git a/buildSrc/src/main/java/com/github/kr328/clash/tools/Environment.kt b/buildSrc/src/main/java/com/github/kr328/clash/tools/Environment.kt index 2bee8c01..0a026a3a 100644 --- a/buildSrc/src/main/java/com/github/kr328/clash/tools/Environment.kt +++ b/buildSrc/src/main/java/com/github/kr328/clash/tools/Environment.kt @@ -34,11 +34,25 @@ class Environment( } fun ofLwipBuild(abi: NativeAbi): Map { + val host = when { + Os.isFamily(Os.FAMILY_WINDOWS) -> + "windows" + Os.isFamily(Os.FAMILY_MAC) -> + "darwin" + Os.isFamily(Os.FAMILY_UNIX) -> + "linux" + else -> + throw GradleException("Unsupported host: ${System.getProperty("os.name")}") + } + + val compiler = ndkDirectory.resolve("toolchains/llvm/prebuilt/$host-x86_64/bin") + .resolve("${abi.compiler}${minSdkVersion}-clang") + val ar = ndkDirectory.resolve("toolchains/llvm/prebuilt/$host-x86_64/bin") + .resolve("${abi.archiver}-ar") + return mapOf( - "CMAKE_SYSTEM_NAME" to "Android", - "CMAKE_ANDROID_NDK" to ndkDirectory.absolutePath, - "CMAKE_ANDROID_ARCH_ABI" to abi.value, - "CMAKE_SYSTEM_VERSION" to minSdkVersion.toString() + "CC" to compiler.absolutePath, + "AR" to ar.absolutePath, ) } } \ No newline at end of file diff --git a/buildSrc/src/main/java/com/github/kr328/clash/tools/NativeAbi.kt b/buildSrc/src/main/java/com/github/kr328/clash/tools/NativeAbi.kt index b115833b..029f17b6 100644 --- a/buildSrc/src/main/java/com/github/kr328/clash/tools/NativeAbi.kt +++ b/buildSrc/src/main/java/com/github/kr328/clash/tools/NativeAbi.kt @@ -3,13 +3,14 @@ package com.github.kr328.clash.tools enum class NativeAbi( val value: String, val compiler: String, + val archiver: String, val goArch: String, val goArm: String ) { - ArmeabiV7a("armeabi-v7a", "armv7a-linux-androideabi", "arm", "7"), - Arm64V8a("arm64-v8a", "aarch64-linux-android", "arm64", ""), - X86("x86", "i686-linux-android", "386", ""), - X64("x86_64", "x86_64-linux-android", "amd64", ""); + ArmeabiV7a("armeabi-v7a", "armv7a-linux-androideabi", "arm-linux-androideabi", "arm", "7"), + Arm64V8a("arm64-v8a", "aarch64-linux-android", "aarch64-linux-android", "arm64", ""), + X86("x86", "i686-linux-android", "i686-linux-android", "386", ""), + X64("x86_64", "x86_64-linux-android", "x86_64-linux-android", "amd64", ""); companion object { fun parse(value: String): NativeAbi { diff --git a/core/src/main/golang/tun/dns.go b/core/src/main/golang/tun/dns.go index f2d8fd7d..15330346 100644 --- a/core/src/main/golang/tun/dns.go +++ b/core/src/main/golang/tun/dns.go @@ -7,7 +7,7 @@ import ( "time" "github.com/Dreamacro/clash/component/resolver" - "github.com/kr328/tun2socket/bridge" + "github.com/kr328/tun2socket" D "github.com/miekg/dns" ) @@ -22,7 +22,7 @@ func shouldHijackDns(dns net.IP, target net.IP, targetPort int) bool { return net.IPv4zero.Equal(dns) || target.Equal(dns) } -func hijackUDPDns(pkt []byte, lAddr, rAddr net.Addr, udp bridge.UDP) { +func hijackUDPDns(pkt []byte, lAddr, rAddr net.Addr, udp tun2socket.UDP) { go func() { answer, err := relayDnsPacket(pkt) diff --git a/core/src/main/golang/tun/udp.go b/core/src/main/golang/tun/udp.go index a2892af1..d7fc4375 100644 --- a/core/src/main/golang/tun/udp.go +++ b/core/src/main/golang/tun/udp.go @@ -4,7 +4,7 @@ import ( "net" "github.com/Dreamacro/clash/transport/socks5" - "github.com/kr328/tun2socket/bridge" + "github.com/kr328/tun2socket" adapters "github.com/Dreamacro/clash/adapters/inbound" "github.com/Dreamacro/clash/common/pool" @@ -15,7 +15,7 @@ import ( type udpPacket struct { source *net.UDPAddr data []byte - udp bridge.UDP + udp tun2socket.UDP } func (u *udpPacket) Data() []byte { @@ -38,7 +38,7 @@ func (u *udpPacket) LocalAddr() net.Addr { } } -func handleUDP(payload []byte, source *net.UDPAddr, target *net.UDPAddr, udp bridge.UDP) { +func handleUDP(payload []byte, source *net.UDPAddr, target *net.UDPAddr, udp tun2socket.UDP) { pkt := &udpPacket{ source: source, data: payload, diff --git a/core/src/main/golang/tun2socket b/core/src/main/golang/tun2socket index 958ecb35..c388e5d9 160000 --- a/core/src/main/golang/tun2socket +++ b/core/src/main/golang/tun2socket @@ -1 +1 @@ -Subproject commit 958ecb352f87f8a10303b6df31a7aa859ce3bcf3 +Subproject commit c388e5d9f63850b7f693d1d7e1a5d6fbf51d0b8d