@@ -6,10 +6,11 @@ usage()
66{
77 echo " Creates a toolchain and sysroot used for cross-compiling for Android."
88 echo
9- echo " Usage: $0 [BuildArch] [ApiLevel]"
9+ echo " Usage: $0 [BuildArch] [ApiLevel] [--ndk NDKVersion] "
1010 echo
1111 echo " BuildArch is the target architecture of Android. Currently only arm64 is supported."
1212 echo " ApiLevel is the target Android API level. API levels usually match to Android releases. See https://source.android.com/source/build-numbers.html"
13+ echo " NDKVersion is the version of Android NDK. The default is r21. See https://developer.android.com/ndk/downloads/revision_history"
1314 echo
1415 echo " By default, the toolchain and sysroot will be generated in cross/android-rootfs/toolchain/[BuildArch]. You can change this behavior"
1516 echo " by setting the TOOLCHAIN_DIR environment variable"
@@ -25,10 +26,15 @@ __BuildArch=arm64
2526__AndroidArch=aarch64
2627__AndroidToolchain=aarch64-linux-android
2728
28- for i in " $@ "
29- do
30- lowerI=" $( echo $i | tr " [:upper:]" " [:lower:]" ) "
31- case $lowerI in
29+ while : ; do
30+ if [[ " $# " -le 0 ]]; then
31+ break
32+ fi
33+
34+ i=$1
35+
36+ lowerI=" $( echo $i | tr " [:upper:]" " [:lower:]" ) "
37+ case $lowerI in
3238 -? |-h|--help)
3339 usage
3440 exit 1
@@ -43,15 +49,28 @@ for i in "$@"
4349 __AndroidArch=arm
4450 __AndroidToolchain=arm-linux-androideabi
4551 ;;
52+ --ndk)
53+ shift
54+ __NDK_Version=$1
55+ ;;
4656 * [0-9])
4757 __ApiLevel=$i
4858 ;;
4959 * )
5060 __UnprocessedBuildArgs=" $__UnprocessedBuildArgs $i "
5161 ;;
5262 esac
63+ shift
5364done
5465
66+ if [[ " $__NDK_Version " == " r21" ]] || [[ " $__NDK_Version " == " r22" ]]; then
67+ __NDK_File_Arch_Spec=-x86_64
68+ __SysRoot=sysroot
69+ else
70+ __NDK_File_Arch_Spec=
71+ __SysRoot=toolchains/llvm/prebuilt/linux-x86_64/sysroot
72+ fi
73+
5574# Obtain the location of the bash script to figure out where the root of the repo is.
5675__ScriptBaseDir=" $( cd " $( dirname " ${BASH_SOURCE[0]} " ) " && pwd ) "
5776
7897
7998echo " Target API level: $__ApiLevel "
8099echo " Target architecture: $__BuildArch "
100+ echo " NDK version: $__NDK_Version "
81101echo " NDK location: $__NDK_Dir "
82102echo " Target Toolchain location: $__ToolchainDir "
83103
84104# Download the NDK if required
85105if [ ! -d $__NDK_Dir ]; then
86106 echo Downloading the NDK into $__NDK_Dir
87107 mkdir -p $__NDK_Dir
88- wget -q --progress=bar:force:noscroll --show-progress https://dl.google.com/android/repository/android-ndk-$__NDK_Version -linux-x86_64 .zip -O $__CrossDir /android-ndk-$__NDK_Version -linux-x86_64 .zip
89- unzip -q $__CrossDir /android-ndk-$__NDK_Version -linux-x86_64 .zip -d $__CrossDir
108+ wget -q --progress=bar:force:noscroll --show-progress https://dl.google.com/android/repository/android-ndk-$__NDK_Version -linux$__NDK_File_Arch_Spec .zip -O $__CrossDir /android-ndk-$__NDK_Version -linux.zip
109+ unzip -q $__CrossDir /android-ndk-$__NDK_Version -linux.zip -d $__CrossDir
90110fi
91111
92112if [ ! -d $__lldb_Dir ]; then
@@ -116,16 +136,11 @@ for path in $(wget -qO- https://packages.termux.dev/termux-main-21/dists/stable/
116136 fi
117137done
118138
119- cp -R " $__TmpDir /data/data/com.termux/files/usr/" * " $__ToolchainDir /sysroot /usr/"
139+ cp -R " $__TmpDir /data/data/com.termux/files/usr/" * " $__ToolchainDir /$__SysRoot /usr/"
120140
121141# Generate platform file for build.sh script to assign to __DistroRid
122142echo " Generating platform file..."
123- echo " RID=android.${__ApiLevel} -${__BuildArch} " > $__ToolchainDir /sysroot/android_platform
124-
125- echo " Now to build coreclr, libraries and installers; run:"
126- echo ROOTFS_DIR=\$\( realpath $__ToolchainDir /sysroot\) ./build.sh --cross --arch $__BuildArch \
127- --subsetCategory coreclr
128- echo ROOTFS_DIR=\$\( realpath $__ToolchainDir /sysroot\) ./build.sh --cross --arch $__BuildArch \
129- --subsetCategory libraries
130- echo ROOTFS_DIR=\$\( realpath $__ToolchainDir /sysroot\) ./build.sh --cross --arch $__BuildArch \
131- --subsetCategory installer
143+ echo " RID=android.${__ApiLevel} -${__BuildArch} " > $__ToolchainDir /$__SysRoot /android_platform
144+
145+ echo " Now to build coreclr, libraries and host; run:"
146+ echo ROOTFS_DIR=$( realpath $__ToolchainDir /$__SysRoot ) ./build.sh clr+libs+host --cross --arch $__BuildArch
0 commit comments