Set RUNPATH so installed tests can find the required shared libraries (#136627)

This change fixes the RUNPATH of installed c++ tests so that the linker can find the shared libraries they depend on.

For example, currently:
```bash
venv/lib/python3.10/site-packages/torch $ ./bin/test_lazy
./bin/test_lazy: error while loading shared libraries: libtorch.so: cannot open shared object file: No such file or directory
```

Pull Request resolved: https://github.com/pytorch/pytorch/pull/136627
Approved by: https://github.com/malfet
This commit is contained in:
Mwiza Kunda
2024-10-25 09:38:08 +00:00
committed by PyTorch MergeBot
parent 86d4b7d60b
commit 22d2e2d9a0
11 changed files with 41 additions and 28 deletions

View File

@ -8,6 +8,7 @@ if(BUILD_TEST)
add_executable(${bench_name} "${bench_src}")
target_link_libraries(${bench_name} ${C10_LIB} benchmark)
if(INSTALL_TEST)
set_target_properties(${bench_name} PROPERTIES INSTALL_RPATH "${CMAKE_INSTALL_RPATH}:${_rpath_portable_origin}/../lib")
install(TARGETS ${bench_name} DESTINATION test)
endif()
endforeach()

View File

@ -12,6 +12,7 @@ if(BUILD_TEST)
target_link_libraries(${test_name} ${C10_LIB} gmock gtest gtest_main)
add_test(NAME ${test_name} COMMAND $<TARGET_FILE:${test_name}>)
if(INSTALL_TEST)
set_target_properties(${test_name} PROPERTIES INSTALL_RPATH "${CMAKE_INSTALL_RPATH}:${_rpath_portable_origin}/../lib")
install(TARGETS ${test_name} DESTINATION test)
endif()
endforeach()

View File

@ -1748,6 +1748,7 @@ if(BUILD_TEST)
target_include_directories(${test_name} PRIVATE ${Caffe2_CPU_INCLUDE})
add_test(NAME ${test_name} COMMAND $<TARGET_FILE:${test_name}>)
if(INSTALL_TEST)
set_target_properties(${test_name} PROPERTIES INSTALL_RPATH "${CMAKE_INSTALL_RPATH}:${_rpath_portable_origin}/../lib")
install(TARGETS ${test_name} DESTINATION test)
# Install PDB files for MSVC builds
if(MSVC AND BUILD_SHARED_LIBS)
@ -1768,6 +1769,7 @@ if(BUILD_TEST)
target_include_directories(${test_name} PRIVATE ${Caffe2_CPU_INCLUDE})
add_test(NAME ${test_name} COMMAND $<TARGET_FILE:${test_name}>)
if(INSTALL_TEST)
set_target_properties(${test_name} PROPERTIES INSTALL_RPATH "${CMAKE_INSTALL_RPATH}:${_rpath_portable_origin}/../lib")
install(TARGETS ${test_name} DESTINATION test)
# Install PDB files for MSVC builds
if(MSVC AND BUILD_SHARED_LIBS)
@ -1789,6 +1791,7 @@ if(BUILD_TEST)
target_include_directories(${test_name} PRIVATE ${Caffe2_CPU_INCLUDE})
add_test(NAME ${test_name} COMMAND $<TARGET_FILE:${test_name}>)
if(INSTALL_TEST)
set_target_properties(${test_name} PROPERTIES INSTALL_RPATH "${CMAKE_INSTALL_RPATH}:${_rpath_portable_origin}/../lib")
install(TARGETS ${test_name} DESTINATION test)
# Install PDB files for MSVC builds
if(MSVC AND BUILD_SHARED_LIBS)
@ -1810,6 +1813,7 @@ if(BUILD_TEST)
target_include_directories(${test_name} PRIVATE ${Caffe2_CPU_INCLUDE})
add_test(NAME ${test_name} COMMAND $<TARGET_FILE:${test_name}>)
if(INSTALL_TEST)
set_target_properties(${test_name} PROPERTIES INSTALL_RPATH "${CMAKE_INSTALL_RPATH}:${_rpath_portable_origin}/../lib")
install(TARGETS ${test_name} DESTINATION test)
endif()
endforeach()
@ -1824,6 +1828,7 @@ if(BUILD_TEST)
target_include_directories(${test_name} PRIVATE ${Caffe2_CPU_INCLUDE})
add_test(NAME ${test_name} COMMAND $<TARGET_FILE:${test_name}>)
if(INSTALL_TEST)
set_target_properties(${test_name} PROPERTIES INSTALL_RPATH "${CMAKE_INSTALL_RPATH}:${_rpath_portable_origin}/../lib")
install(TARGETS ${test_name} DESTINATION test)
# Install PDB files for MSVC builds
if(MSVC AND BUILD_SHARED_LIBS)
@ -1843,6 +1848,7 @@ if(BUILD_TEST)
target_compile_options(${test_name} PRIVATE ${HIP_CXX_FLAGS})
add_test(NAME ${test_name} COMMAND $<TARGET_FILE:${test_name}>)
if(INSTALL_TEST)
set_target_properties(${test_name} PROPERTIES INSTALL_RPATH "${CMAKE_INSTALL_RPATH}:${_rpath_portable_origin}/../lib")
install(TARGETS ${test_name} DESTINATION test)
endif()
endforeach()

View File

@ -73,6 +73,7 @@ if(NOT MSVC)
endif()
if(INSTALL_TEST)
set_target_properties(test_api PROPERTIES INSTALL_RPATH "${CMAKE_INSTALL_RPATH}:${_rpath_portable_origin}/../lib")
install(TARGETS test_api DESTINATION bin)
# Install PDB files for MSVC builds
if(MSVC AND BUILD_SHARED_LIBS)

View File

@ -6,37 +6,40 @@ if(USE_CUDA)
endif()
function(c10d_add_test test_src)
set(prefix ARG)
set(noValues)
set(singleValues INSTALL_TEST)
set(multiValues LINK_LIBRARIES)
include(CMakeParseArguments)
cmake_parse_arguments(${prefix} "${noValues}" "${singleValues}" "${multiValues}" ${ARGN})
get_filename_component(test_name ${test_src} NAME_WE)
add_executable(${test_name} "${test_src}")
target_include_directories(${test_name} PRIVATE $<BUILD_INTERFACE:${TORCH_SRC_DIR}/csrc/distributed>)
target_link_libraries(${test_name} ${ARGN})
target_link_libraries(${test_name} ${ARG_LINK_LIBRARIES})
if(NOT WIN32)
target_link_libraries(${test_name} pthread)
endif()
add_test(NAME ${test_name} COMMAND $<TARGET_FILE:${test_name}>)
if(ARG_INSTALL_TEST)
set_target_properties(${test_name} PROPERTIES INSTALL_RPATH "${CMAKE_INSTALL_RPATH}:${_rpath_portable_origin}/../lib")
install(TARGETS ${test_name} DESTINATION bin)
endif()
endfunction()
c10d_add_test(BackoffTest.cpp torch_cpu gtest_main)
c10d_add_test(FileStoreTest.cpp torch_cpu gtest_main)
c10d_add_test(TCPStoreTest.cpp torch_cpu gtest_main)
if(INSTALL_TEST)
install(TARGETS FileStoreTest DESTINATION bin)
install(TARGETS TCPStoreTest DESTINATION bin)
endif()
c10d_add_test(BackoffTest.cpp LINK_LIBRARIES torch_cpu gtest_main INSTALL_TEST OFF)
c10d_add_test(FileStoreTest.cpp LINK_LIBRARIES torch_cpu gtest_main INSTALL_TEST ${INSTALL_TEST})
c10d_add_test(TCPStoreTest.cpp LINK_LIBRARIES torch_cpu gtest_main INSTALL_TEST ${INSTALL_TEST})
if(NOT WIN32)
c10d_add_test(HashStoreTest.cpp torch_cpu gtest_main)
if(INSTALL_TEST)
install(TARGETS HashStoreTest DESTINATION bin)
endif()
c10d_add_test(HashStoreTest.cpp LINK_LIBRARIES torch_cpu gtest_main INSTALL_TEST ${INSTALL_TEST})
endif()
if(USE_CUDA)
if(USE_GLOO AND USE_C10D_GLOO)
c10d_add_test(ProcessGroupGlooTest.cpp torch_cpu c10d_cuda_test gtest_main)
if(INSTALL_TEST)
install(TARGETS ProcessGroupGlooTest DESTINATION bin)
endif()
c10d_add_test(ProcessGroupGlooAsyncTest.cpp torch_cpu c10d_cuda_test gtest_main)
c10d_add_test(ProcessGroupGlooTest.cpp LINK_LIBRARIES torch_cpu c10d_cuda_test gtest_main INSTALL_TEST ${INSTALL_TEST})
c10d_add_test(ProcessGroupGlooAsyncTest.cpp LINK_LIBRARIES torch_cpu c10d_cuda_test gtest_main INSTALL_TEST ${INSTALL_TEST})
endif()
if(USE_NCCL AND USE_C10D_NCCL)
# NCCL is a private dependency of libtorch, but the tests include some
@ -45,13 +48,11 @@ if(USE_CUDA)
# a private dependency of the tests as well.
c10d_add_test(
ProcessGroupNCCLTest.cpp
torch_cpu c10d_cuda_test gtest_main __caffe2_nccl)
LINK_LIBRARIES torch_cpu c10d_cuda_test gtest_main __caffe2_nccl INSTALL_TEST ${INSTALL_TEST})
c10d_add_test(
ProcessGroupNCCLErrorsTest.cpp
torch_cpu c10d_cuda_test gtest_main __caffe2_nccl)
LINK_LIBRARIES torch_cpu c10d_cuda_test gtest_main __caffe2_nccl INSTALL_TEST ${INSTALL_TEST})
if(INSTALL_TEST)
install(TARGETS ProcessGroupNCCLTest DESTINATION bin)
install(TARGETS ProcessGroupNCCLErrorsTest DESTINATION bin)
install(TARGETS c10d_cuda_test DESTINATION lib)
endif()
endif()
@ -62,15 +63,14 @@ if(USE_CUDA)
# a private dependency of the tests as well.
c10d_add_test(
ProcessGroupUCCTest.cpp
torch_cpu c10d_cuda_test gtest_main __caffe2_ucc)
LINK_LIBRARIES torch_cpu c10d_cuda_test gtest_main __caffe2_ucc INSTALL_TEST ${INSTALL_TEST})
if(INSTALL_TEST)
install(TARGETS ProcessGroupUCCTest DESTINATION bin)
install(TARGETS c10d_cuda_test DESTINATION lib)
endif()
endif()
else()
if(USE_GLOO AND USE_C10D_GLOO)
c10d_add_test(ProcessGroupGlooTest.cpp torch_cpu gtest_main)
c10d_add_test(ProcessGroupGlooTest.cpp LINK_LIBRARIES torch_cpu gtest_main INSTALL_TEST OFF)
endif()
endif()
@ -80,10 +80,7 @@ if(USE_MPI AND USE_C10D_MPI)
# private headers of libtorch, which in turn include MPI. As a hacky
# alternative to making MPI a public dependency of libtorch, we make it
# a private dependency of the tests as well.
c10d_add_test(ProcessGroupMPITest.cpp torch_cpu MPI::MPI_CXX)
if(INSTALL_TEST)
install(TARGETS ProcessGroupMPITest DESTINATION bin)
endif()
c10d_add_test(ProcessGroupMPITest.cpp LINK_LIBRARIES torch_cpu MPI::MPI_CXX INSTALL_TEST ${INSTALL_TEST})
endif()
if(LINUX AND USE_GLOO AND USE_C10D_GLOO)

