@ -312,9 +312,16 @@ macro( __DETECT_NATIVE_API_LEVEL _var _path )
set ( __ndkApiLevelRegex "^[\t ]*#define[\t ]+__ANDROID_API__[\t ]+([0-9]+)[\t ]*.*$" )
file ( STRINGS ${ _path } __apiFileContent REGEX "${__ndkApiLevelRegex}" )
if ( NOT __apiFileContent )
message ( SEND_ERROR "Could not get Android native API level. Probably you have specified invalid level value, or your copy of NDK/toolchain is broken." )
set ( __ndkApiLevelRegex "^[\t ]*#define[\t ]+__ANDROID_API__[\t ]+__ANDROID_API_FUTURE__[\t ]*$" )
file ( STRINGS ${ _path } __apiFileContent REGEX "${__ndkApiLevelRegex}" )
if ( __apiFileContent )
set ( ${ _var } 10000 )
else ( )
message ( SEND_ERROR "Could not get Android native API level. Probably you have specified invalid level value, or your copy of NDK/toolchain is broken." )
endif ( )
else ( )
string ( REGEX REPLACE "${__ndkApiLevelRegex}" "\\1" ${ _var } "${__apiFileContent}" )
endif ( )
string ( REGEX REPLACE "${__ndkApiLevelRegex}" "\\1" ${ _var } "${__apiFileContent}" )
unset ( __apiFileContent )
unset ( __ndkApiLevelRegex )
endmacro ( )
@ -810,10 +817,15 @@ unset(__real_api_level)
# v a l i d a t e
list ( FIND ANDROID_SUPPORTED_NATIVE_API_LEVELS "${ANDROID_NATIVE_API_LEVEL}" __levelIdx )
if ( __levelIdx EQUAL -1 )
message ( SEND_ERROR "Specified Android native API level 'android-${ANDROID_NATIVE_API_LEVEL}' is not supported by your NDK/toolchain." )
message ( SEND_ERROR "Specified Android native API level 'android-${ANDROID_NATIVE_API_LEVEL}' is not supported by your NDK/toolchain.\nSupported values of ANDROID_NATIVE_API_LEVEL: ${ANDROID_SUPPORTED_NATIVE_API_LEVELS} " )
else ( )
if ( BUILD_WITH_ANDROID_NDK )
__DETECT_NATIVE_API_LEVEL ( __realApiLevel "${ANDROID_NDK}/platforms/android-${ANDROID_NATIVE_API_LEVEL}/arch-${ANDROID_ARCH_NAME}/usr/include/android/api-level.h" )
if ( EXISTS "${ANDROID_NDK}/platforms/android-${ANDROID_NATIVE_API_LEVEL}/arch-${ANDROID_ARCH_NAME}/usr/include/android/api-level.h" )
__DETECT_NATIVE_API_LEVEL ( __realApiLevel "${ANDROID_NDK}/platforms/android-${ANDROID_NATIVE_API_LEVEL}/arch-${ANDROID_ARCH_NAME}/usr/include/android/api-level.h" )
else ( )
__DETECT_NATIVE_API_LEVEL ( __realApiLevel "${ANDROID_NDK}/sysroot/usr/include/android/api-level.h" )
endif ( )
if ( NOT __realApiLevel EQUAL ANDROID_NATIVE_API_LEVEL AND NOT __realApiLevel GREATER 9000 )
message ( SEND_ERROR "Specified Android API level (${ANDROID_NATIVE_API_LEVEL}) does not match to the level found (${__realApiLevel}). Probably your copy of NDK is broken." )
endif ( )
@ -914,6 +926,7 @@ if( BUILD_WITH_STANDALONE_TOOLCHAIN )
set ( ANDROID_TOOLCHAIN_ROOT "${ANDROID_STANDALONE_TOOLCHAIN}" )
set ( ANDROID_CLANG_TOOLCHAIN_ROOT "${ANDROID_STANDALONE_TOOLCHAIN}" )
set ( ANDROID_SYSROOT "${ANDROID_STANDALONE_TOOLCHAIN}/sysroot" )
set ( ANDROID_SYSROOT_INCLUDE "${ANDROID_STANDALONE_TOOLCHAIN}/sysroot/usr/include" )
if ( NOT ANDROID_STL STREQUAL "none" )
set ( ANDROID_STL_INCLUDE_DIRS "${ANDROID_STANDALONE_TOOLCHAIN}/include/c++/${ANDROID_COMPILER_VERSION}" )
@ -991,6 +1004,11 @@ endif()
if ( BUILD_WITH_ANDROID_NDK )
set ( ANDROID_TOOLCHAIN_ROOT "${ANDROID_NDK_TOOLCHAINS_PATH}/${ANDROID_GCC_TOOLCHAIN_NAME}${ANDROID_NDK_TOOLCHAINS_SUBPATH}" )
set ( ANDROID_SYSROOT "${ANDROID_NDK}/platforms/android-${ANDROID_NATIVE_API_LEVEL}/arch-${ANDROID_ARCH_NAME}" )
if ( EXISTS "${ANDROID_SYSROOT}/usr/include" )
set ( ANDROID_SYSROOT_INCLUDE "${ANDROID_SYSROOT}/usr/include" )
else ( )
set ( ANDROID_SYSROOT_INCLUDE "${ANDROID_NDK}/sysroot/usr/include" "${ANDROID_NDK}/sysroot/usr/include/${ANDROID_TOOLCHAIN_MACHINE_NAME}" )
endif ( )
if ( ANDROID_STL STREQUAL "none" )
# d o n o t h i n g
@ -1480,7 +1498,7 @@ if( DEFINED ANDROID_RTTI AND ANDROID_STL_FORCE_FEATURES )
endif ( )
endif ( )
# c o n f i g u r e e x c e p t i o s
# c o n f i g u r e e x c e p t i o n s
if ( DEFINED ANDROID_EXCEPTIONS AND ANDROID_STL_FORCE_FEATURES )
if ( ANDROID_EXCEPTIONS )
set ( CMAKE_CXX_FLAGS "-fexceptions ${CMAKE_CXX_FLAGS}" )
@ -1492,9 +1510,11 @@ if( DEFINED ANDROID_EXCEPTIONS AND ANDROID_STL_FORCE_FEATURES )
endif ( )
# g l o b a l i n c l u d e s a n d l i n k d i r e c t o r i e s
include_directories ( SYSTEM "${ANDROID_SYSROOT}/usr/include " ${ ANDROID_STL_INCLUDE_DIRS } )
include_directories ( SYSTEM "${ANDROID_SYSROOT_INCLUDE }" ${ ANDROID_STL_INCLUDE_DIRS } )
get_filename_component ( __android_install_path "${CMAKE_INSTALL_PREFIX}/libs/${ANDROID_NDK_ABI_NAME}" ABSOLUTE ) # a v o i d C M P 0 0 1 5 p o l i c y w a r n i n g
link_directories ( "${__android_install_path}" )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DANDROID -D__ANDROID_API__=${ANDROID_NATIVE_API_LEVEL}" )
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DANDROID -D__ANDROID_API__=${ANDROID_NATIVE_API_LEVEL}" )
# d e t e c t i f n e e d l i n k c r t b e g i n _ s o . o e x p l i c i t l y
if ( NOT DEFINED ANDROID_EXPLICIT_CRT_LINK )
@ -1567,19 +1587,58 @@ set( ANDROID True )
set ( BUILD_ANDROID True )
# w h e r e i s t h e t a r g e t e n v i r o n m e n t
set ( CMAKE_FIND_ROOT_PATH "${ANDROID_TOOLCHAIN_ROOT}/bin" "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}" "${ANDROID_SYSROOT}" "${CMAKE_INSTALL_PREFIX}" "${CMAKE_INSTALL_PREFIX}/share" )
set ( CMAKE_FIND_ROOT_PATH
" $ { A N D R O I D _ T O O L C H A I N _ R O O T } / b i n "
" $ { A N D R O I D _ T O O L C H A I N _ R O O T } / $ { A N D R O I D _ T O O L C H A I N _ M A C H I N E _ N A M E } "
" $ { A N D R O I D _ S Y S R O O T } "
" $ { A N D R O I D _ N D K } / s y s r o o t " # N D K 1 6 +
" $ { C M A K E _ I N S T A L L _ P R E F I X } "
" $ { C M A K E _ I N S T A L L _ P R E F I X } / s h a r e " )
# o n l y s e a r c h f o r l i b r a r i e s a n d i n c l u d e s i n t h e n d k t o o l c h a i n
set ( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY )
set ( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
set ( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )
if ( NOT CMAKE_FIND_ROOT_PATH_MODE_LIBRARY )
set ( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
endif ( )
if ( NOT CMAKE_FIND_ROOT_PATH_MODE_INCLUDE )
set ( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )
endif ( )
if ( NOT CMAKE_FIND_ROOT_PATH_MODE_PACKAGE )
set ( CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY )
endif ( )
if ( NOT CMAKE_FIND_ROOT_PATH_MODE_PROGRAM )
set ( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )
endif ( )
macro ( __cmake_find_root_save_and_reset )
foreach ( v
C M A K E _ F I N D _ R O O T _ P A T H _ M O D E _ L I B R A R Y
C M A K E _ F I N D _ R O O T _ P A T H _ M O D E _ I N C L U D E
C M A K E _ F I N D _ R O O T _ P A T H _ M O D E _ P A C K A G E
C M A K E _ F I N D _ R O O T _ P A T H _ M O D E _ P R O G R A M
)
set ( __save_ ${ v } ${ ${v } } )
set ( ${ v } NEVER )
endforeach ( )
endmacro ( )
macro ( __cmake_find_root_restore )
foreach ( v
C M A K E _ F I N D _ R O O T _ P A T H _ M O D E _ L I B R A R Y
C M A K E _ F I N D _ R O O T _ P A T H _ M O D E _ I N C L U D E
C M A K E _ F I N D _ R O O T _ P A T H _ M O D E _ P A C K A G E
C M A K E _ F I N D _ R O O T _ P A T H _ M O D E _ P R O G R A M
)
set ( ${ v } ${ __save_${v } } )
unset ( __save_ ${ v } )
endforeach ( )
endmacro ( )
# m a c r o t o f i n d p a c k a g e s o n t h e h o s t O S
macro ( find_host_package )
set ( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )
set ( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER )
set ( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER )
__cmake_find_root_save_and_reset ( )
if ( CMAKE_HOST_WIN32 )
SET ( WIN32 1 )
SET ( UNIX )
@ -1591,17 +1650,13 @@ macro( find_host_package )
SET ( WIN32 )
SET ( APPLE )
SET ( UNIX 1 )
set ( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY )
set ( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
set ( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )
__cmake_find_root_restore ( )
endmacro ( )
# m a c r o t o f i n d p r o g r a m s o n t h e h o s t O S
macro ( find_host_program )
set ( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )
set ( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER )
set ( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER )
__cmake_find_root_save_and_reset ( )
if ( CMAKE_HOST_WIN32 )
SET ( WIN32 1 )
SET ( UNIX )
@ -1613,9 +1668,7 @@ macro( find_host_program )
SET ( WIN32 )
SET ( APPLE )
SET ( UNIX 1 )
set ( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY )
set ( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
set ( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )
__cmake_find_root_restore ( )
endmacro ( )
@ -1713,6 +1766,7 @@ endif()
# A N D R O I D _ N D K _ R E L E A S E _ N U M : n u m e r i c A N D R O I D _ N D K _ R E L E A S E version ( 1000*major+minor )
# A N D R O I D _ A R C H _ N A M E : " a r m " , " x 8 6 " , " m i p s " , " a r m 6 4 " , " x 8 6 _ 6 4 " , " m i p s 6 4 " d e p e n d i n g o n A N D R O I D _ A B I
# A N D R O I D _ S Y S R O O T : p a t h t o t h e c o m p i l e r s y s r o o t
# A N D R O I D _ S Y S R O O T _ I N C L U D E : p a t h s t o s y s t e m i n c l u d e p a t h s
# T O O L _ O S _ S U F F I X : " " o r " . e x e " d e p e n d i n g o n h o s t p l a t f o r m
# A N D R O I D _ C O M P I L E R _ I S _ C L A N G : T R U E i f c l a n g c o m p i l e r i s u s e d
#