diff --git a/README.md b/README.md index 71a2b085d8..8560e775fe 100644 --- a/README.md +++ b/README.md @@ -96,13 +96,11 @@ QAuxiliary 将为分 `CI` 和 `推荐的CI` 两个版本 ## 编译 -1. 安装 git, CMake 3.28.0+, Ninja 1.11+, JDK 17+, Android SDK, 以及可选的 ccache; - - Android SDK 和 NDK 版本请参考 [Version.kt](build-logic/convention/src/main/kotlin/Version.kt); +1. 安装 git, Ninja 1.11+, JDK 17+, Android SDK, 以及可选的 ccache; + - Android SDK 和 NDK 及 CMake 版本请参考 [Version.kt](build-logic/convention/src/main/kotlin/Version.kt); - JDK 版本最低 17, 当然使用 21 也是可以的。 - - Ninja 请使用 1.11 或更高版本。因为 Ninja 从 1.11 开开始支持 C++ 20 module, 你可以从 [Ninja Release](https://github.com/ninja-build/ninja/releases) 下载 - Ninja 二进制文件, 并将其添加到您的 PATH 环境变量中。 - - CMake 请使用 3.28.0 或更高版本。注意 Android SDK 里的 CMake 最高 3.22.1, 但是我们需要 3.28.0+, 您可以从 [CMake 官网](https://cmake.org/download/) 下载 - CMake, 并将其添加到您的 PATH 环境变量中。 + - Ninja 请使用 1.11 或更高版本。因为 Ninja 从 1.11 开始支持 C++ 20 module, 你可以从 [Ninja Release](https://github.com/ninja-build/ninja/releases) 下载 + Ninja 二进制文件, 并在 `local.properties` 中指定 `qauxv.override.ninja.path` 为 Ninja 的路径 (如 `qauxv.override.ninja.path=/usr/bin/ninja`). - Ccache 是可选的,不装也可以,但它可以让编译更快。 注意: 编译脚本会自动寻找 ccache 并使用,而 Windows 平台下 msys2 的 ccache 存在问题会卡在 sync 阶段, 建议 Windows 用户使用从 ccache 官网下载的 ccache 而不是 msys2 的 ccache; diff --git a/app/build.gradle.kts b/app/build.gradle.kts index d3e0dccdbb..859471f889 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -112,6 +112,9 @@ android { "-DANDROID_CCACHE=$it", ) } + Version.getNinjaPathOrNull(rootProject)?.let { + arguments += "-DCMAKE_MAKE_PROGRAM=$it" + } arguments += "-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON" val flags = arrayOf( "-Qunused-arguments", diff --git a/build-logic/convention/src/main/kotlin/Version.kt b/build-logic/convention/src/main/kotlin/Version.kt index 72812a4580..13d9c7ba7f 100644 --- a/build-logic/convention/src/main/kotlin/Version.kt +++ b/build-logic/convention/src/main/kotlin/Version.kt @@ -15,7 +15,7 @@ object Version { private const val defaultNdkVersion = "27.0.12077973" // LSPlant requires CMake 3.28.0+ to build - private const val defaultCMakeVersion = "3.28.0+" + private const val defaultCMakeVersion = "3.31.0" fun getNdkVersion(project: Project): String { val prop = getLocalProperty(project, "qauxv.override.ndk.version") @@ -35,6 +35,15 @@ object Version { return prop ?: env ?: defaultCMakeVersion } + fun getNinjaPathOrNull(project: Project): String? { + val prop = getLocalProperty(project, "qauxv.override.ninja.path") + val env = getEnvVariable("QAUXV_OVERRIDE_NINJA_PATH") + if (!prop.isNullOrEmpty() && !env.isNullOrEmpty()) { + throw IllegalStateException("Cannot set both QAUXV_OVERRIDE_NINJA_PATH and qauxv.override.ninja.path") + } + return prop ?: env + } + fun getLocalProperty(project: Project, propertyName: String): String? { val rootProject = project.rootProject val localProp = File(rootProject.projectDir, "local.properties")