SWDEV-352414 - Fix gRPC linker issues

- Replace gRPC library with gRPC package
- Relax RUNPATH
- Make LINKER_FLAGS global

gRPC package includes its dependencies:
SSL, UPB, ABSL, and etc.

Change-Id: Ieb198ad96e26e89b09cb85986214a5b1451b17a6
Signed-off-by: Galantsev, Dmitrii <dmitrii.galantsev@amd.com>


[ROCm/rdc commit: 3e4c55ec6c]
This commit is contained in:
Galantsev, Dmitrii
2023-01-04 14:05:22 -06:00
parent eccb4e202c
commit 5c803f6b03
6 changed files with 32 additions and 56 deletions
+26 -5
View File
@@ -75,12 +75,33 @@ include(GNUInstallDirs)
# ROCM_DIR should be passed in via command line; it will be used
# in sub-projects. Override with -DROCM_DIR=
set(ROCM_DIR "/opt/rocm" CACHE STRING "ROCm directory.")
# LIB_RUNPATH is later used for linking
# Only populate RUNPATH if ROCM_RPATH env variable is set
# Mostly makes sense in ROCm build scripts context
#
# Best attempt at finding libraries without modifying LD_LIBRARY_PATH
#
# Reasons for some $ORIGIN paths:
# $ORIGIN
# - rocm/lib/librdc.so needs rocm/lib/librocm_smi64.so
# $ORIGIN/..
# - rocm/lib/rdc/librdc_rocp.so needs rocm/lib/rdc/../librdc_bootstrap.so
# $ORIGIN/../lib
# - rocm/bin/rdci needs rocm/lib/../lib/librdc_bootstrap.so.0
# - rocm/bin/rdcd needs rocm/lib/../lib/librdc_bootstrap.so.0
# $ORIGIN/../lib/rdc/grpc/lib
# - rocm/lib/librdc_client.so needs rocm/lib/../lib/rdc/grpc/lib/libgrpc++.so
# All other versions are for inconsistencies between systems and custom installation paths
if(DEFINED ENV{ROCM_RPATH})
set(RDC_RUNPATH "\$ORIGIN:\$ORIGIN/../lib:\$ORIGIN/../lib64:\$ORIGIN/../lib/rdc:\$ORIGIN/../lib64/rdc")
set(GRPC_RUNPATH "\$ORIGIN/../grpc/lib:\$ORIGIN/../lib/grpc/lib:\$ORIGIN/../lib/rdc/grpc/lib:\$ORIGIN/../lib64/rdc/grpc/lib")
set(GRPC_RUNPATH64 "\$ORIGIN/../grpc/lib64:\$ORIGIN/../lib/grpc/lib64:\$ORIGIN/../lib/rdc/grpc/lib64:\$ORIGIN/../lib64/rdc/grpc/lib64")
set(LIB_RUNPATH "${RDC_RUNPATH}:${GRPC_RUNPATH}:${GRPC_RUNPATH64}")
set(RDC_RUNPATH "\$ORIGIN:\$ORIGIN/..:\$ORIGIN/../lib:\$ORIGIN/../lib64")
set(GRPC_RUNPATH "\$ORIGIN/grpc/lib:\$ORIGIN/../grpc/lib:\$ORIGIN/../lib/grpc/lib:\$ORIGIN/../lib/rdc/grpc/lib:\$ORIGIN/../lib64/rdc/grpc/lib")
set(GRPC_RUNPATH64 "\$ORIGIN/grpc/lib64:\$ORIGIN/../grpc/lib64:\$ORIGIN/../lib/grpc/lib64:\$ORIGIN/../lib/rdc/grpc/lib64:\$ORIGIN/../lib64/rdc/grpc/lib64")
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_RPATH}:${RDC_RUNPATH}:${GRPC_RUNPATH}:${GRPC_RUNPATH64}")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--enable-new-dtags -Wl,--no-as-needed -Wl,-z,origin")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--enable-new-dtags -Wl,--no-as-needed -Wl,-z,origin")
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
set(CMAKE_SKIP_BUILD_RPATH TRUE)
endif()
set(COMMON_DIR "${CMAKE_CURRENT_SOURCE_DIR}/common")
+2 -12
View File
@@ -62,15 +62,6 @@ set(RDC_ROCR_LIB "rdc_rocr")
set(RDC_ROCP_LIB "rdc_rocp")
set(RDCCLIENT_LIB "rdc_client")
## Set RUNPATH if ROCM_RPATH is defined and passed by the environment
## RUNPATH should help to run "rdcd" without the usage of ldconfig
if(DEFINED ENV{ROCM_RPATH})
set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--enable-new-dtags -Wl,--no-as-needed -Wl,-z,origin")
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_RPATH}:${LIB_RUNPATH}")
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
set(CMAKE_SKIP_BUILD_RPATH TRUE)
endif()
################# Determine the library version #########################
## Setup the SO version based on git tags.
set(SO_VERSION_GIT_TAG_PREFIX "rdc_so_ver")
@@ -90,9 +81,8 @@ set(CPACK_PACKAGE_FILE_NAME "${RDC_PACKAGE}-${VERSION_STRING}")
set(CPACK_DEBIAN_PACKAGE_DEPENDS "rocm-core")
set(CPACK_RPM_PACKAGE_REQUIRES "rocm-core")
# link grpc and ROCm to RSMI
#link_directories(${RSMI_LIB_DIR} "${GRPC_ROOT}/lib" "${GRPC_ROOT}/lib64" "${ROCM_DIR}/lib")
link_directories(${RSMI_LIB_DIR} "${GRPC_ROOT}/lib" "${GRPC_ROOT}/lib64")
# link RSMI
link_directories(${RSMI_LIB_DIR})
# add librdc_bootstrap.so
add_subdirectory(bootstrap)
@@ -21,8 +21,7 @@ set(RDCCLIENT_LIB_INC_LIST "${PROJECT_SOURCE_DIR}/include/rdc/rdc.h"
message("RDCCLIENT_LIB_INC_LIST=${RDCCLIENT_LIB_INC_LIST}")
add_library(${RDCCLIENT_LIB} SHARED ${RDCCLIENT_LIB_SRC_LIST} ${RDCCLIENT_LIB_INC_LIST})
target_link_libraries(${RDCCLIENT_LIB} ${BOOTSTRAP_LIB} pthread rt grpc grpc++ grpc++_reflection
dl protobuf)
target_link_libraries(${RDCCLIENT_LIB} ${BOOTSTRAP_LIB} pthread rt gRPC::grpc++ dl)
target_include_directories(${RDCCLIENT_LIB} PRIVATE
"${GRPC_ROOT}/include"
"${PROJECT_SOURCE_DIR}"
+1 -16
View File
@@ -53,7 +53,6 @@ endif()
set(SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src")
set(INC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include")
set(LIB_BOOSTRAP_DIR "${PROJECT_BINARY_DIR}/rdc_libs")
include_directories(${INC_DIR} ${PROJECT_SOURCE_DIR}/include
"${GRPC_ROOT}/include"
@@ -73,23 +72,9 @@ set(RDCI_SRC_LIST
message("RDCI_SRC_LIST=${RDCI_SRC_LIST}")
set(RDCI_EXE "rdci")
link_directories(${LIB_BOOSTRAP_DIR} "${GRPC_ROOT}/lib" "${GRPC_ROOT}/lib64")
add_executable(${RDCI_EXE} "${RDCI_SRC_LIST}")
## RUNPATH should help to run "rdci" without the usage of ldconfig
if(DEFINED ENV{ROCM_RPATH})
set(CMAKE_EXE_LINKER_FLAGS "-Wl,--enable-new-dtags -Wl,--rpath,${LIB_RUNPATH} -Wl,--no-as-needed -Wl,-z,origin")
set(CMAKE_SKIP_BUILD_RPATH TRUE)
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
set(CMAKE_SKIP_RPATH TRUE)
# Set other library
set(RDCD_EXTRA_LIB ${RDCD_EXTRA_LIB} address_sorting gpr upb ssl crypto
gRPC::grpc++)
endif()
target_link_libraries(${RDCI_EXE} ${RDCD_EXTRA_LIB} pthread dl rdc_bootstrap)
target_link_libraries(${RDCI_EXE} pthread dl rdc_bootstrap gRPC::grpc++)
## Add the install directives for the rdci executable
+2 -14
View File
@@ -76,24 +76,12 @@ set(SERVER_DAEMON_EXE "rdcd")
configure_file("rdc.service.in" "${PROJECT_BINARY_DIR}/rdc.service" @ONLY)
set(SERVICE_FILE_NAME "rdc.service")
link_directories(${RSMI_LIB_DIR} "${GRPC_ROOT}/lib" "${GRPC_ROOT}/lib64")
## Set RUNPATH if ROCM_RPATH is defined and passed by the environment
## RUNPATH should help to run "rdcd" without the usage of ldconfig
if(DEFINED ENV{ROCM_RPATH})
set(CMAKE_EXE_LINKER_FLAGS "-Wl,--enable-new-dtags -Wl,--no-as-needed -Wl,-z,origin")
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_RPATH}:${LIB_RUNPATH}")
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
set(CMAKE_SKIP_BUILD_RPATH TRUE)
# Set other library
set(RDCD_EXTRA_LIB ${RDCD_EXTRA_LIB} address_sorting gpr upb ssl crypto)
endif()
link_directories(${RSMI_LIB_DIR})
add_executable(${SERVER_DAEMON_EXE} "${SERVER_SRC_LIST}")
target_link_libraries(${SERVER_DAEMON_EXE} pthread rt gRPC::grpc++
cap dl rocm_smi64 rdc_bootstrap ${RDCD_EXTRA_LIB})
cap dl rocm_smi64 rdc_bootstrap)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${SERVER_DAEMON_EXE}
PERMISSIONS OWNER_EXECUTE OWNER_READ OWNER_WRITE GROUP_READ
@@ -51,13 +51,6 @@ if(NOT GTest_FOUND STREQUAL "TRUE" OR NOT DEFINED GTest_VERSION)
FetchContent_MakeAvailable(googletest)
endif()
if(DEFINED ENV{ROCM_RPATH})
set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--enable-new-dtags -Wl,--no-as-needed -Wl,-z,origin")
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_RPATH}:${LIB_RUNPATH}")
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
set(CMAKE_SKIP_BUILD_RPATH TRUE)
endif()
# Source files
aux_source_directory(${SRC_DIR} rdctstSources)