View File

@ -14,6 +14,7 @@ if(USE_DISTRIBUTED AND NOT WIN32)
endif()
if(INSTALL_TEST)
set_target_properties(test_dist_autograd PROPERTIES INSTALL_RPATH "${CMAKE_INSTALL_RPATH}:${_rpath_portable_origin}/../lib")
install(TARGETS test_dist_autograd DESTINATION bin)
# Install PDB files for MSVC builds
if(MSVC AND BUILD_SHARED_LIBS)

View File

@ -151,6 +151,7 @@ elseif(USE_ROCM)
endif()
if(INSTALL_TEST)
set_target_properties(test_jit PROPERTIES INSTALL_RPATH "${CMAKE_INSTALL_RPATH}:${_rpath_portable_origin}/../lib")
install(TARGETS test_jit DESTINATION bin)
# Install PDB files for MSVC builds
if(MSVC AND BUILD_SHARED_LIBS)

View File

@ -44,6 +44,7 @@ elseif(USE_ROCM)
endif()
if(INSTALL_TEST)
set_target_properties(test_lazy PROPERTIES INSTALL_RPATH "${CMAKE_INSTALL_RPATH}:${_rpath_portable_origin}/../lib")
install(TARGETS test_lazy DESTINATION bin)
# Install PDB files for MSVC builds
if(MSVC AND BUILD_SHARED_LIBS)

