Files
paddlepaddle--paddle/paddle/fluid/pybind/CMakeLists.txt
T
2026-07-13 12:40:42 +08:00

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()