Merge pull request #2205 from jet47:bug-3477-fix
[profile/ivi/opencv.git] / cmake / OpenCVGenAndroidMK.cmake
1 if(ANDROID)
2   # --------------------------------------------------------------------------------------------
3   #  Installation for Android ndk-build makefile:  OpenCV.mk
4   #  Part 1/2: ${BIN_DIR}/OpenCV.mk              -> For use *without* "make install"
5   #  Part 2/2: ${BIN_DIR}/unix-install/OpenCV.mk -> For use with "make install"
6   # -------------------------------------------------------------------------------------------
7
8   # build type
9   if(BUILD_SHARED_LIBS)
10     set(OPENCV_LIBTYPE_CONFIGMAKE "SHARED")
11   else()
12     set(OPENCV_LIBTYPE_CONFIGMAKE "STATIC")
13   endif()
14
15   if(BUILD_FAT_JAVA_LIB)
16     set(OPENCV_LIBTYPE_CONFIGMAKE "SHARED")
17     set(OPENCV_STATIC_LIBTYPE_CONFIGMAKE "STATIC")
18   else()
19     set(OPENCV_STATIC_LIBTYPE_CONFIGMAKE ${OPENCV_LIBTYPE_CONFIGMAKE})
20   endif()
21
22   # setup lists of camera libs
23   foreach(abi ARMEABI ARMEABI_V7A X86 MIPS)
24     ANDROID_GET_ABI_RAWNAME(${abi} ndkabi)
25     if(BUILD_ANDROID_CAMERA_WRAPPER)
26       if(ndkabi STREQUAL ANDROID_NDK_ABI_NAME)
27         set(OPENCV_CAMERA_LIBS_${abi}_CONFIGCMAKE "native_camera_r${ANDROID_VERSION}")
28       else()
29         set(OPENCV_CAMERA_LIBS_${abi}_CONFIGCMAKE "")
30       endif()
31     elseif(HAVE_opencv_androidcamera)
32       set(OPENCV_CAMERA_LIBS_${abi}_CONFIGCMAKE "")
33       file(GLOB OPENCV_CAMERA_LIBS "${OpenCV_SOURCE_DIR}/3rdparty/lib/${ndkabi}/libnative_camera_r*.so")
34       if(OPENCV_CAMERA_LIBS)
35         list(SORT OPENCV_CAMERA_LIBS)
36       endif()
37       foreach(cam_lib ${OPENCV_CAMERA_LIBS})
38         get_filename_component(cam_lib "${cam_lib}" NAME)
39         string(REGEX REPLACE "lib(native_camera_r[0-9]+\\.[0-9]+\\.[0-9]+)\\.so" "\\1" cam_lib "${cam_lib}")
40         set(OPENCV_CAMERA_LIBS_${abi}_CONFIGCMAKE "${OPENCV_CAMERA_LIBS_${abi}_CONFIGCMAKE} ${cam_lib}")
41       endforeach()
42     endif()
43   endforeach()
44
45   # build the list of opencv libs and dependencies for all modules
46   set(OPENCV_MODULES_CONFIGMAKE "")
47   set(OPENCV_HAVE_GPU_MODULE_CONFIGMAKE "off")
48   set(OPENCV_EXTRA_COMPONENTS_CONFIGMAKE "")
49   set(OPENCV_3RDPARTY_COMPONENTS_CONFIGMAKE "")
50   foreach(m ${OPENCV_MODULES_PUBLIC})
51     list(INSERT OPENCV_MODULES_CONFIGMAKE 0 ${${m}_MODULE_DEPS_${ocv_optkind}} ${m})
52     if(${m}_EXTRA_DEPS_${ocv_optkind})
53       list(INSERT OPENCV_EXTRA_COMPONENTS_CONFIGMAKE 0 ${${m}_EXTRA_DEPS_${ocv_optkind}})
54     endif()
55   endforeach()
56
57   # remove CUDA runtime and NPP from regular deps
58   # it can be added separately if needed.
59   ocv_list_filterout(OPENCV_EXTRA_COMPONENTS_CONFIGMAKE "libcu")
60   ocv_list_filterout(OPENCV_EXTRA_COMPONENTS_CONFIGMAKE "libnpp")
61
62   # split 3rdparty libs and modules
63   foreach(mod ${OPENCV_MODULES_CONFIGMAKE})
64     if(NOT mod MATCHES "^opencv_.+$")
65       list(INSERT OPENCV_3RDPARTY_COMPONENTS_CONFIGMAKE 0 ${mod})
66     endif()
67   endforeach()
68   if(OPENCV_3RDPARTY_COMPONENTS_CONFIGMAKE)
69     list(REMOVE_ITEM OPENCV_MODULES_CONFIGMAKE ${OPENCV_3RDPARTY_COMPONENTS_CONFIGMAKE})
70   endif()
71
72   # GPU module enabled separately
73   list(REMOVE_ITEM OPENCV_MODULES_CONFIGMAKE "opencv_gpu")
74   list(REMOVE_ITEM OPENCV_MODULES_CONFIGMAKE "opencv_dynamicuda")
75
76   if(HAVE_opencv_gpu)
77     set(OPENCV_HAVE_GPU_MODULE_CONFIGMAKE "on")
78   endif()
79
80   # convert CMake lists to makefile literals
81   foreach(lst OPENCV_MODULES_CONFIGMAKE OPENCV_3RDPARTY_COMPONENTS_CONFIGMAKE OPENCV_EXTRA_COMPONENTS_CONFIGMAKE)
82     ocv_list_unique(${lst})
83     ocv_list_reverse(${lst})
84     string(REPLACE ";" " " ${lst} "${${lst}}")
85   endforeach()
86   string(REPLACE "opencv_" "" OPENCV_MODULES_CONFIGMAKE "${OPENCV_MODULES_CONFIGMAKE}")
87
88   # prepare 3rd-party component list without TBB for armeabi and mips platforms. TBB is useless there.
89   set(OPENCV_3RDPARTY_COMPONENTS_CONFIGMAKE_NO_TBB ${OPENCV_3RDPARTY_COMPONENTS_CONFIGMAKE})
90   foreach(mod ${OPENCV_3RDPARTY_COMPONENTS_CONFIGMAKE_NO_TBB})
91      string(REPLACE "tbb" "" OPENCV_3RDPARTY_COMPONENTS_CONFIGMAKE_NO_TBB "${OPENCV_3RDPARTY_COMPONENTS_CONFIGMAKE_NO_TBB}")
92   endforeach()
93
94   if(BUILD_FAT_JAVA_LIB)
95     set(OPENCV_LIBS_CONFIGMAKE java)
96   else()
97     set(OPENCV_LIBS_CONFIGMAKE "${OPENCV_MODULES_CONFIGMAKE}")
98   endif()
99
100   # -------------------------------------------------------------------------------------------
101   #  Part 1/2: ${BIN_DIR}/OpenCV.mk              -> For use *without* "make install"
102   # -------------------------------------------------------------------------------------------
103   set(OPENCV_INCLUDE_DIRS_CONFIGCMAKE "\"${OPENCV_CONFIG_FILE_INCLUDE_DIR}\" \"${OpenCV_SOURCE_DIR}/include\" \"${OpenCV_SOURCE_DIR}/include/opencv\"")
104   set(OPENCV_BASE_INCLUDE_DIR_CONFIGCMAKE "\"${OpenCV_SOURCE_DIR}\"")
105   set(OPENCV_LIBS_DIR_CONFIGCMAKE "\$(OPENCV_THIS_DIR)/lib/\$(OPENCV_TARGET_ARCH_ABI)")
106   set(OPENCV_3RDPARTY_LIBS_DIR_CONFIGCMAKE "\$(OPENCV_THIS_DIR)/3rdparty/lib/\$(OPENCV_TARGET_ARCH_ABI)")
107
108   configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/OpenCV.mk.in" "${CMAKE_BINARY_DIR}/OpenCV.mk" IMMEDIATE @ONLY)
109
110   # -------------------------------------------------------------------------------------------
111   #  Part 2/2: ${BIN_DIR}/unix-install/OpenCV.mk -> For use with "make install"
112   # -------------------------------------------------------------------------------------------
113   set(OPENCV_INCLUDE_DIRS_CONFIGCMAKE "\"\$(LOCAL_PATH)/\$(OPENCV_THIS_DIR)/include/opencv\" \"\$(LOCAL_PATH)/\$(OPENCV_THIS_DIR)/include\"")
114   set(OPENCV_BASE_INCLUDE_DIR_CONFIGCMAKE "")
115   set(OPENCV_LIBS_DIR_CONFIGCMAKE "\$(OPENCV_THIS_DIR)/../libs/\$(OPENCV_TARGET_ARCH_ABI)")
116   set(OPENCV_3RDPARTY_LIBS_DIR_CONFIGCMAKE "\$(OPENCV_THIS_DIR)/../3rdparty/libs/\$(OPENCV_TARGET_ARCH_ABI)")
117
118   configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/OpenCV.mk.in" "${CMAKE_BINARY_DIR}/unix-install/OpenCV.mk" IMMEDIATE @ONLY)
119   install(FILES ${CMAKE_BINARY_DIR}/unix-install/OpenCV.mk DESTINATION ${OPENCV_CONFIG_INSTALL_PATH} COMPONENT dev)
120 endif(ANDROID)