@@ -4,21 +4,61 @@ else ()
44 set (PADDLE_FLOAT_TYPE float)
55endif ()
66
7+ # config.h used for C-API. It will store Paddle building configuration as a
8+ # header. Make user just include PaddleCAPI.h then can get building
9+ # configuration without explicitly set -DPADDLE_WITH_DOUBLE when building their
10+ # libraries.
711configure_file (config.h.in config.h @ONLY)
812
9- set (CAPI_HEADER
10- PaddleCAPI.h)
11- set (CAPI_PRIVATE_HEADER
12- PaddleCAPIPrivate.h)
13+ # PaddleCAPI.h is the only header we exposed. It currently only used for model
14+ # inference.
15+ set (CAPI_HEADER PaddleCAPI.h)
16+
17+
18+ set (CAPI_PRIVATE_HEADER PaddleCAPIPrivate.h)
1319file (GLOB CAPI_SOURCES *.cpp)
1420
21+ # building paddle_capi
1522add_library (paddle_capi STATIC ${CAPI_SOURCES} )
1623
1724target_include_directories (paddle_capi PUBLIC ${CMAKE_CURRENT_BINARY_DIR} )
25+
1826add_style_check_target(paddle_capi ${CAPI_SOURCES} ${CAPI_HEADER}
1927 ${CAPI_PRIVATE_HEADER} )
28+
2029add_dependencies (paddle_capi gen_proto_cpp)
2130
31+
32+ # combine all paddle static libraries together, into libpaddle_capi_whole.a
33+ # user should use PaddleCAPI as -lpaddle_capi_whole
34+ set (capi_whole_library libpaddle_capi_whole.a)
35+ add_custom_target (paddle_capi_whole
36+ COMMAND mkdir -p o_files/capi && cd o_files/capi/ && ar -x $<TARGET_FILE:paddle_capi>
37+ COMMAND mkdir -p o_files/utils && cd o_files/utils/ && ar -x $<TARGET_FILE:paddle_utils>
38+ COMMAND mkdir -p o_files/parameter && cd o_files/parameter/ && ar -x $<TARGET_FILE:paddle_parameter>
39+ COMMAND mkdir -p o_files/math && cd o_files/math/ && ar -x $<TARGET_FILE:paddle_math>
40+ COMMAND mkdir -p o_files/cuda && cd o_files/cuda/ && ar -x $<TARGET_FILE:paddle_cuda>
41+ COMMAND mkdir -p o_files/function && cd o_files/function/ && ar -x $<TARGET_FILE:paddle_function>
42+ COMMAND mkdir -p o_files/pserver && cd o_files/pserver/ && ar -x $<TARGET_FILE:paddle_pserver>
43+ COMMAND mkdir -p o_files/gserver && cd o_files/gserver/ && ar -x $<TARGET_FILE:paddle_gserver>
44+ COMMAND mkdir -p o_files/proto && cd o_files/proto/ && ar -x $<TARGET_FILE:paddle_proto>
45+ COMMAND ar crs ${capi_whole_library} `find ./o_files -name '*.o'`
46+ COMMAND rm -rf o_files
47+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
48+ DEPENDS paddle_capi paddle_utils paddle_parameter paddle_math
49+ paddle_cuda paddle_function paddle_pserver paddle_gserver
50+ paddle_proto
51+ )
52+ set_target_properties (paddle_capi_whole
53+ PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR} /${capi_whole_library} )
54+
55+ # install library & headers.
56+ install (FILES ${CMAKE_CURRENT_BINARY_DIR} /${capi_whole_library} DESTINATION lib)
57+ install (FILES ${CAPI_HEADER} DESTINATION include /paddle)
58+ install (FILES ${CMAKE_CURRENT_BINARY_DIR} /config.h DESTINATION include /paddle)
59+
60+
61+ # this variable used for unittest
2262set (PADDLE_CAPI_INC_PATH
2363 ${CMAKE_CURRENT_BINARY_DIR}
2464 ${CMAKE_CURRENT_SOURCE_DIR} )
0 commit comments