-
Notifications
You must be signed in to change notification settings - Fork 23
/
Copy pathCMake_utils.txt
89 lines (86 loc) · 3.92 KB
/
CMake_utils.txt
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
#search all source files in directories "input_dirs_list" and append them into output list "output_files_list"
function(COLLECT_SRC_FILES output_files_list input_dirs_list)
set(_tmp_all_list ${${output_files_list}})
foreach(DIR_ITEM ${input_dirs_list})
file(GLOB_RECURSE _tmp_list "${DIR_ITEM}/*.h")
list(APPEND _tmp_all_list ${_tmp_list})
file(GLOB_RECURSE _tmp_list "${DIR_ITEM}/*.hpp")
list(APPEND _tmp_all_list ${_tmp_list})
file(GLOB_RECURSE _tmp_list "${DIR_ITEM}/*.c")
list(APPEND _tmp_all_list ${_tmp_list})
file(GLOB_RECURSE _tmp_list "${DIR_ITEM}/*.cpp")
list(APPEND _tmp_all_list ${_tmp_list})
if(TARGET_PLATFORM STREQUAL "mac" OR TARGET_PLATFORM STREQUAL "ios")
file(GLOB_RECURSE _tmp_list "${DIR_ITEM}/*.m")
list(APPEND _tmp_all_list ${_tmp_list})
file(GLOB_RECURSE _tmp_list "${DIR_ITEM}/*.mm")
list(APPEND _tmp_all_list ${_tmp_list})
endif()
file(GLOB_RECURSE _tmp_list "${DIR_ITEM}/*.txt")
list(APPEND _tmp_all_list ${_tmp_list})
file(GLOB_RECURSE _tmp_list "${DIR_ITEM}/*.natvis")
list(APPEND _tmp_all_list ${_tmp_list})
endforeach()
set(${output_files_list} "${_tmp_all_list}" PARENT_SCOPE)
endfunction(COLLECT_SRC_FILES)
#search all directories include folder which named "include", and collect them into variable "output_dirs_list"
function(COLLECT_INCLUDE_DIRS output_dirs_list input_dirs_list)
set(_tmp_all_list ${${output_dirs_list}})
foreach(DIR_ITEM ${input_dirs_list})
file(GLOB_RECURSE _tmp_list "${DIR_ITEM}/*.h" "${DIR_ITEM}/*.hpp")
foreach(FILE_ITEM ${_tmp_list})
string(REPLACE "\\" "/" FILE_ITEM "${FILE_ITEM}")
string(FIND "${FILE_ITEM}" "/include/" INCLUDE_START_INDEX REVERSE)
if(INCLUDE_START_INDEX GREATER 0)
string(LENGTH "/include" INCLUDE_FOLDER_LENGTH)
MATH(EXPR INCLUDE_START_INDEX "${INCLUDE_FOLDER_LENGTH} + ${INCLUDE_START_INDEX}")
string(SUBSTRING "${FILE_ITEM}" 0 ${INCLUDE_START_INDEX} INCLUDE_DIR)
list(FIND _tmp_all_list "${INCLUDE_DIR}" LIST_INDEX)
if(LIST_INDEX EQUAL -1)
message("NEW INCLUDE DIR: ${INCLUDE_DIR}")
list(APPEND _tmp_all_list ${INCLUDE_DIR})
endif()
endif()
endforeach()
list(FIND _tmp_all_list "${DIR_ITEM}" LIST_INDEX)
if(LIST_INDEX EQUAL -1)
list(APPEND _tmp_all_list ${DIR_ITEM})
endif()
endforeach()
set(${output_dirs_list} "${_tmp_all_list}" PARENT_SCOPE)
endfunction(COLLECT_INCLUDE_DIRS)
#group source files in IDE
function(GROUP_FOR_IDE src_list root_folder_name)
foreach(FILE ${src_list})
message("GROUP FOR: ${FILE}")
set(ROOT_FOLDER "/${root_folder_name}/")
string(REPLACE "\\" "/" FILE "${FILE}")
string(FIND "${FILE}" "${ROOT_FOLDER}" ROOT_START_INDEX REVERSE)
string(LENGTH "${ROOT_FOLDER}" ROOT_FOLDER_LENGTH)
MATH(EXPR ROOT_START_INDEX "${ROOT_START_INDEX} + ${ROOT_FOLDER_LENGTH} - 1")
string(SUBSTRING "${FILE}" ${ROOT_START_INDEX} -1 GROUP)
get_filename_component(GROUP "${GROUP}" DIRECTORY)
if(root_folder_name STREQUAL "include")
if((APPLE_LIB_FORMAT STREQUAL "framework") OR (APPLE_LIB_FORMAT STREQUAL "bundle"))
set_property(SOURCE ${FILE} PROPERTY
MACOSX_PACKAGE_LOCATION Headers/${GROUP})
endif()
endif()
string(REPLACE "/" "\\" GROUP "${GROUP}")
set(GROUP "${root_folder_name}${GROUP}")
source_group("${GROUP}" FILES "${FILE}")
endforeach()
endfunction(GROUP_FOR_IDE)
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
message(STATUS "64-bit system detected")
if(TARGET_PLATFORM STREQUAL "linux" OR TARGET_PLATFORM STREQUAL "unix")
message(STATUS "set platform suffix to 64")
set(BITS_SUFFIX "64")
endif()
else()
message(STATUS "32-bit system detected")
if(TARGET_PLATFORM STREQUAL "linux" OR TARGET_PLATFORM STREQUAL "unix")
message(STATUS "set platform suffix to 32")
set(BITS_SUFFIX "32")
endif()
endif()