caffe

Форк
0
/
Targets.cmake 
173 строки · 7.0 Кб
1
################################################################################################
2
# Defines global Caffe_LINK flag, This flag is required to prevent linker from excluding
3
# some objects which are not addressed directly but are registered via static constructors
4
macro(caffe_set_caffe_link)
5
  if(BUILD_SHARED_LIBS)
6
    set(Caffe_LINK caffe)
7
  else()
8
    if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
9
      set(Caffe_LINK -Wl,-force_load caffe)
10
    elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
11
      set(Caffe_LINK -Wl,--whole-archive caffe -Wl,--no-whole-archive)
12
    endif()
13
  endif()
14
endmacro()
15
################################################################################################
16
# Convenient command to setup source group for IDEs that support this feature (VS, XCode)
17
# Usage:
18
#   caffe_source_group(<group> GLOB[_RECURSE] <globbing_expression>)
19
function(caffe_source_group group)
20
  cmake_parse_arguments(CAFFE_SOURCE_GROUP "" "" "GLOB;GLOB_RECURSE" ${ARGN})
21
  if(CAFFE_SOURCE_GROUP_GLOB)
22
    file(GLOB srcs1 ${CAFFE_SOURCE_GROUP_GLOB})
23
    source_group(${group} FILES ${srcs1})
24
  endif()
25

26
  if(CAFFE_SOURCE_GROUP_GLOB_RECURSE)
27
    file(GLOB_RECURSE srcs2 ${CAFFE_SOURCE_GROUP_GLOB_RECURSE})
28
    source_group(${group} FILES ${srcs2})
29
  endif()
30
endfunction()
31

32
################################################################################################
33
# Collecting sources from globbing and appending to output list variable
34
# Usage:
35
#   caffe_collect_sources(<output_variable> GLOB[_RECURSE] <globbing_expression>)
36
function(caffe_collect_sources variable)
37
  cmake_parse_arguments(CAFFE_COLLECT_SOURCES "" "" "GLOB;GLOB_RECURSE" ${ARGN})
38
  if(CAFFE_COLLECT_SOURCES_GLOB)
39
    file(GLOB srcs1 ${CAFFE_COLLECT_SOURCES_GLOB})
40
    set(${variable} ${variable} ${srcs1})
41
  endif()
42

43
  if(CAFFE_COLLECT_SOURCES_GLOB_RECURSE)
44
    file(GLOB_RECURSE srcs2 ${CAFFE_COLLECT_SOURCES_GLOB_RECURSE})
45
    set(${variable} ${variable} ${srcs2})
46
  endif()
47
endfunction()
48

49
################################################################################################
50
# Short command getting caffe sources (assuming standard Caffe code tree)
51
# Usage:
52
#   caffe_pickup_caffe_sources(<root>)
53
function(caffe_pickup_caffe_sources root)
54
  # put all files in source groups (visible as subfolder in many IDEs)
55
  caffe_source_group("Include"        GLOB "${root}/include/caffe/*.h*")
56
  caffe_source_group("Include\\Util"  GLOB "${root}/include/caffe/util/*.h*")
57
  caffe_source_group("Include"        GLOB "${PROJECT_BINARY_DIR}/caffe_config.h*")
58
  caffe_source_group("Source"         GLOB "${root}/src/caffe/*.cpp")
59
  caffe_source_group("Source\\Util"   GLOB "${root}/src/caffe/util/*.cpp")
60
  caffe_source_group("Source\\Layers" GLOB "${root}/src/caffe/layers/*.cpp")
61
  caffe_source_group("Source\\Cuda"   GLOB "${root}/src/caffe/layers/*.cu")
62
  caffe_source_group("Source\\Cuda"   GLOB "${root}/src/caffe/util/*.cu")
63
  caffe_source_group("Source\\Proto"  GLOB "${root}/src/caffe/proto/*.proto")
64

65
  # source groups for test target
66
  caffe_source_group("Include"      GLOB "${root}/include/caffe/test/test_*.h*")
67
  caffe_source_group("Source"       GLOB "${root}/src/caffe/test/test_*.cpp")
68
  caffe_source_group("Source\\Cuda" GLOB "${root}/src/caffe/test/test_*.cu")
69

70
  # collect files
71
  file(GLOB test_hdrs    ${root}/include/caffe/test/test_*.h*)
72
  file(GLOB test_srcs    ${root}/src/caffe/test/test_*.cpp)
