@ -1,5 +1,5 @@
# Copyright ( c ) 2 0 1 0 - 2 0 1 1 , E t h a n R u b l e e
# Copyright ( c ) 2 0 1 1 - 2 0 1 3 , A n d r e y K a m a e v
# Copyright ( c ) 2 0 1 1 - 2 0 1 4 , A n d r e y K a m a e v
# A l l r i g h t s r e s e r v e d .
#
# R e d i s t r i b u t i o n a n d u s e i n s o u r c e a n d b i n a r y f o r m s , w i t h o r w i t h o u t
@ -12,9 +12,9 @@
# t h i s l i s t o f c o n d i t i o n s a n d t h e f o l l o w i n g d i s c l a i m e r i n t h e d o c u m e n t a t i o n
# a n d / o r o t h e r m a t e r i a l s p r o v i d e d w i t h t h e d i s t r i b u t i o n .
#
# 3 . T h e n a m e o f t h e c o p y r i g h t h o l d e r s m a y b e u s e d t o e n d o r s e o r p r o m o t e
# p r o d u c t s d e r i v e d f r o m t h i s s o f t w a r e w i t h o u t s p e c i f i c p r i o r w r i t t e n
# p e r m i s s i o n .
# 3 . N e i t h e r t h e n a m e o f t h e c o p y r i g h t h o l d e r n o r t h e n a m e s o f i t s
# c o n t r i b u t o r s m a y b e u s e d t o e n d o r s e o r p r o m o t e p r o d u c t s d e r i v e d f r o m t h i s
# s o f t w a r e w i t h o u t s p e c i f i c p r i o r w r i t t e n p e r m i s s i o n .
#
# T H I S S O F T W A R E I S P R O V I D E D B Y T H E C O P Y R I G H T H O L D E R S A N D C O N T R I B U T O R S " A S I S "
# A N D A N Y E X P R E S S O R I M P L I E D W A R R A N T I E S , I N C L U D I N G , B U T N O T L I M I T E D T O , T H E
@ -29,12 +29,12 @@
# P O S S I B I L I T Y O F S U C H D A M A G E .
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# A n d r o i d C M a k e t o o l c h a i n f i l e , f o r u s e w i t h t h e A n d r o i d N D K r 5 - r 8
# A n d r o i d C M a k e t o o l c h a i n f i l e , f o r u s e w i t h t h e A n d r o i d N D K r 5 - r 9
# 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 s : / / g i t h u b . c o m / t a k a - n o - m e / 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 . 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 s : / / g i t h u b . c o m / I t s e e z / o p e n c v / t r e e / m a s t e r / p l a t f o r m 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
# 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 :
# $ e x p o r t A N D R O I D _ N D K = / a b s o l u t e / p a t h / t o / t h e / a n d r o i d - n d k
@ -87,8 +87,7 @@
# " a r m e a b i - v 6 w i t h V F P " - t u n e d f o r A R M v 6 p r o c e s s o r s h a v i n g V F P .
# " 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
# ( 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 )
# " 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 .
# 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 .
@ -292,6 +291,16 @@
# - A p r i l 2 0 1 3
# [ + ] s u p p o r t n o n - r e l e a s e N D K layouts ( from Linaro git and Android git )
# [ ~ ] a u t o m a t i c a l l y d e t e c t i f e x p l i c i t l i n k t o c r t b e g i n _ * . o i s n e e d e d
# - J u n e 2 0 1 3
# [ ~ ] f i x e d s t l i n c l u d e p a t h f o r s t a n d a l o n e t o o l c h a i n m a d e b y N D K > = r 8 c
# - J u l y 2 0 1 3
# [ + ] u p d a t e d f o r N D K r 9
# - N o v e m b e r 2 0 1 3
# [ + ] u p d a t e d f o r N D K r 9 b
# - D e c e m b e r 2 0 1 3
# [ + ] u p d a t e d f o r N D K r 9 c
# - J a n u a r y 2 0 1 4
# [ ~ ] f i x c o p y i n g o f s h a r e d S T L
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
cmake_minimum_required ( VERSION 2.6.3 )
@ -318,7 +327,7 @@ set( CMAKE_SYSTEM_VERSION 1 )
# r p a t h m a k e s l o w s e n c e f o r A n d r o i d
set ( CMAKE_SKIP_RPATH TRUE CACHE BOOL "If set, runtime paths are not added when using shared libraries." )
set ( ANDROID_SUPPORTED_NDK_VERSIONS ${ ANDROID_EXTRA_NDK_VERSIONS } -r9b -r9 -r8e -r8d -r8c -r8b -r8 -r7c -r7b -r7 -r6b -r6 -r5c -r5b -r5 "" )
set ( ANDROID_SUPPORTED_NDK_VERSIONS ${ ANDROID_EXTRA_NDK_VERSIONS } -r9c -r9 b -r9 -r8e -r8d -r8c -r8b -r8 -r7c -r7b -r7 -r6b -r6 -r5c -r5b -r5 "" )
if ( NOT DEFINED ANDROID_NDK_SEARCH_PATHS )
if ( CMAKE_HOST_WIN32 )
file ( TO_CMAKE_PATH "$ENV{PROGRAMFILES}" ANDROID_NDK_SEARCH_PATHS )
@ -464,7 +473,7 @@ endif()
# d e t e c t c u r r e n t h o s t p l a t f o r m
if ( NOT DEFINED ANDROID_NDK_HOST_X64 AND CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "amd64|x86_64|AMD64" )
if ( NOT DEFINED ANDROID_NDK_HOST_X64 AND ( CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "amd64|x86_64|AMD64" OR CMAKE_HOST_APPLE ) )
set ( ANDROID_NDK_HOST_X64 1 CACHE BOOL "Try to use 64-bit compiler toolchain" )
mark_as_advanced ( ANDROID_NDK_HOST_X64 )
endif ( )
@ -484,9 +493,7 @@ else()
message ( FATAL_ERROR "Cross-compilation on your platform is not supported by this cmake toolchain" )
endif ( )
# C M A K E _ H O S T _ S Y S T E M _ P R O C E S S O R o n M a c O S X a l w a y s s a y s i 3 8 6 o n I n t e l p l a t f o r m
# S o w e d o n o t t r u s t A N D R O I D _ N D K _ H O S T _ X 6 4 o n A p p l e h o s t s
if ( NOT ANDROID_NDK_HOST_X64 AND NOT CMAKE_HOST_APPLE )
if ( NOT ANDROID_NDK_HOST_X64 )
set ( ANDROID_NDK_HOST_SYSTEM_NAME ${ ANDROID_NDK_HOST_SYSTEM_NAME2 } )
endif ( )
@ -634,30 +641,27 @@ endif()
macro ( __GLOB_NDK_TOOLCHAINS __availableToolchainsVar __availableToolchainsLst __toolchain_subpath )
foreach ( __toolchain ${ ${__availableToolchainsLst } } )
# S k i p r e n d e r s c r i p t f o l d e r . I t ' s n o t C + + t o o l c h a i n
if ( NOT ${ __toolchain } STREQUAL "renderscript" )
if ( "${__toolchain}" MATCHES "-clang3[.][0-9]$" AND NOT EXISTS "${ANDROID_NDK_TOOLCHAINS_PATH}/${__toolchain}${__toolchain_subpath}" )
string ( REGEX REPLACE "-clang3[.][0-9]$" "-4.6" __gcc_toolchain "${__toolchain}" )
else ( )
set ( __gcc_toolchain "${__toolchain}" )
endif ( )
__DETECT_TOOLCHAIN_MACHINE_NAME ( __machine "${ANDROID_NDK_TOOLCHAINS_PATH}/${__gcc_toolchain}${__toolchain_subpath}" )
if ( __machine )
string ( REGEX MATCH "[0-9]+[.][0-9]+([.][0-9x]+)?$" __version "${__gcc_toolchain}" )
if ( __machine MATCHES i686 )
set ( __arch "x86" )
elseif ( __machine MATCHES arm )
set ( __arch "arm" )
elseif ( __machine MATCHES mipsel )
set ( __arch "mipsel" )
endif ( )
list ( APPEND __availableToolchainMachines "${__machine}" )
list ( APPEND __availableToolchainArchs "${__arch}" )
list ( APPEND __availableToolchainCompilerVersions "${__version}" )
list ( APPEND ${ __availableToolchainsVar } "${__toolchain}" )
if ( "${__toolchain}" MATCHES "-clang3[.][0-9]$" AND NOT EXISTS "${ANDROID_NDK_TOOLCHAINS_PATH}/${__toolchain}${__toolchain_subpath}" )
string ( REGEX REPLACE "-clang3[.][0-9]$" "-4.6" __gcc_toolchain "${__toolchain}" )
else ( )
set ( __gcc_toolchain "${__toolchain}" )
endif ( )
__DETECT_TOOLCHAIN_MACHINE_NAME ( __machine "${ANDROID_NDK_TOOLCHAINS_PATH}/${__gcc_toolchain}${__toolchain_subpath}" )
if ( __machine )
string ( REGEX MATCH "[0-9]+[.][0-9]+([.][0-9x]+)?$" __version "${__gcc_toolchain}" )
if ( __machine MATCHES i686 )
set ( __arch "x86" )
elseif ( __machine MATCHES arm )
set ( __arch "arm" )
elseif ( __machine MATCHES mipsel )
set ( __arch "mipsel" )
endif ( )
unset ( __gcc_toolchain )
list ( APPEND __availableToolchainMachines "${__machine}" )
list ( APPEND __availableToolchainArchs "${__arch}" )
list ( APPEND __availableToolchainCompilerVersions "${__version}" )
list ( APPEND ${ __availableToolchainsVar } "${__toolchain}" )
endif ( )
unset ( __gcc_toolchain )
endforeach ( )
endmacro ( )
@ -687,6 +691,7 @@ if( BUILD_WITH_ANDROID_NDK )
endif ( )
__LIST_FILTER ( __availableToolchainsLst "^[.]" )
__LIST_FILTER ( __availableToolchainsLst "llvm" )
__LIST_FILTER ( __availableToolchainsLst "renderscript" )
__GLOB_NDK_TOOLCHAINS ( __availableToolchains __availableToolchainsLst "${ANDROID_NDK_TOOLCHAINS_SUBPATH}" )
if ( NOT __availableToolchains AND NOT ANDROID_NDK_TOOLCHAINS_SUBPATH STREQUAL ANDROID_NDK_TOOLCHAINS_SUBPATH2 )
__GLOB_NDK_TOOLCHAINS ( __availableToolchains __availableToolchainsLst "${ANDROID_NDK_TOOLCHAINS_SUBPATH2}" )
@ -975,7 +980,11 @@ if( BUILD_WITH_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}" )
set ( ANDROID_STL_INCLUDE_DIRS "${ANDROID_STANDALONE_TOOLCHAIN}/include/c++/${ANDROID_COMPILER_VERSION}" )
if ( NOT EXISTS "${ANDROID_STL_INCLUDE_DIRS}" )
# o l d location ( pre r8c )
set ( ANDROID_STL_INCLUDE_DIRS "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/include/c++/${ANDROID_COMPILER_VERSION}" )
endif ( )
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" )
@ -1130,15 +1139,7 @@ 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 ( )
# T O D O : c h e c k i f . s o f i l e e x i s t s b e f o r e t h e r e n a m i n g
endif ( )
@ -1503,7 +1504,8 @@ 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 } )
link_directories ( "${CMAKE_INSTALL_PREFIX}/libs/${ANDROID_NDK_ABI_NAME}" )
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}" )
# 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 )
@ -1555,6 +1557,18 @@ if(NOT _CMAKE_IN_TRY_COMPILE)
set ( LIBRARY_OUTPUT_PATH "${LIBRARY_OUTPUT_PATH_ROOT}/libs/${ANDROID_NDK_ABI_NAME}" CACHE PATH "path for android libs" )
endif ( )
# c o p y s h a e d s t l l i b r a r y t o b u i l d d i r e c t o r y
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 ( )
# 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 )
@ -1663,6 +1677,19 @@ if( NOT PROJECT_NAME STREQUAL "CMAKE_TRY_COMPILE" )
endif ( )
# f o r c e c m a k e t o p r o d u c e / i n s t e a d o f \ i n b u i l d c o m m a n d s f o r N i n j a g e n e r a t o r
if ( CMAKE_GENERATOR MATCHES "Ninja" AND CMAKE_HOST_WIN32 )
# i t i s a b a d h a c k a f t e r a l l
# C M a k e g e n e r a t e s N i n j a m a k e f i l e s w i t h UNIX p a t h s o n l y i f i t t h i n k s t h a t w e a r e g o i n g t o b u i l d w i t h M i n G W
set ( CMAKE_COMPILER_IS_MINGW TRUE ) # t e l l C M a k e t h a t w e a r e M i n G W
set ( CMAKE_CROSSCOMPILING TRUE ) # s t o p r e c u r s i o n
enable_language ( C )
enable_language ( CXX )
# unset ( CMAKE_COMPILER_IS_MINGW ) # c a n ' t u n s e t b e c a u s e C M a k e d o e s n o t c o n v e r t b a c k - s l a s h e s i n r e s p o n s e f i l e s w i t h o u t i t
unset ( MINGW )
endif ( )
# s e t s o m e o b s o l e t e v a r i a b l e s f o r b a c k w a r d c o m p a t i b i l i t y
set ( ANDROID_SET_OBSOLETE_VARIABLES ON CACHE BOOL "Define obsolete Andrid-specific cmake variables" )
mark_as_advanced ( ANDROID_SET_OBSOLETE_VARIABLES )
@ -1717,7 +1744,7 @@ endif()
# 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 " , " 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 , r 8 c , r 8 d , r 8 e ; s e t o n l y f o r N D K
# 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 , r 8 c , r 8 d , r 8 e , r 9 , r 9 b , r 9 c ; 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
# 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
# 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