Merge branch 'tizen_devel' into tizen
[platform/core/api/mediavision.git] / CMakeLists.txt
1 set(fw_name "capi-media-vision")
2 project(${fw_name})
3 cmake_minimum_required(VERSION 3.13)
4
5 option(BUILD_VISUALIZER "Build visualizer for testing 2D/3D output" OFF)
6 option(BUILD_CAMERA_PACKET "Build camera packet output test" OFF)
7
8 if(BUILD_VISUALIZER)
9     add_compile_definitions(BUILD_VISUALIZER)
10 endif()
11
12 if(MV_3D_POINTCLOUD_IS_AVAILABLE)
13     add_compile_definitions(MV_3D_POINTCLOUD_IS_AVAILABLE)
14 endif()
15
16 set(MV_COMMON_LIB_NAME "mv_common")
17 set(MV_BARCODE_DETECTOR_LIB_NAME "mv_barcode_detector" CACHE STRING
18        "Name of the library will be built for barcode detecting module (without extension).")
19 set(MV_BARCODE_GENERATOR_LIB_NAME "mv_barcode_generator" CACHE STRING
20        "Name of the library will be built for barcode generating module (without extension).")
21 set(MV_IMAGE_LIB_NAME "mv_image" CACHE STRING
22        "Name of the library will be built for image module (without extension).")
23 set(MV_FACE_LIB_NAME "mv_face" CACHE STRING
24        "Name of the library will be built for barcode generating module (without extension).")
25 set(MV_SURVEILLANCE_LIB_NAME "mv_surveillance" CACHE STRING
26        "Name of the library will be built for surveillance module (without extension).")
27 set(MV_INFERENCE_LIB_NAME "mv_inference" CACHE STRING
28        "Name of the library will be built for inference module (without extension).")
29 set(MV_TRAINING_LIB_NAME "mv_training" CACHE STRING
30        "Name of the library will be built for training module (without extension).")
31 set(MV_FACE_RECOG_LIB_NAME "mv_face_recognition" CACHE STRING
32        "Name of the library will be built for face recognition module (without extension).")
33 set(MV_3D_LIB_NAME "mv_3d" CACHE STRING
34        "Name of the library will be built for 3d module (without extension).")
35 set(MV_ROI_TRACKER_LIB_NAME "mv_roi_tracker" CACHE STRING
36        "Name of the library will be built for tracker module (without extension).")
37 set(MV_OBJECT_DETECTION_LIB_NAME "mv_object_detection" CACHE STRING
38        "Name of the library will be built for object detection module (without extension).")
39 set(MV_OBJECT_DETECTION_3D_LIB_NAME "mv_object_detection_3d" CACHE STRING
40        "Name of the library will be built for object detection 3d module (without extension).")
41 set(MV_LANDMARK_DETECTION_LIB_NAME "mv_landmark_detection" CACHE STRING
42        "Name of the library will be built for object detection 3d module (without extension).")
43 set(MV_IMAGE_CLASSIFICATION_LIB_NAME "mv_image_classification" CACHE STRING
44        "Name of the library will be built for image classification module (without extension).")
45 set(MV_IMAGE_SEGMENTATION_LIB_NAME "mv_image_segmentation" CACHE STRING
46        "Name of the library will be built for image segmentation module (without extension).")
47
48 include(FindPkgConfig)
49 include(GNUInstallDirs)
50
51 pkg_check_modules(TIZEN_PKG QUIET capi-system-info)
52 if(TIZEN_PKG_FOUND)
53     set(IS_TIZEN ON)
54 else()
55     set(IS_TIZEN OFF)
56     add_compile_definitions("MV_CONFIG_PATH=\"${PROJECT_SOURCE_DIR}/\"")
57 endif()
58
59 add_subdirectory(mv_common)
60 add_subdirectory(mv_machine_learning)
61 if(${IS_TIZEN})
62     add_subdirectory(mv_barcode)
63     add_subdirectory(mv_image)
64     add_subdirectory(mv_face)
65     add_subdirectory(mv_surveillance)
66     add_subdirectory(mv_3d)
67     add_subdirectory(mv_roi_tracker)
68 endif()
69
70 add_subdirectory(test)
71 if(NOT ${IS_TIZEN})
72     return()
73 endif()
74
75 set(TOTAL_REQUIRED "")
76 set(TOTAL_LDFLAGS "")
77
78 set(pc_dependents "capi-media-tool")
79 set(PC_NAME ${fw_name}-common)
80 set(PC_REQUIRED ${pc_dependents})
81 set(PC_LDFLAGS "-l${MV_COMMON_LIB_NAME}")
82 configure_file(
83     ${fw_name}.pc.in
84     ${CMAKE_CURRENT_BINARY_DIR}/${fw_name}-common.pc
85     @ONLY
86 )
87 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${fw_name}-common.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig)
88 list(APPEND TOTAL_LDFLAGS ${PC_LDFLAGS})
89
90 # now all sub package dependent common
91 set(PC_REQUIRED ${fw_name}-common)
92
93 set(PC_NAME ${fw_name}-barcode)
94 set(PC_LDFLAGS "-l${MV_BARCODE_DETECTOR_LIB_NAME} -l${MV_BARCODE_GENERATOR_LIB_NAME} -l${MV_COMMON_LIB_NAME}")
95 configure_file(
96     ${fw_name}.pc.in
97     ${CMAKE_CURRENT_BINARY_DIR}/${fw_name}-barcode.pc
98     @ONLY
99 )
100 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${fw_name}-barcode.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig)
101 list(APPEND TOTAL_REQUIRED ${PC_NAME})
102 list(APPEND TOTAL_LDFLAGS ${PC_LDFLAGS})
103
104 set(PC_NAME ${fw_name}-face)
105 set(PC_LDFLAGS "-l${MV_FACE_LIB_NAME} -l${MV_COMMON_LIB_NAME}")
106 configure_file(
107     ${fw_name}.pc.in
108     ${CMAKE_CURRENT_BINARY_DIR}/${fw_name}-face.pc
109     @ONLY
110 )
111 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${fw_name}-face.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig)
112 list(APPEND TOTAL_REQUIRED ${PC_NAME})
113 list(APPEND TOTAL_LDFLAGS ${PC_LDFLAGS})
114
115 set(PC_NAME ${fw_name}-image)
116 set(PC_LDFLAGS "-l${MV_IMAGE_LIB_NAME} -l${MV_COMMON_LIB_NAME}")
117 configure_file(
118     ${fw_name}.pc.in
119     ${CMAKE_CURRENT_BINARY_DIR}/${fw_name}-image.pc
120     @ONLY
121 )
122 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${fw_name}-image.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig)
123 list(APPEND TOTAL_REQUIRED ${PC_NAME})
124 list(APPEND TOTAL_LDFLAGS ${PC_LDFLAGS})
125
126 set(PC_NAME ${fw_name}-surveillance)
127 set(PC_LDFLAGS "-l${MV_SURVEILLANCE_LIB_NAME} -l${MV_FACE_LIB_NAME} -l${MV_COMMON_LIB_NAME}")
128 configure_file(
129     ${fw_name}.pc.in
130     ${CMAKE_CURRENT_BINARY_DIR}/${fw_name}-surveillance.pc
131     @ONLY
132 )
133 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${fw_name}-surveillance.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig)
134 list(APPEND TOTAL_REQUIRED ${PC_NAME})
135 list(APPEND TOTAL_LDFLAGS ${PC_LDFLAGS})
136
137 set(PC_NAME ${fw_name}-3d)
138 set(PC_LDFLAGS "-l${MV_3D_LIB_NAME} -l${MV_COMMON_LIB_NAME}")
139 configure_file(
140     ${fw_name}.pc.in
141     ${CMAKE_CURRENT_BINARY_DIR}/${fw_name}-3d.pc
142     @ONLY
143 )
144 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${fw_name}-3d.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig)
145 list(APPEND TOTAL_REQUIRED ${PC_NAME})
146 list(APPEND TOTAL_LDFLAGS ${PC_LDFLAGS})
147
148 set(PC_NAME ${fw_name}-inference)
149 set(PC_LDFLAGS "-l${MV_INFERENCE_LIB_NAME} -l${MV_COMMON_LIB_NAME}")
150 configure_file(
151     ${fw_name}.pc.in
152     ${CMAKE_CURRENT_BINARY_DIR}/${fw_name}-inference.pc
153     @ONLY
154 )
155 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${fw_name}-inference.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig)
156 list(APPEND TOTAL_REQUIRED ${PC_NAME})
157 list(APPEND TOTAL_LDFLAGS ${PC_LDFLAGS})
158
159 set(PC_NAME ${fw_name}-tracker)
160 set(PC_LDFLAGS "-l${MV_ROI_TRACKER_LIB_NAME} -l${MV_COMMON_LIB_NAME}")
161 configure_file(
162     ${fw_name}.pc.in
163     ${CMAKE_CURRENT_BINARY_DIR}/${fw_name}-tracker.pc
164     @ONLY
165 )
166 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${fw_name}-tracker.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig)
167 list(APPEND TOTAL_REQUIRED ${PC_NAME})
168 list(APPEND TOTAL_LDFLAGS ${PC_LDFLAGS})
169
170 if (${ENABLE_ML_FACE_RECOGNITION})
171     set(PC_NAME ${fw_name}-training)
172     set(PC_LDFLAGS "-l${MV_TRAINING_LIB_NAME} -l${MV_COMMON_LIB_NAME}")
173     configure_file(
174         ${fw_name}.pc.in
175         ${CMAKE_CURRENT_BINARY_DIR}/${fw_name}-training.pc
176         @ONLY
177     )
178     install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${fw_name}-training.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig)
179         list(APPEND TOTAL_REQUIRED ${PC_NAME})
180         list(APPEND TOTAL_LDFLAGS ${PC_LDFLAGS})
181
182         set(PC_NAME ${fw_name}-face-recognition)
183     set(PC_LDFLAGS "-l${MV_FACE_RECOG_LIB_NAME} -l${MV_COMMON_LIB_NAME}")
184     configure_file(
185         ${fw_name}.pc.in
186         ${CMAKE_CURRENT_BINARY_DIR}/${fw_name}-face-recognition.pc
187         @ONLY
188     )
189     install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${fw_name}-face-recognition.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig)
190     install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/mv_machine_learning/face_recognition/meta/face_recognition.json DESTINATION ${CMAKE_INSTALL_DATADIR}/${fw_name})
191         list(APPEND TOTAL_REQUIRED ${PC_NAME})
192         list(APPEND TOTAL_LDFLAGS ${PC_LDFLAGS})
193 endif()
194
195 if (${ENABLE_ML_IMAGE_CLASSIFICATION})
196     set(PC_NAME ${fw_name}-image-classification)
197     set(PC_LDFLAGS "-l${MV_IMAGE_CLASSIFICATION_LIB_NAME} -l${MV_COMMON_LIB_NAME}")
198     configure_file(
199             ${fw_name}.pc.in
200             ${CMAKE_CURRENT_BINARY_DIR}/${fw_name}-image-classification.pc
201             @ONLY
202     )
203     install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${fw_name}-image-classification.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig)
204     install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/mv_machine_learning/image_classification/meta/image_classification.json DESTINATION ${CMAKE_INSTALL_DATADIR}/${fw_name})
205         list(APPEND TOTAL_REQUIRED ${PC_NAME})
206         list(APPEND TOTAL_LDFLAGS ${PC_LDFLAGS})
207 endif()
208
209 if (${ENABLE_ML_OBJECT_DETECTION})
210     set(PC_NAME ${fw_name}-object-detection)
211     set(PC_LDFLAGS "-l${MV_OBJECT_DETECTION_LIB_NAME} -l${MV_COMMON_LIB_NAME}")
212     configure_file(
213             ${fw_name}.pc.in
214             ${CMAKE_CURRENT_BINARY_DIR}/${fw_name}-object-detection.pc
215             @ONLY
216     )
217     install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${fw_name}-object-detection.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig)
218     set(OBJECT_DETECTION_JSON_FILES
219         "${CMAKE_CURRENT_SOURCE_DIR}/mv_machine_learning/object_detection/meta/object_detection.json"
220         "${CMAKE_CURRENT_SOURCE_DIR}/mv_machine_learning/object_detection/meta/object_detection_plugin.json"
221         "${CMAKE_CURRENT_SOURCE_DIR}/mv_machine_learning/object_detection/meta/face_detection.json"
222         "${CMAKE_CURRENT_SOURCE_DIR}/mv_machine_learning/object_detection/meta/face_detection_plugin.json"
223     )
224         install(FILES ${OBJECT_DETECTION_JSON_FILES} DESTINATION ${CMAKE_INSTALL_DATADIR}/${fw_name})
225         list(APPEND TOTAL_REQUIRED ${PC_NAME})
226         list(APPEND TOTAL_LDFLAGS ${PC_LDFLAGS})
227 endif()
228
229 if (${ENABLE_ML_OBJECT_DETECTION_3D})
230     set(PC_NAME ${fw_name}-object-detection-3d)
231     set(PC_LDFLAGS "-l${MV_OBJECT_DETECTION_3D_LIB_NAME} -l${MV_COMMON_LIB_NAME}")
232     configure_file(
233             ${fw_name}.pc.in
234             ${CMAKE_CURRENT_BINARY_DIR}/${fw_name}-object-detection-3d.pc
235             @ONLY
236     )
237     install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${fw_name}-object-detection-3d.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig)
238     install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/mv_machine_learning/object_detection_3d/meta/object_detection_3d.json DESTINATION ${CMAKE_INSTALL_DATADIR}/${fw_name})
239         list(APPEND TOTAL_REQUIRED ${PC_NAME})
240         list(APPEND TOTAL_LDFLAGS ${PC_LDFLAGS})
241 endif()
242
243 if (${ENABLE_ML_LANDMARK_DETECTION})
244     set(PC_NAME ${fw_name}-landmark-detection)
245     set(PC_LDFLAGS "-l${MV_LANDMARK_DETECTION_LIB_NAME} -l${MV_COMMON_LIB_NAME}")
246     configure_file(
247             ${fw_name}.pc.in
248             ${CMAKE_CURRENT_BINARY_DIR}/${fw_name}-landmark-detection.pc
249             @ONLY
250     )
251     install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${fw_name}-landmark-detection.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig)
252     install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/mv_machine_learning/landmark_detection/meta/facial_landmark.json DESTINATION ${CMAKE_INSTALL_DATADIR}/${fw_name})
253     install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/mv_machine_learning/landmark_detection/meta/pose_landmark.json DESTINATION ${CMAKE_INSTALL_DATADIR}/${fw_name})
254         list(APPEND TOTAL_REQUIRED ${PC_NAME})
255         list(APPEND TOTAL_LDFLAGS ${PC_LDFLAGS})
256 endif()
257
258 if (${ENABLE_ML_IMAGE_SEGMENTATION})
259     set(PC_NAME ${fw_name}-image-segmentation)
260     set(PC_LDFLAGS "-l${MV_IMAGE_SEGMENTATION_LIB_NAME} -l${MV_COMMON_LIB_NAME}")
261     configure_file(
262             ${fw_name}.pc.in
263             ${CMAKE_CURRENT_BINARY_DIR}/${fw_name}-image-segmentation.pc
264             @ONLY
265     )
266     install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${fw_name}-image-segmentation.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig)
267     install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/mv_machine_learning/image_segmentation/meta/selfie_segmentation.json DESTINATION ${CMAKE_INSTALL_DATADIR}/${fw_name})
268         install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/mv_machine_learning/image_segmentation/meta/selfie_segmentation_plugin.json DESTINATION ${CMAKE_INSTALL_DATADIR}/${fw_name})
269         list(APPEND TOTAL_REQUIRED ${PC_NAME})
270         list(APPEND TOTAL_LDFLAGS ${PC_LDFLAGS})
271 endif()
272
273 string(REPLACE ";" " " TOTAL_LDFLAGS "${TOTAL_LDFLAGS}")
274 string(REPLACE " " ";" TOTAL_LDFLAGS_LIST "${TOTAL_LDFLAGS}")
275 list(REMOVE_DUPLICATES TOTAL_LDFLAGS_LIST)
276 string(REPLACE ";" " " TOTAL_LDFLAGS "${TOTAL_LDFLAGS_LIST}")
277
278 string(REPLACE ";" " " TOTAL_REQUIRED "${TOTAL_REQUIRED}")
279 string(REPLACE " " ";" TOTAL_REQUIRED_LIST "${TOTAL_REQUIRED}")
280 list(REMOVE_DUPLICATES TOTAL_REQUIRED_LIST)
281 string(REPLACE ";" " " TOTAL_REQUIRED "${TOTAL_REQUIRED_LIST}")
282
283 set(PC_NAME ${fw_name})
284 set(PC_REQUIRED "${TOTAL_REQUIRED}")
285 set(PC_LDFLAGS "${TOTAL_LDFLAGS}")
286 configure_file(
287     ${fw_name}.pc.in
288     ${CMAKE_CURRENT_BINARY_DIR}/${fw_name}.pc
289     @ONLY
290 )
291
292 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${fw_name}.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig)
293 install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/media-vision-config.json DESTINATION ${CMAKE_INSTALL_DATADIR}/${fw_name})