diff --git a/CMakeLists.txt b/CMakeLists.txt index 3bd1ce0c74..a1d3db7d5d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -176,6 +176,15 @@ if("${HIP_COMPILER}" MATCHES "clang") target_compile_options(rccl PRIVATE -parallel-jobs=4 PRIVATE -Wno-format-nonliteral) target_link_libraries(rccl PRIVATE -parallel-jobs=4) endif() + + # RCCL static lib uses -fgpu-rdc which requires hipcc as the linker and archiver + if(BUILD_STATIC) + target_link_libraries(rccl PRIVATE --emit-static-lib) + set(CMAKE_AR "${hipcc_executable}") + get_property(link_libraries TARGET rccl PROPERTY LINK_LIBRARIES) + string (REPLACE ";" " " LINK_PROPS "${link_libraries}") + set(CMAKE_CXX_ARCHIVE_CREATE " -o ${LINK_PROPS} ") + endif() endif() if("${HIP_COMPILER}" MATCHES "hcc") diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 456b13f25b..c012f32d76 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -25,7 +25,17 @@ if(BUILD_TESTS) add_executable(UnitTests ${TEST_SOURCES}) target_include_directories(UnitTests PRIVATE /opt/rocm ${GTEST_INCLUDE_DIRS}) - target_link_libraries(UnitTests PRIVATE ${GTEST_BOTH_LIBRARIES} PRIVATE rccl) + target_link_libraries(UnitTests PRIVATE ${GTEST_BOTH_LIBRARIES}) + + # UnitTests using static library of rccl requires passing rccl + # through -l and -L instead of command line input. + if(BUILD_STATIC) + add_dependencies(UnitTests rccl) + target_link_libraries(UnitTests PRIVATE dl rt numa -lrccl -L${CMAKE_BINARY_DIR}) + target_link_libraries(UnitTests PRIVATE amdhip64 amd_comgr hsa-runtime64::hsa-runtime64) + else() + target_link_libraries(UnitTests PRIVATE rccl) + endif() else() message("Not building unit tests") endif()