set(TORCH_RPC_TEST_DIR "${TORCH_ROOT}/test/cpp/rpc")
set(TORCH_RPC_TEST_SOURCES
  ${TORCH_ROOT}/test/cpp/common/main.cpp
  ${TORCH_RPC_TEST_DIR}/e2e_test_base.cpp
  ${TORCH_RPC_TEST_DIR}/test_wire_serialization.cpp
)
set(TORCH_RPC_TEST_DEPENDENCY_LIBS
  torch gtest
)

if(USE_GLOO)
  list(APPEND TORCH_RPC_TEST_SOURCES
    ${TORCH_RPC_TEST_DIR}/test_e2e_tensorpipe.cpp
  )
endif()

if(USE_TENSORPIPE)
  list(APPEND TORCH_RPC_TEST_SOURCES
    ${TORCH_RPC_TEST_DIR}/test_tensorpipe_serialization.cpp
  )
  list(APPEND TORCH_RPC_TEST_DEPENDENCY_LIBS
    tensorpipe
  )
endif()

add_executable(test_cpp_rpc ${TORCH_RPC_TEST_SOURCES})
target_include_directories(
  test_cpp_rpc PRIVATE
  ${ATen_CPU_INCLUDE})
target_include_directories(
  test_cpp_rpc PRIVATE
  $<BUILD_INTERFACE:${TORCH_SRC_DIR}/csrc/distributed>)
target_link_libraries(test_cpp_rpc PRIVATE ${TORCH_RPC_TEST_DEPENDENCY_LIBS})

if(USE_CUDA)
  target_link_libraries(test_cpp_rpc PRIVATE
    ${CUDA_LIBRARIES}
    ${CUDA_NVRTC_LIB}
    ${CUDA_CUDA_LIB}
    ${TORCH_CUDA_LIBRARIES})

  target_compile_definitions(test_cpp_rpc PRIVATE "USE_CUDA")
endif()

if(INSTALL_TEST)
  install(TARGETS test_cpp_rpc DESTINATION bin)
  # Install PDB files for MSVC builds
  if(MSVC AND BUILD_SHARED_LIBS)
    install(FILES $<TARGET_PDB_FILE:test_cpp_rpc> DESTINATION bin OPTIONAL)
  endif()
endif()
