3bed2b7b8f
See: https://cmake.org/cmake/help/latest/cpack_gen/deb.html#variable:CPACK_DEBIAN_PACKAGE_RECOMMENDS Change-Id: I945cbf2104d108caf0ee6e2e963ecfca9a6320e0 Signed-off-by: Galantsev, Dmitrii <dmitrii.galantsev@amd.com>
280 líneas
11 KiB
CMake
Archivo Ejecutable
280 líneas
11 KiB
CMake
Archivo Ejecutable
#
|
|
# Minimum version of cmake required
|
|
#
|
|
cmake_minimum_required(VERSION 3.11)
|
|
|
|
set(AMD_SMI "amd_smi")
|
|
set(AMD_SMI_COMPONENT "lib${AMD_SMI}")
|
|
set(AMD_SMI_TARGET "${AMD_SMI}")
|
|
set(AMD_SMI_LIB_NAME "lib${AMD_SMI_TARGET}")
|
|
set(AMD_SMI_LIBS_TARGET "amd_smi_libraries")
|
|
|
|
set(BUILD_SHARED_LIBS
|
|
ON
|
|
CACHE BOOL "Build shared library (.so) or not.")
|
|
|
|
set(CMAKE_MODULE_PATH
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/"
|
|
CACHE INTERNAL "Default module path.")
|
|
## Include common cmake modules
|
|
include(utils)
|
|
include(help_package)
|
|
find_package(PkgConfig)
|
|
|
|
generic_add_rocm()
|
|
|
|
# provide git to utilities
|
|
find_program(GIT NAMES git)
|
|
|
|
## Setup the package version based on git tags.
|
|
set(PKG_VERSION_GIT_TAG_PREFIX "amdsmi_pkg_ver")
|
|
get_package_version_number("1.0.0" ${PKG_VERSION_GIT_TAG_PREFIX} GIT)
|
|
message("Package version: ${PKG_VERSION_STR}")
|
|
set(${AMD_SMI_LIBS_TARGET}_VERSION_MAJOR "${VERSION_MAJOR}")
|
|
set(${AMD_SMI_LIBS_TARGET}_VERSION_MINOR "${VERSION_MINOR}")
|
|
set(${AMD_SMI_LIBS_TARGET}_VERSION_PATCH "0")
|
|
set(${AMD_SMI_LIBS_TARGET}_VERSION_BUILD "0")
|
|
|
|
# The following default version values should be updated as appropriate for
|
|
# ABI breaks (update MAJOR and MINOR), and ABI/API additions (update MINOR).
|
|
# Until ABI stabilizes VERSION_MAJOR will be 0. This should be over-ridden
|
|
# by git tags (through "git describe") when they are present.
|
|
set(PKG_VERSION_MAJOR 1)
|
|
set(PKG_VERSION_MINOR 0)
|
|
set(PKG_VERSION_PATCH 0)
|
|
set(PKG_VERSION_NUM_COMMIT 0)
|
|
|
|
set(AMD_SMI_PACKAGE
|
|
amd-smi-lib
|
|
CACHE STRING "")
|
|
|
|
project(${AMD_SMI_LIBS_TARGET})
|
|
|
|
include(GNUInstallDirs)
|
|
|
|
option(BUILD_TESTS "Build test suite" OFF)
|
|
option(ENABLE_LDCONFIG "Set library links and caches using ldconfig." ON)
|
|
|
|
# Set share path here because project name != amd_smi
|
|
set(SHARE_INSTALL_PREFIX "share/${AMD_SMI}" CACHE STRING "Tests and Example install directory")
|
|
# Packaging directives
|
|
set(CPACK_PACKAGE_NAME
|
|
${AMD_SMI_PACKAGE}
|
|
CACHE STRING "")
|
|
set(CPACK_PACKAGE_CONTACT
|
|
"AMD-SMILib Support <amd-smi.support@amd.com>"
|
|
CACHE STRING "")
|
|
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY
|
|
"AMD System Management libraries"
|
|
CACHE STRING "")
|
|
|
|
generic_package()
|
|
|
|
## Compiler flags
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -fno-rtti -m64 -msse -msse2 -std=c++11")
|
|
# Security options
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wconversion -Wcast-align")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wformat=2 -fno-common -Wstrict-overflow")
|
|
# Intentionally leave out -Wsign-promo. It causes spurious warnings.
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Woverloaded-virtual -Wreorder")
|
|
|
|
set(COMMON_SRC_DIR "${PROJECT_SOURCE_DIR}/src")
|
|
set(ROCM_SRC_DIR "${PROJECT_SOURCE_DIR}/rocm_smi/src")
|
|
set(AMDSMI_SRC_DIR "${PROJECT_SOURCE_DIR}/src/amd_smi")
|
|
set(COMMON_INC_DIR "${PROJECT_SOURCE_DIR}/include/amd_smi")
|
|
set(AMDSMI_INC_DIR "${PROJECT_SOURCE_DIR}/include/amd_smi")
|
|
set(ROCM_INC_DIR "${PROJECT_SOURCE_DIR}/rocm_smi/include/rocm_smi")
|
|
set(SHR_MUTEX_DIR "${PROJECT_SOURCE_DIR}/third_party/shared_mutex")
|
|
|
|
pkg_check_modules(DRM REQUIRED libdrm)
|
|
pkg_check_modules(AMDGPU_DRM REQUIRED libdrm_amdgpu)
|
|
|
|
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR}/third_party/shared_mutex
|
|
${CMAKE_CURRENT_SOURCE_DIR}/include/amd_smi ${DRM_INCLUDE_DIRS})
|
|
|
|
set(CMN_SRC_LIST
|
|
"${ROCM_SRC_DIR}/rocm_smi.cc"
|
|
"${ROCM_SRC_DIR}/rocm_smi_counters.cc"
|
|
"${ROCM_SRC_DIR}/rocm_smi_device.cc"
|
|
"${ROCM_SRC_DIR}/rocm_smi_gpu_metrics.cc"
|
|
"${ROCM_SRC_DIR}/rocm_smi_io_link.cc"
|
|
"${ROCM_SRC_DIR}/rocm_smi_kfd.cc"
|
|
"${ROCM_SRC_DIR}/rocm_smi_main.cc"
|
|
"${ROCM_SRC_DIR}/rocm_smi_monitor.cc"
|
|
"${ROCM_SRC_DIR}/rocm_smi_power_mon.cc"
|
|
"${ROCM_SRC_DIR}/rocm_smi_utils.cc"
|
|
"${SHR_MUTEX_DIR}/shared_mutex.cc")
|
|
|
|
set(CMN_INC_LIST
|
|
"${ROCM_INC_DIR}/rocm_smi.h"
|
|
"${ROCM_INC_DIR}/rocm_smi_common.h"
|
|
"${ROCM_INC_DIR}/rocm_smi_counters.h"
|
|
"${ROCM_INC_DIR}/rocm_smi_device.h"
|
|
"${ROCM_INC_DIR}/rocm_smi_exception.h"
|
|
"${ROCM_INC_DIR}/rocm_smi_io_link.h"
|
|
"${ROCM_INC_DIR}/rocm_smi_kfd.h"
|
|
"${ROCM_INC_DIR}/rocm_smi_main.h"
|
|
"${ROCM_INC_DIR}/rocm_smi_monitor.h"
|
|
"${ROCM_INC_DIR}/rocm_smi_power_mon.h"
|
|
"${ROCM_INC_DIR}/rocm_smi_utils.h"
|
|
"${SHR_MUTEX_DIR}/shared_mutex.h")
|
|
|
|
add_subdirectory("rocm_smi")
|
|
add_subdirectory("src")
|
|
add_subdirectory("example")
|
|
|
|
if(BUILD_TESTS)
|
|
add_subdirectory("tests/rocm_smi_test")
|
|
add_subdirectory("tests/amd_smi_test")
|
|
endif()
|
|
|
|
# Generate python_wrapper and package targets
|
|
find_program(PYTHON3 "python3")
|
|
find_program(PIP3 "pip3")
|
|
|
|
if(PYTHON3 AND PIP3)
|
|
add_custom_command(
|
|
OUTPUT clang_tools_extract
|
|
COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/amdsmi_wrapper
|
|
COMMAND pip3 download ctypeslib2==2.3.2 -d ${CMAKE_CURRENT_BINARY_DIR}/dl
|
|
COMMAND pip3 download clang==10.0.1 -d ${CMAKE_CURRENT_BINARY_DIR}/dl
|
|
COMMAND unzip -o ${CMAKE_CURRENT_BINARY_DIR}/dl/ctypeslib2-2.3.2-py3-none-any.whl -d
|
|
${CMAKE_CURRENT_BINARY_DIR}/amdsmi_wrapper
|
|
COMMAND unzip -o ${CMAKE_CURRENT_BINARY_DIR}/dl/clang-10.0.1-py3-none-any.whl -d
|
|
${CMAKE_CURRENT_BINARY_DIR}/amdsmi_wrapper
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
|
|
|
|
add_custom_target(
|
|
python_wrapper
|
|
DEPENDS clang_tools_extract
|
|
COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/amdsmi_wrapper
|
|
COMMAND cp -r ${CMAKE_CURRENT_SOURCE_DIR}/include/amd_smi/amdsmi.h ${CMAKE_CURRENT_BINARY_DIR}/amdsmi_wrapper
|
|
COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/amdsmi_wrapper/amd_smi
|
|
COMMAND cp ${CMAKE_CURRENT_SOURCE_DIR}/rocm_smi/include/rocm_smi/kfd_ioctl.h
|
|
${CMAKE_CURRENT_BINARY_DIR}/amdsmi_wrapper/amd_smi/
|
|
COMMAND cp ${CMAKE_CURRENT_SOURCE_DIR}/tools/generator.py ${CMAKE_CURRENT_BINARY_DIR}/amdsmi_wrapper/
|
|
COMMAND
|
|
python3 ${CMAKE_CURRENT_BINARY_DIR}/amdsmi_wrapper/generator.py -o ${CMAKE_CURRENT_BINARY_DIR}/amdsmi_wrapper/amdsmi_wrapper.py
|
|
-i ${CMAKE_CURRENT_BINARY_DIR}/amdsmi_wrapper/amdsmi.h -l ${CMAKE_CURRENT_BINARY_DIR}/src/libamd_smi.so
|
|
COMMAND cp ${CMAKE_CURRENT_BINARY_DIR}/amdsmi_wrapper/amdsmi_wrapper.py
|
|
${CMAKE_CURRENT_SOURCE_DIR}/py-interface/
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/amdsmi_wrapper)
|
|
|
|
set(PY_INTERFACE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/py-interface")
|
|
set(PACKAGE_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/python_package/amdsmi")
|
|
|
|
add_custom_target(
|
|
python_package
|
|
DEPENDS python_wrapper
|
|
COMMAND mkdir -p ${PACKAGE_OUTPUT_DIR}
|
|
COMMAND cp ${PY_INTERFACE_DIR}/__init__.py ${PACKAGE_OUTPUT_DIR}
|
|
COMMAND cp ${PY_INTERFACE_DIR}/amdsmi_exception.py ${PACKAGE_OUTPUT_DIR}
|
|
COMMAND cp ${PY_INTERFACE_DIR}/amdsmi_interface.py ${PACKAGE_OUTPUT_DIR}
|
|
COMMAND cp ${PY_INTERFACE_DIR}/amdsmi_wrapper.py ${PACKAGE_OUTPUT_DIR}
|
|
COMMAND cp ${PY_INTERFACE_DIR}/README.md ${PACKAGE_OUTPUT_DIR}
|
|
COMMAND cp ${CMAKE_CURRENT_BINARY_DIR}/src/libamd_smi.so ${PACKAGE_OUTPUT_DIR}
|
|
COMMAND cp ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE ${PACKAGE_OUTPUT_DIR}
|
|
COMMAND echo ${PACKAGE_OUTPUT_DIR})
|
|
|
|
else()
|
|
message("Python3 or Pip3 not found.")
|
|
endif(PYTHON3 AND PIP3)
|
|
|
|
include(CMakePackageConfigHelpers)
|
|
|
|
configure_package_config_file(
|
|
amd_smi-config.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/amd_smi-config.cmake
|
|
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/amd_smi
|
|
PATH_VARS CMAKE_INSTALL_LIBDIR CMAKE_INSTALL_INCLUDEDIR CMAKE_INSTALL_BINDIR)
|
|
|
|
write_basic_package_version_file(
|
|
${CMAKE_CURRENT_BINARY_DIR}/amd_smi-config-version.cmake
|
|
VERSION
|
|
"${AMD_SMI_LIBS_TARGET_VERSION_MAJOR}.${AMD_SMI_LIBS_TARGET_VERSION_MINOR}.${AMD_SMI_LIBS_TARGET_VERSION_PATCH}"
|
|
COMPATIBILITY SameMajorVersion)
|
|
|
|
install(
|
|
FILES ${CMAKE_CURRENT_BINARY_DIR}/amd_smi-config.cmake ${CMAKE_CURRENT_BINARY_DIR}/amd_smi-config-version.cmake
|
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${AMD_SMI}
|
|
COMPONENT dev)
|
|
|
|
# Create cmake target
|
|
# Add all targets to the build-tree export set
|
|
export(TARGETS ${AMD_SMI_TARGET} FILE "${PROJECT_BINARY_DIR}/amd_smi_target.cmake")
|
|
|
|
# Export the package for use from the build-tree
|
|
# (this registers the build-tree with a global CMake-registry)
|
|
export(PACKAGE amd_smi)
|
|
# Create the amd_smiConfig.cmake and amd_smiConfigVersion files
|
|
# ... for the build tree
|
|
install(
|
|
EXPORT amd_smiTargets
|
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${AMD_SMI}
|
|
COMPONENT dev)
|
|
|
|
#License file
|
|
set(CPACK_RPM_PACKAGE_LICENSE "NCSA")
|
|
# docs are installed into different share directory from tests and examples
|
|
install(
|
|
FILES ${CPACK_RESOURCE_FILE_LICENSE}
|
|
DESTINATION share/doc/${AMD_SMI}
|
|
RENAME LICENSE.txt)
|
|
#Readme file
|
|
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/README.md DESTINATION share/doc/${AMD_SMI})
|
|
|
|
#Make proper version for appending
|
|
#Default Value is 99999, setting it first
|
|
set(ROCM_VERSION_FOR_PACKAGE "99999")
|
|
if(DEFINED ENV{ROCM_LIBPATCH_VERSION})
|
|
set(ROCM_VERSION_FOR_PACKAGE $ENV{ROCM_LIBPATCH_VERSION})
|
|
endif()
|
|
|
|
#Debian package specific variables
|
|
set(CPACK_DEBIAN_PACKAGE_PROVIDES "amd-smi")
|
|
set(CPACK_DEBIAN_PACKAGE_RECOMMENDS "sudo, libdrm-dev")
|
|
set(CPACK_DEBIAN_PACKAGE_DEPENDS "python3")
|
|
|
|
## Process the Debian install/remove scripts to update the CPACK variables
|
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/DEBIAN/postinst.in DEBIAN/postinst @ONLY)
|
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/DEBIAN/prerm.in DEBIAN/prerm @ONLY)
|
|
set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "DEBIAN/postinst;DEBIAN/prerm")
|
|
|
|
# RPM package specific variables
|
|
set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION
|
|
"${CPACK_PACKAGING_INSTALL_PREFIX} ${CPACK_PACKAGING_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}")
|
|
#Set rpm distro
|
|
if(CPACK_RPM_PACKAGE_RELEASE)
|
|
set(CPACK_RPM_PACKAGE_RELEASE_DIST ON)
|
|
endif()
|
|
set(CPACK_RPM_PACKAGE_PROVIDES "amd-smi")
|
|
set(CPACK_RPM_PACKAGE_REQUIRES "python3")
|
|
|
|
# Add rocm-core dependency if -DROCM_DEP_ROCMCORE=ON is passed
|
|
if(ROCM_DEP_ROCMCORE)
|
|
string(APPEND CPACK_DEBIAN_PACKAGE_DEPENDS ", rocm-core")
|
|
string(APPEND CPACK_RPM_PACKAGE_REQUIRES ", rocm-core")
|
|
endif()
|
|
|
|
# The line below doesn't currently work; it may be this issue:
|
|
# https://bugzilla.redhat.com/show_bug.cgi?id=1811358
|
|
# set(CPACK_RPM_PACKAGE_SUGGESTS "sudo, libdrm-dev")
|
|
|
|
#Prepare final version for the CPACK use
|
|
set(CPACK_PACKAGE_VERSION
|
|
"${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}.${ROCM_VERSION_FOR_PACKAGE}"
|
|
)
|
|
|
|
## Process the Rpm install/remove scripts to update the CPACK variables
|
|
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/RPM/post.in" RPM/post @ONLY)
|
|
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/RPM/postun.in" RPM/postun @ONLY)
|
|
set(CPACK_RPM_POST_INSTALL_SCRIPT_FILE "${CMAKE_CURRENT_BINARY_DIR}/RPM/post")
|
|
set(CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE "${CMAKE_CURRENT_BINARY_DIR}/RPM/postun")
|
|
|
|
#Set the names now using CPACK utility
|
|
set(CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT")
|
|
set(CPACK_RPM_FILE_NAME "RPM-DEFAULT")
|
|
|
|
include(CPack)
|
|
|
|
generic_package_post()
|