diff options
Diffstat (limited to 'Documentation/building/android.md')
-rw-r--r-- | Documentation/building/android.md | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/Documentation/building/android.md b/Documentation/building/android.md new file mode 100644 index 0000000000..cfb509dc2f --- /dev/null +++ b/Documentation/building/android.md @@ -0,0 +1,102 @@ +Cross Compilation for Android on Linux +====================================== + +Through cross compilation, on Linux it is possible to build CoreCLR for arm64 Android. + +Requirements +------------ + +You'll need to generate a toolchain and a sysroot for Android. There's a script which takes care of the required steps. + +Generating the rootfs +--------------------- + +To generate the rootfs, run the following command in the `coreclr` folder: + +``` +cross/init-android-rootfs.sh +``` + +This will download the NDK and any packages required to compile Android on your system. It's over 1 GB of data, so it may take a while. + + +Cross compiling CoreCLR +----------------------- +Once the rootfs has been generated, it will be possible to cross compile CoreCLR. + +When cross compiling, you need to set both the `CONFIG_DIR` and `ROOTFS_DIR` variables. + +To compile for arm64, run: + +``` +CONFIG_DIR=`realpath cross/android/arm64` ROOTFS_DIR=`realpath cross/android-rootfs/toolchain/arm64/sysroot` ./build.sh cross arm64 skipgenerateversion skipmscorlib cmakeargs -DENABLE_LLDBPLUGIN=0 +``` + +The resulting binaries will be found in `bin/Product/Linux.BuildArch.BuildType/` + +Running the PAL tests on Android +-------------------------------- + +You can run the PAL tests on an Android device. To run the tests, you first copy the PAL tests to your Android phone using +`adb`, and then run them in an interactive Android shell using `adb shell`: + +To copy the PAL tests over to an Android phone: +``` +adb push bin/obj/Linux.arm64.Debug/src/pal/tests/palsuite/ /data/local/tmp/coreclr/src/pal/tests/palsuite +adb push cross/android/toolchain/arm64/sysroot/usr/lib/libuuid.so.1 /data/local/tmp/coreclr/lib +adb push cross/android/toolchain/arm64/sysroot/usr/lib/libintl.so /data/local/tmp/coreclr/lib +adb push cross/android/toolchain/arm64/sysroot/usr/lib/libandroid-support.so /data/local/tmp/coreclr/lib/ +adb push cross/android/toolchain/arm64/sysroot/usr/lib/libandroid-glob.so /data/local/tmp/coreclr/lib/ +adb push src/pal/tests/palsuite/paltestlist.txt /data/local/tmp/coreclr +adb push src/pal/tests/palsuite/runpaltests.sh /data/local/tmp/coreclr/ +``` + +Then, use `adb shell` to launch a shell on Android. Inside that shell, you can launch the PAL tests: +``` +LD_LIBRARY_PATH=/data/local/tmp/coreclr/lib ./runpaltests.sh /data/local/tmp/coreclr/ +``` + +Debugging coreclr on Android +---------------------------- + +You can debug coreclr on Android using a remote lldb server which you run on your Android device. + +First, push the lldb server to Android: + +``` +adb push cross/android/lldb/2.2/android/arm64-v8a/lldb-server /data/local/tmp/ +``` + +Then, launch the lldb server on the Android device. Open a shell using `adb shell` and run: + +``` +adb shell +cd /data/local/tmp +./lldb-server platform --listen *:1234 +``` + +After that, you'll need to forward port 1234 from your Android device to your PC: +``` +adb forward tcp:1234 tcp:1234 +``` + +Finally, install lldb on your PC and connect to the debug server running on your Android device: + +``` +lldb-3.9 +(lldb) platform select remote-android + Platform: remote-android + Connected: no +(lldb) platform connect connect://localhost:1234 + Platform: remote-android + Triple: aarch64-*-linux-android +OS Version: 23.0.0 (3.10.84-perf-gf38969a) + Kernel: #1 SMP PREEMPT Fri Sep 16 11:29:29 2016 + Hostname: localhost + Connected: yes +WorkingDir: /data/local/tmp + +(lldb) target create coreclr/pal/tests/palsuite/file_io/CopyFileA/test4/paltest_copyfilea_test4 +(lldb) env LD_LIBRARY_PATH=/data/local/tmp/coreclr/lib +(lldb) run +``` |