THRIFT-3424 Add CMake android build option
Client: Build
Patch: Nobuaki Sukegawa
This closes #696
diff --git a/build/cmake/DefineOptions.cmake b/build/cmake/DefineOptions.cmake
index 0aad240..8f7659e 100644
--- a/build/cmake/DefineOptions.cmake
+++ b/build/cmake/DefineOptions.cmake
@@ -20,11 +20,17 @@
include(CMakeDependentOption)
+set(THRIFT_COMPILER "" CACHE FILEPATH "External Thrift compiler to use during build")
+
# Additional components
option(BUILD_COMPILER "Build Thrift compiler" ON)
-option(BUILD_TESTING "Build with unit tests" ON)
-option(BUILD_EXAMPLES "Build examples" ON)
-option(BUILD_TUTORIALS "Build Thrift tutorials" ON)
+
+if(BUILD_COMPILER OR EXISTS ${THRIFT_COMPILER})
+ set(HAVE_COMPILER ON)
+endif()
+CMAKE_DEPENDENT_OPTION(BUILD_TESTING "Build with unit tests" ON "HAVE_COMPILER" OFF)
+CMAKE_DEPENDENT_OPTION(BUILD_EXAMPLES "Build examples" ON "HAVE_COMPILER" OFF)
+CMAKE_DEPENDENT_OPTION(BUILD_TUTORIALS "Build Thrift tutorials" ON "HAVE_COMPILER" OFF)
option(BUILD_LIBRARIES "Build Thrift libraries" ON)
# Libraries to build
@@ -74,10 +80,16 @@
"BUILD_LIBRARIES;WITH_C_GLIB;GLIB_FOUND" OFF)
# Java
option(WITH_JAVA "Build Java Thrift library" ON)
-find_package(Java QUIET)
-find_package(Ant QUIET)
-CMAKE_DEPENDENT_OPTION(BUILD_JAVA "Build Java library" ON
- "BUILD_LIBRARIES;WITH_JAVA;JAVA_FOUND;ANT_FOUND" OFF)
+if(ANDROID)
+ find_package(Gradle QUIET)
+ CMAKE_DEPENDENT_OPTION(BUILD_JAVA "Build Java library" ON
+ "BUILD_LIBRARIES;WITH_JAVA;GRADLE_FOUND" OFF)
+else()
+ find_package(Java REQUIRED)
+ find_package(Ant QUIET)
+ CMAKE_DEPENDENT_OPTION(BUILD_JAVA "Build Java library" ON
+ "BUILD_LIBRARIES;WITH_JAVA;JAVA_FOUND;ANT_FOUND" OFF)
+endif()
# Python
option(WITH_PYTHON "Build Python Thrift library" ON)
@@ -120,7 +132,9 @@
message(STATUS "Build configuration Summary")
message(STATUS " Build Thrift compiler: ${BUILD_COMPILER}")
message(STATUS " Build with unit tests: ${BUILD_TESTING}")
+MESSAGE_DEP(HAVE_COMPILER "Disabled because BUILD_THRIFT=OFF and no valid THRIFT_COMPILER is given")
message(STATUS " Build examples: ${BUILD_EXAMPLES}")
+MESSAGE_DEP(HAVE_COMPILER "Disabled because BUILD_THRIFT=OFF and no valid THRIFT_COMPILER is given")
message(STATUS " Build Thrift libraries: ${BUILD_LIBRARIES}")
message(STATUS " Language libraries:")
message(STATUS " Build C++ library: ${BUILD_CPP}")
@@ -131,8 +145,12 @@
MESSAGE_DEP(GLIB_FOUND "GLib missing")
message(STATUS " Build Java library: ${BUILD_JAVA}")
MESSAGE_DEP(WITH_JAVA "Disabled by via WITH_JAVA=OFF")
-MESSAGE_DEP(JAVA_FOUND "Java Runtime missing")
-MESSAGE_DEP(ANT_FOUND "Ant missing")
+if(ANDROID)
+ MESSAGE_DEP(GRADLE_FOUND "Gradle missing")
+else()
+ MESSAGE_DEP(JAVA_FOUND "Java Runtime missing")
+ MESSAGE_DEP(ANT_FOUND "Ant missing")
+endif()
message(STATUS " Build Python library: ${BUILD_PYTHON}")
MESSAGE_DEP(WITH_PYTHON "Disabled by via WITH_PYTHON=OFF")
MESSAGE_DEP(PYTHONLIBS_FOUND "Python libraries missing")
diff --git a/build/cmake/FindAnt.cmake b/build/cmake/FindAnt.cmake
index 16b9afd..8b0371d 100644
--- a/build/cmake/FindAnt.cmake
+++ b/build/cmake/FindAnt.cmake
@@ -18,8 +18,8 @@
#
-# Ant_FOUND - system has Ant
-# Ant_EXECUTBALE - the Ant executable
+# ANT_FOUND - system has Ant
+# Ant_EXECUTABLE - the Ant executable
#
# It will search the environment variable ANT_HOME if it is set
diff --git a/build/cmake/FindGradle.cmake b/build/cmake/FindGradle.cmake
new file mode 100644
index 0000000..8845d69
--- /dev/null
+++ b/build/cmake/FindGradle.cmake
@@ -0,0 +1,30 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+
+# GRADLE_FOUND - system has Gradle
+# GRADLE_EXECUTABLE - the Gradle executable
+#
+# It will search the environment variable ANT_HOME if it is set
+
+include(FindPackageHandleStandardArgs)
+
+find_program(GRADLE_EXECUTABLE NAMES gradle PATHS $ENV{GRADLE_HOME}/bin NO_CMAKE_FIND_ROOT_PATH)
+find_package_handle_standard_args(Gradle DEFAULT_MSG GRADLE_EXECUTABLE)
+mark_as_advanced(GRADLE_EXECUTABLE)
diff --git a/build/cmake/android-toolchain.cmake b/build/cmake/android-toolchain.cmake
new file mode 100644
index 0000000..15f3d00
--- /dev/null
+++ b/build/cmake/android-toolchain.cmake
@@ -0,0 +1,26 @@
+set(ANDROID_NDK "/opt/android-ndk" CACHE)
+set(ANDROID_PLATFORM "android-15" CACHE)
+set(ANDROID_ARCH "arch-arm" CACHE)
+set(ANDROID_TOOL_ARCH "android-arm" CACHE)
+set(ANDROID_CPU "armeabi-v7a" CACHE)
+set(ANDROID_GCC_VERSION 4.9 CACHE)
+set(HOST_ARCH linux-x86_64 CACHE)
+
+set(CMAKE_SYSTEM_NAME Android)
+set(ANDROID_SYSROOT "${ANDROID_NDK}/platforms/${ANDROID_PLATFORM}/${ANDROID_ARCH}")
+set(ANDROID_TRIPLET arm-linux-androideabi)
+set(ANDROID_STL "${ANDROID_NDK}/sources/cxx-stl/gnu-libstd++/${ANDROID_GCC_VERSION}")
+
+set(_COMPILER_ROOT ${ANDROID_NDK}/prebuilt/${ANDROID_TRIPLET}-${ANDROID_GCC_VERSION}/prebuilt/${HOST_ARCH})
+set(CMAKE_C_COMPILER ${_COMPILER_ROOT}/bin/${ANDROID_TRIPLET}-gcc)
+set(CMAKE_CXCX_COMPILER ${_COMPILER_ROOT}/bin/${ANDROID_TRIPLET}-g++)
+
+include_directories(
+ ${ANDROID_STL}/include
+ ${ANDROID_STL}/libs/${ANDROID_CPU}/include)
+
+set(CMAKE_FIND_ROOT_PATH ${ANDROID_SYSROOT})
+
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)