702 lines
22 KiB
CMake
Executable File
702 lines
22 KiB
CMake
Executable File
set(PYBIND_DEPS
|
|
init
|
|
init_phi
|
|
pybind
|
|
python
|
|
proto_desc
|
|
standalone_executor
|
|
executor
|
|
fleet_wrapper
|
|
gloo_wrapper
|
|
prune
|
|
feed_fetch_method
|
|
pass
|
|
generate_pass
|
|
pass_builder
|
|
compiled_program
|
|
layer
|
|
tracer
|
|
engine
|
|
common
|
|
scope_pool
|
|
analysis_predictor
|
|
imperative_profiler
|
|
imperative_flag
|
|
dlpack_tensor
|
|
gloo_wrapper
|
|
infer_io_utils
|
|
op_version_registry
|
|
custom_operator
|
|
cost_model
|
|
global_utils
|
|
phi_utils
|
|
phi
|
|
op_dialect_vjp
|
|
program_translator
|
|
pir_transforms
|
|
pir_save_load
|
|
new_profiler
|
|
fluid_jit
|
|
prim_utils
|
|
detail_op_handle
|
|
type_info
|
|
auto_parallel
|
|
executor_cache)
|
|
|
|
if(WIN32)
|
|
list(APPEND PYBIND_DEPS dynload_common)
|
|
endif()
|
|
if(WITH_GPU)
|
|
list(APPEND PYBIND_DEPS gpu_event_timer)
|
|
if(WIN32)
|
|
list(APPEND PYBIND_DEPS dynload_cuda cuda_graph_lib)
|
|
if(TENSORRT_FOUND)
|
|
list(APPEND PYBIND_DEPS dynload_tensorrt)
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
if(WITH_CINN)
|
|
set(PYBIND_DEPS ${PYBIND_DEPS} pir_transforms cinn_transforms
|
|
sub_graph_checker add_cinn_pass)
|
|
list(REMOVE_ITEM PYBIND_DEPS imperative_flag)
|
|
endif()
|
|
|
|
if(WITH_IPU)
|
|
set(PYBIND_DEPS ${PYBIND_DEPS} ipu_info)
|
|
endif()
|
|
|
|
if(WITH_NCCL OR WITH_RCCL)
|
|
set(PYBIND_DEPS ${PYBIND_DEPS} nccl_wrapper)
|
|
set(PYBIND_DEPS ${PYBIND_DEPS} reducer)
|
|
endif()
|
|
|
|
if(WITH_XPU_BKCL)
|
|
set(PYBIND_DEPS ${PYBIND_DEPS} reducer)
|
|
set(PYBIND_DEPS ${PYBIND_DEPS} bkcl_context)
|
|
set(PYBIND_DEPS ${PYBIND_DEPS} heter_ccl_context)
|
|
endif()
|
|
|
|
if(WITH_CUSTOM_DEVICE)
|
|
set(PYBIND_DEPS ${PYBIND_DEPS} xccl_context)
|
|
if(NOT
|
|
(WITH_NCCL
|
|
OR WITH_RCCL
|
|
OR WITH_XPU_BKCL))
|
|
set(PYBIND_DEPS ${PYBIND_DEPS} reducer)
|
|
set(PYBIND_DEPS ${PYBIND_DEPS} heter_ccl_context)
|
|
endif()
|
|
endif()
|
|
|
|
if(NOT WIN32)
|
|
set(PYBIND_DEPS ${PYBIND_DEPS} data_loader)
|
|
if(WITH_NCCL OR WITH_RCCL)
|
|
set(PYBIND_DEPS ${PYBIND_DEPS} nccl_context)
|
|
set(PYBIND_DEPS ${PYBIND_DEPS} heter_ccl_context)
|
|
endif()
|
|
endif()
|
|
|
|
if(WITH_PYTHON)
|
|
# list(APPEND PYBIND_DEPS py_func_op)
|
|
set(PYBIND_DEPS ${PYBIND_DEPS} py_func_op)
|
|
endif()
|
|
|
|
set(PYBIND_SRCS
|
|
pybind.cc
|
|
imperative.cc
|
|
inference_api.cc
|
|
control_flow_api.cc
|
|
pir.cc
|
|
pir_utils.cc
|
|
graph.cc
|
|
native_meta_tensor.cc
|
|
reader_py.cc
|
|
protobuf.cc
|
|
exception.cc
|
|
op_function_common.cc
|
|
compiled_program.cc
|
|
tensor.cc
|
|
place.cc
|
|
const_value.cc
|
|
global_value_getter_setter.cc
|
|
fleet_wrapper_py.cc
|
|
gloo_wrapper_py.cc
|
|
data_set_py.cc
|
|
bind_cost_model.cc
|
|
compatible.cc
|
|
io.cc
|
|
generator_py.cc
|
|
communication.cc
|
|
cuda_streams_py.cc
|
|
cudart_py.cc
|
|
custom_device_py.cc
|
|
xpu_streams_py.cc
|
|
jit.cc
|
|
auto_parallel_py.cc
|
|
sot/eval_frame_tools.cc
|
|
sot/frame_proxy.c
|
|
sot/eval_frame.c
|
|
sot/guards.cc
|
|
sot/cpython_internals/internals_3_11.c
|
|
sot/cpython_internals/internals_3_12.c
|
|
sot/cpython_internals/internals_3_13.c
|
|
sot/cpython_internals/internals_3_14.c
|
|
op_callstack_utils.cc
|
|
python_callable_registry.cc
|
|
arg_pre_process.cc
|
|
args_mapper.cc
|
|
size.cc)
|
|
|
|
if(WITH_DISTRIBUTE)
|
|
set(PYBIND_SRCS ${PYBIND_SRCS} dist_api.cc)
|
|
|
|
string(FIND "${CUDA_ARCH_BIN}" "90" ARCH_BIN_CONTAINS_90)
|
|
if(WITH_GPU AND (ARCH_BIN_CONTAINS_90 GREATER -1))
|
|
set(PYBIND_DEPS ${PYBIND_DEPS} deep_ep)
|
|
set(PYBIND_SRCS ${PYBIND_SRCS} deep_ep_api.cc)
|
|
add_definitions(-DPADDLE_WITH_DEEP_EP)
|
|
if(WITH_NVSHMEM)
|
|
set(PYBIND_DEPS ${PYBIND_DEPS} nvshmem)
|
|
endif()
|
|
endif()
|
|
if(WITH_XPU AND WITH_XPU_XRE5)
|
|
set(PYBIND_DEPS ${PYBIND_DEPS} deep_ep_xpu)
|
|
set(PYBIND_SRCS ${PYBIND_SRCS} deep_ep_api.cc)
|
|
add_definitions(-DPADDLE_WITH_DEEP_EP)
|
|
if(WITH_NVSHMEM)
|
|
set(PYBIND_DEPS ${PYBIND_DEPS} nvshmem)
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
if(NOT WITH_SHARED_IR)
|
|
# Note: We want to compile pir source into paddle.so directly, because
|
|
# we can't get all pir symbols when link pir static lib
|
|
file(GLOB_RECURSE PIR_CPP_SOURCES "${CMAKE_SOURCE_DIR}/paddle/pir/*.cc")
|
|
set(PYBIND_SRCS ${PYBIND_SRCS} ${PIR_CPP_SOURCES})
|
|
else()
|
|
set(PYBIND_DEPS ${PYBIND_DEPS} pir)
|
|
endif()
|
|
|
|
if(WITH_PYTHON)
|
|
set(PYBIND_DEPS ${PYBIND_DEPS} process_group eager_reducer)
|
|
if(WITH_NCCL OR WITH_RCCL)
|
|
set(PYBIND_DEPS ${PYBIND_DEPS} process_group_nccl async_load)
|
|
endif()
|
|
if(WITH_XPU_BKCL)
|
|
set(PYBIND_DEPS ${PYBIND_DEPS} process_group_bkcl xpu_async_load)
|
|
endif()
|
|
if(WITH_GLOO)
|
|
set(PYBIND_DEPS ${PYBIND_DEPS} process_group_gloo)
|
|
endif()
|
|
if(WITH_MPI)
|
|
set(PYBIND_DEPS ${PYBIND_DEPS} process_group_mpi)
|
|
endif()
|
|
if(WITH_FLAGCX AND NOT WITH_XPU)
|
|
set(PYBIND_DEPS ${PYBIND_DEPS} process_group_flagcx)
|
|
endif()
|
|
if(WITH_CUSTOM_DEVICE)
|
|
set(PYBIND_DEPS ${PYBIND_DEPS} process_group_custom)
|
|
endif()
|
|
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 7.0)
|
|
set(DISTRIBUTE_COMPILE_FLAGS "${DISTRIBUTE_COMPILE_FLAGS} -faligned-new")
|
|
set_source_files_properties(
|
|
distributed_py.cc PROPERTIES COMPILE_FLAGS ${DISTRIBUTE_COMPILE_FLAGS})
|
|
endif()
|
|
set(PYBIND_SRCS ${PYBIND_SRCS} distributed_py.cc)
|
|
endif()
|
|
set(PYBIND_DEPS ${PYBIND_DEPS} processgroup_comm_utils)
|
|
|
|
if(WITH_GLOO)
|
|
set(PYBIND_DEPS ${PYBIND_DEPS} gloo_context)
|
|
set(PYBIND_SRCS ${PYBIND_SRCS} gloo_context_py.cc)
|
|
set(PYBIND_DEPS ${PYBIND_DEPS} imperative_gloo_context)
|
|
set(PYBIND_DEPS ${PYBIND_DEPS} reducer)
|
|
endif()
|
|
|
|
if(WITH_CRYPTO)
|
|
set(PYBIND_DEPS ${PYBIND_DEPS} framework_io)
|
|
set(PYBIND_SRCS ${PYBIND_SRCS} crypto.cc)
|
|
endif()
|
|
|
|
if(WITH_CINN)
|
|
set(PYBIND_SRCS ${PYBIND_SRCS} test.cc)
|
|
endif()
|
|
|
|
if(WITH_NCCL OR WITH_RCCL)
|
|
list(APPEND PYBIND_SRCS nccl_wrapper_py.cc)
|
|
endif()
|
|
|
|
if(WITH_PYTHON)
|
|
# generate op pybind functions automatically for dygraph.
|
|
|
|
set(OP_FUNCTION_GENERATOR_DEPS
|
|
pybind
|
|
proto_desc
|
|
executor
|
|
layer
|
|
tracer
|
|
engine
|
|
imperative_profiler
|
|
imperative_flag)
|
|
list(APPEND OP_FUNCTION_GENERATOR_DEPS ${GLOB_OP_LIB})
|
|
list(APPEND OP_FUNCTION_GENERATOR_DEPS ${GLOB_OPERATOR_DEPS})
|
|
|
|
if(WITH_NCCL OR WITH_RCCL)
|
|
list(APPEND OP_FUNCTION_GENERATOR_DEPS nccl_context)
|
|
endif()
|
|
|
|
if(WITH_XPU_BKCL)
|
|
list(APPEND OP_FUNCTION_GENERATOR_DEPS bkcl_context)
|
|
endif()
|
|
|
|
if(NOT ((NOT WITH_PYTHON) AND ON_INFER))
|
|
list(APPEND OP_FUNCTION_GENERATOR_DEPS ${PYTHON_LIBRARIES})
|
|
endif()
|
|
|
|
set(GENERATOR_DEPS ${PYBIND_DEPS})
|
|
list(REMOVE_DUPLICATES GENERATOR_DEPS)
|
|
if(WIN32)
|
|
list(REMOVE_ITEM GENERATOR_DEPS python)
|
|
endif()
|
|
|
|
get_property(os_dependency_modules GLOBAL PROPERTY OS_DEPENDENCY_MODULES)
|
|
|
|
set(op_function_output_path ${CMAKE_SOURCE_DIR}/paddle/fluid/pybind/)
|
|
set(CODE_GEN_SPLIT_FILE_COUNT "8")
|
|
set(eager_impl_file
|
|
${CMAKE_SOURCE_DIR}/paddle/fluid/pybind/eager_legacy_op_function.cc)
|
|
set(tmp_eager_impl_file ${eager_impl_file}.tmp)
|
|
|
|
execute_process(
|
|
COMMAND
|
|
"${PYTHON_EXECUTABLE}"
|
|
"${PADDLE_SOURCE_DIR}/paddle/fluid/pybind/generate_file_structures.py"
|
|
"${PADDLE_SOURCE_DIR}/paddle/fluid/pybind/"
|
|
"${CODE_GEN_SPLIT_FILE_COUNT}")
|
|
|
|
set(EAGER_GENERATOR_DEPS
|
|
${GLOB_OP_LIB}
|
|
${GLOB_OPERATOR_DEPS}
|
|
pybind
|
|
proto_desc
|
|
layer
|
|
tracer
|
|
engine
|
|
imperative_profiler
|
|
imperative_flag)
|
|
|
|
if(WITH_CINN)
|
|
list(REMOVE_ITEM EAGER_GENERATOR_DEPS imperative_flag)
|
|
endif()
|
|
|
|
if(WITH_GPU
|
|
AND WIN32
|
|
AND TENSORRT_FOUND)
|
|
list(APPEND EAGER_GENERATOR_DEPS dynload_tensorrt)
|
|
endif()
|
|
|
|
add_executable(
|
|
eager_generator generator.cc eager_legacy_op_function_generator.cc
|
|
eager_generator.cc)
|
|
target_link_libraries(eager_generator ${EAGER_GENERATOR_DEPS})
|
|
|
|
get_property(os_dependency_modules GLOBAL PROPERTY OS_DEPENDENCY_MODULES)
|
|
target_link_libraries(eager_generator ${os_dependency_modules})
|
|
|
|
set(EAGER_OP_IMPL_DEPS eager_generator eager_python_c_codegen
|
|
eager_monkey_patch_codegen)
|
|
|
|
if(WITH_ROCM)
|
|
target_link_libraries(eager_generator ${ROCM_HIPRTC_LIB})
|
|
endif()
|
|
|
|
if(WIN32)
|
|
set(EAGER_CODEGEN_DEPS eager_generator)
|
|
if("${CMAKE_GENERATOR}" STREQUAL "Ninja")
|
|
set(eager_generator_path "${CMAKE_CURRENT_BINARY_DIR}")
|
|
else()
|
|
set(eager_generator_path
|
|
"${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}")
|
|
endif()
|
|
|
|
if(WITH_SHARED_PHI)
|
|
message("Copied phi.dll for Eager AutoCodeGen")
|
|
add_custom_command(
|
|
OUTPUT ${eager_generator_path}/phi.dll
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${PHI_LIB} ${eager_generator_path}
|
|
DEPENDS phi)
|
|
list(APPEND EAGER_CODEGEN_DEPS ${eager_generator_path}/phi.dll)
|
|
endif()
|
|
|
|
add_custom_command(
|
|
OUTPUT ${eager_generator_path}/common.dll
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${COMMON_LIB} ${eager_generator_path}
|
|
DEPENDS common)
|
|
list(APPEND EAGER_CODEGEN_DEPS ${eager_generator_path}/common.dll)
|
|
|
|
if(WITH_SHARED_IR)
|
|
add_custom_command(
|
|
OUTPUT ${eager_generator_path}/ir.dll
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${IR_LIB} ${eager_generator_path}
|
|
DEPENDS pir)
|
|
list(APPEND EAGER_CODEGEN_DEPS ${eager_generator_path}/ir.dll)
|
|
endif()
|
|
|
|
if(${CBLAS_PROVIDER} STREQUAL MKLML)
|
|
message("Copied libiomp5md.dll for Eager AutoCodeGen")
|
|
add_custom_command(
|
|
OUTPUT ${eager_generator_path}/libiomp5md.dll
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${MKLML_SHARED_IOMP_LIB}
|
|
${eager_generator_path}
|
|
DEPENDS mklml)
|
|
list(APPEND EAGER_CODEGEN_DEPS ${eager_generator_path}/libiomp5md.dll)
|
|
else()
|
|
message("Copied openblas.dll for Eager AutoCodeGen")
|
|
add_custom_command(
|
|
OUTPUT ${eager_generator_path}/openblas.dll
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${OPENBLAS_SHARED_LIB}
|
|
${eager_generator_path}
|
|
DEPENDS extern_openblas)
|
|
list(APPEND EAGER_CODEGEN_DEPS ${eager_generator_path}/openblas.dll)
|
|
endif()
|
|
|
|
if(WITH_ONEDNN)
|
|
message("Copied mkldnn.dll for Eager AutoCodeGen")
|
|
add_custom_command(
|
|
OUTPUT ${eager_generator_path}/mkldnn.dll
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${ONEDNN_SHARED_LIB}
|
|
${eager_generator_path}
|
|
DEPENDS onednn)
|
|
list(APPEND EAGER_CODEGEN_DEPS ${eager_generator_path}/mkldnn.dll)
|
|
endif()
|
|
|
|
if(WITH_ONNXRUNTIME)
|
|
message("Copied onnxruntime for Eager AutoCodeGen")
|
|
add_custom_command(
|
|
OUTPUT ${eager_generator_path}/onnxruntime.dll
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${ONNXRUNTIME_SHARED_LIB}
|
|
${eager_generator_path}
|
|
DEPENDS onnxruntime)
|
|
list(APPEND EAGER_CODEGEN_DEPS ${eager_generator_path}/onnxruntime.dll)
|
|
add_custom_command(
|
|
OUTPUT ${eager_generator_path}/paddle2onnx.dll
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${PADDLE2ONNX_LIB}
|
|
${eager_generator_path}
|
|
DEPENDS paddle2onnx)
|
|
list(APPEND EAGER_CODEGEN_DEPS ${eager_generator_path}/paddle2onnx.dll)
|
|
endif()
|
|
|
|
add_custom_target(
|
|
legacy_eager_codegen
|
|
COMMAND
|
|
"${eager_generator_path}/eager_generator.exe"
|
|
"${PADDLE_SOURCE_DIR}/paddle/fluid/eager/api/generated/fluid_generated"
|
|
"${CODE_GEN_SPLIT_FILE_COUNT}"
|
|
DEPENDS ${EAGER_CODEGEN_DEPS}
|
|
VERBATIM)
|
|
else()
|
|
add_custom_target(
|
|
legacy_eager_codegen
|
|
COMMAND
|
|
${CMAKE_COMMAND} -E env
|
|
"LD_LIBRARY_PATH=$ENV{LD_LIBRARY_PATH}:${CMAKE_CURRENT_BINARY_DIR}/../../pybind:${PADDLE_BINARY_DIR}/third_party/install/mklml/lib"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/eager_generator"
|
|
"${PADDLE_SOURCE_DIR}/paddle/fluid/eager/api/generated/fluid_generated"
|
|
"${CODE_GEN_SPLIT_FILE_COUNT}"
|
|
DEPENDS eager_generator
|
|
VERBATIM)
|
|
endif()
|
|
|
|
if(WIN32)
|
|
if("${CMAKE_GENERATOR}" STREQUAL "Ninja")
|
|
set(op_impl_path "${CMAKE_CURRENT_BINARY_DIR}")
|
|
else()
|
|
set(op_impl_path "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}")
|
|
endif()
|
|
|
|
file(
|
|
WRITE
|
|
${CMAKE_BINARY_DIR}/paddle/fluid/pybind/eager_legacy_op_function_generator_retry.bat
|
|
""
|
|
"set build_times=1\n"
|
|
":retry\n"
|
|
"ECHO eager_legacy_op_function_generator run %build_times% time\n"
|
|
"taskkill /f /im eager_generator.exe 2>NUL\n"
|
|
"${op_impl_path}/eager_generator.exe ${tmp_eager_impl_file}\n"
|
|
"if %ERRORLEVEL% NEQ 0 (\n"
|
|
" set /a build_times=%build_times%+1\n"
|
|
" if %build_times% GEQ 10 (\n"
|
|
" exit /b 1\n"
|
|
" ) else (\n"
|
|
" goto :retry\n"
|
|
" )\n"
|
|
")\n"
|
|
"exit /b 0")
|
|
|
|
if(WITH_SHARED_PHI)
|
|
add_custom_command(
|
|
OUTPUT ${op_impl_path}/phi.dll
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${PHI_LIB} ${op_impl_path}
|
|
DEPENDS phi)
|
|
list(APPEND EAGER_OP_IMPL_DEPS ${op_impl_path}/phi.dll)
|
|
endif()
|
|
|
|
if(WITH_SHARED_IR)
|
|
add_custom_command(
|
|
OUTPUT ${op_impl_path}/ir.dll
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${IR_LIB} ${op_impl_path}
|
|
DEPENDS pir)
|
|
list(APPEND EAGER_OP_IMPL_DEPS ${op_impl_path}/ir.dll)
|
|
endif()
|
|
|
|
add_custom_command(
|
|
OUTPUT ${op_impl_path}/common.dll
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${COMMON_LIB} ${op_impl_path}
|
|
DEPENDS common)
|
|
list(APPEND EAGER_OP_IMPL_DEPS ${op_impl_path}/common.dll)
|
|
|
|
if(${CBLAS_PROVIDER} STREQUAL MKLML)
|
|
add_custom_command(
|
|
OUTPUT ${op_impl_path}/libiomp5md.dll
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${MKLML_SHARED_IOMP_LIB}
|
|
${op_impl_path}
|
|
DEPENDS mklml)
|
|
list(APPEND OP_IMPL_DEPS ${op_impl_path}/libiomp5md.dll)
|
|
list(APPEND EAGER_OP_IMPL_DEPS ${op_impl_path}/libiomp5md.dll)
|
|
else()
|
|
add_custom_command(
|
|
OUTPUT ${op_impl_path}/openblas.dll
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${OPENBLAS_SHARED_LIB} ${op_impl_path}
|
|
DEPENDS extern_openblas)
|
|
list(APPEND OP_IMPL_DEPS ${op_impl_path}/openblas.dll)
|
|
list(APPEND EAGER_OP_IMPL_DEPS ${op_impl_path}/openblas.dll)
|
|
endif()
|
|
if(WITH_ONEDNN)
|
|
add_custom_command(
|
|
OUTPUT ${op_impl_path}/mkldnn.dll
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${ONEDNN_SHARED_LIB} ${op_impl_path}
|
|
DEPENDS onednn)
|
|
list(APPEND OP_IMPL_DEPS ${op_impl_path}/mkldnn.dll)
|
|
list(APPEND EAGER_OP_IMPL_DEPS ${op_impl_path}/mkldnn.dll)
|
|
endif()
|
|
if(WITH_ONNXRUNTIME)
|
|
add_custom_command(
|
|
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/paddle2onnx.dll
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${PADDLE2ONNX_LIB}
|
|
${CMAKE_CURRENT_BINARY_DIR}
|
|
DEPENDS paddle2onnx)
|
|
list(APPEND OP_IMPL_DEPS ${CMAKE_CURRENT_BINARY_DIR}/paddle2onnx.dll)
|
|
list(APPEND EAGER_OP_IMPL_DEPS
|
|
${CMAKE_CURRENT_BINARY_DIR}/paddle2onnx.dll)
|
|
|
|
add_custom_command(
|
|
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/onnxruntime.dll
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${ONNXRUNTIME_SHARED_LIB}
|
|
${CMAKE_CURRENT_BINARY_DIR}
|
|
DEPENDS onnxruntime)
|
|
list(APPEND OP_IMPL_DEPS ${CMAKE_CURRENT_BINARY_DIR}/onnxruntime.dll)
|
|
list(APPEND EAGER_OP_IMPL_DEPS
|
|
${CMAKE_CURRENT_BINARY_DIR}/onnxruntime.dll)
|
|
endif()
|
|
|
|
if(NOT ((NOT WITH_PYTHON) AND ON_INFER))
|
|
add_custom_command(
|
|
OUTPUT ${eager_impl_file}
|
|
COMMAND
|
|
${CMAKE_BINARY_DIR}/paddle/fluid/pybind/eager_legacy_op_function_generator_retry.bat
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${tmp_eager_impl_file}
|
|
${eager_impl_file}
|
|
COMMENT "copy_if_different ${tmp_eager_impl_file} to ${eager_impl_file}"
|
|
DEPENDS ${EAGER_OP_IMPL_DEPS} legacy_eager_codegen)
|
|
endif()
|
|
else()
|
|
# If there are no *.so in /usr/lib or LD_LIBRARY_PATH,
|
|
# copy these *.so to current directory and append current directory to
|
|
# LD_LIBRARY_PATH. This is different with Windows platform, which search
|
|
# *.dll in current directory automatically.
|
|
if(WITH_ONNXRUNTIME)
|
|
set(PADDLE2ONNX_PYBIND_OUT
|
|
${CMAKE_CURRENT_BINARY_DIR}/${PADDLE2ONNX_LIB_NAME})
|
|
set(ONNXRUNTIME_PYBIND_OUT
|
|
${CMAKE_CURRENT_BINARY_DIR}/${ONNXRUNTIME_LIB_NAME})
|
|
|
|
add_custom_command(
|
|
OUTPUT ${PADDLE2ONNX_PYBIND_OUT}
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${PADDLE2ONNX_LIB}
|
|
${CMAKE_CURRENT_BINARY_DIR}
|
|
DEPENDS paddle2onnx)
|
|
list(APPEND OP_IMPL_DEPS ${PADDLE2ONNX_PYBIND_OUT})
|
|
list(APPEND EAGER_OP_IMPL_DEPS ${PADDLE2ONNX_PYBIND_OUT})
|
|
|
|
add_custom_command(
|
|
OUTPUT ${ONNXRUNTIME_PYBIND_OUT}
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${ONNXRUNTIME_LIB}
|
|
${CMAKE_CURRENT_BINARY_DIR}
|
|
DEPENDS onnxruntime)
|
|
list(APPEND OP_IMPL_DEPS ${ONNXRUNTIME_PYBIND_OUT})
|
|
list(APPEND EAGER_OP_IMPL_DEPS ${ONNXRUNTIME_PYBIND_OUT})
|
|
endif()
|
|
|
|
if(WITH_MKLML)
|
|
add_custom_command(
|
|
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/libiomp5.so
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${MKLML_SHARED_IOMP_LIB}
|
|
${CMAKE_CURRENT_BINARY_DIR}
|
|
DEPENDS mklml)
|
|
list(APPEND OP_IMPL_DEPS ${CMAKE_CURRENT_BINARY_DIR}/libiomp5.so)
|
|
list(APPEND EAGER_OP_IMPL_DEPS ${CMAKE_CURRENT_BINARY_DIR}/libiomp5.so)
|
|
endif()
|
|
if(WITH_ONEDNN)
|
|
add_custom_command(
|
|
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/libdnnl.so.0
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${ONEDNN_SHARED_LIB}
|
|
${CMAKE_CURRENT_BINARY_DIR}
|
|
DEPENDS onednn)
|
|
list(APPEND OP_IMPL_DEPS ${CMAKE_CURRENT_BINARY_DIR}/libdnnl.so.0)
|
|
list(APPEND EAGER_OP_IMPL_DEPS ${CMAKE_CURRENT_BINARY_DIR}/libdnnl.so.0)
|
|
endif()
|
|
if(NOT ((NOT WITH_PYTHON) AND ON_INFER))
|
|
add_custom_command(
|
|
OUTPUT ${eager_impl_file}
|
|
COMMAND
|
|
${CMAKE_COMMAND} -E env "LD_LIBRARY_PATH=$ENV{LD_LIBRARY_PATH}:."
|
|
"${CMAKE_CURRENT_BINARY_DIR}/eager_generator" "${tmp_eager_impl_file}"
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${tmp_eager_impl_file}
|
|
${eager_impl_file}
|
|
COMMENT "copy_if_different ${tmp_eager_impl_file} to ${eager_impl_file}"
|
|
DEPENDS ${EAGER_OP_IMPL_DEPS} legacy_eager_codegen
|
|
VERBATIM)
|
|
endif()
|
|
endif()
|
|
if(NOT ((NOT WITH_PYTHON) AND ON_INFER))
|
|
add_custom_target(eager_legacy_op_function_generator_cmd ALL
|
|
DEPENDS ${eager_impl_file})
|
|
endif()
|
|
|
|
if(NOT ((NOT WITH_PYTHON) AND ON_INFER))
|
|
set(PYBIND_SRCS eager.cc ${PYBIND_SRCS})
|
|
set(PYBIND_SRCS eager_functions.cc ${PYBIND_SRCS})
|
|
set(PYBIND_SRCS eager_method.cc ${PYBIND_SRCS})
|
|
set(PYBIND_SRCS eager_properties.cc ${PYBIND_SRCS})
|
|
set(PYBIND_SRCS eager_utils.cc ${PYBIND_SRCS})
|
|
set(PYBIND_SRCS eager_py_layer.cc ${PYBIND_SRCS})
|
|
set(PYBIND_SRCS eager_legacy_op_function.cc ${PYBIND_SRCS})
|
|
set(PYBIND_SRCS eager_op_function.cc ${PYBIND_SRCS})
|
|
set(PYBIND_SRCS eager_math_op_patch.cc ${PYBIND_SRCS})
|
|
set(PYBIND_SRCS ops_api.cc ${PYBIND_SRCS})
|
|
set(PYBIND_SRCS static_op_function.cc ${PYBIND_SRCS})
|
|
list(APPEND PYBIND_DEPS eager_api)
|
|
list(APPEND PYBIND_DEPS autograd_meta)
|
|
list(APPEND PYBIND_DEPS backward)
|
|
list(APPEND PYBIND_DEPS grad_node_info)
|
|
list(APPEND PYBIND_DEPS phi)
|
|
list(APPEND PYBIND_DEPS common)
|
|
list(APPEND PYBIND_DEPS final_dygraph_function)
|
|
list(APPEND PYBIND_DEPS final_dygraph_node)
|
|
list(APPEND PYBIND_DEPS dygraph_function)
|
|
list(APPEND PYBIND_DEPS dygraph_node)
|
|
list(APPEND PYBIND_DEPS accumulation_node)
|
|
list(APPEND PYBIND_DEPS py_layer_node)
|
|
list(APPEND PYBIND_DEPS eager_to_static)
|
|
list(APPEND PYBIND_DEPS global_utils)
|
|
list(APPEND PYBIND_DEPS utils)
|
|
list(APPEND PYBIND_DEPS python)
|
|
list(APPEND PYBIND_DEPS custom_operator)
|
|
list(APPEND PYBIND_DEPS custom_operator_node)
|
|
list(APPEND PYBIND_DEPS eager_tensor_operants)
|
|
list(APPEND PYBIND_DEPS pybind_util)
|
|
endif()
|
|
|
|
if(TENSORRT_FOUND)
|
|
list(APPEND PYBIND_DEPS pir_tensorrt_plugin)
|
|
endif()
|
|
|
|
# On Linux, cc_library(paddle SHARED ..) will generate the libpaddle.so,
|
|
# add a prefix `lib` by default, but on Windows, cc_library(paddle SHARED ..)
|
|
# will not add prefix, so it generate paddle.lib and paddle.pyd,
|
|
# we need to pay attention to the difference
|
|
set(SHARD_LIB_NAME paddle)
|
|
if(WIN32)
|
|
set(SHARD_LIB_NAME libpaddle)
|
|
endif()
|
|
set_property(GLOBAL PROPERTY PADDLE_LIB_NAME ${SHARD_LIB_NAME})
|
|
if(WIN32)
|
|
if(WITH_GPU AND TENSORRT_FOUND)
|
|
cc_library(
|
|
${SHARD_LIB_NAME} SHARED
|
|
SRCS ${PYBIND_SRCS}
|
|
DEPS ${PYBIND_DEPS} ${GLOB_OP_LIB} ${GLOB_OPERATOR_DEPS}
|
|
dynload_tensorrt)
|
|
else()
|
|
cc_library(
|
|
${SHARD_LIB_NAME} SHARED
|
|
SRCS ${PYBIND_SRCS}
|
|
DEPS ${PYBIND_DEPS} ${GLOB_OP_LIB} ${GLOB_OPERATOR_DEPS})
|
|
endif()
|
|
else()
|
|
cc_library(
|
|
${SHARD_LIB_NAME} SHARED
|
|
SRCS ${PYBIND_SRCS}
|
|
DEPS ${PYBIND_DEPS} ${GLOB_OP_LIB} ${GLOB_OPERATOR_DEPS})
|
|
endif()
|
|
|
|
if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU"))
|
|
target_compile_options(${SHARD_LIB_NAME} PRIVATE -Wno-maybe-uninitialized)
|
|
endif()
|
|
|
|
# cc_test do not respect deps, whole archive to link symbols that may need by test
|
|
if(WITH_TESTING)
|
|
#set_target_properties(${SHARD_LIB_NAME} PROPERTIES LINK_FLAGS "-Wl,--whole-archive")
|
|
endif()
|
|
|
|
# TODO(zhiqiu): some symbols not exported even setting the following
|
|
# property. Need to find a better way.
|
|
|
|
# if(WIN32)
|
|
# set_property(TARGET ${SHARD_LIB_NAME}
|
|
# PROPERTY WINDOWS_EXPORT_ALL_SYMBOLS ON)
|
|
# endif()
|
|
|
|
add_dependencies(${SHARD_LIB_NAME} ops_api_gen)
|
|
if(NOT ((NOT WITH_PYTHON) AND ON_INFER))
|
|
add_dependencies(${SHARD_LIB_NAME} legacy_eager_codegen)
|
|
add_dependencies(${SHARD_LIB_NAME} eager_legacy_op_function_generator_cmd)
|
|
endif()
|
|
|
|
if(NOT APPLE AND NOT WIN32)
|
|
target_link_libraries(${SHARD_LIB_NAME} rt)
|
|
endif()
|
|
|
|
if(WITH_ROCM)
|
|
target_link_libraries(${SHARD_LIB_NAME} ${ROCM_HIPRTC_LIB})
|
|
endif()
|
|
|
|
if(WITH_MPI)
|
|
target_link_libraries(${SHARD_LIB_NAME} ${MPI_CXX_LIBRARIES})
|
|
endif()
|
|
|
|
get_property(os_dependency_modules GLOBAL PROPERTY OS_DEPENDENCY_MODULES)
|
|
target_link_libraries(${SHARD_LIB_NAME} ${os_dependency_modules})
|
|
|
|
function(install_py_pybind11_stubgen)
|
|
# check install
|
|
execute_process(
|
|
COMMAND
|
|
${PYTHON_EXECUTABLE} "-c"
|
|
"import re, pybind11_stubgen; print(re.compile('/__init__.py.*').sub('',pybind11_stubgen.__file__))"
|
|
RESULT_VARIABLE _pybind11_stubgen_status
|
|
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
|
|
if(_pybind11_stubgen_status EQUAL 0)
|
|
return()
|
|
endif()
|
|
|
|
execute_process(COMMAND ${PYTHON_EXECUTABLE} -m pip install -U
|
|
pybind11-stubgen)
|
|
endfunction()
|
|
|
|
install_py_pybind11_stubgen()
|
|
|
|
endif()
|