|
|
|
@ -813,9 +813,8 @@ if( BUILD_WITH_ANDROID_NDK ) |
|
|
|
|
else() |
|
|
|
|
message( FATAL_ERROR "Unknown runtime: ${ANDROID_STL}" ) |
|
|
|
|
endif() |
|
|
|
|
|
|
|
|
|
# find libsupc++.a - rtti & exceptions |
|
|
|
|
if( ANDROID_STL STREQUAL "system_re" OR ANDROID_STL MATCHES "gnustl" ) |
|
|
|
|
# find libsupc++.a |
|
|
|
|
if( ANDROID_NDK_RELEASE STRGREATER "r8" ) # r8b |
|
|
|
|
set( __libsupcxx "${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/${ANDROID_COMPILER_VERSION}/libs/${ANDROID_NDK_ABI_NAME}/libsupc++.a" ) |
|
|
|
|
elseif( NOT ANDROID_NDK_RELEASE STRLESS "r7" AND ANDROID_NDK_RELEASE STRLESS "r8b") |
|
|
|
@ -853,21 +852,47 @@ if( BUILD_WITH_STANDALONE_TOOLCHAIN ) |
|
|
|
|
else() |
|
|
|
|
list( APPEND ANDROID_STL_INCLUDE_DIRS "${ANDROID_STL_INCLUDE_DIRS}/${ANDROID_TOOLCHAIN_MACHINE_NAME}" ) |
|
|
|
|
endif() |
|
|
|
|
# always search static GNU STL to get the location of libsupc++.a |
|
|
|
|
if( ARMEABI_V7A AND NOT ANDROID_FORCE_ARM_BUILD AND EXISTS "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/thumb/libstdc++.a" ) |
|
|
|
|
set( __libstl "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/thumb" ) |
|
|
|
|
elseif( ARMEABI_V7A AND EXISTS "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/libstdc++.a" ) |
|
|
|
|
set( __libstl "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}" ) |
|
|
|
|
elseif( ARMEABI AND NOT ANDROID_FORCE_ARM_BUILD AND EXISTS "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/thumb/libstdc++.a" ) |
|
|
|
|
set( __libstl "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/thumb" ) |
|
|
|
|
elseif( EXISTS "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/libstdc++.a" ) |
|
|
|
|
set( __libstl "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib" ) |
|
|
|
|
endif() |
|
|
|
|
if( __libstl ) |
|
|
|
|
set( __libsupcxx "${__libstl}/libsupc++.a" ) |
|
|
|
|
set( __libstl "${__libstl}/libstdc++.a" ) |
|
|
|
|
endif() |
|
|
|
|
if( NOT EXISTS "${__libsupcxx}" ) |
|
|
|
|
message( FATAL_ERROR "TODO: missing stdsupc++ in NDK r7 error" ) |
|
|
|
|
endif() |
|
|
|
|
if( ANDROID_STL STREQUAL "gnustl_shared" ) |
|
|
|
|
if( ARMEABI_V7A AND EXISTS "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/libgnustl_shared.so" ) |
|
|
|
|
set( __libstl "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/libgnustl_shared.so" ) |
|
|
|
|
elseif( ARMEABI AND NOT ANDROID_FORCE_ARM_BUILD AND EXISTS "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/thumb/libgnustl_shared.so" ) |
|
|
|
|
set( __libstl "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/thumb/libgnustl_shared.so" ) |
|
|
|
|
elseif( EXISTS "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/libgnustl_shared.so" ) |
|
|
|
|
set( __libstl "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/libgnustl_shared.so" ) |
|
|
|
|
endif() |
|
|
|
|
endif() |
|
|
|
|
endif() |
|
|
|
|
#set( __stlLibPath "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib" ) |
|
|
|
|
#TODO: configure stl |
|
|
|
|
endif() |
|
|
|
|
|
|
|
|
|
# case of shared STL version |
|
|
|
|
# case of shared STL linkage |
|
|
|
|
if( ANDROID_STL MATCHES "shared" AND DEFINED __libstl ) |
|
|
|
|
string( REPLACE "_static.a" "_shared.so" __libstl "${__libstl}" ) |
|
|
|
|
get_filename_component( __libstlname "${__libstl}" NAME ) |
|
|
|
|
execute_process( COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${__libstl}" "${LIBRARY_OUTPUT_PATH}/${__libstlname}" RESULT_VARIABLE __fileCopyProcess ) |
|
|
|
|
if( NOT __fileCopyProcess EQUAL 0 OR NOT EXISTS "${LIBRARY_OUTPUT_PATH}/${__libstlname}") |
|
|
|
|
message( SEND_ERROR "Failed copying of ${__libstl} to the ${LIBRARY_OUTPUT_PATH}/${__libstlname}" ) |
|
|
|
|
if( NOT _CMAKE_IN_TRY_COMPILE AND __libstl MATCHES "[.]so$" ) |
|
|
|
|
get_filename_component( __libstlname "${__libstl}" NAME ) |
|
|
|
|
execute_process( COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${__libstl}" "${LIBRARY_OUTPUT_PATH}/${__libstlname}" RESULT_VARIABLE __fileCopyProcess ) |
|
|
|
|
if( NOT __fileCopyProcess EQUAL 0 OR NOT EXISTS "${LIBRARY_OUTPUT_PATH}/${__libstlname}") |
|
|
|
|
message( SEND_ERROR "Failed copying of ${__libstl} to the ${LIBRARY_OUTPUT_PATH}/${__libstlname}" ) |
|
|
|
|
endif() |
|
|
|
|
unset( __fileCopyProcess ) |
|
|
|
|
unset( __libstlname ) |
|
|
|
|
endif() |
|
|
|
|
unset( __fileCopyProcess ) |
|
|
|
|
unset( __libstlname ) |
|
|
|
|
endif() |
|
|
|
|
|
|
|
|
|
# ccache support |
|
|
|
@ -889,7 +914,7 @@ else() |
|
|
|
|
set( CMAKE_C_COMPILER "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-gcc${TOOL_OS_SUFFIX}" CACHE PATH "gcc" ) |
|
|
|
|
set( CMAKE_CXX_COMPILER "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-g++${TOOL_OS_SUFFIX}" CACHE PATH "g++" ) |
|
|
|
|
endif() |
|
|
|
|
set( CMAKE_ASM_COMPILER "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-gcc${TOOL_OS_SUFFIX}" CACHE PATH "Assembler" ) |
|
|
|
|
set( CMAKE_ASM_COMPILER "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-gcc${TOOL_OS_SUFFIX}" CACHE PATH "assembler" ) |
|
|
|
|
if( CMAKE_VERSION VERSION_LESS 2.8.5 ) |
|
|
|
|
set( CMAKE_ASM_COMPILER_ARG1 "-c" ) |
|
|
|
|
endif() |
|
|
|
@ -911,6 +936,9 @@ if( APPLE ) |
|
|
|
|
endif() |
|
|
|
|
|
|
|
|
|
# flags and definitions |
|
|
|
|
remove_definitions( -DANDROID ) |
|
|
|
|
add_definitions( -DANDROID ) |
|
|
|
|
|
|
|
|
|
if(ANDROID_SYSROOT MATCHES "[ ;\"]") |
|
|
|
|
set( ANDROID_CXX_FLAGS "--sysroot=\"${ANDROID_SYSROOT}\"" ) |
|
|
|
|
if( NOT _CMAKE_IN_TRY_COMPILE ) |
|
|
|
@ -921,9 +949,6 @@ else() |
|
|
|
|
set( ANDROID_CXX_FLAGS "--sysroot=${ANDROID_SYSROOT}" ) |
|
|
|
|
endif() |
|
|
|
|
|
|
|
|
|
remove_definitions( -DANDROID ) |
|
|
|
|
add_definitions( -DANDROID ) |
|
|
|
|
|
|
|
|
|
# Force set compilers because standard identification works badly for us |
|
|
|
|
include( CMakeForceCompiler ) |
|
|
|
|
CMAKE_FORCE_C_COMPILER( "${CMAKE_C_COMPILER}" GNU ) |
|
|
|
@ -1018,26 +1043,27 @@ elseif( X86 ) |
|
|
|
|
endif() |
|
|
|
|
|
|
|
|
|
# STL |
|
|
|
|
if( EXISTS "${__libstl}" OR EXISTS "${__libsupcxx}" ) |
|
|
|
|
set( CMAKE_CXX_CREATE_SHARED_LIBRARY "<CMAKE_CXX_COMPILER> <CMAKE_SHARED_LIBRARY_CXX_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS> <SONAME_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>") |
|
|
|
|
set( CMAKE_CXX_CREATE_SHARED_MODULE "<CMAKE_CXX_COMPILER> <CMAKE_SHARED_LIBRARY_CXX_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS> <SONAME_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>") |
|
|
|
|
set( CMAKE_CXX_LINK_EXECUTABLE "<CMAKE_CXX_COMPILER> <FLAGS> <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>" ) |
|
|
|
|
if( 0 AND EXISTS "${__libstl}" OR EXISTS "${__libsupcxx}" ) |
|
|
|
|
# use gcc as a C++ linker to avoid automatic picking of libsdtc++ |
|
|
|
|
set( CMAKE_CXX_CREATE_SHARED_LIBRARY "<CMAKE_C_COMPILER> <CMAKE_SHARED_LIBRARY_CXX_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS> <CMAKE_SHARED_LIBRARY_SONAME_CXX_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>") |
|
|
|
|
set( CMAKE_CXX_CREATE_SHARED_MODULE "<CMAKE_C_COMPILER> <CMAKE_SHARED_LIBRARY_CXX_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS> <CMAKE_SHARED_LIBRARY_SONAME_CXX_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>") |
|
|
|
|
set( CMAKE_CXX_LINK_EXECUTABLE "<CMAKE_C_COMPILER> <FLAGS> <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>" ) |
|
|
|
|
if( EXISTS "${__libstl}" ) |
|
|
|
|
set( CMAKE_CXX_CREATE_SHARED_LIBRARY "${CMAKE_CXX_CREATE_SHARED_LIBRARY} \"${__libstl}\"") |
|
|
|
|
set( CMAKE_CXX_CREATE_SHARED_MODULE "${CMAKE_CXX_CREATE_SHARED_MODULE} \"${__libstl}\"") |
|
|
|
|
set( CMAKE_CXX_LINK_EXECUTABLE "${CMAKE_CXX_LINK_EXECUTABLE} \"${__libstl}\"") |
|
|
|
|
set( CMAKE_CXX_LINK_EXECUTABLE "${CMAKE_CXX_LINK_EXECUTABLE} \"${__libstl}\"") |
|
|
|
|
endif() |
|
|
|
|
if( EXISTS "${__libsupcxx}" ) |
|
|
|
|
set( CMAKE_CXX_CREATE_SHARED_LIBRARY "${CMAKE_CXX_CREATE_SHARED_LIBRARY} \"${__libsupcxx}\"") |
|
|
|
|
set( CMAKE_CXX_CREATE_SHARED_MODULE "${CMAKE_CXX_CREATE_SHARED_MODULE} \"${__libsupcxx}\"") |
|
|
|
|
set( CMAKE_CXX_LINK_EXECUTABLE "${CMAKE_CXX_LINK_EXECUTABLE} \"${__libsupcxx}\"") |
|
|
|
|
set( CMAKE_CXX_LINK_EXECUTABLE "${CMAKE_CXX_LINK_EXECUTABLE} \"${__libsupcxx}\"") |
|
|
|
|
# C objects: |
|
|
|
|
set( CMAKE_C_CREATE_SHARED_LIBRARY = "<CMAKE_C_COMPILER> <CMAKE_SHARED_LIBRARY_C_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> <SONAME_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>" ) |
|
|
|
|
set( CMAKE_C_CREATE_SHARED_MODULE = "<CMAKE_C_COMPILER> <CMAKE_SHARED_LIBRARY_C_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> <SONAME_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>" ) |
|
|
|
|
set( CMAKE_C_LINK_EXECUTABLE = "<CMAKE_C_COMPILER> <FLAGS> <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>" ) |
|
|
|
|
set( CMAKE_C_CREATE_SHARED_LIBRARY "<CMAKE_C_COMPILER> <CMAKE_SHARED_LIBRARY_C_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> <CMAKE_SHARED_LIBRARY_SONAME_C_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>" ) |
|
|
|
|
set( CMAKE_C_CREATE_SHARED_MODULE "<CMAKE_C_COMPILER> <CMAKE_SHARED_LIBRARY_C_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> <CMAKE_SHARED_LIBRARY_SONAME_C_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>" ) |
|
|
|
|
set( CMAKE_C_LINK_EXECUTABLE "<CMAKE_C_COMPILER> <FLAGS> <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>" ) |
|
|
|
|
set( CMAKE_C_CREATE_SHARED_LIBRARY "${CMAKE_C_CREATE_SHARED_LIBRARY} \"${__libsupcxx}\"") |
|
|
|
|
set( CMAKE_C_CREATE_SHARED_MODULE "${CMAKE_C_CREATE_SHARED_MODULE} \"${__libsupcxx}\"") |
|
|
|
|
set( CMAKE_C_LINK_EXECUTABLE "${CMAKE_C_LINK_EXECUTABLE} \"${__libsupcxx}\"") |
|
|
|
|
set( CMAKE_C_LINK_EXECUTABLE "${CMAKE_C_LINK_EXECUTABLE} \"${__libsupcxx}\"") |
|
|
|
|
endif() |
|
|
|
|
endif() |
|
|
|
|
|
|
|
|
@ -1099,9 +1125,6 @@ set( CMAKE_SHARED_LINKER_FLAGS "" CACHE STRING "linker flags" ) |
|
|
|
|
set( CMAKE_MODULE_LINKER_FLAGS "" CACHE STRING "linker flags" ) |
|
|
|
|
set( CMAKE_EXE_LINKER_FLAGS "-Wl,-z,nocopyreloc" CACHE STRING "linker flags" ) |
|
|
|
|
|
|
|
|
|
include_directories( SYSTEM ${ANDROID_STL_INCLUDE_DIRS} ) #"${ANDROID_SYSROOT}/usr/include" |
|
|
|
|
link_directories( "${CMAKE_INSTALL_PREFIX}/libs/${ANDROID_NDK_ABI_NAME}" ) |
|
|
|
|
|
|
|
|
|
# finish flags |
|
|
|
|
set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS}" CACHE INTERNAL "Extra Android compiler flags" ) |
|
|
|
|
set( ANDROID_LINKER_FLAGS "${ANDROID_LINKER_FLAGS}" CACHE INTERNAL "Extra Android linker flags" ) |
|
|
|
@ -1137,6 +1160,13 @@ if( DEFINED ANDROID_EXCEPTIONS AND ANDROID_STL_FORCE_FEATURES ) |
|
|
|
|
endif() |
|
|
|
|
endif() |
|
|
|
|
|
|
|
|
|
# global includes and link directories |
|
|
|
|
if( ANDROID_STL_INCLUDE_DIRS ) |
|
|
|
|
include_directories( SYSTEM ${ANDROID_STL_INCLUDE_DIRS} ) |
|
|
|
|
endif() |
|
|
|
|
link_directories( "${CMAKE_INSTALL_PREFIX}/libs/${ANDROID_NDK_ABI_NAME}" ) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# set these global flags for cmake client scripts to change behavior |
|
|
|
|
set( ANDROID True ) |
|
|
|
|
set( BUILD_ANDROID True ) |
|
|
|
|