mirror of https://github.com/python/cpython
gh-125940: Android: support 16 KB pages (#125941)
Modify Android build tooling to use 16kB pages.
This commit is contained in:
parent
fed501d724
commit
e68d4b08ff
|
@ -24,7 +24,7 @@ fail() {
|
||||||
# * https://android.googlesource.com/platform/ndk/+/ndk-rXX-release/docs/BuildSystemMaintainers.md
|
# * 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.:
|
# 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
|
# 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
|
ndk=$ANDROID_HOME/ndk/$ndk_version
|
||||||
if ! [ -e $ndk ]; then
|
if ! [ -e $ndk ]; then
|
||||||
|
@ -58,8 +58,8 @@ for path in "$AR" "$AS" "$CC" "$CXX" "$LD" "$NM" "$RANLIB" "$READELF" "$STRIP";
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
export CFLAGS=""
|
export CFLAGS="-D__BIONIC_NO_PAGE_SIZE_MACRO"
|
||||||
export LDFLAGS="-Wl,--build-id=sha1 -Wl,--no-rosegment"
|
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
|
# Unlike Linux, Android does not implicitly use a dlopened library to resolve
|
||||||
# relocations in subsequently-loaded libraries, even if RTLD_GLOBAL is used
|
# relocations in subsequently-loaded libraries, even if RTLD_GLOBAL is used
|
||||||
|
@ -85,6 +85,10 @@ if [ -n "${PREFIX:-}" ]; then
|
||||||
export PKG_CONFIG_LIBDIR="$abs_prefix/lib/pkgconfig"
|
export PKG_CONFIG_LIBDIR="$abs_prefix/lib/pkgconfig"
|
||||||
fi
|
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
|
# Use the same variable name as conda-build
|
||||||
if [ $(uname) = "Darwin" ]; then
|
if [ $(uname) = "Darwin" ]; then
|
||||||
export CPU_COUNT=$(sysctl -n hw.ncpu)
|
export CPU_COUNT=$(sysctl -n hw.ncpu)
|
||||||
|
|
|
@ -138,8 +138,8 @@ def make_build_python(context):
|
||||||
|
|
||||||
def unpack_deps(host):
|
def unpack_deps(host):
|
||||||
deps_url = "https://github.com/beeware/cpython-android-source-deps/releases/download"
|
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",
|
for name_ver in ["bzip2-1.0.8-2", "libffi-3.4.4-3", "openssl-3.0.15-4",
|
||||||
"sqlite-3.45.1-0", "xz-5.4.6-0"]:
|
"sqlite-3.45.3-3", "xz-5.4.6-1"]:
|
||||||
filename = f"{name_ver}-{host}.tar.gz"
|
filename = f"{name_ver}-{host}.tar.gz"
|
||||||
download(f"{deps_url}/{name_ver}/{filename}")
|
download(f"{deps_url}/{name_ver}/{filename}")
|
||||||
run(["tar", "-xf", filename])
|
run(["tar", "-xf", filename])
|
||||||
|
@ -189,12 +189,13 @@ def configure_host_python(context):
|
||||||
|
|
||||||
def make_host_python(context):
|
def make_host_python(context):
|
||||||
# The CFLAGS and LDFLAGS set in android-env include the prefix dir, so
|
# The CFLAGS and LDFLAGS set in android-env include the prefix dir, so
|
||||||
# delete any previously-installed Python libs and include files to prevent
|
# delete any previous Python installation to prevent it being used during
|
||||||
# them being used during the build.
|
# the build.
|
||||||
host_dir = subdir(context.host)
|
host_dir = subdir(context.host)
|
||||||
prefix_dir = host_dir / "prefix"
|
prefix_dir = host_dir / "prefix"
|
||||||
delete_glob(f"{prefix_dir}/include/python*")
|
delete_glob(f"{prefix_dir}/include/python*")
|
||||||
delete_glob(f"{prefix_dir}/lib/libpython*")
|
delete_glob(f"{prefix_dir}/lib/libpython*")
|
||||||
|
delete_glob(f"{prefix_dir}/lib/python*")
|
||||||
|
|
||||||
os.chdir(host_dir / "build")
|
os.chdir(host_dir / "build")
|
||||||
run(["make", "-j", str(os.cpu_count())], host=context.host)
|
run(["make", "-j", str(os.cpu_count())], host=context.host)
|
||||||
|
|
|
@ -30,16 +30,6 @@ val PYTHON_VERSION = file("$PYTHON_DIR/Include/patchlevel.h").useLines {
|
||||||
throw GradleException("Failed to find Python version")
|
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 {
|
android {
|
||||||
namespace = "org.python.testbed"
|
namespace = "org.python.testbed"
|
||||||
|
@ -55,11 +45,22 @@ android {
|
||||||
ndk.abiFilters.addAll(ABIS.keys)
|
ndk.abiFilters.addAll(ABIS.keys)
|
||||||
externalNativeBuild.cmake.arguments(
|
externalNativeBuild.cmake.arguments(
|
||||||
"-DPYTHON_CROSS_DIR=$PYTHON_CROSS_DIR",
|
"-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"
|
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 {
|
externalNativeBuild.cmake {
|
||||||
path("src/main/c/CMakeLists.txt")
|
path("src/main/c/CMakeLists.txt")
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||||
plugins {
|
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
|
id("org.jetbrains.kotlin.android") version "1.9.22" apply false
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#Mon Feb 19 20:29:06 GMT 2024
|
#Mon Feb 19 20:29:06 GMT 2024
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
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
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
The Android build now supports `16 KB page sizes
|
||||||
|
<https://developer.android.com/guide/practices/page-sizes>`__.
|
Loading…
Reference in New Issue