aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--toolchain/Android.cmake76
-rw-r--r--toolchain/deployment-file.json.in4
-rw-r--r--toolchain/specifydependencies.cmake3
3 files changed, 24 insertions, 59 deletions
diff --git a/toolchain/Android.cmake b/toolchain/Android.cmake
index df9d9b0e..14d5b901 100644
--- a/toolchain/Android.cmake
+++ b/toolchain/Android.cmake
@@ -133,7 +133,7 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-cmake_minimum_required(VERSION "3.1")
+cmake_minimum_required(VERSION "3.7")
#input
set(ANDROID_NDK "$ENV{ANDROID_NDK}" CACHE path "Android NDK path")
@@ -146,21 +146,18 @@ set(ANDROID_GCC_VERSION "4.9" CACHE string "Used GCC version" )
set(ANDROID_API_LEVEL "14" CACHE string "Android API Level")
set(ANDROID_SDK_BUILD_TOOLS_REVISION "21.1.1" CACHE string "Android API Level")
-set(_HOST "${CMAKE_HOST_SYSTEM_NAME}-${CMAKE_HOST_SYSTEM_PROCESSOR}")
-string(TOLOWER "${_HOST}" _HOST)
-get_filename_component(_CMAKE_ANDROID_DIR "${CMAKE_TOOLCHAIN_FILE}" PATH)
-
-set(CMAKE_SYSROOT
- "${ANDROID_NDK}/platforms/android-${ANDROID_API_LEVEL}/arch-${ANDROID_ARCHITECTURE}")
-if(NOT EXISTS ${CMAKE_SYSROOT})
- message(FATAL_ERROR "Couldn't find the Android NDK Root in ${CMAKE_SYSROOT}")
+set(CMAKE_ANDROID_NDK ${ANDROID_NDK})
+set(CMAKE_SYSTEM_VERSION ${ANDROID_API_LEVEL})
+set(CMAKE_ANDROID_ARCH ${ANDROID_ARCHITECTURE})
+set(CMAKE_ANDROID_ARCH_ABI ${ANDROID_ABI})
+set(CMAKE_SYSTEM_NAME Android)
+if (NOT CMAKE_ANDROID_STL_TYPE)
+ set(CMAKE_ANDROID_STL_TYPE gnustl_shared)
endif()
-#actual code
-SET(CMAKE_SYSTEM_NAME Android)
-SET(CMAKE_SYSTEM_VERSION 1)
-SET(ANDROID TRUE)
+include(${CMAKE_ROOT}/Modules/Platform/Android-GNU.cmake REQUIRED)
+include(${CMAKE_ROOT}/Modules/Platform/Android-Initialize.cmake REQUIRED)
if (NOT DEFINED ECM_ADDITIONAL_FIND_ROOT_PATH)
SET(ECM_ADDITIONAL_FIND_ROOT_PATH ${CMAKE_PREFIX_PATH})
@@ -171,55 +168,11 @@ set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
-set(ANDROID_TOOLCHAIN_ROOT "${ANDROID_NDK}/toolchains/${ANDROID_TOOLCHAIN}-${ANDROID_GCC_VERSION}/prebuilt/${_HOST}/bin")
-set(ANDROID_LIBS_ROOT "${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/${ANDROID_GCC_VERSION}")
-
-# includes
-include_directories(SYSTEM
- "${CMAKE_SYSROOT}/usr/include"
- "${ANDROID_LIBS_ROOT}/include/"
- "${ANDROID_LIBS_ROOT}/libs/${ANDROID_ABI}/include"
- "${ANDROID_NDK}/sysroot/usr/include"
- "${ANDROID_NDK}/sysroot/usr/include/${ANDROID_COMPILER_PREFIX}"
-)
-
-# libraries
-set(ANDROID_LIBRARIES_PATH
- "${CMAKE_SYSROOT}/usr/lib")
-set(CMAKE_SYSTEM_LIBRARY_PATH
- ${ANDROID_LIBRARIES_PATH}
- "${ANDROID_LIBS_ROOT}/libs/${ANDROID_ABI}/"
-)
-set(CMAKE_FIND_LIBRARY_SUFFIXES ".so")
-set(CMAKE_FIND_LIBRARY_PREFIXES "lib")
-
-# Settling hard on gnustl_shared as C++ helper runtime for now,
-# given this is most similar to what is on GNU/Linux, which is what
-# the average software targetted by this toolchain is built against otherwise.
-# If requested by devs, the used helper runtime could be made an option later.
-# Related info: https://developer.android.com/ndk/guides/cpp-support.html
-find_library(GNUSTL_SHARED gnustl_shared)
-if(NOT GNUSTL_SHARED)
- message(FATAL_ERROR "Selected Android platform does not provide gnustl_shared: ${CMAKE_SYSTEM_LIBRARY_PATH}")
-endif()
-
-link_directories(${CMAKE_SYSTEM_LIBRARY_PATH})
-
-set(CMAKE_C_COMPILER "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_COMPILER_PREFIX}-gcc")
-set(CMAKE_CXX_COMPILER "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_COMPILER_PREFIX}-g++")
-
-set(CMAKE_EXE_LINKER_FLAGS "${GNUSTL_SHARED} -Wl,-rpath-link,${ANDROID_LIBRARIES_PATH} -llog -lz -lm -ldl -lc -lgcc" CACHE STRING "")
-set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}" CACHE STRING "")
-set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}" CACHE STRING "")
-
#we want executables to be shared libraries, hooks will invoke the exported cmake function
set(CMAKE_CXX_LINK_EXECUTABLE
"<CMAKE_CXX_COMPILER> <CMAKE_SHARED_LIBRARY_CXX_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS> <SONAME_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>"
)
-# ANDROID is needed for Qt to define Q_OS_ANDROID, __ANDROID_API__ is expected by the Android NDK
-add_definitions(-DANDROID -D__ANDROID_API__=${ANDROID_API_LEVEL})
-
set(ECM_DIR "${CMAKE_CURRENT_LIST_DIR}/../cmake" CACHE STRING "")
######### generation
@@ -229,6 +182,7 @@ set(CREATEAPK_TARGET_NAME "create-apk-${QTANDROID_EXPORTED_TARGET}")
# from CMakeDetermineSystem.cmake and from CMakeSystem.cmake generated within the
# build directory.
if(DEFINED QTANDROID_EXPORTED_TARGET AND NOT TARGET ${CREATEAPK_TARGET_NAME})
+ get_filename_component(_CMAKE_ANDROID_DIR "${CMAKE_TOOLCHAIN_FILE}" PATH)
if(NOT DEFINED ANDROID_APK_DIR)
message(FATAL_ERROR "Define an apk dir to initialize from using -DANDROID_APK_DIR=<path>. The specified directory must contain the AndroidManifest.xml file.")
elseif(NOT EXISTS "${ANDROID_APK_DIR}/AndroidManifest.xml")
@@ -259,12 +213,20 @@ if(DEFINED QTANDROID_EXPORTED_TARGET AND NOT TARGET ${CREATEAPK_TARGET_NAME})
set(EXTRA_PREFIX_DIRS "\"${prefix}\"")
endif()
endforeach()
+ string(TOLOWER "${CMAKE_HOST_SYSTEM_NAME}" _LOWER_CMAKE_HOST_SYSTEM_NAME)
configure_file("${_CMAKE_ANDROID_DIR}/deployment-file.json.in" "${QTANDROID_EXPORTED_TARGET}-deployment.json.in")
if (CMAKE_GENERATOR STREQUAL "Unix Makefiles")
set(arguments "\\$(ARGS)")
endif()
+ function(havestl var access VALUE)
+ if (NOT VALUE STREQUAL "")
+ file(WRITE ${CMAKE_BINARY_DIR}/stl "${VALUE}")
+ endif()
+ endfunction()
+ variable_watch(CMAKE_CXX_STANDARD_LIBRARIES havestl)
+
add_custom_target(${CREATEAPK_TARGET_NAME}
COMMAND cmake -E echo "Generating $<TARGET_NAME:${QTANDROID_EXPORTED_TARGET}> with $<TARGET_FILE_DIR:Qt5::qmake>/androiddeployqt"
COMMAND cmake -E remove_directory "${EXPORT_DIR}"
diff --git a/toolchain/deployment-file.json.in b/toolchain/deployment-file.json.in
index 92b1bba2..4eb579b5 100644
--- a/toolchain/deployment-file.json.in
+++ b/toolchain/deployment-file.json.in
@@ -5,7 +5,7 @@
"toolchain-prefix": "@ANDROID_TOOLCHAIN@",
"tool-prefix": "@ANDROID_COMPILER_PREFIX@",
"toolchain-version": "@ANDROID_GCC_VERSION@",
- "ndk-host": "@_HOST@",
+ "ndk-host": "@_LOWER_CMAKE_HOST_SYSTEM_NAME@-@CMAKE_HOST_SYSTEM_PROCESSOR@",
"target-architecture": "@ANDROID_ABI@",
"application-binary": "@EXECUTABLE_DESTINATION_PATH@",
"qml-root-path": "@CMAKE_SOURCE_DIR@",
@@ -13,7 +13,7 @@
##EXTRALIBS##
##EXTRAPLUGINS##
"android-package-source-directory": "@ANDROID_APK_DIR@",
- "stdcpp-path": "@GNUSTL_SHARED@",
+ "stdcpp-path":##CMAKE_CXX_STANDARD_LIBRARIES##,
"sdkBuildToolsRevision": "@ANDROID_SDK_BUILD_TOOLS_REVISION@",
"extraPrefixDirs": [ @EXTRA_PREFIX_DIRS@ ]
}
diff --git a/toolchain/specifydependencies.cmake b/toolchain/specifydependencies.cmake
index 8965d6da..a1bc4202 100644
--- a/toolchain/specifydependencies.cmake
+++ b/toolchain/specifydependencies.cmake
@@ -42,6 +42,9 @@ if(extraplugins)
endif()
file(READ "${INPUT_FILE}" CONTENTS)
+file(READ "stl" stl_contents)
+
string(REPLACE "##EXTRALIBS##" "${extralibs}" NEWCONTENTS "${CONTENTS}")
string(REPLACE "##EXTRAPLUGINS##" "${extraplugins}" NEWCONTENTS "${NEWCONTENTS}")
+string(REPLACE "##CMAKE_CXX_STANDARD_LIBRARIES##" "${stl_contents}" NEWCONTENTS "${NEWCONTENTS}")
file(WRITE "${OUTPUT_FILE}" ${NEWCONTENTS})