mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 23:21:29 +00:00 
			
		
		
		
	
		
			
	
	
		
			88 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
		
		
			
		
	
	
			88 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| 
								 | 
							
								# This script must be sourced with the following variables already set:
							 | 
						||
| 
								 | 
							
								: ${ANDROID_HOME:?}  # Path to Android SDK
							 | 
						||
| 
								 | 
							
								: ${HOST:?}  # GNU target triplet
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# You may also override the following:
							 | 
						||
| 
								 | 
							
								: ${api_level:=21}  # Minimum Android API level the build will run on
							 | 
						||
| 
								 | 
							
								: ${PREFIX:-}  # Path in which to find required libraries
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Print all messages on stderr so they're visible when running within build-wheel.
							 | 
						||
| 
								 | 
							
								log() {
							 | 
						||
| 
								 | 
							
								    echo "$1" >&2
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								fail() {
							 | 
						||
| 
								 | 
							
								    log "$1"
							 | 
						||
| 
								 | 
							
								    exit 1
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# When moving to a new version of the NDK, carefully review the following:
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# * https://developer.android.com/ndk/downloads/revision_history
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# * 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=$ANDROID_HOME/ndk/$ndk_version
							 | 
						||
| 
								 | 
							
								if ! [ -e $ndk ]; then
							 | 
						||
| 
								 | 
							
								    log "Installing NDK: this may take several minutes"
							 | 
						||
| 
								 | 
							
								    yes | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager "ndk;$ndk_version"
							 | 
						||
| 
								 | 
							
								fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if [ $HOST = "arm-linux-androideabi" ]; then
							 | 
						||
| 
								 | 
							
								    clang_triplet=armv7a-linux-androideabi
							 | 
						||
| 
								 | 
							
								else
							 | 
						||
| 
								 | 
							
								    clang_triplet=$HOST
							 | 
						||
| 
								 | 
							
								fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# These variables are based on BuildSystemMaintainers.md above, and
							 | 
						||
| 
								 | 
							
								# $ndk/build/cmake/android.toolchain.cmake.
							 | 
						||
| 
								 | 
							
								toolchain=$(echo $ndk/toolchains/llvm/prebuilt/*)
							 | 
						||
| 
								 | 
							
								export AR="$toolchain/bin/llvm-ar"
							 | 
						||
| 
								 | 
							
								export AS="$toolchain/bin/llvm-as"
							 | 
						||
| 
								 | 
							
								export CC="$toolchain/bin/${clang_triplet}${api_level}-clang"
							 | 
						||
| 
								 | 
							
								export CXX="${CC}++"
							 | 
						||
| 
								 | 
							
								export LD="$toolchain/bin/ld"
							 | 
						||
| 
								 | 
							
								export NM="$toolchain/bin/llvm-nm"
							 | 
						||
| 
								 | 
							
								export RANLIB="$toolchain/bin/llvm-ranlib"
							 | 
						||
| 
								 | 
							
								export READELF="$toolchain/bin/llvm-readelf"
							 | 
						||
| 
								 | 
							
								export STRIP="$toolchain/bin/llvm-strip"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# The quotes make sure the wildcard in the `toolchain` assignment has been expanded.
							 | 
						||
| 
								 | 
							
								for path in "$AR" "$AS" "$CC" "$CXX" "$LD" "$NM" "$RANLIB" "$READELF" "$STRIP"; do
							 | 
						||
| 
								 | 
							
								    if ! [ -e "$path" ]; then
							 | 
						||
| 
								 | 
							
								        fail "$path does not exist"
							 | 
						||
| 
								 | 
							
								    fi
							 | 
						||
| 
								 | 
							
								done
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export CFLAGS=""
							 | 
						||
| 
								 | 
							
								export LDFLAGS="-Wl,--build-id=sha1 -Wl,--no-rosegment"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Many packages get away with omitting -lm on Linux, but Android is stricter.
							 | 
						||
| 
								 | 
							
								LDFLAGS="$LDFLAGS -lm"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# -mstackrealign is included where necessary in the clang launcher scripts which are
							 | 
						||
| 
								 | 
							
								# pointed to by $CC, so we don't need to include it here.
							 | 
						||
| 
								 | 
							
								if [ $HOST = "arm-linux-androideabi" ]; then
							 | 
						||
| 
								 | 
							
								    CFLAGS="$CFLAGS -march=armv7-a -mthumb"
							 | 
						||
| 
								 | 
							
								fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if [ -n "${PREFIX:-}" ]; then
							 | 
						||
| 
								 | 
							
								    abs_prefix=$(realpath $PREFIX)
							 | 
						||
| 
								 | 
							
								    CFLAGS="$CFLAGS -I$abs_prefix/include"
							 | 
						||
| 
								 | 
							
								    LDFLAGS="$LDFLAGS -L$abs_prefix/lib"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    export PKG_CONFIG="pkg-config --define-prefix"
							 | 
						||
| 
								 | 
							
								    export PKG_CONFIG_LIBDIR="$abs_prefix/lib/pkgconfig"
							 | 
						||
| 
								 | 
							
								fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Use the same variable name as conda-build
							 | 
						||
| 
								 | 
							
								if [ $(uname) = "Darwin" ]; then
							 | 
						||
| 
								 | 
							
								    export CPU_COUNT=$(sysctl -n hw.ncpu)
							 | 
						||
| 
								 | 
							
								else
							 | 
						||
| 
								 | 
							
								    export CPU_COUNT=$(nproc)
							 | 
						||
| 
								 | 
							
								fi
							 |