opencv

Форк
0
/
OpenCVDetectAndroidSDK.cmake 
231 строка · 10.4 Кб
1
if(EXISTS "${ANDROID_EXECUTABLE}")
2
  set(ANDROID_SDK_DETECT_QUIET TRUE)
3
endif()
4

5
# fixup for https://github.com/android-ndk/ndk/issues/596
6
if(DEFINED ANDROID_NDK_REVISION AND ANDROID_NDK_REVISION MATCHES "(1[56])([0-9]+)\\.([^\n]+)\n")
7
  set(ANDROID_NDK_REVISION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}")
8
  set(ANDROID_NDK_REVISION "${ANDROID_NDK_REVISION}" CACHE INTERNAL "Android NDK revision")
9
endif()
10

11
# fixup -g option: https://github.com/opencv/opencv/issues/8460#issuecomment-434249750
12
if(INSTALL_CREATE_DISTRIB
13
  AND (NOT BUILD_WITH_DEBUG_INFO AND NOT CMAKE_BUILD_TYPE MATCHES "Debug")
14
  AND NOT OPENCV_SKIP_ANDROID_G_OPTION_FIX
15
)
16
  if(" ${CMAKE_CXX_FLAGS} " MATCHES " -g ")
17
    message(STATUS "Android: fixup -g compiler option from Android toolchain")
18
  endif()
19
  string(REPLACE " -g " " " CMAKE_CXX_FLAGS " ${CMAKE_CXX_FLAGS} ")
20
  string(REPLACE " -g " " " CMAKE_C_FLAGS " ${CMAKE_C_FLAGS} ")
21
  string(REPLACE " -g " " " CMAKE_ASM_FLAGS " ${CMAKE_ASM_FLAGS} ")
22
  if(NOT " ${CMAKE_CXX_FLAGS_DEBUG}" MATCHES " -g")
23
    set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g")
24
  endif()
25
  if(NOT " ${CMAKE_C_FLAGS_DEBUG}" MATCHES " -g")
26
    set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -g")
27
  endif()
28
endif()
29

30
# https://developer.android.com/studio/command-line/variables.html
31
ocv_check_environment_variables(ANDROID_SDK_ROOT ANDROID_HOME ANDROID_SDK)
32

33
set(__msg_BUILD_ANDROID_PROJECTS "Use BUILD_ANDROID_PROJECTS=OFF to prepare Android project files without building them")
34

35
macro(ocv_detect_android_sdk)
36
  if(NOT DEFINED ANDROID_SDK)
37
    if(DEFINED ANDROID_SDK AND EXISTS "${ANDROID_SDK}")
38
      set(ANDROID_SDK "${ANDROID_SDK}" CACHE INTERNAL "Android SDK path")
39
      elseif(DEFINED ANDROID_HOME AND EXISTS "${ANDROID_HOME}")
40
      set(ANDROID_SDK "${ANDROID_HOME}" CACHE INTERNAL "Android SDK path")
41
    elseif(DEFINED ANDROID_SDK_ROOT AND EXISTS "${ANDROID_SDK_ROOT}")
42
      set(ANDROID_SDK "${ANDROID_SDK_ROOT}" CACHE INTERNAL "Android SDK path")
43
    endif()
44
    if(DEFINED ANDROID_SDK)
45
      message(STATUS "Android SDK: using location: ${ANDROID_SDK}")
46
    endif()
47
  endif()
48
  if(NOT DEFINED ANDROID_SDK)
49
    message(FATAL_ERROR "Android SDK: specify path to Android SDK via ANDROID_SDK_ROOT / ANDROID_HOME / ANDROID_SDK variables")
50
  endif()
51
  if(NOT EXISTS "${ANDROID_SDK}")
52
    message(FATAL_ERROR "Android SDK: specified path doesn't exist: ${ANDROID_SDK}")
53
  endif()
54
endmacro()
55

56
macro(ocv_detect_android_sdk_tools)
57
  # https://developer.android.com/studio/releases/sdk-tools.html
