1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231
|
if(EXISTS "${ANDROID_EXECUTABLE}")
set(ANDROID_SDK_DETECT_QUIET TRUE)
endif()
# fixup for https://github.com/android-ndk/ndk/issues/596
if(DEFINED ANDROID_NDK_REVISION AND ANDROID_NDK_REVISION MATCHES "(1[56])([0-9]+)\\.([^\n]+)\n")
set(ANDROID_NDK_REVISION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}")
set(ANDROID_NDK_REVISION "${ANDROID_NDK_REVISION}" CACHE INTERNAL "Android NDK revision")
endif()
# fixup -g option: https://github.com/opencv/opencv/issues/8460#issuecomment-434249750
if(INSTALL_CREATE_DISTRIB
AND (NOT BUILD_WITH_DEBUG_INFO AND NOT CMAKE_BUILD_TYPE MATCHES "Debug")
AND NOT OPENCV_SKIP_ANDROID_G_OPTION_FIX
)
if(" ${CMAKE_CXX_FLAGS} " MATCHES " -g ")
message(STATUS "Android: fixup -g compiler option from Android toolchain")
endif()
string(REPLACE " -g " " " CMAKE_CXX_FLAGS " ${CMAKE_CXX_FLAGS} ")
string(REPLACE " -g " " " CMAKE_C_FLAGS " ${CMAKE_C_FLAGS} ")
string(REPLACE " -g " " " CMAKE_ASM_FLAGS " ${CMAKE_ASM_FLAGS} ")
if(NOT " ${CMAKE_CXX_FLAGS_DEBUG}" MATCHES " -g")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g")
endif()
if(NOT " ${CMAKE_C_FLAGS_DEBUG}" MATCHES " -g")
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -g")
endif()
endif()
# https://developer.android.com/studio/command-line/variables.html
ocv_check_environment_variables(ANDROID_SDK_ROOT ANDROID_HOME ANDROID_SDK)
set(__msg_BUILD_ANDROID_PROJECTS "Use BUILD_ANDROID_PROJECTS=OFF to prepare Android project files without building them")
macro(ocv_detect_android_sdk)
if(NOT DEFINED ANDROID_SDK)
if(DEFINED ANDROID_SDK AND EXISTS "${ANDROID_SDK}")
set(ANDROID_SDK "${ANDROID_SDK}" CACHE INTERNAL "Android SDK path")
elseif(DEFINED ANDROID_HOME AND EXISTS "${ANDROID_HOME}")
set(ANDROID_SDK "${ANDROID_HOME}" CACHE INTERNAL "Android SDK path")
elseif(DEFINED ANDROID_SDK_ROOT AND EXISTS "${ANDROID_SDK_ROOT}")
set(ANDROID_SDK "${ANDROID_SDK_ROOT}" CACHE INTERNAL "Android SDK path")
endif()
if(DEFINED ANDROID_SDK)
message(STATUS "Android SDK: using location: ${ANDROID_SDK}")
endif()
endif()
if(NOT DEFINED ANDROID_SDK)
message(FATAL_ERROR "Android SDK: specify path to Android SDK via ANDROID_SDK_ROOT / ANDROID_HOME / ANDROID_SDK variables")
endif()
if(NOT EXISTS "${ANDROID_SDK}")
message(FATAL_ERROR "Android SDK: specified path doesn't exist: ${ANDROID_SDK}")
endif()
endmacro()
macro(ocv_detect_android_sdk_tools)
# https://developer.android.com/studio/releases/sdk-tools.html
if(NOT DEFINED ANDROID_SDK_TOOLS)
if(DEFINED ANDROID_SDK AND EXISTS "${ANDROID_SDK}/tools")
set(ANDROID_SDK_TOOLS "${ANDROID_SDK}/tools" CACHE INTERNAL "Android SDK Tools path")
endif()
endif()
if(NOT DEFINED ANDROID_SDK_TOOLS)
message(FATAL_ERROR "Android SDK Tools: can't automatically find Android SDK Tools. Specify path via ANDROID_SDK_TOOLS variable")
endif()
if(NOT EXISTS "${ANDROID_SDK_TOOLS}")
message(FATAL_ERROR "Android SDK Tools: specified path doesn't exist: ${ANDROID_SDK_TOOLS}")
endif()
if(NOT DEFINED ANDROID_SDK_TOOLS_VERSION)
ocv_parse_properties_file("${ANDROID_SDK_TOOLS}/source.properties"
ANDROID_TOOLS CACHE Pkg_Revision
MSG_PREFIX "Android SDK Tools: "
)
if(NOT DEFINED ANDROID_TOOLS_Pkg_Revision)
message(FATAL_ERROR "Android SDK Tools: Can't determine package version: ANDROID_SDK_TOOLS=${ANDROID_SDK_TOOLS}\n"
"Check specified parameters or force version via 'ANDROID_SDK_TOOLS_VERSION' variable.\n"
"${__msg_BUILD_ANDROID_PROJECTS}")
elseif(NOT ANDROID_SDK_DETECT_QUIET)
set(__info "")
if(DEFINED ANDROID_TOOLS_Pkg_Desc)
set(__info " (description: '${ANDROID_TOOLS_Pkg_Desc}')")
endif()
message(STATUS "Android SDK Tools: ver. ${ANDROID_TOOLS_Pkg_Revision}${__info}")
endif()
set(ANDROID_SDK_TOOLS_VERSION "${ANDROID_TOOLS_Pkg_Revision}" CACHE INTERNAL "Android SDK Tools version")
endif()
if(NOT DEFINED ANDROID_TOOLS_Pkg_Revision)
set(ANDROID_TOOLS_Pkg_Revision "${ANDROID_SDK_TOOLS_VERSION}" CACHE INTERNAL "Android SDK Tools version (deprecated)")
endif()
set(ANDROID_SDK_TOOLS_PATH "${ANDROID_SDK_TOOLS}" CACHE INTERNAL "Android SDK Tools path (deprecated)")
endmacro() # ocv_detect_android_sdk_tools
macro(ocv_detect_android_sdk_build_tools)
# https://developer.android.com/studio/releases/build-tools.html
if(NOT DEFINED ANDROID_SDK_BUILD_TOOLS_VERSION)
if(NOT DEFINED ANDROID_SDK_BUILD_TOOLS)
set(__search_dir ${ANDROID_SDK}/build-tools)
if(NOT EXISTS "${__search_dir}")
message(FATAL_ERROR "Android SDK Build Tools: directory doesn't exist: ${__search_dir} "
"${__msg_BUILD_ANDROID_PROJECTS}")
endif()
if(NOT DEFINED ANDROID_SDK_BUILD_TOOLS_SUBDIR)
file(GLOB __found RELATIVE "${__search_dir}" ${__search_dir}/*)
set(__dirlist "")
set(__selected 0)
set(__versions "")
foreach(d ${__found})
if(IS_DIRECTORY "${__search_dir}/${d}")
list(APPEND __dirlist ${d})
if(d MATCHES "[0-9]+(\\.[0-9]+)*")
list(APPEND __versions "${d}")
endif()
if(__selected VERSION_LESS d)
set(__selected "${d}")
endif()
endif()
endforeach()
if(__selected VERSION_GREATER 0)
set(ANDROID_SDK_BUILD_TOOLS_SUBDIR "${__selected}")
elseif(__dirlist)
set(__versions "")
foreach(d ${__dirlist})
if(EXISTS "${__search_dir}/${d}/source.properties")
ocv_clear_vars(ANDROID_BUILD_TOOLS_Pkg_Revision)
ocv_parse_properties_file("${__search_dir}/${d}/source.properties"
ANDROID_BUILD_TOOLS
MSG_PREFIX "Android SDK Tools: "
)
if(DEFINED ANDROID_BUILD_TOOLS_Pkg_Revision)
list(APPEND __versions "${ANDROID_BUILD_TOOLS_Pkg_Revision}")
if(__selected VERSION_LESS ANDROID_BUILD_TOOLS_Pkg_Revision)
set(ANDROID_SDK_BUILD_TOOLS_SUBDIR "${d}")
set(__selected "${ANDROID_BUILD_TOOLS_Pkg_Revision}")
endif()
endif()
endif()
endforeach()
endif()
if(DEFINED ANDROID_SDK_BUILD_TOOLS_SUBDIR)
set(ANDROID_SDK_BUILD_TOOLS_VERSION "${__selected}" CACHE STRING "Android SDK Build Tools version")
set_property(CACHE ANDROID_SDK_BUILD_TOOLS_VERSION PROPERTY STRINGS ${__versions})
set(ANDROID_SDK_BUILD_TOOLS "${__search_dir}/${d}" CACHE INTERNAL "Android SDK Build Tools path")
message(STATUS "Android SDK Build Tools: ver. ${ANDROID_SDK_BUILD_TOOLS_VERSION} (subdir ${ANDROID_SDK_BUILD_TOOLS_SUBDIR} from ${__dirlist})")
else()
message(FATAL_ERROR "Android SDK Build Tools: autodetection failed. "
"Specify ANDROID_SDK_BUILD_TOOLS_VERSION / ANDROID_SDK_BUILD_TOOLS_SUBDIR / ANDROID_SDK_BUILD_TOOLS variable to bypass autodetection.\n"
"${__msg_BUILD_ANDROID_PROJECTS}")
endif()
endif()
else()
ocv_parse_properties_file("${ANDROID_SDK_BUILD_TOOLS}/source.properties"
ANDROID_BUILD_TOOLS
MSG_PREFIX "Android SDK Tools: "
)
if(NOT DEFINED ANDROID_BUILD_TOOLS_Pkg_Revision)
message(FATAL_ERROR "Android SDK Build Tools: Can't detect version: ANDROID_SDK_BUILD_TOOLS=${ANDROID_SDK_BUILD_TOOLS}\n"
"Specify ANDROID_SDK_BUILD_TOOLS_VERSION variable to bypass autodetection.\n"
"${__msg_BUILD_ANDROID_PROJECTS}")
else()
set(ANDROID_SDK_BUILD_TOOLS_VERSION "${ANDROID_BUILD_TOOLS_Pkg_Revision}" CACHE INTERNAL "Android SDK Build Tools version")
message(STATUS "Android SDK Build Tools: ver. ${ANDROID_SDK_BUILD_TOOLS_VERSION} (ANDROID_SDK_BUILD_TOOLS=${ANDROID_SDK_BUILD_TOOLS})")
endif()
endif() # ANDROID_SDK_BUILD_TOOLS
endif() # ANDROID_SDK_BUILD_TOOLS_VERSION
endmacro() # ocv_detect_android_sdk_build_tools
if(BUILD_ANDROID_PROJECTS)
ocv_detect_android_sdk()
ocv_detect_android_sdk_build_tools()
if(NOT ANDROID_SDK_BUILD_TOOLS_VERSION VERSION_LESS 26.0.2)
# https://developer.android.com/studio/releases/gradle-plugin.html
message(STATUS "Android SDK Build Tools: Gradle 3.0.0+ builds support is available")
ocv_update(ANDROID_PROJECTS_SUPPORT_GRADLE ON)
else()
ocv_detect_android_sdk_tools()
if(ANDROID_SDK_TOOLS_VERSION VERSION_LESS 14)
message(FATAL_ERROR "Android SDK Tools: OpenCV requires Android SDK Tools revision 14 or newer.\n"
"${__msg_BUILD_ANDROID_PROJECTS}")
endif()
if(NOT ANDROID_SDK_TOOLS_VERSION VERSION_LESS 25.3.0)
message(STATUS "Android SDK Tools: Ant (Eclipse) builds are NOT supported by Android SDK")
ocv_update(ANDROID_PROJECTS_SUPPORT_ANT OFF)
else()
include(${CMAKE_CURRENT_LIST_DIR}/../OpenCVDetectApacheAnt.cmake)
if(ANT_EXECUTABLE AND NOT ANT_VERSION VERSION_LESS 1.7)
message(STATUS "Android SDK Tools: Ant (Eclipse) builds are supported")
ocv_update(ANDROID_PROJECTS_SUPPORT_ANT ON)
endif()
endif()
endif()
if(NOT DEFINED ANDROID_PROJECTS_BUILD_TYPE)
if(ANDROID_PROJECTS_SUPPORT_ANT)
ocv_update(ANDROID_PROJECTS_BUILD_TYPE "ANT")
elseif(ANDROID_PROJECTS_SUPPORT_GRADLE)
ocv_update(ANDROID_PROJECTS_BUILD_TYPE "GRADLE")
else()
message(FATAL_ERROR "Android SDK: Can't build Android projects as requested by BUILD_ANDROID_PROJECTS=ON variable.\n"
"${__msg_BUILD_ANDROID_PROJECTS}")
endif()
endif()
if(ANDROID_PROJECTS_BUILD_TYPE STREQUAL "ANT")
message(STATUS "Android SDK Tools: Prepare Android projects for using Ant build scripts (deprecated)")
elseif(ANDROID_PROJECTS_BUILD_TYPE STREQUAL "GRADLE")
message(STATUS "Android SDK Tools: Prepare Android projects for using Gradle 3.0.0+ build scripts")
endif()
else()
message("Android: Projects builds are DISABLED")
macro(add_android_project)
endmacro()
endif() # BUILD_ANDROID_PROJECTS
if(ANDROID_PROJECTS_BUILD_TYPE STREQUAL "ANT")
include(${CMAKE_CURRENT_LIST_DIR}/android_ant_projects.cmake)
elseif(ANDROID_PROJECTS_BUILD_TYPE STREQUAL "GRADLE")
include(${CMAKE_CURRENT_LIST_DIR}/android_gradle_projects.cmake)
elseif(BUILD_ANDROID_PROJECTS)
message(FATAL_ERROR "Internal error")
else()
# TODO
#include(${CMAKE_CURRENT_LIST_DIR}/android_disabled_projects.cmake)
endif()
|