73
  file(GLOB_RECURSE hdrs ${root}/include/caffe/*.h*)
74
  file(GLOB_RECURSE srcs ${root}/src/caffe/*.cpp)
75
  list(REMOVE_ITEM  hdrs ${test_hdrs})
76
  list(REMOVE_ITEM  srcs ${test_srcs})
77

78
  # adding headers to make the visible in some IDEs (Qt, VS, Xcode)
79
  list(APPEND srcs ${hdrs} ${PROJECT_BINARY_DIR}/caffe_config.h)
80
  list(APPEND test_srcs ${test_hdrs})
81

82
  # collect cuda files
83
  file(GLOB    test_cuda ${root}/src/caffe/test/test_*.cu)
84
  file(GLOB_RECURSE cuda ${root}/src/caffe/*.cu)
85
  list(REMOVE_ITEM  cuda ${test_cuda})
86

87
  # add proto to make them editable in IDEs too
88
  file(GLOB_RECURSE proto_files ${root}/src/caffe/*.proto)
89
  list(APPEND srcs ${proto_files})
90

91
  # convert to absolute paths
92
  caffe_convert_absolute_paths(srcs)
93
  caffe_convert_absolute_paths(cuda)
94
  caffe_convert_absolute_paths(test_srcs)
95
  caffe_convert_absolute_paths(test_cuda)
96

97
  # propagate to parent scope
98
  set(srcs ${srcs} PARENT_SCOPE)
99
  set(cuda ${cuda} PARENT_SCOPE)
100
  set(test_srcs ${test_srcs} PARENT_SCOPE)
101
  set(test_cuda ${test_cuda} PARENT_SCOPE)
102
endfunction()
103

104
################################################################################################
105
# Short command for setting default target properties
106
# Usage:
107
#   caffe_default_properties(<target>)
108
function(caffe_default_properties target)
109
  set_target_properties(${target} PROPERTIES
110
    DEBUG_POSTFIX ${Caffe_DEBUG_POSTFIX}
111
    ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib"
112
    LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib"
113
    RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin")
114
  # make sure we build all external dependencies first
115
  if (DEFINED external_project_dependencies)
116
    add_dependencies(${target} ${external_project_dependencies})
117
  endif()
118
endfunction()
119

120
################################################################################################
121
# Short command for setting runtime directory for build target
122
# Usage:
123
#   caffe_set_runtime_directory(<target> <dir>)
124
function(caffe_set_runtime_directory target dir)
125
  set_target_properties(${target} PROPERTIES
126
    RUNTIME_OUTPUT_DIRECTORY "${dir}")
127
endfunction()
128

129
################################################################################################
130
# Short command for setting solution folder property for target
131
# Usage:
132
#   caffe_set_solution_folder(<target> <folder>)
133
function(caffe_set_solution_folder target folder)
134
  if(USE_PROJECT_FOLDERS)
135
    set_target_properties(${target} PROPERTIES FOLDER "${folder}")
136
  endif()
137
endfunction()
138

139
################################################################################################
140
# Reads lines from input file, prepends source directory to each line and writes to output file
141
# Usage:
142
#   caffe_configure_testdatafile(<testdatafile>)
143
function(caffe_configure_testdatafile file)
144
  file(STRINGS ${file} __lines)
145
  set(result "")
146
  foreach(line ${__lines})
147
    set(result "${result}${PROJECT_SOURCE_DIR}/${line}\n")
148
  endforeach()
149
  file(WRITE ${file}.gen.cmake ${result})
150
endfunction()
151

152
################################################################################################
153
# Filter out all files that are not included in selected list
154
# Usage:
155
#   caffe_leave_only_selected_tests(<filelist_variable> <selected_list>)
156
function(caffe_leave_only_selected_tests file_list)
157
  if(NOT ARGN)
158
    return() # blank list means leave all
159
  endif()
160
  string(REPLACE "," ";" __selected ${ARGN})
161
  list(APPEND __selected caffe_main)
162

163
  set(result "")
164
  foreach(f ${${file_list}})
165
    get_filename_component(name ${f} NAME_WE)
166
    string(REGEX REPLACE "^test_" "" name ${name})
167
    list(FIND __selected ${name} __index)
168
    if(NOT __index EQUAL -1)
169
      list(APPEND result ${f})
170
    endif()
171
  endforeach()
172
  set(${file_list} ${result} PARENT_SCOPE)
173
endfunction()
174

175

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.