//def protoSrcDir = "src/main/proto" //def protoDestDir = "build/generated/source/grpc" def protoIncludeDir = "build/extracted-include-protos/main" def jniSrcDir = "src/main/rust" def jniDestDir = "build/rust/target" def libFile = "libzcashwalletsdk.so" def libX86File = "build/rust/target/i686-linux-android/release/$libFile" def libX86Dir = "src/main/jniLibs/x86" def libArm64File = "build/rust/target/aarch64-linux-android/release/$libFile" def libArm64Dir = "src/main/jniLibs/arm64-v8a" def libArmeabiFile = "build/rust/target/armv7-linux-androideabi/release/$libFile" def libArmeabiDir = "src/main/jniLibs/armeabi-v7a" //buildscript { // dependencies { // classpath("com.squareup.wire:wire-compiler:2.2.0") // } // repositories { // mavenCentral() // } //} //tasks.register("generateGrpcClasses") { // doFirst { // println("**** CREATING PROTOS ****") // delete(protoDestDir) // mkdir(protoDestDir) // } // description = "Generate Java classes from protocol buffer (.proto) schema files for use with grpc" // // fileTree(dir: protoSrcDir, include: '**/*.proto').each { File file -> // doLast { // javaexec { // main = "com.squareup.wire.WireCompiler" // classpath = buildscript.configurations.classpath // args = ["--proto_path=$protoSrcDir", "--java_out=$protoDestDir", file.path] // } // } // } // inputs.files(fileTree(dir: protoSrcDir, include: '**/*.proto')) // outputs.files(fileTree(dir: protoDestDir, include: '**')) //} //tasks.register("generateProtobufClasses") { // doFirst { // println("**** CREATING PROTOS ****") // delete(protoDestDir) // mkdir(protoDestDir) // } // description = "Generate Java classes from protocol buffer (.proto) schema files for use with Square's Wire library" // // fileTree(dir: protoSrcDir, include: '**/*.proto').each { File file -> // doLast { // javaexec { // main = "com.squareup.wire.WireCompiler" // classpath = buildscript.configurations.classpath // args = ["--proto_path=$protoSrcDir", "--java_out=$protoDestDir", file.path] // } // } // } // inputs.files(fileTree(dir: protoSrcDir, include: '**/*.proto')) // outputs.files(fileTree(dir: protoDestDir, include: '**')) //} tasks.register("includeDirBugFix") { doFirst { mkdir(protoIncludeDir) } } // TODO: run these in paralell with the worker API: https://guides.gradle.org/using-the-worker-api/ // note: this will require modifying the build script and having 3 separate calls tasks.register("generateJniLibs") { doFirst { println("**** CREATING JNI LIBS ****") delete(jniDestDir) mkdir(jniDestDir) } description = "Generate *.so files for connecting to the Rust wallet logic through the JNI" doLast { if (System.getProperty('os.name').toLowerCase(Locale.ROOT).contains('windows')) { exec { commandLine("./build-rust.bat") } } else { exec { commandLine("./build-rust.sh") } } } inputs.files(fileTree(dir: jniSrcDir, include: '**/*.rs')) outputs.files(fileTree(dir: jniDestDir, include: '**/*.so')) } tasks.register("copyLibX86", Copy) { dependsOn generateJniLibs from libX86File into libX86Dir } tasks.register("copyLibArm64", Copy) { dependsOn generateJniLibs from libArm64File into libArm64Dir } tasks.register("copyLibArmeabi", Copy) { dependsOn generateJniLibs from libArmeabiFile into libArmeabiDir } tasks.register("copyAllJniLibs") { dependsOn copyLibX86, copyLibArm64, copyLibArmeabi }