From 67c96f86ad8f863387d401ea98235d2e47c868d2 Mon Sep 17 00:00:00 2001 From: KhooLy <73142442+KhooLy@users.noreply.github.com> Date: Mon, 20 Jul 2026 02:18:15 +0300 Subject: [PATCH] Export bindgen env vars for the Android NDK when building fluxa-core fluxa-core's plugin-js-engine feature now generates rquickjs FFI bindings via bindgen instead of relying on prebuilt binding files, since rquickjs-sys ships none for any Android target. Export LIBCLANG_PATH (from the NDK's own libclang) and BINDGEN_EXTRA_CLANG_ARGS (NDK sysroot, matching clang resource-dir, and the concrete clang target triple) alongside the existing CC/AR/linker env vars in each buildFluxaCore task, so bindgen resolves Android headers instead of falling back to the host's. --- app/build.gradle.kts | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f63c21b..755e7e7 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -194,12 +194,30 @@ val rustTargetTasks = rustAndroidTargets.map { (abi, target, envName) -> if (ndkDir.isBlank() || !file(ndkDir).exists()) { throw GradleException("Android NDK is required to build ../fluxa-core.") } - val toolchainBin = file("$ndkDir/toolchains/llvm/prebuilt/$rustHostTag/bin") + val toolchainRoot = file("$ndkDir/toolchains/llvm/prebuilt/$rustHostTag") + val toolchainBin = toolchainRoot.resolve("bin") val clang = file(toolchainBin.resolve(linkerName)).absolutePath environment("CARGO_TARGET_${envName}_LINKER", clang) environment("CC_$target", clang) environment("CC_${target.replace("-", "_")}", clang) environment("AR_${envName}", file(toolchainBin.resolve("llvm-ar")).absolutePath) + + val clangTargetTriple = linkerName.removeSuffix("-clang") + val sysroot = toolchainRoot.resolve("sysroot") + val clangVersionDir = toolchainRoot.resolve("lib/clang").listFiles() + ?.filter { it.isDirectory } + ?.maxByOrNull { it.name.toIntOrNull() ?: -1 } + environment("LIBCLANG_PATH", toolchainRoot.resolve("lib").absolutePath) + environment( + "BINDGEN_EXTRA_CLANG_ARGS", + buildString { + append("--target=$clangTargetTriple") + append(" --sysroot=${sysroot.absolutePath}") + if (clangVersionDir != null) { + append(" -resource-dir=${clangVersionDir.absolutePath}") + } + } + ) } doLast { val builtLibrary = file("$rustCrateDir/target/$target/$rustProfile/libfluxa_core.so")