diff options
author | Andy Polyakov <appro@openssl.org> | 2018-03-16 12:14:28 +0100 |
---|---|---|
committer | Andy Polyakov <appro@openssl.org> | 2018-03-19 14:31:30 +0100 |
commit | f39276fdff6ccc1c71bdb30a8050fa1c0bf6e20a (patch) | |
tree | ea6c67b6627d94d554d5cde4e1417d884993934c /NOTES.ANDROID | |
parent | 87ba25ee3fd152d807496609e821a9f5fc950d02 (diff) |
Add NOTES.ANDROID.
Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/5613)
Diffstat (limited to 'NOTES.ANDROID')
-rw-r--r-- | NOTES.ANDROID | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/NOTES.ANDROID b/NOTES.ANDROID new file mode 100644 index 0000000000..f6c28d28ad --- /dev/null +++ b/NOTES.ANDROID @@ -0,0 +1,67 @@ + + NOTES FOR ANDROID PLATFORMS + =========================== + + Requirement details + ------------------- + + Beside basic tools like perl and make you'll need to download the Android + NDK. It's available for Linux, Mac OS X and Windows, but only Linux + version was actually tested. There is no reason to believe that Mac OS X + wouldn't work. And as for Windows, it's unclear which "shell" would be + suitable, MSYS2 might have best chances. NDK version should play lesser + role, the goal is to support a range of most recent versions. + + Configuration + ------------- + + Android is naturally cross-compiled target and you can't use ./config. + You have to use ./Configure and name your target explicitly; there are + android-arm, android-arm64, android-mips, android-mip64, android-x86 + and android-x86_64. Do not pass --cross-compile-prefix (as you might + be tempted), as it will be "calculated" automatically based on chosen + platform. Though you still need to know the prefix to extend your PATH, + in order to invoke $(CROSS_COMPILE)gcc and company. (Configure will fail + and give you a hint if you get it wrong.) Apart from PATH adjustment + you need to set ANDROID_NDK environment to point at NDK directory + as /some/where/android-ndk-<ver>. NDK customarily supports multiple + Android API levels, e.g. android-14, android-21, etc. By default latest + one available is chosen. If you need to target older platform, pass + additional -D__ANDROID_API__=N to Configure. N is numeric value of the + target platform version. For example, to compile for ICS on ARM with + NDK 10d: + + ANDROID_NDK=/some/where/android-ndk-10d + PATH=$ANDROID_NDK/toolchains/arm-linux-androideabi-4.8/prebuild/linux-x86_64/bin:$PATH + ./Configure android-arm -D__ANDROID_API__=14 + + Caveat lector! Earlier OpenSSL versions relied on additional CROSS_SYSROOT + variable set to $ANDROID_NDK/platforms/android-<api>/arch-<arch> to + appoint headers-n-libraries' location. It's still recognized in order + to facilitate migration from older projects. However, since API level + appears in CROSS_SYSROOT value, passing -D__ANDROID_API__=N can be in + conflict, and mixing the two is therefore not supported. Migration to + CROSS_SYSROOT-less setup is recommended. + + One can engage clang by passing CC=clang to Configure. In such case + PATH needs even more adjustments to cover NDK's clang itself, as well + as unprefixed, yet target-specific, ar and ranlib (or not, if you use + binutils-multiarch on your Linux). + + Running tests (on Linux) + ------------------------ + + This is not actually supported. Notes are meant rather as inspiration. + + Even though build output targets alien system, it's possible to execute + test suite on Linux system by employing qemu-user. The trick is static + linking. Pass -static to Configure, then edit generated Makefile and + remove occurrences of -ldl and -pie flags. You would also need to pick + API version that comes with usable static libraries, 42/2=21 used to + work. Once built, you should be able to + + env EXE_SHELL=qemu-<arch> make test + + If you need to pass additional flag to qemu, quotes are your friend, e.g. + + env EXE_SHELL="qemu-mips64el -cpu MIPS64R6-generic" make test |