fix deprecation warning by using newer API
This commit is contained in:
+33
-27
@@ -1,3 +1,6 @@
|
|||||||
|
import javax.inject.Inject
|
||||||
|
import org.gradle.process.ExecOperations
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
alias(libs.plugins.android.application)
|
alias(libs.plugins.android.application)
|
||||||
alias(libs.plugins.kotlin.android)
|
alias(libs.plugins.kotlin.android)
|
||||||
@@ -5,25 +8,22 @@ plugins {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Build isodrive native binary from submodule (only if binaries are missing)
|
// Build isodrive native binary from submodule (only if binaries are missing)
|
||||||
val buildIsodrive by tasks.registering {
|
abstract class BuildIsodriveTask @Inject constructor(
|
||||||
group = "native"
|
private val execOps: ExecOperations
|
||||||
description = "Build isodrive binary for all Android architectures"
|
) : DefaultTask() {
|
||||||
|
|
||||||
val isodriveDir = rootProject.file("isodrive")
|
@get:InputDirectory
|
||||||
val outputDir = file("src/main/assets/bin")
|
abstract val isodriveDir: DirectoryProperty
|
||||||
val architectures = listOf("arm64-v8a", "armeabi-v7a", "x86_64", "x86")
|
|
||||||
|
|
||||||
// Check if all binaries exist
|
@get:OutputDirectory
|
||||||
val allBinariesExist = architectures.all { arch ->
|
abstract val outputDir: DirectoryProperty
|
||||||
outputDir.resolve("$arch/isodrive").exists()
|
|
||||||
}
|
|
||||||
|
|
||||||
// Skip if all binaries already exist
|
@TaskAction
|
||||||
onlyIf { !allBinariesExist }
|
fun build() {
|
||||||
|
val isodrivePath = isodriveDir.get().asFile
|
||||||
|
val outputPath = outputDir.get().asFile
|
||||||
|
|
||||||
doLast {
|
if (!isodrivePath.resolve("src").exists()) {
|
||||||
// Verify submodule is initialized
|
|
||||||
if (!isodriveDir.resolve("src").exists()) {
|
|
||||||
throw GradleException("isodrive submodule not initialized. Run: git submodule update --init")
|
throw GradleException("isodrive submodule not initialized. Run: git submodule update --init")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -33,8 +33,8 @@ val buildIsodrive by tasks.registering {
|
|||||||
"src/androidusbisomanager.cpp",
|
"src/androidusbisomanager.cpp",
|
||||||
"src/main.cpp"
|
"src/main.cpp"
|
||||||
)
|
)
|
||||||
val srcs = sourceFiles.joinToString(" ") { "$isodriveDir/$it" }
|
val srcs = sourceFiles.joinToString(" ") { "$isodrivePath/$it" }
|
||||||
val cflags = "-I$isodriveDir/src/include -static-libstdc++ -Os -s"
|
val cflags = "-I$isodrivePath/src/include -static-libstdc++ -Os -s"
|
||||||
|
|
||||||
val compilers = mapOf(
|
val compilers = mapOf(
|
||||||
"arm64-v8a" to "aarch64-linux-android26-clang++",
|
"arm64-v8a" to "aarch64-linux-android26-clang++",
|
||||||
@@ -43,16 +43,14 @@ val buildIsodrive by tasks.registering {
|
|||||||
"x86" to "i686-linux-android26-clang++"
|
"x86" to "i686-linux-android26-clang++"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Check if we're on NixOS (nix-shell available)
|
|
||||||
val useNixShell = File("/etc/NIXOS").exists() ||
|
val useNixShell = File("/etc/NIXOS").exists() ||
|
||||||
Runtime.getRuntime().exec(arrayOf("which", "nix-shell")).waitFor() == 0
|
Runtime.getRuntime().exec(arrayOf("which", "nix-shell")).waitFor() == 0
|
||||||
|
|
||||||
if (useNixShell) {
|
if (useNixShell) {
|
||||||
println("NixOS detected, using nix-shell for NDK...")
|
println("NixOS detected, using nix-shell for NDK...")
|
||||||
|
|
||||||
// Build all architectures in one nix-shell invocation
|
|
||||||
val buildScript = compilers.entries.joinToString("\n") { (arch, compiler) ->
|
val buildScript = compilers.entries.joinToString("\n") { (arch, compiler) ->
|
||||||
val archDir = outputDir.resolve(arch)
|
val archDir = outputPath.resolve(arch)
|
||||||
val output = archDir.resolve("isodrive")
|
val output = archDir.resolve("isodrive")
|
||||||
if (output.exists()) {
|
if (output.exists()) {
|
||||||
"echo 'isodrive for $arch already exists, skipping'"
|
"echo 'isodrive for $arch already exists, skipping'"
|
||||||
@@ -65,9 +63,7 @@ val buildIsodrive by tasks.registering {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
exec {
|
execOps.exec {
|
||||||
environment("SRCS", srcs)
|
|
||||||
environment("CFLAGS", cflags)
|
|
||||||
environment("NIXPKGS_ALLOW_UNFREE", "1")
|
environment("NIXPKGS_ALLOW_UNFREE", "1")
|
||||||
commandLine("nix-shell", "-p", "androidenv.androidPkgs.ndk-bundle", "--run", """
|
commandLine("nix-shell", "-p", "androidenv.androidPkgs.ndk-bundle", "--run", """
|
||||||
SDK_ROOT=${'$'}(find /nix/store -maxdepth 1 -name "*android-sdk-ndk*" -type d 2>/dev/null | head -1)
|
SDK_ROOT=${'$'}(find /nix/store -maxdepth 1 -name "*android-sdk-ndk*" -type d 2>/dev/null | head -1)
|
||||||
@@ -79,7 +75,6 @@ val buildIsodrive by tasks.registering {
|
|||||||
""".trimIndent())
|
""".trimIndent())
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Standard NDK lookup for non-NixOS
|
|
||||||
val ndkDir = listOfNotNull(
|
val ndkDir = listOfNotNull(
|
||||||
System.getenv("ANDROID_NDK_HOME"),
|
System.getenv("ANDROID_NDK_HOME"),
|
||||||
System.getenv("ANDROID_NDK")
|
System.getenv("ANDROID_NDK")
|
||||||
@@ -92,7 +87,7 @@ val buildIsodrive by tasks.registering {
|
|||||||
}
|
}
|
||||||
|
|
||||||
compilers.forEach { (arch, compiler) ->
|
compilers.forEach { (arch, compiler) ->
|
||||||
val archDir = outputDir.resolve(arch)
|
val archDir = outputPath.resolve(arch)
|
||||||
val output = archDir.resolve("isodrive")
|
val output = archDir.resolve("isodrive")
|
||||||
|
|
||||||
if (output.exists()) {
|
if (output.exists()) {
|
||||||
@@ -102,7 +97,7 @@ val buildIsodrive by tasks.registering {
|
|||||||
|
|
||||||
archDir.mkdirs()
|
archDir.mkdirs()
|
||||||
println("Building isodrive for $arch...")
|
println("Building isodrive for $arch...")
|
||||||
exec {
|
execOps.exec {
|
||||||
commandLine("sh", "-c", "$toolchain/$compiler $cflags $srcs -o $output")
|
commandLine("sh", "-c", "$toolchain/$compiler $cflags $srcs -o $output")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -111,7 +106,18 @@ val buildIsodrive by tasks.registering {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hook into the build process - build isodrive before merging assets
|
val buildIsodrive by tasks.registering(BuildIsodriveTask::class) {
|
||||||
|
group = "native"
|
||||||
|
description = "Build isodrive binary for all Android architectures"
|
||||||
|
|
||||||
|
isodriveDir.set(rootProject.file("isodrive"))
|
||||||
|
outputDir.set(file("src/main/assets/bin"))
|
||||||
|
|
||||||
|
val architectures = listOf("arm64-v8a", "armeabi-v7a", "x86_64", "x86")
|
||||||
|
val outDir = file("src/main/assets/bin")
|
||||||
|
onlyIf { !architectures.all { arch -> outDir.resolve("$arch/isodrive").exists() } }
|
||||||
|
}
|
||||||
|
|
||||||
tasks.matching { it.name.startsWith("merge") && it.name.endsWith("Assets") }.configureEach {
|
tasks.matching { it.name.startsWith("merge") && it.name.endsWith("Assets") }.configureEach {
|
||||||
dependsOn(buildIsodrive)
|
dependsOn(buildIsodrive)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user