1- import android.databinding.tool.ext.capitalizeUS
2- import com.github.kr328.golang.GolangBuildTask
3- import com.github.kr328.golang.GolangPlugin
1+ import io.github.goooler.golang.tasks.GoCompile.Companion.baseOutputDir as goBaseOutputDir
42
53plugins {
64 kotlin(" android" )
75 id(" com.android.library" )
86 id(" kotlinx-serialization" )
9- id( " golang-android " )
7+ alias(libs.plugins. golang)
108}
119
1210val golangSource = file(" src/main/golang/native" )
1311
14- golang {
15- sourceSets {
16- create(" alpha" ) {
17- tags.set(listOf (" foss" ," with_gvisor" ," cmfa" ))
18- srcDir.set(file(" src/foss/golang" ))
19- }
20- create(" meta" ) {
21- tags.set(listOf (" foss" ," with_gvisor" ," cmfa" ))
22- srcDir.set(file(" src/foss/golang" ))
23- }
24- all {
25- fileName.set(" libclash.so" )
26- packageName.set(" cfa/native" )
27- }
28- }
12+ go {
13+ buildTags = listOf (" foss" ," with_gvisor" ," cmfa" )
14+ outputFileName = " libclash.so"
15+ packageName = " cfa/native"
2916}
3017
3118android {
32- productFlavors {
33- all {
34- externalNativeBuild {
35- cmake {
36- arguments(" -DGO_SOURCE:STRING=${golangSource} " )
37- arguments(" -DGO_OUTPUT:STRING=${GolangPlugin .outputDirOf(project, null , null )} " )
38- arguments(" -DFLAVOR_NAME:STRING=$name " )
39- }
40- }
41- }
42- }
43-
4419 externalNativeBuild {
4520 cmake {
4621 path = file(" src/main/cpp/CMakeLists.txt" )
@@ -57,23 +32,11 @@ dependencies {
5732 implementation(libs.kotlin.serialization.json)
5833}
5934
60- afterEvaluate {
61- tasks.withType(GolangBuildTask ::class .java).forEach {
62- it.inputs.dir(golangSource)
63- }
64- }
65-
66- val abis = listOf (" arm64-v8a" to " Arm64V8a" , " armeabi-v7a" to " ArmeabiV7a" , " x86" to " X86" , " x86_64" to " X8664" )
67-
6835androidComponents.onVariants { variant ->
69- val cmakeName = if (variant.buildType == " debug" ) " Debug" else " RelWithDebInfo"
70-
71- abis.forEach { (abi, goAbi) ->
72- tasks.configureEach {
73- if (name.startsWith(" buildCMake$cmakeName [$abi ]" )) {
74- dependsOn(" externalGolangBuild${variant.name.capitalizeUS()}$goAbi " )
75- println (" Set up dependency: $name -> externalGolangBuild${variant.name.capitalizeUS()}$goAbi " )
76- }
77- }
78- }
36+ variant.sources.getByName(" go" ).addStaticSourceDirectory(" src/foss/golang" )
37+ variant.externalNativeBuild?.arguments?.addAll(
38+ " -DGO_SOURCE:STRING=${golangSource} " ,
39+ " -DGO_OUTPUT:STRING=${goBaseOutputDir.get().asFile} " ,
40+ " -DFLAVOR_NAME:STRING=${variant.flavorName.orEmpty()} "
41+ )
7942}
0 commit comments