CMakeLists.txt 13.4 KB
Newer Older
D
dongdaxiang 已提交
1

H
heqiaozhi 已提交
2 3
#windows treat symbolic file as a real file, which is different with unix
#We create a hidden file and compile it instead of origin source file.
D
dzhwinter 已提交
4 5
function(windows_symbolic TARGET)
  set(oneValueArgs "")
P
peizhilin 已提交
6
  set(multiValueArgs SRCS PATH)
D
dzhwinter 已提交
7
  cmake_parse_arguments(windows_symbolic "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
P
peizhilin 已提交
8
  set(final_path ${CMAKE_CURRENT_SOURCE_DIR}/${windows_symbolic_PATH})
D
dzhwinter 已提交
9
  foreach(src ${windows_symbolic_SRCS})
P
peizhilin 已提交
10 11 12 13
    get_filename_component(src ${src} NAME_WE)
    if (NOT EXISTS ${final_path}/${src}.cc OR NOT EXISTS ${final_path}/${src}.cu)
        message(FATAL " ${src}.cc and ${src}.cu must exsits, and ${src}.cu must be symbolic file.")
    endif()
D
dzhwinter 已提交
14

P
peizhilin 已提交
15 16 17 18 19 20
    file(GENERATE OUTPUT ${final_path}/.${src}.cu INPUT ${final_path}/${src}.cc)

    add_custom_command(OUTPUT ${final_path}/.${src}.cu
            COMMAND ${CMAKE_COMMAND} -E copy_if_different "${final_path}/${src}.cc" "${final_path}/.${src}.cu"
            COMMENT "create hidden file of ${src}.cu")
    add_custom_target(${TARGET} ALL DEPENDS .${src}.cu)
D
dzhwinter 已提交
21 22 23
  endforeach()
endfunction()

X
start  
Xin Pan 已提交
24
add_subdirectory(ir)
D
dzhwinter 已提交
25
add_subdirectory(details)
D
dongdaxiang 已提交
26
add_subdirectory(fleet)
27
add_subdirectory(io)
H
heqiaozhi 已提交
28
#ddim lib
29
proto_library(framework_proto SRCS framework.proto)
D
dongdaxiang 已提交
30
proto_library(data_feed_proto SRCS data_feed.proto)
H
hutuxian 已提交
31 32
proto_library(trainer_desc_proto SRCS trainer_desc.proto DEPS framework_proto
  data_feed_proto)
33

S
sneaxiy 已提交
34
cc_library(ddim SRCS ddim.cc DEPS eigen3 boost enforce)
35 36
cc_test(ddim_test SRCS ddim_test.cc DEPS ddim)
nv_test(dim_test SRCS dim_test.cu DEPS ddim)
S
sneaxiy 已提交
37
cc_test(unroll_array_ops_test SRCS unroll_array_ops_test.cc)
Y
yuyang18 已提交
38
cc_library(data_type SRCS data_type.cc DEPS framework_proto ddim device_context)
D
dzhwinter 已提交
39
cc_test(data_type_test SRCS data_type_test.cc DEPS data_type place tensor)
40
if(WITH_GPU)
D
dzhwinter 已提交
41 42 43 44 45
  if (WIN32)
    windows_symbolic(tensor_util SRCS tensor_util.cu)
    nv_library(tensor SRCS tensor.cc .tensor_util.cu DEPS place memory data_type device_context)
    add_dependencies(tensor tensor_util)
  else()
46
    nv_library(tensor SRCS tensor.cc tensor_util.cu DEPS place memory data_type device_context profiler)
D
dzhwinter 已提交
47
  endif(WIN32)
Y
Yang Yu 已提交
48
else()
49
  cc_library(tensor SRCS tensor.cc tensor_util.cc DEPS place memory data_type device_context profiler)
50
endif()
D
dzhwinter 已提交
51

Y
Yu Yang 已提交
52
cc_test(tensor_test SRCS tensor_test.cc DEPS tensor)
53
if(WITH_GPU)
6
633WHU 已提交
54
  nv_test(tensor_util_test SRCS tensor_util_test.cc tensor_util_test.cu DEPS tensor dlpack_tensor)
Y
Yang Yu 已提交
55
else()
6
633WHU 已提交
56
  cc_test(tensor_util_test SRCS tensor_util_test.cc DEPS tensor dlpack_tensor)
Y
Yang Yu 已提交
57
endif()
D
dzhwinter 已提交
58

Y
Update  
Yi Wang 已提交
59
cc_test(eigen_test SRCS eigen_test.cc DEPS tensor)
L
liaogang 已提交
60

61
if(WITH_GPU)
Q
qiaolongfei 已提交
62
  nv_test(mixed_vector_test SRCS mixed_vector_test.cc mixed_vector_test.cu DEPS place memory device_context tensor)
63 64 65
else()
  cc_test(mixed_vector_test SRCS mixed_vector_test.cc DEPS place memory device_context tensor)
endif()
66
cc_library(lod_tensor SRCS lod_tensor.cc DEPS ddim place tensor framework_proto version)
D
dzhwinter 已提交
67

Y
Yi Wang 已提交
68
cc_test(lod_tensor_test SRCS lod_tensor_test.cc DEPS lod_tensor memory)
69
nv_test(lod_tensor_gpu_test SRCS lod_tensor_test.cu DEPS lod_tensor)
70

S
sneaxiy 已提交
71
cc_library(garbage_collector SRCS garbage_collector.cc DEPS device_context memory gflags glog)
S
sneaxiy 已提交
72

F
fengjiayi 已提交
73
cc_library(reader SRCS reader.cc DEPS lod_tensor ddim)
Y
yuyang18 已提交
74
cc_test(reader_test SRCS reader_test.cc DEPS reader)
F
fengjiayi 已提交
75

Y
Yi Wang 已提交
76
cc_library(threadpool SRCS threadpool.cc DEPS enforce)
Y
Yang Yu 已提交
77 78
cc_test(threadpool_test SRCS threadpool_test.cc DEPS threadpool)

79
cc_library(var_type_traits SRCS var_type_traits DEPS lod_tensor selected_rows framework_proto)
S
sneaxiy 已提交
80
if (WITH_GPU)
S
sneaxiy 已提交
81
  target_link_libraries(var_type_traits dynload_cuda)
S
sneaxiy 已提交
82 83 84
endif()
cc_test(var_type_traits_test SRCS var_type_traits_test.cc DEPS var_type_traits)

85
cc_library(scope SRCS scope.cc DEPS glog threadpool xxhash var_type_traits)
S
sneaxiy 已提交
86
cc_library(scope_pool SRCS scope_pool.cc DEPS scope)
Y
Yi Wang 已提交
87
cc_test(scope_test SRCS scope_test.cc DEPS scope)
S
sneaxiy 已提交
88
cc_test(variable_test SRCS variable_test.cc DEPS tensor var_type_traits)
L
liaogang 已提交
89

90
cc_library(data_device_transform SRCS data_device_transform.cc DEPS tensor)
91
nv_test(data_device_transform_test SRCS data_device_transform_test.cu
S
sneaxiy 已提交
92
        DEPS operator op_registry device_context math_function scope)
93

94
if(WITH_GPU)
D
dzhwinter 已提交
95
  if (WIN32)
H
heqiaozhi 已提交
96 97
#windows treat symbolic file as a real file, which is different with unix
#We create a hidden file and compile it instead of origin source file.
D
dzhwinter 已提交
98 99 100 101 102 103
      windows_symbolic(hidden_file SRCS data_type_transform.cu)
      nv_library(data_type_transform SRCS .data_type_transform.cu DEPS tensor)
      add_dependencies(data_type_transform hidden_file)
  else()
      nv_library(data_type_transform SRCS data_type_transform.cu DEPS tensor)
  endif(WIN32)
104 105 106 107 108
  nv_test(data_type_transform_test SRCS data_type_transform_test.cc data_type_transform_test.cu DEPS data_type_transform)
else()
  cc_library(data_type_transform SRCS data_type_transform.cc DEPS tensor)
  cc_test(data_type_transform_test SRCS data_type_transform_test.cc DEPS data_type_transform)
endif()
109

110
cc_library(data_layout_transform SRCS data_layout_transform.cc DEPS tensor math_function)
111
cc_test(data_layout_transform_test SRCS data_layout_transform_test.cc DEPS data_layout_transform)
112

113 114
cc_library(data_transform SRCS data_transform.cc DEPS math_function tensor
        framework_proto selected_rows data_device_transform data_type_transform data_layout_transform)
Q
Qiao Longfei 已提交
115

D
dangqingqing 已提交
116
cc_library(attribute SRCS attribute.cc DEPS framework_proto boost)
117 118
cc_test(program_desc_test SRCS program_desc_test.cc DEPS proto_desc
device_context)
R
reyoung 已提交
119
cc_library(op_proto_maker SRCS op_proto_maker.cc DEPS framework_proto attribute glog)
120
cc_test(op_proto_maker_test SRCS op_proto_maker_test.cc DEPS op_proto_maker)
121 122
cc_library(no_need_buffer_vars_inference SRCS no_need_buffer_vars_inference.cc DEPS attribute)
cc_library(op_info SRCS op_info.cc DEPS attribute framework_proto no_need_buffer_vars_inference)
T
tensor-tang 已提交
123
cc_library(shape_inference SRCS shape_inference.cc DEPS ddim attribute device_context)
D
dzhwinter 已提交
124

125 126
cc_test(no_need_buffer_vars_inference_test SRCS no_need_buffer_vars_inference_test.cc DEPS no_need_buffer_vars_inference layer)

S
superjomn 已提交
127
cc_library(transfer_scope_cache SRCS transfer_scope_cache.cc DEPS scope framework_proto device_context)
X
Xin Pan 已提交
128
cc_library(op_kernel_type SRCS op_kernel_type.cc DEPS device_context place)
129
cc_library(operator SRCS operator.cc DEPS op_info device_context tensor scope glog trainer_desc_proto data_feed_proto
130
    shape_inference data_transform lod_tensor profiler transfer_scope_cache op_kernel_type op_call_stack)
D
dzhwinter 已提交
131

132
cc_test(operator_test SRCS operator_test.cc DEPS operator op_registry device_context)
133
cc_test(operator_exception_test SRCS operator_exception_test.cc DEPS operator op_registry device_context)
X
version  
Xin Pan 已提交
134 135

cc_library(version SRCS version.cc)
X
Xin Pan 已提交
136 137
cc_test(version_test SRCS version_test.cc DEPS version)

X
version  
Xin Pan 已提交
138
cc_library(proto_desc SRCS var_desc.cc op_desc.cc block_desc.cc program_desc.cc DEPS shape_inference op_info operator glog version)
B
baojun-nervana 已提交
139

140
cc_library(op_registry SRCS op_registry.cc DEPS op_proto_maker op_info operator glog proto_desc)
D
dongdaxiang 已提交
141

142 143
cc_library(op_call_stack SRCS op_call_stack.cc DEPS op_proto_maker enforce)

D
dzhwinter 已提交
144
nv_test(op_registry_test SRCS op_registry_test.cc DEPS op_registry)
145

W
Wang Guibao 已提交
146
py_proto_compile(framework_py_proto SRCS framework.proto data_feed.proto)
D
dongdaxiang 已提交
147
py_proto_compile(trainer_py_proto SRCS trainer_desc.proto data_feed.proto)
H
heqiaozhi 已提交
148
#Generate an empty \
H
heqiaozhi 已提交
149
    #__init__.py to make framework_py_proto as a valid python module.
150 151
add_custom_target(framework_py_proto_init ALL COMMAND ${CMAKE_COMMAND} -E touch __init__.py)
add_dependencies(framework_py_proto framework_py_proto_init)
P
peizhilin 已提交
152 153 154 155 156 157 158 159 160 161 162 163 164
if (NOT WIN32)
  add_custom_command(TARGET framework_py_proto POST_BUILD
      COMMAND ${CMAKE_COMMAND} -E make_directory ${PADDLE_BINARY_DIR}/python/paddle/fluid/proto
      COMMAND cp *.py ${PADDLE_BINARY_DIR}/python/paddle/fluid/proto/
      COMMENT "Copy generated python proto into directory paddle/fluid/proto."
      WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
else(NOT WIN32)
  string(REPLACE "/" "\\" proto_dstpath "${PADDLE_BINARY_DIR}/python/paddle/fluid/proto/")
  add_custom_command(TARGET framework_py_proto POST_BUILD
          COMMAND ${CMAKE_COMMAND} -E make_directory ${PADDLE_BINARY_DIR}/python/paddle/fluid/proto
          COMMAND copy /Y *.py ${proto_dstpath}
          COMMENT "Copy generated python proto into directory paddle/fluid/proto."
          WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
D
dzhwinter 已提交
165
endif(NOT WIN32)
166

Y
Yu Yang 已提交
167
cc_library(lod_rank_table SRCS lod_rank_table.cc DEPS lod_tensor)
Y
Yan Chunwei 已提交
168

169
cc_library(feed_fetch_method SRCS feed_fetch_method.cc DEPS lod_tensor scope glog)
W
Wang Guibao 已提交
170
cc_library(variable_helper SRCS variable_helper.cc DEPS lod_tensor)
171

W
Wang Guibao 已提交
172
cc_library(naive_executor SRCS naive_executor.cc DEPS op_registry device_context scope framework_proto glog lod_rank_table feed_fetch_method graph_to_program_pass variable_helper)
173

174 175 176 177 178
if(WITH_NGRAPH)
  set(NGRAPH_EXE_DEPS ngraph_engine)
else()
  set(NGRAPH_EXE_DEPS)
endif()
179

S
sneaxiy 已提交
180
cc_library(executor_gc_helper SRCS executor_gc_helper.cc DEPS scope proto_desc operator garbage_collector)
181
if(WITH_DISTRIBUTE)
H
hutuxian 已提交
182
  cc_library(executor SRCS executor.cc multi_trainer.cc pipeline_trainer.cc dataset_factory.cc
D
dongdaxiang 已提交
183 184
  dist_multi_trainer.cc trainer_factory.cc trainer.cc data_feed_factory.cc
  data_feed.cc device_worker.cc hogwild_worker.cc downpour_worker.cc
H
hutuxian 已提交
185
  pull_dense_worker.cc section_worker.cc device_worker_factory.cc data_set.cc DEPS op_registry
H
hutuxian 已提交
186
  device_context scope framework_proto trainer_desc_proto glog fs shell fleet_wrapper lodtensor_printer
187
  lod_rank_table feed_fetch_method sendrecvop_rpc collective_helper ${GLOB_DISTRIBUTE_DEPS}
D
dongdaxiang 已提交
188
  graph_to_program_pass variable_helper data_feed_proto ${NGRAPH_EXE_DEPS} timer)
D
dongdaxiang 已提交
189 190
set(DISTRIBUTE_COMPILE_FLAGS "-Wno-non-virtual-dtor -Wno-error=non-virtual-dtor -Wno-error=delete-non-virtual-dtor")
set_source_files_properties(executor.cc PROPERTIES COMPILE_FLAGS ${DISTRIBUTE_COMPILE_FLAGS})
W
Wu Yi 已提交
191
else()
H
hutuxian 已提交
192
  cc_library(executor SRCS executor.cc multi_trainer.cc pipeline_trainer.cc dataset_factory.cc
193 194
  dist_multi_trainer.cc trainer_factory.cc trainer.cc data_feed_factory.cc
  data_feed.cc device_worker.cc hogwild_worker.cc downpour_worker.cc
H
hutuxian 已提交
195
  pull_dense_worker.cc section_worker.cc device_worker_factory.cc data_set.cc DEPS op_registry
196
  device_context scope framework_proto data_feed_proto trainer_desc_proto glog
H
hutuxian 已提交
197
  lod_rank_table fs shell fleet_wrapper lodtensor_printer feed_fetch_method
198
  graph_to_program_pass variable_helper ${NGRAPH_EXE_DEPS} timer)
T
Tao Luo 已提交
199
  cc_test(test_naive_executor SRCS naive_executor_test.cc DEPS naive_executor elementwise_add_op)
W
Wu Yi 已提交
200
endif()
B
baojun-nervana 已提交
201

Z
Zeng Jinle 已提交
202
target_link_libraries(executor while_op_helper executor_gc_helper recurrent_op_helper conditional_block_op_helper)
S
sneaxiy 已提交
203

204
cc_library(parallel_executor SRCS parallel_executor.cc DEPS
Q
can run  
Qiao Longfei 已提交
205
        threaded_ssa_graph_executor scope_buffered_ssa_graph_executor parallel_ssa_graph_executor async_ssa_graph_executor
206
        graph build_strategy
W
Wang Guibao 已提交
207
        fast_threaded_ssa_graph_executor variable_helper)
Q
qijun 已提交
208

H
Huihuang Zheng 已提交
209
cc_library(prune SRCS prune.cc DEPS framework_proto boost)
Y
Yang Yang 已提交
210
cc_test(prune_test SRCS prune_test.cc DEPS op_info prune recurrent_op device_context)
Y
Yu Yang 已提交
211 212
cc_test(var_type_inference_test SRCS var_type_inference_test.cc DEPS op_registry
        proto_desc)
Q
qijun 已提交
213 214
cc_library(selected_rows SRCS selected_rows.cc DEPS tensor)
cc_test(selected_rows_test SRCS selected_rows_test.cc DEPS selected_rows)
D
dzhwinter 已提交
215

X
Xin Pan 已提交
216
cc_test(op_kernel_type_test SRCS op_kernel_type_test.cc DEPS place device_context framework_proto op_kernel_type)
Y
Yang Yu 已提交
217
cc_test(cow_ptr_tests SRCS details/cow_ptr_test.cc)
M
minqiyang 已提交
218

C
chengduo 已提交
219
cc_test(tuple_test SRCS tuple_test.cc )
220

Z
Zeng Jinle 已提交
221 222
cc_test(inlined_vector_test SRCS inlined_vector_test.cc)

D
dzhwinter 已提交
223
if (NOT WIN32)
Q
Qiao Longfei 已提交
224
cc_test(rw_lock_test SRCS rw_lock_test.cc)
D
dzhwinter 已提交
225
endif (NOT WIN32)
S
sneaxiy 已提交
226 227 228

cc_library(dlpack_tensor SRCS dlpack_tensor.cc DEPS tensor dlpack)
cc_test(dlpack_tensor_test SRCS dlpack_tensor_test.cc DEPS dlpack_tensor glog)
Y
Yan Chunwei 已提交
229

230
cc_library(op_compatible_info SRCS op_compatible_info DEPS string_helper proto_desc)
231
cc_test(op_compatible_info_test SRCS op_compatible_info_test.cc DEPS op_compatible_info proto_desc string_helper glog)
H
hong 已提交
232

H
hong 已提交
233 234 235
cc_library(save_load_util SRCS save_load_util DEPS tensor scope layer)
cc_test(save_load_util_test SRCS save_load_util_test.cc DEPS save_load_util tensor scope layer)

Y
Yan Chunwei 已提交
236 237 238
# Get the current working branch
execute_process(
  COMMAND git rev-parse --abbrev-ref HEAD
D
dongdaxiang 已提交
239 240 241 242
    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
      OUTPUT_VARIABLE PADDLE_BRANCH
        OUTPUT_STRIP_TRAILING_WHITESPACE
	)
Y
Yan Chunwei 已提交
243 244 245 246

# Get the latest abbreviated commit hash of the working branch
execute_process(
  COMMAND git log -1 --format=%h
D
dongdaxiang 已提交
247 248 249 250
    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
      OUTPUT_VARIABLE PADDLE_COMMIT
        OUTPUT_STRIP_TRAILING_WHITESPACE
	)
Y
Yan Chunwei 已提交
251 252 253 254 255

message(STATUS "commit: ${PADDLE_COMMIT}")
message(STATUS "branch: ${PADDLE_BRANCH}")

configure_file(commit.h.in commit.h)
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

set(FLUID_FRAMEWORK_MODULES proto_desc memory lod_tensor executor data_feed_proto)
if(WIN32)
  sep_library(paddle_framework DEPS ${FLUID_FRAMEWORK_MODULES})
else(WIN32)
  cc_library(paddle_framework DEPS ${FLUID_FRAMEWORK_MODULES})
endif(WIN32)

cc_library(paddle_framework_shared
    SHARED SRCS executor.cc operator.cc ${CMAKE_CURRENT_SOURCE_DIR}/c/c_api.cc
    DEPS ${FLUID_FRAMEWORK_MODULES})
get_property(os_dependency_modules GLOBAL PROPERTY OS_DEPENDENCY_MODULES)
set_target_properties(paddle_framework_shared PROPERTIES OUTPUT_NAME paddle_framework)
target_link_libraries(paddle_framework_shared ${os_dependency_modules})

if (LINUX)
  set(FLUID_FRAMEWORK_SHARED_LIB
      ${PADDLE_BINARY_DIR}/paddle/fluid/framework/libpaddle_framework.so
      CACHE INTERNAL "Fluid framework lib")
endif()

if (WIN32)
  set(FLUID_FRAMEWORK_SHARED_LIB
      ${PADDLE_BINARY_DIR}/paddle/fluid/framework/libpaddle_framework.dll
      CACHE INTERNAL "Fluid framework lib")
endif()

if(APPLE)
  set(FLUID_FRAMEWORK_SHARED_LIB
      ${PADDLE_BINARY_DIR}/paddle/fluid/framework/libpaddle_framework.dylib
      CACHE INTERNAL "Fluid framework lib")
endif()