58
  if(NOT DEFINED ANDROID_SDK_TOOLS)
59
    if(DEFINED ANDROID_SDK AND EXISTS "${ANDROID_SDK}/tools")
60
      set(ANDROID_SDK_TOOLS "${ANDROID_SDK}/tools" CACHE INTERNAL "Android SDK Tools path")
61
    endif()
62
  endif()
63
  if(NOT DEFINED ANDROID_SDK_TOOLS)
64
    message(FATAL_ERROR "Android SDK Tools: can't automatically find Android SDK Tools. Specify path via ANDROID_SDK_TOOLS variable")
65
  endif()
66
  if(NOT EXISTS "${ANDROID_SDK_TOOLS}")
67
    message(FATAL_ERROR "Android SDK Tools: specified path doesn't exist: ${ANDROID_SDK_TOOLS}")
68
  endif()
69

70
  if(NOT DEFINED ANDROID_SDK_TOOLS_VERSION)
71
    ocv_parse_properties_file("${ANDROID_SDK_TOOLS}/source.properties"
72
        ANDROID_TOOLS CACHE Pkg_Revision
73
        MSG_PREFIX "Android SDK Tools: "
74
    )
75

76
    if(NOT DEFINED ANDROID_TOOLS_Pkg_Revision)
77
      message(FATAL_ERROR "Android SDK Tools: Can't determine package version: ANDROID_SDK_TOOLS=${ANDROID_SDK_TOOLS}\n"
78
                          "Check specified parameters or force version via 'ANDROID_SDK_TOOLS_VERSION' variable.\n"
79
                          "${__msg_BUILD_ANDROID_PROJECTS}")
80
    elseif(NOT ANDROID_SDK_DETECT_QUIET)
81
      set(__info "")
82
      if(DEFINED ANDROID_TOOLS_Pkg_Desc)
83
        set(__info " (description: '${ANDROID_TOOLS_Pkg_Desc}')")
84
      endif()
85
      message(STATUS "Android SDK Tools: ver. ${ANDROID_TOOLS_Pkg_Revision}${__info}")
86
    endif()
87
    set(ANDROID_SDK_TOOLS_VERSION "${ANDROID_TOOLS_Pkg_Revision}" CACHE INTERNAL "Android SDK Tools version")
88
  endif()
89
  if(NOT DEFINED ANDROID_TOOLS_Pkg_Revision)
90
    set(ANDROID_TOOLS_Pkg_Revision "${ANDROID_SDK_TOOLS_VERSION}" CACHE INTERNAL "Android SDK Tools version (deprecated)")
91
  endif()
92
  set(ANDROID_SDK_TOOLS_PATH "${ANDROID_SDK_TOOLS}" CACHE INTERNAL "Android SDK Tools path (deprecated)")
93
endmacro()  # ocv_detect_android_sdk_tools
94

95
macro(ocv_detect_android_sdk_build_tools)
96
  # https://developer.android.com/studio/releases/build-tools.html
97
  if(NOT DEFINED ANDROID_SDK_BUILD_TOOLS_VERSION)
98
    if(NOT DEFINED ANDROID_SDK_BUILD_TOOLS)
99
      set(__search_dir ${ANDROID_SDK}/build-tools)
100
      if(NOT EXISTS "${__search_dir}")
101
        message(FATAL_ERROR "Android SDK Build Tools: directory doesn't exist: ${__search_dir} "
102
                            "${__msg_BUILD_ANDROID_PROJECTS}")
103
      endif()
104

105
      if(NOT DEFINED ANDROID_SDK_BUILD_TOOLS_SUBDIR)
