Modify Android build tooling to use 16kB pages.
# * https://android.googlesource.com/platform/ndk/+/ndk-rXX-release/docs/BuildSystemMaintainers.md
# where XX is the NDK version. Do a diff against the version you're upgrading from, e.g.:
# https://android.googlesource.com/platform/ndk/+/ndk-r25-release..ndk-r26-release/docs/BuildSystemMaintainers.md
-ndk_version=26.2.11394342
+ndk_version=27.1.12297006
ndk=$ANDROID_HOME/ndk/$ndk_version
if ! [ -e $ndk ]; then
fi
done
-export CFLAGS=""
-export LDFLAGS="-Wl,--build-id=sha1 -Wl,--no-rosegment"
+export CFLAGS="-D__BIONIC_NO_PAGE_SIZE_MACRO"
+export LDFLAGS="-Wl,--build-id=sha1 -Wl,--no-rosegment -Wl,-z,max-page-size=16384"
# Unlike Linux, Android does not implicitly use a dlopened library to resolve
# relocations in subsequently-loaded libraries, even if RTLD_GLOBAL is used
export PKG_CONFIG_LIBDIR="$abs_prefix/lib/pkgconfig"
fi
+# When compiling C++, some build systems will combine CFLAGS and CXXFLAGS, and some will
+# use CXXFLAGS alone.
+export CXXFLAGS=$CFLAGS
+
# Use the same variable name as conda-build
if [ $(uname) = "Darwin" ]; then
export CPU_COUNT=$(sysctl -n hw.ncpu)
def unpack_deps(host):
deps_url = "https://github.com/beeware/cpython-android-source-deps/releases/download"
- for name_ver in ["bzip2-1.0.8-1", "libffi-3.4.4-2", "openssl-3.0.15-0",
- "sqlite-3.45.1-0", "xz-5.4.6-0"]:
+ for name_ver in ["bzip2-1.0.8-2", "libffi-3.4.4-3", "openssl-3.0.15-4",
+ "sqlite-3.45.3-3", "xz-5.4.6-1"]:
filename = f"{name_ver}-{host}.tar.gz"
download(f"{deps_url}/{name_ver}/{filename}")
run(["tar", "-xf", filename])
def make_host_python(context):
# The CFLAGS and LDFLAGS set in android-env include the prefix dir, so
- # delete any previously-installed Python libs and include files to prevent
- # them being used during the build.
+ # delete any previous Python installation to prevent it being used during
+ # the build.
host_dir = subdir(context.host)
prefix_dir = host_dir / "prefix"
delete_glob(f"{prefix_dir}/include/python*")
delete_glob(f"{prefix_dir}/lib/libpython*")
+ delete_glob(f"{prefix_dir}/lib/python*")
os.chdir(host_dir / "build")
run(["make", "-j", str(os.cpu_count())], host=context.host)
throw GradleException("Failed to find Python version")
}
-android.ndkVersion = file("../../android-env.sh").useLines {
- for (line in it) {
- val match = """ndk_version=(\S+)""".toRegex().find(line)
- if (match != null) {
- return@useLines match.groupValues[1]
- }
- }
- throw GradleException("Failed to find NDK version")
-}
-
android {
namespace = "org.python.testbed"
ndk.abiFilters.addAll(ABIS.keys)
externalNativeBuild.cmake.arguments(
"-DPYTHON_CROSS_DIR=$PYTHON_CROSS_DIR",
- "-DPYTHON_VERSION=$PYTHON_VERSION")
+ "-DPYTHON_VERSION=$PYTHON_VERSION",
+ "-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON",
+ )
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
+ val androidEnvFile = file("../../android-env.sh").absoluteFile
+ ndkVersion = androidEnvFile.useLines {
+ for (line in it) {
+ """ndk_version=(\S+)""".toRegex().find(line)?.let {
+ return@useLines it.groupValues[1]
+ }
+ }
+ throw GradleException("Failed to find NDK version in $androidEnvFile")
+ }
externalNativeBuild.cmake {
path("src/main/c/CMakeLists.txt")
}
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
- id("com.android.application") version "8.4.2" apply false
+ id("com.android.application") version "8.6.1" apply false
id("org.jetbrains.kotlin.android") version "1.9.22" apply false
}
#Mon Feb 19 20:29:06 GMT 2024
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
--- /dev/null
+The Android build now supports `16 KB page sizes
+<https://developer.android.com/guide/practices/page-sizes>`__.