@@ -6,10 +6,11 @@ usage()
6
6
{
7
7
echo " Creates a toolchain and sysroot used for cross-compiling for Android."
8
8
echo
9
- echo " Usage: $0 [BuildArch] [ApiLevel]"
9
+ echo " Usage: $0 [BuildArch] [ApiLevel] [--ndk NDKVersion] "
10
10
echo
11
11
echo " BuildArch is the target architecture of Android. Currently only arm64 is supported."
12
12
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"
13
14
echo
14
15
echo " By default, the toolchain and sysroot will be generated in cross/android-rootfs/toolchain/[BuildArch]. You can change this behavior"
15
16
echo " by setting the TOOLCHAIN_DIR environment variable"
@@ -25,10 +26,15 @@ __BuildArch=arm64
25
26
__AndroidArch=aarch64
26
27
__AndroidToolchain=aarch64-linux-android
27
28
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
32
38
-? |-h|--help)
33
39
usage
34
40
exit 1
@@ -43,15 +49,28 @@ for i in "$@"
43
49
__AndroidArch=arm
44
50
__AndroidToolchain=arm-linux-androideabi
45
51
;;
52
+ --ndk)
53
+ shift
54
+ __NDK_Version=$1
55
+ ;;
46
56
* [0-9])
47
57
__ApiLevel=$i
48
58
;;
49
59
* )
50
60
__UnprocessedBuildArgs=" $__UnprocessedBuildArgs $i "
51
61
;;
52
62
esac
63
+ shift
53
64
done
54
65
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
+
55
74
# Obtain the location of the bash script to figure out where the root of the repo is.
56
75
__ScriptBaseDir=" $( cd " $( dirname " ${BASH_SOURCE[0]} " ) " && pwd ) "
57
76
78
97
79
98
echo " Target API level: $__ApiLevel "
80
99
echo " Target architecture: $__BuildArch "
100
+ echo " NDK version: $__NDK_Version "
81
101
echo " NDK location: $__NDK_Dir "
82
102
echo " Target Toolchain location: $__ToolchainDir "
83
103
84
104
# Download the NDK if required
85
105
if [ ! -d $__NDK_Dir ]; then
86
106
echo Downloading the NDK into $__NDK_Dir
87
107
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
90
110
fi
91
111
92
112
if [ ! -d $__lldb_Dir ]; then
@@ -116,16 +136,11 @@ for path in $(wget -qO- https://packages.termux.dev/termux-main-21/dists/stable/
116
136
fi
117
137
done
118
138
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/"
120
140
121
141
# Generate platform file for build.sh script to assign to __DistroRid
122
142
echo " 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