Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
O
opencv
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
opencv
Commits
d14e007f
Commit
d14e007f
authored
Jan 30, 2014
by
Roman Donchenko
Committed by
OpenCV Buildbot
Jan 30, 2014
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #2231 from asmorkalov:android_toolchain_update
parents
40f6f679
c8150436
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
74 additions
and
47 deletions
+74
-47
android.toolchain.cmake
platforms/android/android.toolchain.cmake
+74
-47
No files found.
platforms/android/android.toolchain.cmake
View file @
d14e007f
# Copyright (c) 2010-2011, Ethan Rublee
# Copyright (c) 2011-201
3
, Andrey Kamaev
# Copyright (c) 2011-201
4
, Andrey Kamaev
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
...
...
@@ -12,9 +12,9 @@
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# 3.
The name of the copyright holders may be used to endorse or promote
#
products derived from this software without specific prior written
# permission.
# 3.
Neither the name of the copyright holder nor the names of its
#
contributors may be used to endorse or promote products derived from this
#
software without specific prior written
permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
...
...
@@ -29,12 +29,12 @@
# POSSIBILITY OF SUCH DAMAGE.
# ------------------------------------------------------------------------------
# Android CMake toolchain file, for use with the Android NDK r5-r
8
# Android CMake toolchain file, for use with the Android NDK r5-r
9
# Requires cmake 2.6.3 or newer (2.8.5 or newer is recommended).
# See home page: https://github.com/taka-no-me/android-cmake
#
# The file is mantained by the OpenCV project. The latest version can be get at
# http
s://github.com/Itseez/opencv/tree/master/platform
s/android/android.toolchain.cmake
# http
://code.opencv.org/projects/opencv/repository/revisions/master/change
s/android/android.toolchain.cmake
#
# Usage Linux:
# $ export ANDROID_NDK=/absolute/path/to/the/android-ndk
...
...
@@ -87,8 +87,7 @@
# "armeabi-v6 with VFP" - tuned for ARMv6 processors having VFP.
# "x86" - matches to the NDK ABI with the same name.
# See ${ANDROID_NDK}/docs/CPU-ARCH-ABIS.html for the documentation.
# "mips" - matches to the NDK ABI with the same name
# (It is not tested on real devices by the authos of this toolchain)
# "mips" - matches to the NDK ABI with the same name.
# See ${ANDROID_NDK}/docs/CPU-ARCH-ABIS.html for the documentation.
#
# ANDROID_NATIVE_API_LEVEL=android-8 - level of Android API compile for.
...
...
@@ -292,6 +291,16 @@
# - April 2013
# [+] support non-release NDK layouts (from Linaro git and Android git)
# [~] automatically detect if explicit link to crtbegin_*.o is needed
# - June 2013
# [~] fixed stl include path for standalone toolchain made by NDK >= r8c
# - July 2013
# [+] updated for NDK r9
# - November 2013
# [+] updated for NDK r9b
# - December 2013
# [+] updated for NDK r9c
# - January 2014
# [~] fix copying of shared STL
# ------------------------------------------------------------------------------
cmake_minimum_required
(
VERSION 2.6.3
)
...
...
@@ -318,7 +327,7 @@ set( CMAKE_SYSTEM_VERSION 1 )
# rpath makes low sence for Android
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
}
-r9
c -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()
# detect current host platform
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
()
# CMAKE_HOST_SYSTEM_PROCESSOR on MacOS X always says i386 on Intel platform
# So we do not trust ANDROID_NDK_HOST_X64 on Apple hosts
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
}}
)
# Skip renderscript folder. It's not C++ toolchain
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
}
"
)
# old 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()
# case of shared STL linkage
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
()
# TODO: check if .so file exists before the renaming
endif
()
...
...
@@ -1503,7 +1504,8 @@ endif()
# global includes and link directories
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
)
# avoid CMP0015 policy warning
link_directories
(
"
${
__android_install_path
}
"
)
# detect if need link crtbegin_so.o explicitly
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
()
# copy shaed stl library to build directory
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
()
# set these global flags for cmake client scripts to change behavior
set
(
ANDROID True
)
set
(
BUILD_ANDROID True
)
...
...
@@ -1663,6 +1677,19 @@ if( NOT PROJECT_NAME STREQUAL "CMAKE_TRY_COMPILE" )
endif
()
# force cmake to produce / instead of \ in build commands for Ninja generator
if
(
CMAKE_GENERATOR MATCHES
"Ninja"
AND CMAKE_HOST_WIN32
)
# it is a bad hack after all
# CMake generates Ninja makefiles with UNIX paths only if it thinks that we are going to build with MinGW
set
(
CMAKE_COMPILER_IS_MINGW TRUE
)
# tell CMake that we are MinGW
set
(
CMAKE_CROSSCOMPILING TRUE
)
# stop recursion
enable_language
(
C
)
enable_language
(
CXX
)
# unset( CMAKE_COMPILER_IS_MINGW ) # can't unset because CMake does not convert back-slashes in response files without it
unset
(
MINGW
)
endif
()
# set some obsolete variables for backward compatibility
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()
# BUILD_WITH_STANDALONE_TOOLCHAIN : TRUE if standalone toolchain is used
# ANDROID_NDK_HOST_SYSTEM_NAME : "windows", "linux-x86" or "darwin-x86" depending on host platform
# ANDROID_NDK_ABI_NAME : "armeabi", "armeabi-v7a", "x86" or "mips" depending on ANDROID_ABI
# ANDROID_NDK_RELEASE : one of r5, r5b, r5c, r6, r6b, r7, r7b, r7c, r8, r8b, r8c, r8d, r8e; set only for NDK
# ANDROID_NDK_RELEASE : one of r5, r5b, r5c, r6, r6b, r7, r7b, r7c, r8, r8b, r8c, r8d, r8e
, r9, r9b, r9c
; set only for NDK
# ANDROID_ARCH_NAME : "arm" or "x86" or "mips" depending on ANDROID_ABI
# ANDROID_SYSROOT : path to the compiler sysroot
# TOOL_OS_SUFFIX : "" or ".exe" depending on host platform
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment