@ -3,7 +3,7 @@
# R e q u i r e s c m a k e 2 . 6 . 3 o r newer ( 2.8.5 or newer is recommended ) .
# S e e h o m e p a g e : h t t p : / / c o d e . g o o g l e . c o m / p / a n d r o i d - c m a k e /
#
# T h e f i l e i s m a n t a i n e d b y t h e O p e n C V p r o j e c t . A n d a l s o c a n b e f o u n d a t
# T h e f i l e i s m a n t a i n e d b y t h e O p e n C V p r o j e c t . T h e l a t e s t v e r s i o n c a n b e g e t a t
# h t t p : / / c o d e . o p e n c v . o r g / p r o j e c t s / o p e n c v / r e p o s i t o r y / r e v i s i o n s / m a s t e r / c h a n g e s / a n d r o i d / a n d r o i d . t o o l c h a i n . c m a k e
#
# U s a g e L i n u x :
@ -29,7 +29,7 @@
# $ c m a k e . e x e - G " M i n G W M a k e f i l e s "
# - D C M A K E _ T O O L C H A I N _ F I L E = p a t h \ t o \ t h e \ a n d r o i d . t o o l c h a i n . c m a k e
# - D C M A K E _ M A K E _ P R O G R A M = " % A N D R O I D _ N D K % \ p r e b u i l t \ w i n d o w s \ b i n \ m a k e . e x e " . .
# $ " % A N D R O I D _ N D K % \ p r e b u i l t \ w i n d o w s \ b i n \ m a k e . e x e "
# $ c m a k e . e x e - - b u i l d .
#
#
# Options ( can be set as cmake parameters: -D<option_name>=<value> ) :
@ -41,7 +41,7 @@
# ( i g n o r e d i f A N D R O I D _ N D K i s s e t ) .
# C a n b e s e t a s e n v i r o n m e n t v a r i a b l e . C a n b e s e t o n l y a t f i r s t c m a k e r u n .
#
# A N D R O I D _ A B I = a r m e a b i - v 7 a - s p e c i f i e s t h e t a r g e t A p p l i c a t i o n B i n a r y
# A N D R O I D _ A B I = a r m e a b i - v 7 a - s p e c i f i e s t h e t a r g e t A p p l i c a t i o n B i n a r y
# Interface ( ABI ) . T h i s o p t i o n n e a r l y m a t c h e s t o t h e A P P _ A B I v a r i a b l e
# u s e d b y n d k - b u i l d t o o l f r o m A n d r o i d N D K .
#
@ -58,29 +58,66 @@
# " x 8 6 " - m a t c h e s t o t h e N D K A B I w i t h t h e s a m e n a m e .
# S e e $ { A N D R O I D _ N D K } / d o c s / C P U - A R C H - A B I S . h t m l f o r t h e d o c u m e n t a t i o n .
# " m i p s " - m a t c h e s t o t h e N D K A B I w i t h t h e s a m e n a m e
# ( n o t t e s t e s o n r e a l d e v i c e s )
# ( I t i s n o t t e s t e d o n r e a l d e v i c e s b y t h e a u t h o s o f t h i s t o o l c h a i n )
# S e e $ { A N D R O I D _ N D K } / d o c s / C P U - A R C H - A B I S . h t m l f o r t h e d o c u m e n t a t i o n .
#
# A N D R O I D _ N A T I V E _ A P I _ L E V E L = a n d r o i d - 8 - l e v e l o f A n d r o i d A P I c o m p i l e f o r .
# O p t i o n i s r e a d - o n l y w h e n s t a n d a l o n e t o o l c h a i n u s e d .
# O p t i o n i s r e a d - o n l y w h e n s t a n d a l o n e t o o l c h a i n i s u s e d .
#
# A N D R O I D _ F O R C E _ A R M _ B U I L D = O F F - s e t t r u e t o g e n e r a t e 3 2 - b i t A R M i n s t r u c t i o n s
# i n s t e a d o f T h u m b - 1 . I s n o t a v a i l a b l e f o r " x 8 6 " ( i n a p p l i c a b l e ) a n d
# " a r m e a b i - v 6 w i t h V F P " ( f o r c e d ) A B I s .
# A N D R O I D _ F O R C E _ A R M _ B U I L D = O F F - s e t O N t o g e n e r a t e 3 2 - b i t A R M i n s t r u c t i o n s
# i n s t e a d o f T h u m b . I s n o t a v a i l a b l e f o r " x 8 6 " ( i n a p p l i c a b l e ) a n d
# " a r m e a b i - v 6 w i t h V F P " ( i s f o r c e d t o b e O N ) A B I s .
#
# A N D R O I D _ N O _ U N D E F I N E D = O N - s e t t r u e t o s h o w a l l u n d e f i n e d s y m b o l s a s l i n k e r
# A N D R O I D _ N O _ U N D E F I N E D = O N - s e t O N t o s h o w a l l u n d e f i n e d s y m b o l s a s l i n k e r
# e r r o r s e v e n i f t h e y a r e n o t u s e d .
#
# A N D R O I D _ S O _ U N D E F I N E D = O F F - s e t t r u e t o a l l o w u n d e f i n e d s y m b o l s i n s h a r e d
# l i b r a r i e s . A u t o m a t i c a l l y t u r n e d o n f o r N D K r 5 x a n d r 6 x d u e t o G L E S v 2
# A N D R O I D _ S O _ U N D E F I N E D = O F F - s e t O N t o a l l o w u n d e f i n e d s y m b o l s i n s h a r e d
# l i b r a r i e s . A u t o m a t i c a l l y t u r n e d f o r N D K r 5 x a n d r 6 x d u e t o G L E S v 2
# p r o b l e m s .
#
# L I B R A R Y _ O U T P U T _ P A T H _ R O O T = $ { C M A K E _ S O U R C E _ D I R } - w h e r e t o o u t p u t b i n a r y
# f i l e s . S e e a d d i t i o n a l d e t a i l s b e l o w .
#
# A N D R O I D _ S E T _ O B S O L E T E _ V A R I A B L E S = O N - i t s e t , t h e n t o o l c h a i n d e f i n e s s o m e
# o b s o l e t e v a r i a b l e s w h i c h w e r e s e t b y p r e v i o u s v e r s i o n s o f t h i s f i l e f o r
# A N D R O I D _ S E T _ O B S O L E T E _ V A R I A B L E S = O N - i f s e t , t h e n t o o l c h a i n d e f i n e s s o m e
# o b s o l e t e v a r i a b l e s w h i c h w e r e u s e d b y p r e v i o u s v e r s i o n s o f t h i s f i l e f o r
# b a c k w a r d c o m p a t i b i l i t y .
#
# A N D R O I D _ S T L = g n u s t l _ s t a t i c - s p e c i f y t h e r u n t i m e t o u s e .
#
# P o s s i b l e v a l u e s a r e :
# n o n e - > D o n o t c o n f i g u r e t h e r u n t i m e .
# s y s t e m - > U s e t h e d e f a u l t m i n i m a l s y s t e m C + + r u n t i m e l i b r a r y .
# I m p l i e s - f n o - r t t i - f n o - e x c e p t i o n s .
# I s n o t a v a i l a b l e f o r s t a n d a l o n e t o o l c h a i n .
# s y s t e m _ r e - > U s e t h e d e f a u l t m i n i m a l s y s t e m C + + r u n t i m e l i b r a r y .
# I m p l i e s - f r t t i - f e x c e p t i o n s .
# I s n o t a v a i l a b l e f o r s t a n d a l o n e t o o l c h a i n .
# g a b i + + _ s t a t i c - > U s e t h e G A b i + + r u n t i m e a s a s t a t i c l i b r a r y .
# I m p l i e s - f r t t i - f n o - e x c e p t i o n s .
# A v a i l a b l e f o r N D K r 7 a n d n e w e r .
# I s n o t a v a i l a b l e f o r s t a n d a l o n e t o o l c h a i n .
# g a b i + + _ s h a r e d - > U s e t h e G A b i + + r u n t i m e a s a s h a r e d l i b r a r y .
# I m p l i e s - f r t t i - f n o - e x c e p t i o n s .
# A v a i l a b l e f o r N D K r 7 a n d n e w e r .
# I s n o t a v a i l a b l e f o r s t a n d a l o n e t o o l c h a i n .
# s t l p o r t _ s t a t i c - > U s e t h e S T L p o r t r u n t i m e a s a s t a t i c l i b r a r y .
# I m p l i e s - f n o - r t t i - f n o - e x c e p t i o n s f o r N D K b e f o r e r 7 .
# I m p l i e s - f r t t i - f n o - e x c e p t i o n s f o r N D K r 7 a n d n e w e r .
# I s n o t a v a i l a b l e f o r s t a n d a l o n e t o o l c h a i n .
# s t l p o r t _ s h a r e d - > U s e t h e S T L p o r t r u n t i m e a s a s h a r e d l i b r a r y .
# I m p l i e s - f n o - r t t i - f n o - e x c e p t i o n s f o r N D K b e f o r e r 7 .
# I m p l i e s - f r t t i - f n o - e x c e p t i o n s f o r N D K r 7 a n d n e w e r .
# I s n o t a v a i l a b l e f o r s t a n d a l o n e t o o l c h a i n .
# g n u s t l _ s t a t i c - > U s e t h e G N U S T L a s a s t a t i c l i b r a r y .
# I m p l i e s - f r t t i - f e x c e p t i o n s .
# g n u s t l _ s h a r e d - > U s e t h e G N U S T L a s a s h a r e d l i b r a r y .
# I m p l i e s - f r t t i - f n o - e x c e p t i o n s .
# A v a i l a b l e f o r N D K r 7 b a n d n e w e r .
# S i l e n t l y d e g r a d e s t o g n u s t l _ s t a t i c i f n o t a v a i l a b l e .
#
# A N D R O I D _ S T L _ F O R C E _ F E A T U R E S = O N - t u r n r t t i a n d e x c e p t i o n s s u p p o r t b a s e d o n
# c h o s e n r u n t i m e . I f d i s a b l e d , t h e n t h e u s e r i s r e s p o n s i b l e f o r s e t t i n g s
# t h e s e o p t i o n s .
#
# W h a t ? :
# a n d r o i d - c m a k e t o o l c h a i n s e a r c h e s f o r N D K / t o o l c h a i n i n t h e f o l l o w i n g o r d e r :
@ -94,15 +131,15 @@
# M a k e s u r e t o d o t h e f o l l o w i n g i n y o u r s c r i p t s :
# SET ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${my_cxx_flags}" )
# SET ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${my_cxx_flags}" )
# T h e f l a g s w i l l b e p r e p o p u l a t e d w i t h c r i t i c a l f l a g s , s o d o n ' t l o o s e t h e m .
# A l s o b e a w a r e t h a t t o o l c h a i n a l s o s e t s c o n f i g u r a t i o n - s p e c i f i c c o m p i l e r
# f l a g s a n d l i n k e r f l a g s .
# T h e f l a g s w i l l b e p r e p o p u l a t e d w i t h c r i t i c a l f l a g s , s o d o n ' t l o o s e t h e m .
# A l s o b e a w a r e t h a t t o o l c h a i n a l s o s e t s c o n f i g u r a t i o n - s p e c i f i c c o m p i l e r
# f l a g s a n d l i n k e r f l a g s .
#
# A N D R O I D a n d B U I L D _ A N D R O I D w i l l b e s e t t o t r u e , y o u m a y t e s t a n y o f t h e s e
# v a r i a b l e s t o m a k e n e c e s s a r y A n d r o i d - s p e c i f i c c o n f i g u r a t i o n c h a n g e s .
#
# A l s o A R M E A B I o r A R M E A B I _ V 7 A o r X 8 6 w i l l b e s e t t r u e , m u t u a l l y e x c l u s i v e .
# N E O N o p t i o n w i l l b e s e t t r u e i f V F P i s s e t t o N E O N .
# A l s o A R M E A B I o r A R M E A B I _ V 7 A o r X 8 6 o r M I P S w i l l b e s e t t r u e , m u t u a l l y
# e x c l u s i v e . N E O N o p t i o n w i l l b e s e t t r u e i f V F P i s s e t t o N E O N .
#
# L I B R A R Y _ O U T P U T _ P A T H _ R O O T s h o u l d b e s e t i n c a c h e t o d e t e r m i n e w h e r e A n d r o i d
# l i b r a r i e s w i l l b e i n s t a l l e d .
@ -185,11 +222,15 @@
# [ + ] a d d e d m i p s a r c h i t e c t u r e s u p p o r t
# - m o d i f i e d A u g u s t 2 0 1 2
# [ + ] u p d a t e d f o r N D K r 8 b
# [ ~ ] a l l i n t e r m e d i a t e f i l e s g e n e r a t e d b y t o o l c h a i n a r e m o v e d i n t o C M a k e F i l e s
# [ ~ ] a l l i n t e r m e d i a t e f i l e s g e n e r a t e d b y t o o l c h a i n a r e m o v e d t o C M a k e F i l e s
# [ ~ ] l i b s t d c + + a n d l i b s u p c a r e r e m o v e d f r o m e x p l i c i t l i n k l i b r a r i e s
# [ + ] a d d e d C C a c h e support ( via NDK_CCACHE environment or cmake variable )
# [ + ] a d d e d g o l d l i n k e r s u p p o r t f o r N D K r 8 b
# [ ~ ] f i x e d m i p s l i n k e r f l a g s f o r N D K r 8 b
# - m o d i f i e d S e p t e m b e r 2 0 1 2
# [ + ] a d d e d N D K r e l e a s e n a m e detection ( see ANDROID_NDK_RELEASE )
# [ + ] a d d e d s u p p o r t f o r a l l C + + r u n t i m e s f r o m N D K
# ( s y s t e m , g a b i + + , s t l p o r t , g n u s t l )
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
cmake_minimum_required ( VERSION 2.6.3 )
@ -199,7 +240,7 @@ if( DEFINED CMAKE_CROSSCOMPILING )
return ( )
endif ( )
get_property ( _CMAKE_IN_TRY_COMPILE GLOBAL PROPERTY IN_TRY_COMPILE )
get_property ( _CMAKE_IN_TRY_COMPILE GLOBAL PROPERTY IN_TRY_COMPILE )
if ( _CMAKE_IN_TRY_COMPILE )
include ( "${CMAKE_CURRENT_SOURCE_DIR}/../android.toolchain.config.cmake" OPTIONAL )
endif ( )
@ -279,15 +320,15 @@ macro( __INIT_VARIABLE var_name )
if ( NOT "${__value}" STREQUAL "" )
if ( __test_path )
if ( EXISTS "${__value}" )
set ( ${ var_name } "${__value}" )
if ( __obsolete )
file ( TO_CMAKE_PATH "${__value}" ${ var_name } )
if ( __obsolete AND NOT _CMAKE_IN_TRY_COMPILE )
message ( WARNING "Using value of obsolete variable ${__var} as initial value for ${var_name}. Please note, that ${__var} can be completely removed in future versions of the toolchain." )
endif ( )
break ( )
endif ( )
else ( )
set ( ${ var_name } "${__value}" )
if ( __obsolete )
if ( __obsolete AND NOT _CMAKE_IN_TRY_COMPILE )
message ( WARNING "Using value of obsolete variable ${__var} as initial value for ${var_name}. Please note, that ${__var} can be completely removed in future versions of the toolchain." )
endif ( )
break ( )
@ -298,6 +339,8 @@ macro( __INIT_VARIABLE var_name )
unset ( __value )
unset ( __values )
unset ( __obsolete )
elseif ( __test_path )
file ( TO_CMAKE_PATH "${${var_name}}" ${ var_name } )
endif ( )
unset ( __test_path )
endmacro ( )
@ -314,34 +357,26 @@ macro( __DETECT_NATIVE_API_LEVEL _var _path )
endmacro ( )
macro ( __DETECT_TOOLCHAIN_MACHINE_NAME _var _root )
file ( GLOB __gccExePath "${_root}/bin/*-gcc${TOOL_OS_SUFFIX}" )
__LIST_FILTER ( __gccExePath "bin/[.].*-gcc${TOOL_OS_SUFFIX}$" )
list ( LENGTH __gccExePath __gccExePathsCount )
if ( NOT __gccExePathsCount EQUAL 1 )
message ( WARNING "Could not uniquely determine machine name for compiler from ${_root}." )
set ( ${ _var } "" )
if ( EXISTS "${_root}" )
file ( GLOB __gccExePath "${_root}/bin/*-gcc${TOOL_OS_SUFFIX}" )
__LIST_FILTER ( __gccExePath "bin/[.].*-gcc${TOOL_OS_SUFFIX}$" )
list ( LENGTH __gccExePath __gccExePathsCount )
if ( NOT __gccExePathsCount EQUAL 1 AND NOT _CMAKE_IN_TRY_COMPILE )
message ( WARNING "Could not determine machine name for compiler from ${_root}" )
set ( ${ _var } "" )
else ( )
get_filename_component ( __gccExeName "${__gccExePath}" NAME_WE )
string ( REPLACE "-gcc" "" ${ _var } "${__gccExeName}" )
endif ( )
unset ( __gccExePath )
unset ( __gccExePathsCount )
unset ( __gccExeName )
else ( )
get_filename_component ( __gccExeName "${__gccExePath}" NAME_WE )
string ( REPLACE "-gcc" "" ${ _var } "${__gccExeName}" )
endif ( )
unset ( __gccExePath )
unset ( __gccExePathsCount )
unset ( __gccExeName )
endmacro ( )
macro ( __COPY_IF_DIFFERENT _source _destination )
execute_process ( COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${_source}" "${_destination}" RESULT_VARIABLE __fileCopyProcess )
if ( NOT __fileCopyProcess EQUAL 0 OR NOT EXISTS "${_destination}" )
message ( SEND_ERROR "Failed copying of ${_source} to the ${_destination}" )
set ( ${ _var } "" )
endif ( )
unset ( __fileCopyProcess )
endmacro ( )
# s t l v e r s i o n : b y d e f a u l t g n u s t l _ s t a t i c w i l l b e u s e d
set ( ANDROID_USE_STLPORT FALSE CACHE BOOL "Experimental: use stlport_static instead of gnustl_static" )
mark_as_advanced ( ANDROID_USE_STLPORT )
# f i g h t a g a i n s t c y g w i n
set ( ANDROID_FORBID_SYGWIN TRUE CACHE BOOL "Prevent cmake from working under cygwin and using cygwin tools" )
mark_as_advanced ( ANDROID_FORBID_SYGWIN )
@ -403,7 +438,6 @@ if( NOT ANDROID_NDK )
endif ( ANDROID_NDK )
endif ( NOT ANDROID_STANDALONE_TOOLCHAIN )
endif ( NOT ANDROID_NDK )
# r e m e m b e r f o u n d p a t h s
if ( ANDROID_NDK )
get_filename_component ( ANDROID_NDK "${ANDROID_NDK}" ABSOLUTE )
@ -412,13 +446,15 @@ if( ANDROID_NDK )
string ( LENGTH "${ANDROID_NDK}" __length )
string ( SUBSTRING "${CMAKE_AR}" 0 ${ __length } __androidNdkPreviousPath )
if ( NOT __androidNdkPreviousPath STREQUAL ANDROID_NDK )
message ( FATAL_ERROR "It is not possible to change path to the NDK on subsequent run." )
message ( FATAL_ERROR " It is not possible to change the path to the NDK on subsequent CMake run. You must remove all generated files from your build folder first.
" )
endif ( )
unset ( __androidNdkPreviousPath )
unset ( __length )
endif ( )
set ( ANDROID_NDK "${ANDROID_NDK}" CACHE INTERNAL "Path of the Android NDK" )
set ( ANDROID_NDK "${ANDROID_NDK}" CACHE INTERNAL "Path of the Android NDK" FORCE )
set ( BUILD_WITH_ANDROID_NDK True )
file ( STRINGS "${ANDROID_NDK}/RELEASE.TXT" ANDROID_NDK_RELEASE LIMIT_COUNT 1 REGEX r[0-9]+[a-z]? )
elseif ( ANDROID_STANDALONE_TOOLCHAIN )
get_filename_component ( ANDROID_STANDALONE_TOOLCHAIN "${ANDROID_STANDALONE_TOOLCHAIN}" ABSOLUTE )
# t r y t o d e t e c t c h a n g e
@ -431,7 +467,7 @@ elseif( ANDROID_STANDALONE_TOOLCHAIN )
unset ( __androidStandaloneToolchainPreviousPath )
unset ( __length )
endif ( )
set ( ANDROID_STANDALONE_TOOLCHAIN "${ANDROID_STANDALONE_TOOLCHAIN}" CACHE INTERNAL "Path of the Android standalone toolchain" )
set ( ANDROID_STANDALONE_TOOLCHAIN "${ANDROID_STANDALONE_TOOLCHAIN}" CACHE INTERNAL "Path of the Android standalone toolchain" FORCE )
set ( BUILD_WITH_STANDALONE_TOOLCHAIN True )
else ( )
list ( GET ANDROID_NDK_SEARCH_PATHS 0 ANDROID_NDK_SEARCH_PATH )
@ -467,7 +503,7 @@ if( BUILD_WITH_STANDALONE_TOOLCHAIN )
else ( )
execute_process ( COMMAND "${ANDROID_STANDALONE_TOOLCHAIN}/bin/${__availableToolchainMachines}-gcc${TOOL_OS_SUFFIX}" --version
O U T P U T _ V A R I A B L E _ _ a v a i l a b l e T o o l c h a i n C o m p i l e r V e r s i o n s O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E )
string ( REGEX MATCH "[0-9]+.[0-9]+.[0-9]+" __availableToolchainCompilerVersions "${__availableToolchainCompilerVersions}" )
string ( REGEX MATCH "[0-9]+[ .] [0-9]+([ .] [0-9]+)? " __availableToolchainCompilerVersions "${__availableToolchainCompilerVersions}" )
endif ( )
endif ( )
@ -483,7 +519,7 @@ if( BUILD_WITH_ANDROID_NDK )
foreach ( __toolchain ${ __availableToolchains } )
__DETECT_TOOLCHAIN_MACHINE_NAME ( __machine "${ANDROID_NDK}/toolchains/${__toolchain}/prebuilt/${ANDROID_NDK_HOST_SYSTEM_NAME}" )
if ( __machine )
string ( REGEX MATCH "[0-9]+[.][0-9]+[.]*[0-9]* $" __version "${__toolchain}" )
string ( REGEX MATCH "[0-9]+[.][0-9]+([.][0-9]+)? $" __version "${__toolchain}" )
string ( REGEX MATCH "^[^-]+" __arch "${__toolchain}" )
list ( APPEND __availableToolchainMachines "${__machine}" )
list ( APPEND __availableToolchainArchs "${__arch}" )
@ -585,7 +621,7 @@ if( CMAKE_BINARY_DIR AND EXISTS "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMa
file ( APPEND "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeSystem.cmake" "SET(CMAKE_SYSTEM_PROCESSOR \" ${ CMAKE_SYSTEM_PROCESSOR } \")\n" )
endif ( )
set ( ANDROID_SUPPORTED_ABIS ${ ANDROID_SUPPORTED_ABIS_${ANDROID_ARCH_FULLNAME } } CACHE INTERNAL "ANDROID_ABI can be changed only to one of these ABIs. Changing to any other ABI requires to reset cmake cache." )
set ( ANDROID_SUPPORTED_ABIS ${ ANDROID_SUPPORTED_ABIS_${ANDROID_ARCH_FULLNAME } } CACHE INTERNAL "ANDROID_ABI can be changed only to one of these ABIs. Changing to any other ABI requires to reset cmake cache." FORCE )
if ( CMAKE_VERSION VERSION_GREATER "2.8" )
list ( SORT ANDROID_SUPPORTED_ABIS_ ${ ANDROID_ARCH_FULLNAME } )
set_property ( CACHE ANDROID_ABI PROPERTY STRINGS ${ ANDROID_SUPPORTED_ABIS_${ANDROID_ARCH_FULLNAME } } )
@ -636,8 +672,8 @@ endif()
list ( GET __availableToolchains ${ __toolchainIdx } ANDROID_TOOLCHAIN_NAME )
list ( GET __availableToolchainMachines ${ __toolchainIdx } ANDROID_TOOLCHAIN_MACHINE_NAME )
list ( GET __availableToolchainCompilerVersions ${ __toolchainIdx } ANDROID_COMPILER_VERSION )
set ( ANDROID_TOOLCHAIN_NAME "${ANDROID_TOOLCHAIN_NAME}" CACHE INTERNAL "Name of toolchain used" )
set ( ANDROID_COMPILER_VERSION "${ANDROID_COMPILER_VERSION}" CACHE INTERNAL "compiler version from selected toolchain" )
set ( ANDROID_TOOLCHAIN_NAME "${ANDROID_TOOLCHAIN_NAME}" CACHE INTERNAL "Name of toolchain used" FORCE )
set ( ANDROID_COMPILER_VERSION "${ANDROID_COMPILER_VERSION}" CACHE INTERNAL "compiler version from selected toolchain" FORCE )
unset ( __toolchainIdx )
unset ( __availableToolchains )
unset ( __availableToolchainMachines )
@ -666,26 +702,208 @@ if( CMAKE_VERSION VERSION_GREATER "2.8" )
set_property ( CACHE ANDROID_NATIVE_API_LEVEL PROPERTY STRINGS ${ ANDROID_SUPPORTED_NATIVE_API_LEVELS } )
endif ( )
# s e t u p p a t h s
if ( BUILD_WITH_STANDALONE_TOOLCHAIN )
set ( ANDROID_TOOLCHAIN_ROOT "${ANDROID_STANDALONE_TOOLCHAIN}" )
set ( ANDROID_SYSROOT "${ANDROID_STANDALONE_TOOLCHAIN}/sysroot" )
set ( __stlLibPath "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib" )
# s e t u p o u t p u t d i r e c t o r i e s
set ( LIBRARY_OUTPUT_PATH_ROOT ${ CMAKE_SOURCE_DIR } CACHE PATH "root for library output, set this to change where android libs are installed to" )
set ( CMAKE_INSTALL_PREFIX "${ANDROID_TOOLCHAIN_ROOT}/user" CACHE STRING "path for installing" )
if ( NOT _CMAKE_IN_TRY_COMPILE )
if ( EXISTS "${CMAKE_SOURCE_DIR}/jni/CMakeLists.txt" )
set ( EXECUTABLE_OUTPUT_PATH "${LIBRARY_OUTPUT_PATH_ROOT}/bin/${ANDROID_NDK_ABI_NAME}" CACHE PATH "Output directory for applications" )
else ( )
set ( EXECUTABLE_OUTPUT_PATH "${LIBRARY_OUTPUT_PATH_ROOT}/bin" CACHE PATH "Output directory for applications" )
endif ( )
set ( LIBRARY_OUTPUT_PATH "${LIBRARY_OUTPUT_PATH_ROOT}/libs/${ANDROID_NDK_ABI_NAME}" CACHE PATH "path for android libs" )
endif ( )
# r u n t i m e choice ( STL, rtti, exceptions )
if ( NOT ANDROID_STL )
# h o n o r l e g a c y A N D R O I D _ U S E _ S T L P O R T
if ( DEFINED ANDROID_USE_STLPORT )
if ( ANDROID_USE_STLPORT )
set ( ANDROID_STL stlport_static )
endif ( )
message ( WARNING "You are using an obsolete variable ANDROID_USE_STLPORT to select the STL variant. Use -DANDROID_STL=stlport_static instead." )
endif ( )
if ( NOT ANDROID_STL )
set ( ANDROID_STL gnustl_static )
endif ( )
endif ( )
set ( ANDROID_STL "${ANDROID_STL}" CACHE STRING "C++ runtime" )
set ( ANDROID_STL_FORCE_FEATURES ON CACHE BOOL "automatically configure rtti and exceptions support based on C++ runtime" )
mark_as_advanced ( ANDROID_STL ANDROID_STL_FORCE_FEATURES )
if ( BUILD_WITH_ANDROID_NDK )
if ( NOT "${ANDROID_STL}" MATCHES "^(none|system|system_re|gabi\\+\\+_static|gabi\\+\\+_shared|stlport_static|stlport_shared|gnustl_static|gnustl_shared)$" )
message ( FATAL_ERROR "ANDROID_STL is set to invalid value \" ${ ANDROID_STL } \".
T h e p o s s i b l e v a l u e s a r e :
n o n e - > D o n o t c o n f i g u r e t h e r u n t i m e .
s y s t e m - > U s e t h e d e f a u l t m i n i m a l s y s t e m C + + r u n t i m e l i b r a r y .
s y s t e m _ r e - > S a m e a s s y s t e m b u t w i t h r t t i a n d e x c e p t i o n s .
g a b i + + _ s t a t i c - > U s e t h e G A b i + + r u n t i m e a s a s t a t i c l i b r a r y .
g a b i + + _ s h a r e d - > U s e t h e G A b i + + r u n t i m e a s a s h a r e d l i b r a r y .
s t l p o r t _ s t a t i c - > U s e t h e S T L p o r t r u n t i m e a s a s t a t i c l i b r a r y .
s t l p o r t _ s h a r e d - > U s e t h e S T L p o r t r u n t i m e a s a s h a r e d l i b r a r y .
g n u s t l _ s t a t i c - > ( d e f a u l t ) U s e t h e G N U S T L a s a s t a t i c l i b r a r y .
g n u s t l _ s h a r e d - > U s e t h e G N U S T L a s a s h a r e d l i b r a r y .
" )
endif ( )
elseif ( BUILD_WITH_STANDALONE_TOOLCHAIN )
if ( NOT "${ANDROID_STL}" MATCHES "^(none|gnustl_static|gnustl_shared)$" )
message ( FATAL_ERROR "ANDROID_STL is set to invalid value \" ${ ANDROID_STL } \".
T h e p o s s i b l e v a l u e s a r e :
n o n e - > D o n o t c o n f i g u r e t h e r u n t i m e .
g n u s t l _ s t a t i c - > ( d e f a u l t ) U s e t h e G N U S T L a s a s t a t i c l i b r a r y .
g n u s t l _ s h a r e d - > U s e t h e G N U S T L a s a s h a r e d l i b r a r y .
" )
endif ( )
endif ( )
unset ( ANDROID_RTTI )
unset ( ANDROID_EXCEPTIONS )
unset ( ANDROID_STL_INCLUDE_DIRS )
unset ( __libstl )
unset ( __libsupcxx )
if ( NOT _CMAKE_IN_TRY_COMPILE AND ANDROID_NDK_RELEASE STREQUAL "r7b" AND ARMEABI_V7A AND NOT VFPV3 AND ANDROID_STL MATCHES "gnustl" )
message ( WARNING " The GNU STL armeabi-v7a binaries from NDK r7b can crash non-NEON devices. The files provided with NDK r7b were not configured properly, resulting in crashes on Tegra2-based devices and others when trying to use certain floating-point functions ( e.g., cosf, sinf, expf ) .
Y o u a r e s t r o n g l y r e c o m m e n d e d t o s w i t c h t o a n o t h e r N D K r e l e a s e .
" )
endif ( )
# s e t u p p a t h s a n d S T L f o r N D K
if ( BUILD_WITH_ANDROID_NDK )
set ( ANDROID_TOOLCHAIN_ROOT "${ANDROID_NDK}/toolchains/${ANDROID_TOOLCHAIN_NAME}/prebuilt/${ANDROID_NDK_HOST_SYSTEM_NAME}" )
set ( ANDROID_SYSROOT "${ANDROID_NDK}/platforms/android-${ANDROID_NATIVE_API_LEVEL}/arch-${ANDROID_ARCH_NAME}" )
if ( ANDROID_USE_STLPORT )
set ( __stlIncludePath "${ANDROID_NDK}/sources/cxx-stl/stlport/stlport" )
set ( __stlLibPath "${ANDROID_NDK}/sources/cxx-stl/stlport/libs/${ANDROID_NDK_ABI_NAME}" )
else ( )
if ( ANDROID_STL STREQUAL "none" )
# d o n o t h i n g
elseif ( ANDROID_STL STREQUAL "system" )
set ( ANDROID_RTTI OFF )
set ( ANDROID_EXCEPTIONS OFF )
set ( ANDROID_STL_INCLUDE_DIRS "${ANDROID_NDK}/sources/cxx-stl/system/include" )
elseif ( ANDROID_STL STREQUAL "system_re" )
set ( ANDROID_RTTI ON )
set ( ANDROID_EXCEPTIONS ON )
set ( ANDROID_STL_INCLUDE_DIRS "${ANDROID_NDK}/sources/cxx-stl/system/include" )
elseif ( ANDROID_STL MATCHES "gabi" )
if ( ANDROID_NDK_RELEASE STRLESS "r7" )
message ( FATAL_ERROR "gabi++ is not awailable in your NDK. You have to upgrade to NDK r7 or newer to use gabi++." )
endif ( )
set ( ANDROID_RTTI ON )
set ( ANDROID_EXCEPTIONS OFF )
set ( ANDROID_STL_INCLUDE_DIRS "${ANDROID_NDK}/sources/cxx-stl/gabi++/include" )
set ( __libstl "${ANDROID_NDK}/sources/cxx-stl/gabi++/libs/${ANDROID_NDK_ABI_NAME}/libgabi++_static.a" )
elseif ( ANDROID_STL MATCHES "stlport" )
set ( ANDROID_EXCEPTIONS OFF )
if ( ANDROID_NDK_RELEASE STRLESS "r7" )
set ( ANDROID_RTTI OFF )
else ( )
set ( ANDROID_RTTI ON )
endif ( )
set ( ANDROID_STL_INCLUDE_DIRS "${ANDROID_NDK}/sources/cxx-stl/stlport/stlport" )
set ( __libstl "${ANDROID_NDK}/sources/cxx-stl/stlport/libs/${ANDROID_NDK_ABI_NAME}/libstlport_static.a" )
elseif ( ANDROID_STL MATCHES "gnustl" )
set ( ANDROID_EXCEPTIONS ON )
set ( ANDROID_RTTI ON )
if ( EXISTS "${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/${ANDROID_COMPILER_VERSION}" )
set ( __stlIncludePath "${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/${ANDROID_COMPILER_VERSION}/include" )
set ( __stlLibPath "${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/${ANDROID_COMPILER_VERSION}/libs/${ANDROID_NDK_ABI_NAME}" )
set ( __libstl "${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/${ANDROID_COMPILER_VERSION}" )
else ( )
set ( __stlIncludePath "${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/include" )
set ( __stlLibPath "${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/libs/${ANDROID_NDK_ABI_NAME}" )
set ( __libstl "${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++" )
endif ( )
set ( ANDROID_STL_INCLUDE_DIRS "${__libstl}/include" "${__libstl}/libs/${ANDROID_NDK_ABI_NAME}/include" )
if ( EXISTS "${__libstl}/libs/${ANDROID_NDK_ABI_NAME}/libgnustl_static.a" )
set ( __libstl "${__libstl}/libs/${ANDROID_NDK_ABI_NAME}/libgnustl_static.a" )
else ( )
set ( __libstl "${__libstl}/libs/${ANDROID_NDK_ABI_NAME}/libstdc++.a" )
endif ( )
else ( )
message ( FATAL_ERROR "Unknown runtime: ${ANDROID_STL}" )
endif ( )
# f i n d l i b s u p c + + . a - r t t i & e x c e p t i o n s
if ( ANDROID_STL STREQUAL "system_re" OR ANDROID_STL MATCHES "gnustl" )
if ( ANDROID_NDK_RELEASE STRGREATER "r8" ) # r 8 b
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" )
set ( __libsupcxx "${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/libs/${ANDROID_NDK_ABI_NAME}/libsupc++.a" )
else ( ANDROID_NDK_RELEASE STRLESS "r7" )
if ( ARMEABI_V7A )
if ( ANDROID_FORCE_ARM_BUILD )
set ( __libsupcxx "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/libsupc++.a" )
else ( )
set ( __libsupcxx "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/thumb/libsupc++.a" )
endif ( )
elseif ( ARMEABI AND NOT ANDROID_FORCE_ARM_BUILD )
set ( __libsupcxx "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/thumb/libsupc++.a" )
else ( )
set ( __libsupcxx "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/libsupc++.a" )
endif ( )
endif ( )
if ( NOT EXISTS "${__libsupcxx}" )
message ( ERROR "Could not find libsupc++.a for a chosen platform. Either your NDK is not supported or is broken." )
endif ( )
endif ( )
endif ( )
# s e t u p p a t h s a n d S T L f o r s t a n d a l o n e t o o l c h a i n
if ( BUILD_WITH_STANDALONE_TOOLCHAIN )
set ( ANDROID_TOOLCHAIN_ROOT "${ANDROID_STANDALONE_TOOLCHAIN}" )
set ( ANDROID_SYSROOT "${ANDROID_STANDALONE_TOOLCHAIN}/sysroot" )
if ( NOT ANDROID_STL STREQUAL "none" )
set ( ANDROID_STL_INCLUDE_DIRS "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/include/c++/${ANDROID_COMPILER_VERSION}" )
if ( ARMEABI_V7A AND EXISTS "${ANDROID_STL_INCLUDE_DIRS}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/${CMAKE_SYSTEM_PROCESSOR}/bits" )
list ( APPEND ANDROID_STL_INCLUDE_DIRS "${ANDROID_STL_INCLUDE_DIRS}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/${CMAKE_SYSTEM_PROCESSOR}" )
elseif ( ARMEABI AND NOT ANDROID_FORCE_ARM_BUILD AND EXISTS "${ANDROID_STL_INCLUDE_DIRS}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/thumb/bits" )
list ( APPEND ANDROID_STL_INCLUDE_DIRS "${ANDROID_STL_INCLUDE_DIRS}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/thumb" )
else ( )
list ( APPEND ANDROID_STL_INCLUDE_DIRS "${ANDROID_STL_INCLUDE_DIRS}/${ANDROID_TOOLCHAIN_MACHINE_NAME}" )
endif ( )
# a l w a y s s e a r c h s t a t i c G N U S T L t o g e t t h e l o c a t i o n o f l i b s u p c + + . 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 " The required libstdsupc++.a is missing in your standalone toolchain.
U s u a l l y i t h a p p e n s b e c a u s e o f b u g i n m a k e - s t a n d a l o n e - t o o l c h a i n . s h s c r i p t f r o m N D K r 7 , r 7 b a n d r 7 c .
Y o u n e e d t o e i t h e r u p g r a d e t o n e w e r N D K o r m a n u a l l y c o p y
$ A N D R O I D _ N D K / s o u r c e s / c x x - s t l / g n u - l i b s t d c + + / l i b s / $ { A N D R O I D _ N D K _ A B I _ N A M E } / l i b s u p c + + . a
t o
$ { _ _ l i b s u p c x x }
" )
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 ( )
endif ( )
# c a s e o f s h a r e d S T L l i n k a g e
if ( ANDROID_STL MATCHES "shared" AND DEFINED __libstl )
string ( REPLACE "_static.a" "_shared.so" __libstl "${__libstl}" )
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 ( )
endif ( )
@ -698,29 +916,31 @@ else()
endif ( )
unset ( _ndk_ccache )
# s p e c i f y t h e c r o s s c o m p i l e r
if ( NDK_CCACHE )
set ( CMAKE_C_COMPILER "${NDK_CCACHE}" CACHE PATH "ccache as C compiler" )
set ( CMAKE_CXX_COMPILER "${NDK_CCACHE}" CACHE PATH "ccache as C++ compiler" )
set ( CMAKE_C_COMPILER_ARG1 "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-gcc${TOOL_OS_SUFFIX}" CACHE PATH "gcc" )
set ( CMAKE_CXX_COMPILER_ARG1 "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-g++${TOOL_OS_SUFFIX}" CACHE PATH "g++" )
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++" )
# s e t u p t h e c r o s s - c o m p i l e r
if ( NOT CMAKE_C_COMPILER )
if ( NDK_CCACHE )
set ( CMAKE_C_COMPILER "${NDK_CCACHE}" CACHE PATH "ccache as C compiler" )
set ( CMAKE_CXX_COMPILER "${NDK_CCACHE}" CACHE PATH "ccache as C++ compiler" )
set ( CMAKE_C_COMPILER_ARG1 "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-gcc${TOOL_OS_SUFFIX}" CACHE PATH "gcc" )
set ( CMAKE_CXX_COMPILER_ARG1 "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-g++${TOOL_OS_SUFFIX}" CACHE PATH "g++" )
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_STRIP "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-strip${TOOL_OS_SUFFIX}" CACHE PATH "strip" )
set ( CMAKE_AR "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-ar${TOOL_OS_SUFFIX}" CACHE PATH "archive" )
set ( CMAKE_LINKER "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-ld${TOOL_OS_SUFFIX}" CACHE PATH "linker" )
set ( CMAKE_NM "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-nm${TOOL_OS_SUFFIX}" CACHE PATH "nm" )
set ( CMAKE_OBJCOPY "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-objcopy${TOOL_OS_SUFFIX}" CACHE PATH "objcopy" )
set ( CMAKE_OBJDUMP "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-objdump${TOOL_OS_SUFFIX}" CACHE PATH "objdump" )
set ( CMAKE_RANLIB "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-ranlib${TOOL_OS_SUFFIX}" CACHE PATH "ranlib" )
endif ( )
set ( CMAKE_ASM_COMPILER "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-gcc${TOOL_OS_SUFFIX}" CACHE PATH "Assembler" )
set ( _CMAKE_TOOLCHAIN_PREFIX "${ANDROID_TOOLCHAIN_MACHINE_NAME}-" )
if ( CMAKE_VERSION VERSION_LESS 2.8.5 )
set ( CMAKE_ASM_COMPILER_ARG1 "-c" )
endif ( )
# t h e r e m a y b e a w a y t o m a k e c m a k e d e d u c e t h e s e T O D O d e d u c e t h e r e s t o f t h e t o o l s
set ( CMAKE_STRIP "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-strip${TOOL_OS_SUFFIX}" CACHE PATH "strip" )
set ( CMAKE_AR "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-ar${TOOL_OS_SUFFIX}" CACHE PATH "archive" )
set ( CMAKE_LINKER "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-ld${TOOL_OS_SUFFIX}" CACHE PATH "linker" )
set ( CMAKE_NM "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-nm${TOOL_OS_SUFFIX}" CACHE PATH "nm" )
set ( CMAKE_OBJCOPY "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-objcopy${TOOL_OS_SUFFIX}" CACHE PATH "objcopy" )
set ( CMAKE_OBJDUMP "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-objdump${TOOL_OS_SUFFIX}" CACHE PATH "objdump" )
set ( CMAKE_RANLIB "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-ranlib${TOOL_OS_SUFFIX}" CACHE PATH "ranlib" )
set ( _CMAKE_TOOLCHAIN_PREFIX "${ANDROID_TOOLCHAIN_MACHINE_NAME}-" )
if ( APPLE )
find_program ( CMAKE_INSTALL_NAME_TOOL NAMES install_name_tool )
if ( NOT CMAKE_INSTALL_NAME_TOOL )
@ -729,55 +949,20 @@ if( APPLE )
mark_as_advanced ( CMAKE_INSTALL_NAME_TOOL )
endif ( )
# e x p o r t d i r e c t o r i e s
set ( ANDROID_SYSTEM_INCLUDE_DIRS "" )
set ( ANDROID_SYSTEM_LIB_DIRS "" )
# s e t u p o u t p u t d i r e c t o r i e s
set ( LIBRARY_OUTPUT_PATH_ROOT ${ CMAKE_SOURCE_DIR } CACHE PATH "root for library output, set this to change where android libs are installed to" )
set ( CMAKE_INSTALL_PREFIX "${ANDROID_TOOLCHAIN_ROOT}/user" CACHE STRING "path for installing" )
if ( NOT _CMAKE_IN_TRY_COMPILE )
if ( EXISTS "${CMAKE_SOURCE_DIR}/jni/CMakeLists.txt" )
set ( EXECUTABLE_OUTPUT_PATH "${LIBRARY_OUTPUT_PATH_ROOT}/bin/${ANDROID_NDK_ABI_NAME}" CACHE PATH "Output directory for applications" )
else ( )
set ( EXECUTABLE_OUTPUT_PATH "${LIBRARY_OUTPUT_PATH_ROOT}/bin" CACHE PATH "Output directory for applications" )
endif ( )
set ( LIBRARY_OUTPUT_PATH "${LIBRARY_OUTPUT_PATH_ROOT}/libs/${ANDROID_NDK_ABI_NAME}" CACHE PATH "path for android libs" )
endif ( )
# i n c l u d e s
list ( APPEND ANDROID_SYSTEM_INCLUDE_DIRS "${ANDROID_SYSROOT}/usr/include" )
if ( __stlIncludePath AND EXISTS "${__stlIncludePath}" )
list ( APPEND ANDROID_SYSTEM_INCLUDE_DIRS "${__stlIncludePath}" )
endif ( )
# c + + b i t s i n c l u d e s
if ( __stlLibPath AND EXISTS "${__stlLibPath}/include" )
list ( APPEND ANDROID_SYSTEM_INCLUDE_DIRS "${__stlLibPath}/include" )
endif ( )
if ( ANDROID_ARCH_NAME STREQUAL "arm" AND EXISTS "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/include/c++/${ANDROID_COMPILER_VERSION}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/${CMAKE_SYSTEM_PROCESSOR}/thumb/bits" )
list ( APPEND ANDROID_SYSTEM_INCLUDE_DIRS "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/include/c++/${ANDROID_COMPILER_VERSION}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/${CMAKE_SYSTEM_PROCESSOR}/thumb" )
elseif ( EXISTS "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/include/c++/${ANDROID_COMPILER_VERSION}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/${CMAKE_SYSTEM_PROCESSOR}/bits" )
list ( APPEND ANDROID_SYSTEM_INCLUDE_DIRS "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/include/c++/${ANDROID_COMPILER_VERSION}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/${CMAKE_SYSTEM_PROCESSOR}" )
elseif ( ANDROID_ARCH_NAME STREQUAL "arm" AND EXISTS "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/include/c++/${ANDROID_COMPILER_VERSION}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/thumb/bits" )
list ( APPEND ANDROID_SYSTEM_INCLUDE_DIRS "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/include/c++/${ANDROID_COMPILER_VERSION}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/thumb" )
elseif ( EXISTS "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/include/c++/${ANDROID_COMPILER_VERSION}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/bits" )
list ( APPEND ANDROID_SYSTEM_INCLUDE_DIRS "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/include/c++/${ANDROID_COMPILER_VERSION}/${ANDROID_TOOLCHAIN_MACHINE_NAME}" )
endif ( )
# f l a g s a n d d e f i n i t i o n s
remove_definitions ( -DANDROID )
add_definitions ( -DANDROID )
if ( ANDROID_SYSROOT MATCHES "[ ;\" ] " )
set ( ANDROID_CXX_FLAGS "--sysroot=\" ${ ANDROID_SYSROOT } \"" )
# q u o t e s w i l l b r e a k t r y _ c o m p i l e a n d c o m p i l e r i d e n t i f i c a t i o n
message ( WARNING "Your Android system root has non-alphanumeric symbols. It can break compiler features detection and the whole build." )
if ( NOT _CMAKE_IN_TRY_COMPILE )
# q u o t e s w i l l b r e a k t r y _ c o m p i l e a n d c o m p i l e r i d e n t i f i c a t i o n
message ( WARNING "Your Android system root has non-alphanumeric symbols. It can break compiler features detection and the whole build." )
endif ( )
else ( )
set ( ANDROID_CXX_FLAGS "--sysroot=${ANDROID_SYSROOT}" )
endif ( )
remove_definitions ( -DANDROID )
add_definitions ( -DANDROID )
# F o r c e s e t c o m p i l e r s b e c a u s e s t a n d a r d i d e n t i f i c a t i o n w o r k s b a d l y f o r u s
include ( CMakeForceCompiler )
CMAKE_FORCE_C_COMPILER ( "${CMAKE_C_COMPILER}" GNU )
@ -819,14 +1004,6 @@ else()
set ( _CMAKE_C_FLAGS "" )
endif ( )
if ( ANDROID_USE_STLPORT )
set ( _CMAKE_CXX_FLAGS "${_CMAKE_CXX_FLAGS} -fno-rtti -fno-exceptions" )
set ( _CMAKE_C_FLAGS "${_CMAKE_C_FLAGS} -fno-exceptions" )
else ( )
set ( _CMAKE_CXX_FLAGS "${_CMAKE_CXX_FLAGS} -frtti -fexceptions" )
set ( _CMAKE_C_FLAGS "${_CMAKE_C_FLAGS} -fexceptions" )
endif ( )
# r e l e a s e a n d d e b u g f l a g s
if ( ARMEABI OR ARMEABI_V7A )
if ( NOT ANDROID_FORCE_ARM_BUILD AND NOT ARMEABI_V6 )
@ -879,50 +1056,34 @@ elseif( X86 )
set ( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS}" ) # s s e ?
endif ( )
# l i n k e r f l a g s
if ( NOT DEFINED __ndklibspath )
set ( __ndklibspath "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/ndklibs/${ANDROID_NDK_ABI_NAME}" )
endif ( )
list ( APPEND ANDROID_SYSTEM_LIB_DIRS "${CMAKE_INSTALL_PREFIX}/libs/${ANDROID_NDK_ABI_NAME}" )
set ( ANDROID_LINKER_FLAGS "" )
# S T L
if ( ANDROID_USE_STLPORT )
if ( EXISTS "${__stlLibPath}/libstlport_static.a" )
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> \" ${ __stlLibPath } /libstlport_static.a\ "" )
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> \" ${ __stlLibPath } /libstlport_static.a\ "" )
if ( 0 AND EXISTS "${__libstl}" OR EXISTS "${__libsupcxx}" )
# u s e g c c a s a C + + l i n k e r t o a v o i d a u t o m a t i c p i c k i n g o f l i b s d t c + +
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 } \"")
endif ( )
else ( ANDROID_USE_STLPORT )
if ( EXISTS "${__stlLibPath}/libgnustl_static.a" )
__COPY_IF_DIFFERENT ( "${__stlLibPath}/libgnustl_static.a" "${__ndklibspath}/libstdc++.a" )
elseif ( ANDROID_ARCH_NAME STREQUAL "arm" AND EXISTS "${__stlLibPath}/${CMAKE_SYSTEM_PROCESSOR}/thumb/libstdc++.a" )
__COPY_IF_DIFFERENT ( "${__stlLibPath}/${CMAKE_SYSTEM_PROCESSOR}/thumb/libstdc++.a" "${__ndklibspath}/libstdc++.a" )
elseif ( ANDROID_ARCH_NAME STREQUAL "arm" AND EXISTS "${__stlLibPath}/${CMAKE_SYSTEM_PROCESSOR}/libstdc++.a " )
__COPY_IF_DIFFERENT ( "${__stlLibPath}/${CMAKE_SYSTEM_PROCESSOR}/libstdc++.a" "${__ndklibspath}/libstdc++.a " )
elseif ( ANDROID_ARCH_NAME STREQUAL "arm" AND EXISTS "${__stlLibPath}/thumb/libstdc++.a " )
__COPY_IF_DIFFERENT ( "${__stlLibPath}/thumb/libstdc++.a" "${__ndklibspath}/libstdc++.a" )
elseif ( EXISTS "${__stlLibPath}/libstdc++.a" )
__COPY_IF_DIFFERENT ( "${__stlLibPath}/libstdc++.a" "${__ndklibspath}/libstdc++.a" )
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 } \"" )
# C o b j e c t s :
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 } \"" )
endif ( )
if ( EXISTS "${__stlLibPath}/libsupc++.a" )
__COPY_IF_DIFFERENT ( "${__stlLibPath}/libsupc++.a" "${__ndklibspath}/libsupc++.a" )
elseif ( ANDROID_ARCH_NAME STREQUAL "arm" AND EXISTS "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/thumb/libsupc++.a" )
__COPY_IF_DIFFERENT ( "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/thumb/libsupc++.a" "${__ndklibspath}/libsupc++.a" )
elseif ( ANDROID_ARCH_NAME STREQUAL "arm" AND EXISTS "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/libsupc++.a" )
__COPY_IF_DIFFERENT ( "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/libsupc++.a" "${__ndklibspath}/libsupc++.a" )
elseif ( ANDROID_ARCH_NAME STREQUAL "arm" AND EXISTS "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/thumb/libsupc++.a" )
__COPY_IF_DIFFERENT ( "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/thumb/libsupc++.a" "${__ndklibspath}/libsupc++.a" )
elseif ( EXISTS "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/libsupc++.a" )
__COPY_IF_DIFFERENT ( "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/libsupc++.a" "${__ndklibspath}/libsupc++.a" )
endif ( )
list ( APPEND ANDROID_SYSTEM_LIB_DIRS "${__ndklibspath}" )
endif ( ANDROID_USE_STLPORT )
endif ( )
# c l e a n u p f o r S T L s e a r c h
unset ( __stlIncludePath )
unset ( __stlLibPath )
# l i n k e r f l a g s
set ( ANDROID_LINKER_FLAGS "" )
# o t h e r l i n k e r f l a g s
__INIT_VARIABLE ( ANDROID_NO_UNDEFINED OBSOLETE_NO_UNDEFINED VALUES ON )
set ( ANDROID_NO_UNDEFINED ${ ANDROID_NO_UNDEFINED } CACHE BOOL "Show all undefined symbols as linker errors" FORCE )
mark_as_advanced ( ANDROID_NO_UNDEFINED )
@ -930,8 +1091,9 @@ if( ANDROID_NO_UNDEFINED )
set ( ANDROID_LINKER_FLAGS "-Wl,--no-undefined ${ANDROID_LINKER_FLAGS}" )
endif ( )
if ( ANDROID_NDK MATCHES "-r[56].?$" )
# l i b G L E S v 2 . s o i n N D K ' s p r i o r t o r 7 r e f e r s t o e x t e r a n a l s y m b o l s . S o t h i s f l a g o p t i o n i s r e q u i r e d f o r a l l p r o j e c t s u s i n g O p e n G L f r o m n a t i v e .
if ( ANDROID_NDK_RELEASE STRLESS "r7" )
# l i b G L E S v 2 . s o i n N D K ' s p r i o r t o r 7 r e f e r s t o m i s s i n g e x t e r n a l s y m b o l s .
# S o t h i s f l a g o p t i o n i s r e q u i r e d f o r a l l p r o j e c t s u s i n g O p e n G L f r o m n a t i v e .
__INIT_VARIABLE ( ANDROID_SO_UNDEFINED VALUES ON )
else ( )
__INIT_VARIABLE ( ANDROID_SO_UNDEFINED VALUES OFF )
@ -977,15 +1139,12 @@ 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_SYSTEM_INCLUDE_DIRS } )
link_directories ( ${ ANDROID_SYSTEM_LIB_DIRS } )
# f i n i s h f l a g s
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" )
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" )
set ( CMAKE_CXX_FLAGS "${ANDROID_CXX_FLAGS} ${CMAKE_CXX_FLAGS}" )
set ( CMAKE_C_FLAGS "${ANDROID_CXX_FLAGS} ${CMAKE_C_FLAGS}" )
if ( MIPS AND BUILD_WITH_ANDROID_NDK AND ANDROID_NDK MATCHES "-r8$ " )
if ( MIPS AND BUILD_WITH_ANDROID_NDK AND ANDROID_NDK_RELEASE STREQUAL "r8 " )
set ( CMAKE_SHARED_LINKER_FLAGS "-Wl,-T,${ANDROID_NDK}/toolchains/${ANDROID_TOOLCHAIN_NAME}/mipself.xsc ${ANDROID_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS}" )
set ( CMAKE_MODULE_LINKER_FLAGS "-Wl,-T,${ANDROID_NDK}/toolchains/${ANDROID_TOOLCHAIN_NAME}/mipself.xsc ${ANDROID_LINKER_FLAGS} ${CMAKE_MODULE_LINKER_FLAGS}" )
set ( CMAKE_EXE_LINKER_FLAGS "-Wl,-T,${ANDROID_NDK}/toolchains/${ANDROID_TOOLCHAIN_NAME}/mipself.x ${ANDROID_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS}" )
@ -995,6 +1154,33 @@ else()
set ( CMAKE_EXE_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS}" )
endif ( )
# c o n f i g u r e r t t i
if ( DEFINED ANDROID_RTTI AND ANDROID_STL_FORCE_FEATURES )
if ( ANDROID_RTTI )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -frtti" )
else ( )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti" )
endif ( )
endif ( )
# c o n f i g u r e e x c e p t i o s
if ( DEFINED ANDROID_EXCEPTIONS AND ANDROID_STL_FORCE_FEATURES )
if ( ANDROID_EXCEPTIONS )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fexceptions" )
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fexceptions" )
else ( )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions" )
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-exceptions" )
endif ( )
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
if ( ANDROID_STL_INCLUDE_DIRS )
include_directories ( SYSTEM ${ ANDROID_STL_INCLUDE_DIRS } )
endif ( )
link_directories ( "${CMAKE_INSTALL_PREFIX}/libs/${ANDROID_NDK_ABI_NAME}" )
# s e t t h e s e g l o b a l f l a g s f o r c m a k e c l i e n t s c r i p t s t o c h a n g e b e h a v i o r
set ( ANDROID True )
set ( BUILD_ANDROID True )
@ -1069,9 +1255,9 @@ endmacro()
if ( NOT PROJECT_NAME STREQUAL "CMAKE_TRY_COMPILE" )
set ( __toolchain_config "" )
foreach ( __var NDK_CCACHE ANDROID_ABI ANDROID_FORCE_ARM_BUILD ANDROID_NATIVE_API_LEVEL ANDROID_NO_UNDEFINED
A N D R O I D _ S O _ U N D E F I N E D A N D R O I D _ S E T _ O B S O L E T E _ V A R I A B L E S L I B R A R Y _ O U T P U T _ P A T H _ R O O T A N D R O I D _ U S E _ S T L P O R T
A N D R O I D _ F O R B I D _ S Y G W I N A N D R O I D _ N D K A N D R O I D _ S T A N D A L O N E _ T O O L C H A I N A N D R O I D _ F U N C T I O N _ L E V E L _ L I N K I N G
A N D R O I D _ U S E _ G O L D _ L I N K E R _ _ n d k l i b s p a t h )
A N D R O I D _ S O _ U N D E F I N E D A N D R O I D _ S E T _ O B S O L E T E _ V A R I A B L E S L I B R A R Y _ O U T P U T _ P A T H _ R O O T A N D R O I D _ S T L
A N D R O I D _ S T L _ F O R C E _ F E A T U R E S A N D R O I D _ F O R B I D _ S Y G W I N A N D R O I D _ N D K A N D R O I D _ S T A N D A L O N E _ T O O L C H A I N
A N D R O I D _ F U N C T I O N _ L E V E L _ L I N K I N G A N D R O I D _ U S E _ G O L D _ L I N K E R )
if ( DEFINED ${ __var } )
if ( "${__var}" MATCHES " " )
set ( __toolchain_config "${__toolchain_config}set( ${__var} \" ${ ${__var } }\ " CACHE INTERNAL \" \" ) \ n " )
@ -1082,7 +1268,6 @@ if( NOT PROJECT_NAME STREQUAL "CMAKE_TRY_COMPILE" )
endforeach ( )
file ( WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/android.toolchain.config.cmake" "${__toolchain_config}" )
unset ( __toolchain_config )
unset ( __ndklibspath )
endif ( )
@ -1100,7 +1285,6 @@ endif()
# A N D R O I D _ A B I : " a r m e a b i - v 7 a " ( d e f a u l t ) , " a r m e a b i " , " a r m e a b i - v 7 a w i t h N E O N " , " a r m e a b i - v 7 a w i t h V F P V 3 " , " a r m e a b i - v 6 w i t h V F P " , " x 8 6 " , " m i p s "
# A N D R O I D _ N A T I V E _ A P I _ L E V E L : 3 , 4 , 5 , 8 , 9 , 14 ( depends on NDK version )
# A N D R O I D _ S E T _ O B S O L E T E _ V A R I A B L E S : O N / O F F
# A N D R O I D _ U S E _ S T L P O R T : O F F / O N - E X P E R I M E N T A L ! ! !
# A N D R O I D _ F O R B I D _ S Y G W I N : O N / O F F
# A N D R O I D _ N O _ U N D E F I N E D : O N / O F F
# A N D R O I D _ S O _ U N D E F I N E D : O F F / ON ( default depends on NDK version )
@ -1108,6 +1292,8 @@ endif()
# A N D R O I D _ U S E _ G O L D _ L I N K E R : O N / OFF ( default depends on NDK version and host & target platforms )
# V a r i a b l e s t h a t t a k e s e f f e c t o n l y a t f i r s t r u n :
# A N D R O I D _ F O R C E _ A R M _ B U I L D : O N / O F F
# A N D R O I D _ S T L : g n u s t l _ s t a t i c / g n u s t l _ s h a r e d / s t l p o r t _ s t a t i c / s t l p o r t _ s h a r e d / g a b i + + _ s t a t i c / g a b i + + _ s h a r e d / s y s t e m _ r e / s y s t e m / n o n e
# A N D R O I D _ S T L _ F O R C E _ F E A T U R E S : O N / O F F
# L I B R A R Y _ O U T P U T _ P A T H _ R O O T : < a n y v a l i d p a t h >
# N D K _ C C A C H E : < p a t h t o y o u r c c a c h e e x e c u t a b l e >
# C a n b e s e t o n l y a t t h e f i r s t r u n :
@ -1119,6 +1305,7 @@ endif()
# A R M _ T A R G E T : s u p e r s e d e d b y A N D R O I D _ A B I
# A R M _ T A R G E T S : s u p e r s e d e d b y ANDROID_ABI ( can be set only )
# A N D R O I D _ N D K _ T O O L C H A I N _ R O O T : s u p e r s e d e d b y ANDROID_STANDALONE_TOOLCHAIN ( can be set only )
# A N D R O I D _ U S E _ S T L P O R T : s u p e r s e d e d b y A N D R O I D _ S T L = s t l p o r t _ s t a t i c
# A N D R O I D _ L E V E L : s u p e r s e d e d b y ANDROID_NATIVE_API_LEVEL ( completely removed )
#
# P r i m a r y r e a d - o n l y v a r i a b l e s :
@ -1129,16 +1316,16 @@ endif()
# N E O N : T R U E i f N E O N u n i t i s e n a b l e d
# V F P V 3 : T R U E i f V F P v e r s i o n 3 i s e n a b l e d
# X 8 6 : T R U E i f c o n f i g u r e d f o r x 8 6
# M I P S : T R U E i f c o n f i g u r e d f o r m i p s
# B U I L D _ A N D R O I D : a l w a y s T R U E
# B U I L D _ W I T H _ A N D R O I D _ N D K : T R U E i f N D K i s u s e d
# B U I L D _ W I T H _ S T A N D A L O N E _ T O O L C H A I N : T R U E i f s t a n d a l o n e t o o l c h a i n i s u s e d
# A N D R O I D _ N D K _ H O S T _ S Y S T E M _ N A M E : " w i n d o w s " , " l i n u x - x 8 6 " o r " d a r w i n - x 8 6 " 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 _ N D K _ A B I _ N A M E : " a r m e a b i " , " a r m e a b i - v 7 a " o r " x 8 6 " 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 _ N D K _ A B I _ N A M E : " a r m e a b i " , " a r m e a b i - v 7 a " , " x 8 6 " o r " m i p s " 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 _ N D K _ R E L E A S E : o n e o f r 5 , r 5 b , r 5 c , r 6 , r 6 b , r 7 , r 7 b , r 7 c , r 8 , r 8 b ; s e t o n l y f o r N D K
# A N D R O I D _ A R C H _ N A M E : " a r m " o r " x 8 6 " o r " m i p s " d e p e n d i n g o n A N D R O I D _ A B I
# 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 _ 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 T E M _ I N C L U D E _ D I R S
# A N D R O I D _ S Y S T E M _ L I B _ D I R 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
# O b s o l e t e :
# A R M E A B I _ N D K _ N A M E : s u p e r s e d e d b y A N D R O I D _ N D K _ A B I _ N A M E
#
@ -1149,6 +1336,9 @@ endif()
# 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 r m - l i n u x - a n d r o i d e a b i " , " a r m - e a b i " o r " i 6 8 6 - a n d r o i d - l i n u x "
# A N D R O I D _ T O O L C H A I N _ R O O T : p a t h t o t h e t o p l e v e l o f toolchain ( standalone or placed inside NDK )
# A N D R O I D _ S U P P O R T E D _ N A T I V E _ A P I _ L E V E L S : l i s t o f n a t i v e A P I l e v e l s f o u n d i n s i d e N D K
# A N D R O I D _ S T L _ I N C L U D E _ D I R S : s t l i n c l u d e p a t h s
# A N D R O I D _ R T T I : i f r t t i i s e n a b l e d b y t h e r u n t i m e
# A N D R O I D _ E X C E P T I O N S : i f e x c e p t i o n s a r e e n a b l e d b y t h e r u n t i m e
#
# D e f a u l t s :
# A N D R O I D _ D E F A U L T _ N D K _ A P I _ L E V E L