Fix delay loading of drm by soname.
Šī revīzija ir iekļauta:
revīziju iesūtīja
Arif, Maisam
vecāks
62e4329559
revīzija
4d5d24d1c6
+46
-3
@@ -116,11 +116,49 @@ set(CPACK_PACKAGE_CONTACT "AMD-SMILib Support <amd-smi.support@amd.com>" CACHE S
|
||||
|
||||
generic_package()
|
||||
|
||||
## Dependencies
|
||||
# Dependencies
|
||||
find_package(Threads REQUIRED)
|
||||
pkg_check_modules(DRM REQUIRED IMPORTED_TARGET libdrm)
|
||||
pkg_check_modules(DRM_AMDGPU REQUIRED IMPORTED_TARGET libdrm_amdgpu)
|
||||
|
||||
# Configuration
|
||||
function(get_imported_soname target out_var)
|
||||
get_target_property(link_libs ${target} INTERFACE_LINK_LIBRARIES)
|
||||
set(result)
|
||||
foreach(link_lib ${link_libs})
|
||||
if(result)
|
||||
message(FATAL_ERROR "Target ${target} has multiple link libraries: ${link_libs}")
|
||||
endif()
|
||||
execute_process(
|
||||
COMMAND objdump -p "${link_lib}"
|
||||
OUTPUT_VARIABLE OBJDUMP_OUTPUT
|
||||
RESULT_VARIABLE OBJDUMP_RESULT
|
||||
)
|
||||
if(OBJDUMP_RESULT EQUAL 0)
|
||||
string(REGEX MATCH "SONAME +([^ \n]+)" SONAME_MATCH "${OBJDUMP_OUTPUT}")
|
||||
if(SONAME_MATCH)
|
||||
set(SONAME_OF_MY_PKG "${CMAKE_MATCH_1}")
|
||||
message(STATUS "SONAME of my_package_name: ${SONAME_OF_MY_PKG}")
|
||||
else()
|
||||
message(FATAL_ERROR "Could not find SONAME in objdump output for ${link_lib}")
|
||||
endif()
|
||||
set(result "${SONAME_OF_MY_PKG}")
|
||||
else()
|
||||
message(FATAL_ERROR "objdump failed for ${link_lib}")
|
||||
endif()
|
||||
endforeach()
|
||||
if(NOT result)
|
||||
message(FATAL_ERROR "Could not find SONAME for target ${target} libs: ${link_libs}")
|
||||
endif()
|
||||
set("${out_var}" "${result}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
get_imported_soname(PkgConfig::DRM_AMDGPU LIBDRM_AMDGPU_SONAME)
|
||||
configure_file(
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/config/amd_smi_config.h.in"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/include/config/amd_smi_config.h"
|
||||
@ONLY
|
||||
)
|
||||
|
||||
## Compiler flags
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -fno-rtti")
|
||||
@@ -190,8 +228,13 @@ if(ENABLE_ESMI_LIB)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-write-strings")
|
||||
endif()
|
||||
|
||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR}/third_party/shared_mutex
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include/amd_smi ${ESMI_INC_DIR})
|
||||
include_directories(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include
|
||||
${CMAKE_CURRENT_BINARY_DIR}/include
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/third_party/shared_mutex
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include/amd_smi
|
||||
${ESMI_INC_DIR}
|
||||
)
|
||||
|
||||
set(CMN_SRC_LIST
|
||||
"${ROCM_SRC_DIR}/rocm_smi_device.cc"
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
// Copyright Advanced Micro Devices, Inc.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
#define LIBDRM_AMDGPU_SONAME "@LIBDRM_AMDGPU_SONAME@"
|
||||
@@ -47,13 +47,15 @@ configure_file("src/${ROCM_SMI_TARGET}Config.in"
|
||||
add_library(${ROCM_SMI_TARGET} ${CMN_SRC_LIST} ${CMN_INC_LIST})
|
||||
target_link_libraries(${ROCM_SMI_TARGET} PRIVATE
|
||||
rt
|
||||
PkgConfig::DRM
|
||||
PkgConfig::DRM_AMDGPU
|
||||
Threads::Threads
|
||||
${CMAKE_DL_LIBS}
|
||||
)
|
||||
target_include_directories(${ROCM_SMI_TARGET} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${PROJECT_SOURCE_DIR}/common/shared_mutex)
|
||||
target_include_directories(${ROCM_SMI_TARGET} PRIVATE
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${PROJECT_SOURCE_DIR}/common/shared_mutex
|
||||
${DRM_INCLUDE_DIRS}
|
||||
${DRM_AMDGPU_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
# use the target_include_directories() command to specify the include directories for the target
|
||||
target_include_directories(${ROCM_SMI_TARGET} PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>"
|
||||
|
||||
@@ -80,13 +80,17 @@ message("SOVERSION: ${SO_VERSION_STRING}")
|
||||
add_library(${AMD_SMI} ${SRC_LIST} ${INC_LIST})
|
||||
target_link_libraries(${AMD_SMI} PRIVATE
|
||||
rt
|
||||
PkgConfig::DRM
|
||||
PkgConfig::DRM_AMDGPU
|
||||
Threads::Threads
|
||||
${CMAKE_DL_LIBS}
|
||||
)
|
||||
target_include_directories(${AMD_SMI} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}/rocm_smi/include
|
||||
${PROJECT_SOURCE_DIR}/common/shared_mutex ${ACA_INC_DIR})
|
||||
target_include_directories(${AMD_SMI} PRIVATE
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${PROJECT_SOURCE_DIR}/rocm_smi/include
|
||||
${PROJECT_SOURCE_DIR}/common/shared_mutex
|
||||
${ACA_INC_DIR}
|
||||
${DRM_INCLUDE_DIRS}
|
||||
${DRM_AMDGPU_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
# use the target_include_directories() command to specify the include directories for the target
|
||||
target_include_directories(${AMD_SMI} PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>"
|
||||
|
||||
@@ -45,6 +45,7 @@
|
||||
#include <regex>
|
||||
#include <sstream>
|
||||
|
||||
#include "config/amd_smi_config.h"
|
||||
#include "amd_smi/impl/amd_smi_utils.h"
|
||||
#include "amd_smi/impl/amd_smi_system.h"
|
||||
#include "shared_mutex.h" // NOLINT
|
||||
@@ -680,7 +681,7 @@ amdsmi_status_t smi_amdgpu_get_market_name_from_dev_id(amd::smi::AMDSmiGPUDevice
|
||||
}
|
||||
|
||||
amd::smi::AMDSmiLibraryLoader libdrm_amdgpu_;
|
||||
amdsmi_status_t status = libdrm_amdgpu_.load("libdrm_amdgpu.so");
|
||||
amdsmi_status_t status = libdrm_amdgpu_.load(LIBDRM_AMDGPU_SONAME);
|
||||
if (status != AMDSMI_STATUS_SUCCESS) {
|
||||
libdrm_amdgpu_.unload();
|
||||
return status;
|
||||
|
||||
Atsaukties uz šo jaunā problēmā
Block a user