Fix delay loading of drm by soname.

Šī revīzija ir iekļauta:
Stella Laurenzo
2025-09-24 16:42:04 -07:00
revīziju iesūtīja Arif, Maisam
vecāks 62e4329559
revīzija 4d5d24d1c6
5 mainīti faili ar 66 papildinājumiem un 12 dzēšanām
+46 -3
Parādīt failu
@@ -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"
+4
Parādīt failu
@@ -0,0 +1,4 @@
// Copyright Advanced Micro Devices, Inc.
// SPDX-License-Identifier: MIT
#define LIBDRM_AMDGPU_SONAME "@LIBDRM_AMDGPU_SONAME@"
+6 -4
Parādīt failu
@@ -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>"
+8 -4
Parādīt failu
@@ -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>"
+2 -1
Parādīt failu
@@ -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;