Add support for building with the Android NDK.
Previously I've been using the Linaro toolchains and just building
static binaries. However, the Linaro toolchains have a broken
pthread_rwlock_wrlock—it does nothing and then unlocking corrupts the
lock.
Building with the Android NDK avoids this.
These build instructions depend on
https://github.com/taka-no-me/android-cmake which people will need to
clone into util/ if they want to use the Android NDK.
Change-Id: Ic64919f9399af2a57e8df4fb4b3400865ddb2427
Reviewed-on: https://boringssl-review.googlesource.com/4600
Reviewed-by: Adam Langley <agl@google.com>
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 75a75f5..6e41ee9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2,9 +2,16 @@
project (BoringSSL)
-find_package(Perl REQUIRED)
+if(ANDROID)
+ # Android-NDK CMake files reconfigure the path and so Go and Perl won't be
+ # found. However, ninja will still find them in $PATH if we just name them.
+ set(PERL_EXECUTABLE "perl")
+ set(GO_EXECUTABLE "go")
+else()
+ find_package(Perl REQUIRED)
+ find_program(GO_EXECUTABLE go)
+endif()
-find_program(GO_EXECUTABLE go)
if (NOT GO_EXECUTABLE)
message(FATAL_ERROR "Could not find Go")
endif()
@@ -97,12 +104,21 @@
set(ARCH "x86")
elseif (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "arm")
set(ARCH "arm")
+elseif (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "armv7-a")
+ set(ARCH "arm")
elseif (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "aarch64")
set(ARCH "aarch64")
else()
message(FATAL_ERROR "Unknown processor:" ${CMAKE_SYSTEM_PROCESSOR})
endif()
+if (ANDROID AND ${ARCH} STREQUAL "arm")
+ # The Android-NDK CMake files somehow fail to set the -march flag for
+ # assembly files. Without this flag, the compiler believes that it's
+ # building for ARMv5.
+ set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -march=armv7-a")
+endif()
+
if (${ARCH} STREQUAL "x86" AND APPLE)
# With CMake 2.8.x, ${CMAKE_SYSTEM_PROCESSOR} evalutes to i386 on OS X,
# but clang defaults to 64-bit builds on OS X unless otherwise told.