1
- FUNCTION (generate_python_api target_name)
2
- ADD_CUSTOM_COMMAND (OUTPUT ${PROJ_ROOT} /paddle/py_paddle/swig_paddle.py
3
- ${PROJ_ROOT} /paddle/Paddle_wrap.cxx
4
- ${PROJ_ROOT} /paddle/Paddle_wrap.h
5
- COMMAND ${SWIG_EXECUTABLE} -python -c++ -outcurrentdir -I../ api/Paddle.swig
6
- && mv ${PROJ_ROOT} /paddle/swig_paddle.py ${PROJ_ROOT} /paddle/py_paddle/swig_paddle.py
7
- DEPENDS ${PROJ_ROOT} /paddle/api/Paddle.swig
8
- ${PROJ_ROOT} /paddle/api/PaddleAPI.h
9
- ${external_project_dependencies}
10
- WORKING_DIRECTORY ${PROJ_ROOT} /paddle
11
- COMMENT "Generate Python API from swig" )
12
- ADD_CUSTOM_TARGET (${target_name} ALL DEPENDS
13
- ${PROJ_ROOT} /paddle/Paddle_wrap.cxx
14
- ${PROJ_ROOT} /paddle/Paddle_wrap.h
15
- ${PROJ_ROOT} /paddle/py_paddle/swig_paddle.py
16
- ${external_project_dependencies} )
17
- ENDFUNCTION (generate_python_api)
18
-
19
1
set (API_SOURCES
20
2
Arguments.cpp
21
3
ConfigParser.cpp
@@ -33,65 +15,86 @@ set(API_HEADER
33
15
PaddleAPI.h
34
16
Internal .h)
35
17
36
- add_library (paddle_api STATIC
37
- ${API_SOURCES} )
18
+ add_library (paddle_api STATIC ${API_SOURCES} )
38
19
add_dependencies (paddle_api gen_proto_cpp)
39
20
40
- list (LENGTH "${GFLAGS_LIBRARIES} " GFLAGS_LIBRARIES_LENGTH)
21
+ INCLUDE (${SWIG_USE_FILE} )
22
+ INCLUDE_DIRECTORIES (${PROJ_ROOT} /paddle)
41
23
42
- if ( ${GFLAGS_LIBRARIES_LENGTH} EQUAL 0 AND TARGET " ${GFLAGS_LIBRARIES} " )
43
- # Because gflags compiled by cmake, so it is imported by cmake target,
44
- # not a real library path. Get the real library path here.
45
- message ( STATUS "GFLAGS Libraries is ${GFLAGS_LIBRARIES} " )
46
- get_target_property (GFLAGS_LOCATION ${GFLAGS_LIBRARIES} LOCATION )
47
- message ( STATUS "GFLAGS Target location is ${GFLAGS_LOCATION} " )
48
- else ( )
49
- set (GFLAGS_LOCATION ${GFLAGS_LIBRARIES} )
50
- endif ( )
24
+ FILE (GLOB PY_PADDLE_PYTHON_FILES ${PROJ_ROOT} /paddle/py_paddle/*.py )
25
+
26
+ SET_SOURCE_FILES_PROPERTIES (Paddle.i PROPERTIES CPLUSPLUS ON )
27
+
28
+ SET (CMAKE_SWIG_OUTDIR ${CMAKE_CURRENT_BINARY_DIR} )
29
+ SET ( CMAKE_CXX_FLAGS "-std=c++11 -fPIC -Wall " )
30
+ IF (WITH_COVERAGE )
31
+ SET ( CMAKE_CXX_FLAGS " ${CMAKE_CXX_FLAGS} -g -O0 -fprofile-arcs -ftest-coverage" )
32
+ ENDIF (WITH_COVERAGE )
51
33
52
- configure_file (
53
- paddle_api_config.py.in
54
- ${PROJ_ROOT} /paddle/api/paddle_api_config.py
34
+ SET (SWIG_MODULE_swig_paddle_EXTRA_DEPS
35
+ paddle_parameter
36
+ paddle_function
37
+ paddle_math
38
+ paddle_utils
39
+ paddle_gserver
40
+ paddle_pserver
41
+ paddle_api
42
+ paddle_cuda
43
+ paddle_trainer_lib
44
+ paddle_network
45
+ paddle_proto
46
+ ${external_project_dependencies}
55
47
)
56
48
57
- generate_python_api(python_swig_sources)
49
+ IF (APPLE )
50
+ SET (MACOS_LD_FLAGS "-undefined dynamic_lookup -Wl,-all_load" )
51
+ ELSE (APPLE )
52
+ SET (START_GROUP "-Xlinker -start-group" )
53
+ SET (END_GROUP "-Xlinker -end-group" )
54
+ SET (ARCHIVE_START "-Wl,--whole-archive" )
55
+ SET (ARCHIVE_END "-Wl,--no-whole-archive" )
56
+ ENDIF (APPLE )
58
57
59
- file (GLOB PY_PADDLE_PYTHON_FILES ${PROJ_ROOT} /paddle/py_paddle/*.py)
58
+ SWIG_ADD_MODULE(swig_paddle python Paddle.i)
59
+ SWIG_LINK_LIBRARIES(swig_paddle
60
+ ${MACOS_LD_FLAGS}
61
+ ${START_GROUP}
62
+ ${ARCHIVE_START}
63
+ paddle_gserver
64
+ paddle_function
65
+ ${METRIC_LIBS}
66
+ ${ARCHIVE_END}
67
+ paddle_pserver
68
+ paddle_trainer_lib
69
+ paddle_network
70
+ paddle_parameter
71
+ paddle_math
72
+ paddle_utils
73
+ paddle_proto
74
+ paddle_cuda
75
+ paddle_api
76
+ ${CMAKE_DL_LIBS}
77
+ ${EXTERNAL_LIBS}
78
+ ${CMAKE_THREAD_LIBS_INIT}
79
+ ${RDMA_LD_FLAGS}
80
+ ${RDMA_LIBS}
81
+ ${START_END}
82
+ )
60
83
61
- # TODO(yuyang18) : make wheel name calculated by cmake
62
- add_custom_command (OUTPUT ${PROJ_ROOT} /paddle/dist/.timestamp
84
+ add_custom_command (OUTPUT ${PROJ_ROOT} /paddle/py_paddle/_swig_paddle.so
85
+ COMMAND cp ${CMAKE_CURRENT_BINARY_DIR} /swig_paddle.py ${PROJ_ROOT} /paddle/py_paddle
86
+ COMMAND cp ${CMAKE_CURRENT_BINARY_DIR} /_swig_paddle.so ${PROJ_ROOT} /paddle/py_paddle
63
87
COMMAND env ${py_env} ${PYTHON_EXECUTABLE} setup.py bdist_wheel
64
88
COMMAND ${CMAKE_COMMAND} -E touch dist/.timestamp
65
89
COMMAND rm -rf py_paddle.egg-info build
66
90
WORKING_DIRECTORY ${PROJ_ROOT} /paddle
67
- DEPENDS python_swig_sources
68
- paddle_parameter
69
- paddle_function
70
- paddle_math
71
- paddle_utils
72
- paddle_gserver
73
- paddle_pserver
74
- paddle_trainer
75
- paddle_api
76
- paddle_cuda
77
- ${PY_PADDLE_PYTHON_FILES}
91
+ DEPENDS _swig_paddle
78
92
)
79
93
80
- install (DIRECTORY ${PROJ_ROOT} /paddle/dist/
81
- DESTINATION opt/paddle/share/wheels
82
- )
94
+ # TODO(yuyang18) : make wheel name calculated by cmake
95
+ add_custom_target (python_api_wheel ALL DEPENDS ${PROJ_ROOT} /paddle/py_paddle/_swig_paddle.so)
83
96
84
- add_custom_target (python_api_wheel ALL DEPENDS
85
- ${PROJ_ROOT} /paddle/dist/.timestamp)
86
- add_dependencies (python_api_wheel python_swig_sources
87
- paddle_parameter
88
- paddle_math
89
- paddle_utils
90
- paddle_gserver
91
- paddle_pserver
92
- paddle_trainer
93
- paddle_api
94
- paddle_cuda)
97
+ install (DIRECTORY ${PROJ_ROOT} /paddle/dist/ DESTINATION opt/paddle/share/wheels)
95
98
96
99
if (WITH_TESTING)
97
100
IF (NOT PY_PIP_FOUND)
0 commit comments