106
        file(GLOB __found RELATIVE "${__search_dir}" ${__search_dir}/*)
107
        set(__dirlist "")
108
        set(__selected 0)
109
        set(__versions "")
110
        foreach(d ${__found})
111
          if(IS_DIRECTORY "${__search_dir}/${d}")
112
            list(APPEND __dirlist ${d})
113
            if(d MATCHES "[0-9]+(\\.[0-9]+)*")
114
              list(APPEND __versions "${d}")
115
            endif()
116
            if(__selected VERSION_LESS d)
117
              set(__selected "${d}")
118
            endif()
119
          endif()
120
        endforeach()
121
        if(__selected VERSION_GREATER 0)
122
          set(ANDROID_SDK_BUILD_TOOLS_SUBDIR "${__selected}")
123
        elseif(__dirlist)
124
          set(__versions "")
125
          foreach(d ${__dirlist})
126
            if(EXISTS "${__search_dir}/${d}/source.properties")
127
              ocv_clear_vars(ANDROID_BUILD_TOOLS_Pkg_Revision)
128
              ocv_parse_properties_file("${__search_dir}/${d}/source.properties"
129
                  ANDROID_BUILD_TOOLS
130
                  MSG_PREFIX "Android SDK Tools: "
131
              )
132
              if(DEFINED ANDROID_BUILD_TOOLS_Pkg_Revision)
133
                list(APPEND __versions "${ANDROID_BUILD_TOOLS_Pkg_Revision}")
134
                if(__selected VERSION_LESS ANDROID_BUILD_TOOLS_Pkg_Revision)
135
                  set(ANDROID_SDK_BUILD_TOOLS_SUBDIR "${d}")
136
                  set(__selected "${ANDROID_BUILD_TOOLS_Pkg_Revision}")
137
                endif()
138
              endif()
139
            endif()
140
          endforeach()
141
        endif()
142
        if(DEFINED ANDROID_SDK_BUILD_TOOLS_SUBDIR)
143
          set(ANDROID_SDK_BUILD_TOOLS_VERSION "${__selected}" CACHE STRING "Android SDK Build Tools version")
144
          set_property(CACHE ANDROID_SDK_BUILD_TOOLS_VERSION PROPERTY STRINGS ${__versions})
145
          set(ANDROID_SDK_BUILD_TOOLS "${__search_dir}/${d}" CACHE INTERNAL "Android SDK Build Tools path")
146
          message(STATUS "Android SDK Build Tools: ver. ${ANDROID_SDK_BUILD_TOOLS_VERSION} (subdir ${ANDROID_SDK_BUILD_TOOLS_SUBDIR} from ${__dirlist})")
147
        else()
148
          message(FATAL_ERROR "Android SDK Build Tools: autodetection failed. "
149
                              "Specify ANDROID_SDK_BUILD_TOOLS_VERSION / ANDROID_SDK_BUILD_TOOLS_SUBDIR / ANDROID_SDK_BUILD_TOOLS variable to bypass autodetection.\n"
150
                              "${__msg_BUILD_ANDROID_PROJECTS}")
151
        endif()
152
      endif()
153
    else()
154
      ocv_parse_properties_file("${ANDROID_SDK_BUILD_TOOLS}/source.properties"
155
          ANDROID_BUILD_TOOLS
156
          MSG_PREFIX "Android SDK Tools: "
157
      )
158
      if(NOT DEFINED ANDROID_BUILD_TOOLS_Pkg_Revision)
159
        message(FATAL_ERROR "Android SDK Build Tools: Can't detect version: ANDROID_SDK_BUILD_TOOLS=${ANDROID_SDK_BUILD_TOOLS}\n"
160
                            "Specify ANDROID_SDK_BUILD_TOOLS_VERSION variable to bypass autodetection.\n"
161
                            "${__msg_BUILD_ANDROID_PROJECTS}")
162
      else()
163
        set(ANDROID_SDK_BUILD_TOOLS_VERSION "${ANDROID_BUILD_TOOLS_Pkg_Revision}" CACHE INTERNAL "Android SDK Build Tools version")
164
        message(STATUS "Android SDK Build Tools: ver. ${ANDROID_SDK_BUILD_TOOLS_VERSION} (ANDROID_SDK_BUILD_TOOLS=${ANDROID_SDK_BUILD_TOOLS})")
165
      endif()
166
    endif()  # ANDROID_SDK_BUILD_TOOLS
167
  endif()  # ANDROID_SDK_BUILD_TOOLS_VERSION
168
endmacro()  # ocv_detect_android_sdk_build_tools
169

170

171
if(BUILD_ANDROID_PROJECTS)
172
  ocv_detect_android_sdk()
173
  ocv_detect_android_sdk_build_tools()
174

175
  if(NOT ANDROID_SDK_BUILD_TOOLS_VERSION VERSION_LESS 26.0.2)
176
    # https://developer.android.com/studio/releases/gradle-plugin.html
177
    message(STATUS "Android SDK Build Tools: Gradle 3.0.0+ builds support is available")
178
    ocv_update(ANDROID_PROJECTS_SUPPORT_GRADLE ON)
179
  else()
180
    ocv_detect_android_sdk_tools()
181

182
    if(ANDROID_SDK_TOOLS_VERSION VERSION_LESS 14)
183
      message(FATAL_ERROR "Android SDK Tools: OpenCV requires Android SDK Tools revision 14 or newer.\n"
184
                          "${__msg_BUILD_ANDROID_PROJECTS}")
185
    endif()
186

187
    if(NOT ANDROID_SDK_TOOLS_VERSION VERSION_LESS 25.3.0)
188
      message(STATUS "Android SDK Tools: Ant (Eclipse) builds are NOT supported by Android SDK")
189
      ocv_update(ANDROID_PROJECTS_SUPPORT_ANT OFF)
190
    else()
191
      include(${CMAKE_CURRENT_LIST_DIR}/../OpenCVDetectApacheAnt.cmake)
192
      if(ANT_EXECUTABLE AND NOT ANT_VERSION VERSION_LESS 1.7)
193
        message(STATUS "Android SDK Tools: Ant (Eclipse) builds are supported")
194
        ocv_update(ANDROID_PROJECTS_SUPPORT_ANT ON)
195
      endif()
196
    endif()
197
  endif()
198

199
  if(NOT DEFINED ANDROID_PROJECTS_BUILD_TYPE)
200
    if(ANDROID_PROJECTS_SUPPORT_ANT)
201
      ocv_update(ANDROID_PROJECTS_BUILD_TYPE "ANT")
202
    elseif(ANDROID_PROJECTS_SUPPORT_GRADLE)
203
      ocv_update(ANDROID_PROJECTS_BUILD_TYPE "GRADLE")
204
    else()
205
      message(FATAL_ERROR "Android SDK: Can't build Android projects as requested by BUILD_ANDROID_PROJECTS=ON variable.\n"
206
                          "${__msg_BUILD_ANDROID_PROJECTS}")
207
    endif()
208
  endif()
209

210
  if(ANDROID_PROJECTS_BUILD_TYPE STREQUAL "ANT")
211
    message(STATUS "Android SDK Tools: Prepare Android projects for using Ant build scripts (deprecated)")
212
  elseif(ANDROID_PROJECTS_BUILD_TYPE STREQUAL "GRADLE")
213
    message(STATUS "Android SDK Tools: Prepare Android projects for using Gradle 3.0.0+ build scripts")
214
  endif()
215

216
else()
217
  message("Android: Projects builds are DISABLED")
218
  macro(add_android_project)
219
  endmacro()
220
endif()  # BUILD_ANDROID_PROJECTS
221

222
if(ANDROID_PROJECTS_BUILD_TYPE STREQUAL "ANT")
223
  include(${CMAKE_CURRENT_LIST_DIR}/android_ant_projects.cmake)
224
elseif(ANDROID_PROJECTS_BUILD_TYPE STREQUAL "GRADLE")
225
  include(${CMAKE_CURRENT_LIST_DIR}/android_gradle_projects.cmake)
226
elseif(BUILD_ANDROID_PROJECTS)
227
  message(FATAL_ERROR "Internal error")
228
else()
229
  # TODO
230
  #include(${CMAKE_CURRENT_LIST_DIR}/android_disabled_projects.cmake)
231
endif()
232

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.