diff --git a/CMakeLists.txt b/CMakeLists.txt index 5cad41a4a1..b00610852b 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -150,7 +150,7 @@ if(BUILD_STANDALONE) message("protoc cmd:") message(" $ ${PROTOB_CMD} --proto_path=${PROTOB_SRC_DIR}") message(" --grpc_out=${PROTOB_OUT_DIR}") - message("....--plugin=\"${GRPC_PLUGIN}\" ${file}") + message("....--plugin=protoc-gen-grpc=\"${GRPC_PLUGIN}\" ${file}") execute_process(COMMAND ${PROTOB_CMD} --proto_path=${PROTOB_SRC_DIR} @@ -177,9 +177,19 @@ set(CLIENT_COMPONENT "client") # Standalone only folders if(BUILD_STANDALONE) install(DIRECTORY ${GRPC_ROOT}/lib - USE_SOURCE_PERMISSIONS - DESTINATION usr - FILES_MATCHING PATTERN "libgrpc*") + USE_SOURCE_PERMISSIONS + DESTINATION ${RDC_CLIENT_INSTALL_PREFIX}/${RDC}/grpc + COMPONENT ${SERVER_COMPONENT}) +# Also include dev setup for people do not want to build grpc + install(DIRECTORY ${GRPC_ROOT}/bin + USE_SOURCE_PERMISSIONS + DESTINATION ${RDC_CLIENT_INSTALL_PREFIX}/${RDC}/grpc + COMPONENT ${SERVER_COMPONENT}) + + install(DIRECTORY ${GRPC_ROOT}/include + USE_SOURCE_PERMISSIONS + DESTINATION ${RDC_CLIENT_INSTALL_PREFIX}/${RDC}/grpc + COMPONENT ${SERVER_COMPONENT}) add_subdirectory("server") add_subdirectory("client") diff --git a/rdc_libs/CMakeLists.txt b/rdc_libs/CMakeLists.txt index 860a88c881..bd25292c27 100755 --- a/rdc_libs/CMakeLists.txt +++ b/rdc_libs/CMakeLists.txt @@ -65,6 +65,15 @@ set(SRC_DIR "${PROJECT_SOURCE_DIR}/rdc_libs") set(RDC_LIB_INC_DIR "${PROJECT_SOURCE_DIR}/include") set(COMMON_DIR "${PROJECT_SOURCE_DIR}/common") +## 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 (LIB_RUNPATH "\$ORIGIN/../lib:\$ORIGIN/../lib64") + 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. diff --git a/rdci/CMakeLists.txt b/rdci/CMakeLists.txt index d298b1562e..e76ad2c646 100644 --- a/rdci/CMakeLists.txt +++ b/rdci/CMakeLists.txt @@ -85,19 +85,29 @@ set(RDCI_SRC_LIST ${RDCI_SRC_LIST} message("RDCI_SRC_LIST=${RDCI_SRC_LIST}") set(RDCI_EXE "rdci") -link_directories(${LIB_BOOSTRAP_DIR}) +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 -set(RDC_RUNPATH "\$ORIGIN:\$ORIGIN/../lib:\$ORIGIN/../lib64") -set(GRPC_RUNPATH "\$ORIGIN/../../grpc/lib:\$ORIGIN/../../grpc/lib64") -set(CMAKE_EXE_LINKER_FLAGS "-Wl,--enable-new-dtags -Wl,--rpath,${RDC_RUNPATH}:${GRPC_RUNPATH}") -set(CMAKE_SKIP_BUILD_RPATH TRUE) -set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) -set(CMAKE_SKIP_RPATH TRUE) +if (DEFINED ENV{ROCM_RPATH}) + set(RDC_RUNPATH "\$ORIGIN:\$ORIGIN/../lib:\$ORIGIN/../lib64") + set(GRPC_RUNPATH "\$ORIGIN/../grpc/lib:\$ORIGIN/../grpc/lib64") + set(CMAKE_EXE_LINKER_FLAGS "-Wl,--enable-new-dtags -Wl,--rpath,${RDC_RUNPATH}:${GRPC_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) -target_link_libraries(${RDCI_EXE} pthread dl rdc_bootstrap) + # Run path can only include direct refer library, here is the indirect libs + # required by gRPC + set (RDCD_EXTRA_LIB absl_str_format_internal absl_strings absl_throw_delegate + absl_bad_optional_access absl_strings absl_throw_delegate absl_int128 + absl_strings_internal absl_raw_logging_internal address_sorting + gpr upb ssl crypto ) + +endif() + +target_link_libraries(${RDCI_EXE} ${RDCD_EXTRA_LIB} pthread dl rdc_bootstrap) ## Add the install directives for the rdci executable diff --git a/server/CMakeLists.txt b/server/CMakeLists.txt index 5f0e8be5db..e770a4e781 100755 --- a/server/CMakeLists.txt +++ b/server/CMakeLists.txt @@ -89,17 +89,24 @@ 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 (GRPC_RUNPATH "\$ORIGIN/../../grpc/lib:\$ORIGIN/../../grpc/lib64") - set (CMAKE_EXE_LINKER_FLAGS "-Wl,--enable-new-dtags") - set (CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_RPATH}:${GRPC_RUNPATH}") - set (CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) - set (CMAKE_SKIP_BUILD_RPATH TRUE) -endif () + set (GRPC_RUNPATH "\$ORIGIN/../lib:\$ORIGIN/../grpc/lib:\$ORIGIN/../grpc/lib64") + set (CMAKE_EXE_LINKER_FLAGS "-Wl,--enable-new-dtags -Wl,--no-as-needed -Wl,-z,origin") + set (CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_RPATH}:${GRPC_RUNPATH}") + set (CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) + set (CMAKE_SKIP_BUILD_RPATH TRUE) + + # Run path can only include direct refer library, here is the indirect libs + # required by gRPC + set (RDCD_EXTRA_LIB absl_str_format_internal absl_strings absl_throw_delegate + absl_bad_optional_access absl_strings absl_throw_delegate absl_int128 + absl_strings_internal absl_raw_logging_internal address_sorting + gpr upb ssl crypto) +endif() add_executable(${SERVER_DAEMON_EXE} "${SERVER_SRC_LIST}") # target_include_directories(${SERVER_DAEMON_EXE} PUBLIC ${RSMI_INC_DIR}) -target_link_libraries(${SERVER_DAEMON_EXE} pthread rt grpc grpc++ +target_link_libraries(${SERVER_DAEMON_EXE} ${RDCD_EXTRA_LIB} pthread rt grpc grpc++ cap grpc++_reflection dl protobuf rocm_smi64 rdc_bootstrap) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${SERVER_DAEMON_EXE}