CMakeLists1.txt
17.9 KB
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
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
cmake_minimum_required(VERSION 3.0)
## Set project-wide c++ standard
set(CMAKE_CXX_STANDARD 17)
##################################
#PROJECT NAME
##################################
set(LIB_TARGET_NAME manomotion)
project(${LIB_TARGET_NAME})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build)
set(CMAKE_VERBOSE_MAKEFILE on)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
##################################
#Below ,required to get the build type
##################################
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
###########################
#OPTIONS
###########################
set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "description")
##################################
## Gives the build type if release or debug
##################################
string(TOLOWER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_LOWCASE)
message(STATUS "Build type lowcase " ${CMAKE_BUILD_TYPE_LOWCASE})
#message(STATUS "Building for " ${ANDROID_ABI})
#message(STATUS "Android ndk root is at " ${ANDROID_NDK})
option(_UNITY_BUILD_ "description" OFF)
#set(ANDROID_ABI "arm64-v8a" CACHE STRING "description")
#set(ANDROID_PLATFORM "android-29" CACHE STRING "description")
set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/libs CACHE PATH "description" FORCE)
##ios related
set(CMAKE_TOOLCHAIN_FILE "/Users/sbc/Desktop/Android MM/android_opencv_branch /ios-cmake/toolchain/iOS.cmake" CACHE STRING "description")
#######################################
## NDK options for different platforms
######################################
#if(WIN32)
# #set(CMAKE_SYSROOT ${ANDROID_NDK}/toolchains/llvm/prebuilt/windows-x86_64/sysroot CACHE PATH "description" FORCE)
# #set(log-lib ${ANDROID_NDK}/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/lib/aarch64-linux-android/29/liblog.so CACHE FILEPATH #"description" FORCE)
#elseif(LINUX)
# #set(CMAKE_SYSROOT ${ANDROID_NDK}/toolchains/llvm/prebuilt/linux-x86_64/sysroot CACHE PATH "description" FORCE)
# #set(log-lib ${ANDROID_NDK}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/29/liblog.so CACHE FILEPATH "description" #FORCE)
#endif(WIN32)
#set(CMAKE_TOOLCHAIN_FILE ${ANDROID_NDK}//build/cmake/android.toolchain.cmake CACHE FILEPATH "description" FORCE)
#NEEDED FOR MANOMOTION SDK
#add_definitions(-DANDROID_STL=c++_static -DANDROID_TOOLCHAIN=clang -DANDROID_OPTIM=release)
add_definitions(-D__IOS__ -D_IS_IOS_ -DTARGET_PLATFORM_IOS)
add_definitions(-DUSING_SERIAL -DOPENCV -DGPU -DSKM_CURL_EMBED_CACERTS)
set(CMAKE_CFLAGS "-O3 -fvisibility=hidden -fdata-sections -ffunction-sections -fPIC -lc++" CACHE STRING "description")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -frtti -fexceptions -fvisibility=hidden -fdata-sections -ffunction-sections -fPIC -lc++")
#not sure if the above is working so I set as as definitions too
add_definitions(-DUSING_SERIAL -DOPENCV -DGPU)
##################################
#LOGIC FOR RELEASE & DEBUG BEHAVIOUR
##################################
message("-------")
if (CMAKE_BUILD_TYPE_LOWCASE STREQUAL "release")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_APPLY_CHECKSUM_")
add_definitions( -D_APPLY_CHECKSUM_)
message(STATUS "RELEASE MODE, FLAGS " ${CMAKE_C_FLAGS})
else(CMAKE_BUILD_TYPE_LOWCASE STREQUAL "release")
add_definitions(-DDEBUG_MODE -DMANOMOTION_LOG_LEVEL_TRACE -D_LOG_HEADERS_ON_ -D_DEBUG_ON_)
message(STATUS "DEBUG MODE, FLAGS " ${CMAKE_C_FLAGS})
endif(CMAKE_BUILD_TYPE_LOWCASE STREQUAL "release")
message("-------")
##################################
#TAKEN FROM AN EXAMPLE
##################################
#if (ANDROID_ABI MATCHES "^armeabi-v7a$")
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfloat-abi=softfp -mfpu=neon")
#elseif(ANDROID_ABI MATCHES "^arm64-v8a")
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -ftree-vectorize")
#endif()
message(STATUS "CMAKE_CXX_FLAGS " ${CMAKE_CXX_FLAGS})
##################################
# LOGIC FOR BUILDING UNITY or NATIVE SHARED LIB
##################################
if( _UNITY_BUILD_ )
set(PLATFORM_TYPE unity)
else()
set(PLATFORM_TYPE native)
endif()
message(STATUS "Compiling for " ${PLATFORM_TYPE})
##################################
# NDK INFO
##################################
#message(STATUS "NDK path: " ${ANDROID_NDK})
##################################
#Headers from the project
##################################
#Common source
include_directories(../common)
include_directories(../common/core)
include_directories(../common/core/algorithms)
include_directories(../common/core/async)
include_directories(../common/core/http)
include_directories(../common/core/io)
include_directories(../common/core/manager)
include_directories(../common/core/security)
# **** Additions from Bernard
include_directories(../common/core/manager_v2) # ManoMotionManager
include_directories(../common/core/memstat) # memory usage and leak count
include_directories(../common/modules/cpp-taskflow) # Threaded task scheduling
include_directories(../common/modules/jwt-cpp-0.3.1/include) # Threaded task scheduling
# ***** End of additions by bernard
include_directories(../common/logging)
include_directories(../common/temp)
include_directories(../common/modules/security)
include_directories(../common/modules/skm)
include_directories(../common/modules/security)
include_directories(../common/modules/skm/src)
include_directories(../common/modules/deep-learning)
include_directories(../common/modules/ml3d)
include_directories(../common/modules/ml3d/pmd/include/royaleCAPI)
include_directories(../common/modules/)
include_directories(../common/core/utils)
#Entry point source
include_directories(./entry-point)
#3rdParty source
include_directories(./3rdparty)
include_directories(./3rdparty/include)
include_directories(./3rdparty/curl)
include_directories(./3rdparty/openssl)
include_directories(./3rdparty/json)
include_directories(./3rdparty/ArduinoJson)
#Opencv 4.4
#include_directories(./3rdparty/opencv-4.4.0-android-sdk/OpenCV-android-sdk/sdk/native/jni/include)
include_directories(${3RDPARTY_SKM_PATH}/opencv2.framework/Headers)
#new tensorflow
#include_directories(../common/modules/tensorflow)
#include_directories(../common/modules/tensorflow/tensorflow/lite/tools/make/downloads/flatbuffers/include)
#include_directories(../common/modules/tensorflow/tensorflow/lite/tools/make/downloads/absl/)
#easy profiler
include_directories(../common/modules/easy_profiler/easy_profiler_core/include)
#Not used for now
#include_directories(../common/modules/segmentation)
#include_directories(../common/security)
##################################
#Source files from the project
#The file(GLOB...) allows for wildcard additions:
##################################
#Common source & 3rdparty
file(GLOB LIB_CORE "../common/core/*.cpp"
"../common/core/manager/*.cpp"
"../common/core/security/*.cpp"
"../common/modules/security/*.cpp"
"../common/logging/*.cpp"
"../common/security/*.cpp"
"../common/core/manager_v2/*.cpp" # added by bernard
"../common/temp/*.cpp"
"3rdparty/*.cpp"
)
#we have to exclude TR files which are only for Windows
#we load all the files
file(GLOB LIB_CORE_ALGO
"../common/core/algorithms/*.cpp"
)
file(GLOB LIB_CORE_ASYNC
"../common/core/async/*.cpp"
)
file(GLOB LIB_CORE_HTTP
"../common/core/http/*.cpp"
)
file(GLOB LIB_CORE_IO
"../common/core/io/*.cpp"
)
file(GLOB LIB_CORE_UTILS
"../common/core/utils/*.cpp"
)
#Module ML3D
file(GLOB LIB_ML3D
"../common/modules/ml3d/*.cpp"
)
#Module EntryPoint.
file(GLOB ENTRY_POINT
"entry-point/*.cpp"
"entry-point/${PLATFORM_TYPE}/*.cpp"
)
#Grouping the gorups of source codes
SET(LIB_CORE_SOURCES ${LIB_CORE_ALGO} ${LIB_CORE_ASYNC} ${LIB_CORE_HTTP} ${LIB_CORE_IO} ${LIB_CORE_UTILS})
SET(LIB_MODULE_SOURCES ${LIB_ML3D} )#${LIB_SEGMENTATION} ${LIB_CORE_UTILS}) ${LIB_SECURITY} ${LIB_SKM_SOURCE}
file(GLOB LIB_SOURCES ${LIB_CORE} ${LIB_CORE_SOURCES} ${LIB_MODULE_SOURCES} )
#exlude the TR ones
foreach( file_i ${LIB_SOURCES})
get_filename_component(FILE_NAME ${file_i} NAME)
set (POS -1)
#TR files
string(FIND ${FILE_NAME} "TR" POS)
if(${POS} GREATER -1)
message(STATUS "Exluded " ${file_i})
list(REMOVE_ITEM LIB_SOURCES ${file_i})
endif()
#Two hand process is not ready for mobile yet
string(FIND ${FILE_NAME} "TwoHandProcess" POS)
if(${POS} GREATER -1)
message(STATUS "Exluded " ${file_i})
list(REMOVE_ITEM LIB_SOURCES ${file_i})
endif()
endforeach( file_i )
#add_subdirectory(../common/modules/easy_profiler ${CMAKE_BINARY_DIR}/easy_profiler EXCLUDE_FROM_ALL)
#add_subdirectory(../common/modules/easy_profiler)
#target_link_libraries(${LIB_TARGET_NAME} easy_profiler tensorflow_lite)
#set (PATH_ABS D:/Workspace/SDK_PRO/Android)
message("Building from " ${CMAKE_SOURCE_DIR})
##################################
#OPENCV
##################################
#set(OpenCV_DIR ${CMAKE_SOURCE_DIR}/3rdparty/opencv-4.4.0-android-sdk/OpenCV-android-sdk/sdk/native/jni/)
#find_package(OpenCV REQUIRED)
#include_directories(${OpenCV_INCLUDE_DIRS})
# If the package has been found, several variables will
# be set, you can find the full list with descriptions
# in the OpenCVConfig.cmake file.
# Print some message showing some of them
message(STATUS "rootpath ${CMAKE_SOURCE_DIR}")
#message(STATUS "OpenCV library status:")
#message(STATUS " config: ${OpenCV_DIR}")
#message(STATUS " version: ${OpenCV_VERSION}")
##message(STATUS " libraries: ${OpenCV_LIBS}")
#message(STATUS " include path: ${OpenCV_INCLUDE_DIRS}")
##################################
#LOAD LIBS
##################################
#STATIC LIBS
#SKM IS REQUIRED TO RUN THIS LIBRARY
if(EXISTS "${CMAKE_SOURCE_DIR}/skm/libskm_${CMAKE_BUILD_TYPE_LOWCASE}.a")
message(STATUS "SKM Library found for " ${CMAKE_BUILD_TYPE_LOWCASE})
add_library(lib_skm STATIC IMPORTED)
set_target_properties(lib_skm PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/skm/libskm_${CMAKE_BUILD_TYPE_LOWCASE}.a)
else()
message(STATUS "SKM Library not found for " ${CMAKE_BUILD_TYPE_LOWCASE} ". Making a new one: ")
#WE HAVE TO MAKE THE LIB FIRST
#add_subdirectory(${CMAKE_SOURCE_DIR}/skm ${CMAKE_SOURCE_DIR}/skm/build)
# add_library(lib_skm STATIC ${CMAKE_SOURCE_DIR}/skm)
# set_target_properties(lib_skm PROPERTIES LINKER_LANGUAGE CXX)
endif()
#CURL
add_library(lib_curl STATIC IMPORTED)
set_target_properties(lib_curl PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libs/libcurl.a)
#FLATBUFFERS
#add_library(lib_flatbuffers STATIC IMPORTED)
#set_target_properties(lib_flatbuffers PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libs/tensorflow-lite/libflatbuffers.a)
#add_library(lib_tensorflow STATIC IMPORTED)
#set_target_properties(lib_tensorflow PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libs/tensorflow-lite/arm64-v8a/libtensorflow_lite_second.a)
#SHARED LIBS
#add_library(lib_tensorflow SHARED IMPORTED)
#set_target_properties(lib_tensorflow PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libs/tensorflow-lite/arm64-v8a/libtensorflowlite.so)
#add_library(libtensorflowlite_gpu_delegate SHARED IMPORTED)
#set_target_properties(libtensorflowlite_gpu_delegate PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libs/tensorflow-lite/arm64-v8a/libtensorflowlite_gpu_delegate.so)
message(STATUS "processing opencv " ${BUILD_INFO_FILE})
add_library(opencv2.framwork SHARED IMPORTED)
set_target_properties(opencv2.framwork PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/)
##################################
#NEW Tensorflow static lib contains tensorflow and Android delegates for gPU usage
##################################
#add_library(libtensorflowlite_plus_gpu_delegate STATIC IMPORTED)
#set_target_properties(libtensorflowlite_plus_gpu_delegate PROPERTIES IMPORTED_LOCATION #${CMAKE_SOURCE_DIR}/libs/tensorflow-lite/arm64-v8a/libtensorflow_plus_lite_gpu.a)
#FIND LOG LIB
#find_library(log-lib
# log)
##################################
#SET LINKING FLAGS
##################################
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -ldl -lz -lm \
-Wl,--allow-multiple-definition\
-Wl,--exclude-libs=ALL\
-Wl,-z,norelro \
-Wl,-z,lazy")
#set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -llog -ldl -lz -lm \
# -Wl,--allow-multiple-definition\
# -Wl,--exclude-libs=ALL\
# -Wl,-z,norelro \
# -Wl,-z,lazy")
add_library(${LIB_TARGET_NAME} SHARED ${ENTRY_POINT} ${LIB_SOURCES})
target_link_libraries(${LIB_TARGET_NAME} lib_skm #lib_flatbuffers
#libtensorflowlite_plus_gpu_delegate
#${OpenCV_LIBS}
#${log-lib}
lib_curl
EGL
GLESv3)
#************* IMPORTANT
#The library will be outputed here: D:\Workspace\SDK_PRO\Android\AndroidStudio\manomotion-sdk\build\intermediates\cmake\debug\obj\arm64-v8a
#This library requires the tensorflow lite gpu which is configured and loaded from from gradle mle
##################################
#GETTING BUILD INFO
##################################
file (STRINGS "../common/core/build_data.h" BUILD_INFO_FILE)
message(STATUS "Build info file: " ${BUILD_INFO_FILE})
#string(SUBSTRING ${BUILD_INFO_FILE} 10 30 ${BUILD_INFO})
#string(REGEX MATCH " = " ${BUILD_INFO_FILE})
#message(STATUS "Build info: " ${BUILD_INFO})
#message(STATUS "Build info: " ${CMAKE_MATCH_1})
message(STATUS "BINARY DIR: " ${CMAKE_CURRENT_BINARY_DIR})
message(STATUS "CMAKE_SOURCE_DIR: " ${CMAKE_SOURCE_DIR})
###Work in progress
#
###################################
##COPY THE SAHRED LIBRARY INTO A KNOWN FOLDER
###################################
#set (OUTPUT_FILE_NAME libmanomotion_${PLATFORM_TYPE}_${CMAKE_BUILD_TYPE_LOWCASE})
#set (OUTPUT_FILE ${CMAKE_SOURCE_DIR}/libs/${OUTPUT_FILE_NAME}.so)
#####
##Unity Builds will find the library elsewhere
#####
#if (_UNITY_BUILD_)
# set(LIB_MM_PATH ${CMAKE_CURRENT_BINARY_DIR}/libmanomotion.so)
#else()
# set(LIB_MM_PATH #${CMAKE_SOURCE_DIR}/AndroidStudio/manomotion-sdk/build/intermediates/cmake/${CMAKE_BUILD_TYPE_LOWCASE}/obj/arm64-v8a/libmanomotion.so)
#endif()
##MAKE LIB AVAILABLE IN A KNOWN DIRECTORY
##add_custom_command(TARGET ${LIB_TARGET_NAME} POST_BUILD
# COMMAND ${CMAKE_COMMAND} -E copy ${LIB_MM_PATH} ${OUTPUT_FILE})
##################################
#LOGIC FOR ADDING SECURITY IF IN RELEASE MODE
##################################
#if(WIN32)
# message(STATUS "We are building in Windows Environment")
# if (CMAKE_BUILD_TYPE_LOWCASE STREQUAL "release")
# message(STATUS "RELEASE MODE, GENERATING CHECKSUM")
# # ${CMAKE_SOURCE_DIR} -> D:/Workspace/SDK_PRO/Android
# add_custom_command(TARGET ${LIB_TARGET_NAME} POST_BUILD
# COMMAND ${CMAKE_COMMAND} -E copy ${OUTPUT_FILE} ${CMAKE_SOURCE_DIR}/checksum-utils/${OUTPUT_FILE_NAME})
# add_custom_command(TARGET ${LIB_TARGET_NAME} POST_BUILD
# COMMAND ${CMAKE_SOURCE_DIR}/checksum-utils/create_checksum_android64.exe
# WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/checksum-utils
# COMMENT "running checksum in ${CMAKE_SOURCE_DIR}/checksum-utils"
# )
# add_custom_command(TARGET ${LIB_TARGET_NAME} POST_BUILD
# COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/checksum-utils/output_libmanomotion.so #${CMAKE_SOURCE_DIR}/libs/${OUTPUT_FILE_NAME}_secured.so)
# add_custom_command(TARGET ${LIB_TARGET_NAME} POST_BUILD
# COMMAND ${CMAKE_COMMAND} ${CMAKE_SOURCE_DIR}/checksum-utils/create_checksum_android64.exe)
# endif()
#elseif(LINUX)
# # todo: Add checksum logic here too
# message(STATUS "This is in Linux")
# if (CMAKE_BUILD_TYPE_LOWCASE STREQUAL "release")
# message(STATUS "RELEASE MODE, GENERATING CHECKSUM")
# add_custom_command(TARGET ${LIB_TARGET_NAME} POST_BUILD
# COMMAND ${CMAKE_COMMAND} -E copy ${OUTPUT_FILE} ${CMAKE_SOURCE_DIR}/checksum-utils/${OUTPUT_FILE_NAME})
# # add_custom_command(TARGET ${LIB_TARGET_NAME} POST_BUILD
# # COMMAND ${CMAKE_SOURCE_DIR}/checksum-utils/create_checksum_android64.exe
# # WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/checksum-utils
# # COMMENT "running checksum in ${CMAKE_SOURCE_DIR}/checksum-utils"
# # )
# # add_custom_command(TARGET ${LIB_TARGET_NAME} POST_BUILD
# # COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/checksum-utils/output_libmanomotion.so #${CMAKE_SOURCE_DIR}/libs/${OUTPUT_FILE_NAME}_secured.so)
# # add_custom_command(TARGET ${LIB_TARGET_NAME} POST_BUILD
# # COMMAND ${CMAKE_COMMAND} ${CMAKE_SOURCE_DIR}/checksum-utils/create_checksum_android64.exe)
#endif()
#endif(WIN32)
##################################
#GROUP FILES INTO FOLDERS
##################################
source_group("core" FILES ${LIB_CORE})
source_group("core\\algorithms" FILES ${LIB_CORE_ALGO})
source_group("core\\async" FILES ${LIB_CORE_ASYNC})
source_group("core\\http" FILES ${LIB_CORE_HTTP})
source_group("core\\io" FILES ${LIB_CORE_IO})
source_group("core\\utils" FILES ${LIB_CORE_UTILS})
source_group("module\\skm" FILES ${LIB_SKM_SOURCE})
source_group("module\\security" FILES ${LIB_SECURITY})
source_group("module\\2Dto3D" FILES ${LIB_ML3D})
# the line below sets the C++ standard for all the projects to C++17
# this is required for cpptaskflow as it is built with some C++17 codes
# Change the lines below (17) to 11|14|20 to C++ version of interest
#set_property(TARGET ${LIB_TARGET_NAME} PROPERTY CXX_STANDARD 17)
#set_property(TARGET ${EXE_TARGET_NAME} PROPERTY CXX_STANDARD 17)