View File

@ -37,6 +37,7 @@ if(USE_CUDA)
endif()
if(INSTALL_TEST)
set_target_properties(test_cpp_rpc PROPERTIES INSTALL_RPATH "${CMAKE_INSTALL_RPATH}:${_rpath_portable_origin}/../lib")
install(TARGETS test_cpp_rpc DESTINATION bin)
# Install PDB files for MSVC builds
if(MSVC AND BUILD_SHARED_LIBS)

View File

@ -71,7 +71,9 @@ elseif(USE_ROCM)
endif()
if(INSTALL_TEST)
set_target_properties(test_tensorexpr PROPERTIES INSTALL_RPATH "${CMAKE_INSTALL_RPATH}:${_rpath_portable_origin}/../lib")
install(TARGETS test_tensorexpr DESTINATION bin)
set_target_properties(tutorial_tensorexpr PROPERTIES INSTALL_RPATH "${CMAKE_INSTALL_RPATH}:${_rpath_portable_origin}/../lib")
install(TARGETS tutorial_tensorexpr DESTINATION bin)
# Install PDB files for MSVC builds
if(MSVC AND BUILD_SHARED_LIBS)

View File

@ -73,5 +73,6 @@ elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU")
)
endif()
if(INSTALL_TEST)
set_target_properties(test_edge_op_registration PROPERTIES INSTALL_RPATH "${CMAKE_INSTALL_RPATH}:${_rpath_portable_origin}/../lib")
install(TARGETS test_edge_op_registration DESTINATION bin)
endif()