mirror of https://github.com/opencv/opencv.git
parent
3aea74d408
commit
a17b693aa9
5 changed files with 214 additions and 182 deletions
@ -0,0 +1,136 @@ |
||||
# creates target "${_target}_android_project" for building standard Android project |
||||
macro(add_android_project _target _path) |
||||
SET (android_dependencies opencv_contrib opencv_legacy opencv_objdetect opencv_calib3d opencv_features2d opencv_video opencv_highgui opencv_ml opencv_imgproc opencv_flann opencv_core) |
||||
if(NOT BUILD_SHARED_LIBS) |
||||
LIST(APPEND android_dependencies opencv_androidcamera) |
||||
endif() |
||||
|
||||
if (ANDROID AND CAN_BUILD_ANDROID_PROJECTS) |
||||
file(GLOB_RECURSE res_files_all RELATIVE "${_path}" "${_path}/res/*") |
||||
file(GLOB_RECURSE jni_files_all RELATIVE "${_path}" "${_path}/jni/*.c*" "${_path}/jni/*.h*") |
||||
file(GLOB_RECURSE src_files_all RELATIVE "${_path}" "${_path}/src/*.java") |
||||
|
||||
#remove .svn |
||||
set(res_files) |
||||
foreach(f ${res_files_all}) |
||||
if(NOT f MATCHES "\\.svn") |
||||
list(APPEND res_files "${f}") |
||||
endif() |
||||
endforeach() |
||||
set(jni_files) |
||||
foreach(f ${jni_files_all}) |
||||
if(NOT f MATCHES "\\.svn") |
||||
list(APPEND jni_files "${f}") |
||||
endif() |
||||
endforeach() |
||||
set(src_files) |
||||
foreach(f ${src_files_all}) |
||||
if(NOT f MATCHES "\\.svn") |
||||
list(APPEND src_files "${f}") |
||||
endif() |
||||
endforeach() |
||||
|
||||
# get temporary location for the project |
||||
file(RELATIVE_PATH build_path "${OpenCV_SOURCE_DIR}" "${_path}") |
||||
SET(build_path "${CMAKE_BINARY_DIR}/${build_path}") |
||||
|
||||
# copy project to temporary location |
||||
SET(${_target}_project_files) |
||||
foreach(f ${res_files} ${src_files} "AndroidManifest.xml") |
||||
if(NOT "${build_path}" STREQUAL "${_path}") |
||||
#this is not needed in case of in-source build |
||||
add_custom_command( |
||||
OUTPUT "${build_path}/${f}" |
||||
COMMAND ${CMAKE_COMMAND} -E copy "${_path}/${f}" "${build_path}/${f}" |
||||
DEPENDS "${_path}/${f}" |
||||
COMMENT "" |
||||
) |
||||
endif() |
||||
list(APPEND ${_target}_project_files "${build_path}/${f}") |
||||
endforeach() |
||||
|
||||
# process default.properties |
||||
file(STRINGS "${_path}/default.properties" default_properties REGEX "^android\\.library\\.reference\\.1=.+$") |
||||
if (default_properties) |
||||
# has opencv dependency |
||||
file(RELATIVE_PATH OPENCV_REFERENCE_PATH "${build_path}" "${CMAKE_BINARY_DIR}") |
||||
add_custom_command( |
||||
OUTPUT "${build_path}/default.properties" |
||||
OUTPUT "${build_path}/build.xml" |
||||
OUTPUT "${build_path}/local.properties" |
||||
OUTPUT "${build_path}/proguard.cfg" |
||||
COMMAND ${CMAKE_COMMAND} -E echo "#do not edit; this file is generated automatically" > "default.properties" |
||||
COMMAND ${ANDROID_EXECUTABLE} update project --name "${_target}" --target "${ANDROID_SDK_TARGET}" --library "${OPENCV_REFERENCE_PATH}" --path . |
||||
WORKING_DIRECTORY ${build_path} |
||||
DEPENDS ${${_target}_project_files} |
||||
DEPENDS opencv_java_android_library |
||||
COMMENT "Updating android project - ${_target}" |
||||
) |
||||
else() |
||||
# has no opencv dependency |
||||
add_custom_command( |
||||
OUTPUT "${build_path}/default.properties" |
||||
OUTPUT "${build_path}/build.xml" |
||||
OUTPUT "${build_path}/local.properties" |
||||
OUTPUT "${build_path}/proguard.cfg" |
||||
COMMAND ${CMAKE_COMMAND} -E echo "#do not edit; this file is generated automatically" > "default.properties" |
||||
COMMAND ${ANDROID_EXECUTABLE} update project --name "${_target}" --target "${ANDROID_SDK_TARGET}" --path . |
||||
WORKING_DIRECTORY ${build_path} |
||||
DEPENDS ${${_target}_project_files} |
||||
COMMENT "Updating android project - ${_target}" |
||||
) |
||||
endif() |
||||
|
||||
if("${build_path}" STREQUAL "${_path}") |
||||
#in case of in-source build default.properties file is not generated (it is just overwritten :) |
||||
SET_SOURCE_FILES_PROPERTIES("${build_path}/default.properties" PROPERTIES GENERATED FALSE) |
||||
endif() |
||||
|
||||
list(APPEND ${_target}_project_files "${build_path}/default.properties" "${build_path}/build.xml" "${build_path}/local.properties" "${build_path}/proguard.cfg") |
||||
|
||||
# build native part of android project |
||||
if(jni_files) |
||||
INCLUDE_DIRECTORIES("${_path}/jni") |
||||
|
||||
FILE(STRINGS "${_path}/jni/Android.mk" JNI_LIB_NAME REGEX "LOCAL_MODULE[ ]*:=[ ]*.*" ) |
||||
string(REGEX REPLACE "LOCAL_MODULE[ ]*:=[ ]*([a-zA-Z_][a-zA-Z_0-9]*)[ ]*" "\\1" JNI_LIB_NAME "${JNI_LIB_NAME}") |
||||
|
||||
SET(jni_sources) |
||||
foreach(src ${jni_files}) |
||||
list(APPEND jni_sources "${_path}/${src}") |
||||
endforeach() |
||||
|
||||
ADD_LIBRARY(${JNI_LIB_NAME} MODULE ${jni_sources}) |
||||
TARGET_LINK_LIBRARIES(${JNI_LIB_NAME} ${OPENCV_LINKER_LIBS} ${android_dependencies}) |
||||
|
||||
set_target_properties(${JNI_LIB_NAME} PROPERTIES |
||||
OUTPUT_NAME "${JNI_LIB_NAME}" |
||||
LIBRARY_OUTPUT_DIRECTORY "${build_path}/libs/${ARMEABI_NDK_NAME}" |
||||
) |
||||
|
||||
ADD_CUSTOM_COMMAND( |
||||
TARGET ${JNI_LIB_NAME} |
||||
POST_BUILD |
||||
COMMAND ${CMAKE_STRIP} "${build_path}/libs/${ARMEABI_NDK_NAME}/*.so" |
||||
) |
||||
else() |
||||
SET(JNI_LIB_NAME) |
||||
endif() |
||||
|
||||
add_custom_command( |
||||
OUTPUT "${build_path}/bin/${_target}-debug.apk" |
||||
OUTPUT "${CMAKE_BINARY_DIR}/bin/${_target}.apk" |
||||
COMMAND ${ANT_EXECUTABLE} debug |
||||
COMMAND ${CMAKE_COMMAND} -E copy "${build_path}/bin/${_target}-debug.apk" "${CMAKE_BINARY_DIR}/bin/${_target}.apk" |
||||
WORKING_DIRECTORY ${build_path} |
||||
DEPENDS ${${_target}_project_files} |
||||
DEPENDS ${JNI_LIB_NAME} opencv_java |
||||
COMMENT "Generating bin/${_target}.apk" |
||||
) |
||||
|
||||
ADD_CUSTOM_TARGET(${_target}_android_project ALL |
||||
DEPENDS "${build_path}/bin/${_target}-debug.apk" |
||||
DEPENDS "${CMAKE_BINARY_DIR}/bin/${_target}.apk" |
||||
) |
||||
endif() |
||||
endmacro() |
Loading…
Reference in new issue