From 6e851247571e4131e09d94b94ca359bc4d1032eb Mon Sep 17 00:00:00 2001 From: "Galantsev, Dmitrii" Date: Thu, 3 Nov 2022 16:45:06 -0500 Subject: [PATCH] CMAKE: Repackage whole project for ROCm 5.5 release Signed-off-by: Galantsev, Dmitrii Change-Id: I932b11a111c8e0db04bd8c5e0c3d1a470e5b2386 [ROCm/amdsmi commit: aeb0bf5832c45c97cd6c0b2f084bbabe6475ce31] --- projects/amdsmi/.gitignore | 2 + projects/amdsmi/CMakeLists.txt | 209 +++++------------- projects/amdsmi/README.md | 33 +-- projects/amdsmi/amd_smi-config.cmake.in | 33 +-- .../amdsmi/cmake_modules/help_package.cmake | 130 +++++++++++ projects/amdsmi/example/CMakeLists.txt | 27 +++ projects/amdsmi/example/CMakeLists.txt.in | 23 ++ projects/amdsmi/rocm_smi/CMakeLists.txt | 89 +++----- projects/amdsmi/src/CMakeLists.txt | 160 ++++++++++++++ .../{amd_smi64Config.in => amd_smiConfig.in} | 6 +- .../amdsmi/tests/amd_smi_test/CMakeLists.txt | 22 +- .../amdsmi/tests/rocm_smi_test/CMakeLists.txt | 20 +- 12 files changed, 477 insertions(+), 277 deletions(-) create mode 100644 projects/amdsmi/cmake_modules/help_package.cmake create mode 100644 projects/amdsmi/example/CMakeLists.txt create mode 100644 projects/amdsmi/example/CMakeLists.txt.in create mode 100644 projects/amdsmi/src/CMakeLists.txt rename projects/amdsmi/src/{amd_smi64Config.in => amd_smiConfig.in} (94%) diff --git a/projects/amdsmi/.gitignore b/projects/amdsmi/.gitignore index 65de2c464e..d87e07ee63 100644 --- a/projects/amdsmi/.gitignore +++ b/projects/amdsmi/.gitignore @@ -4,7 +4,9 @@ cmake/build/ .cache/ # build artifacts +include/rocm_smi/rocm_smi64Config.h include/amd_smi/amd_smi64Config.h +include/amd_smi/amd_smiConfig.h rocm_smi/include/rocm_smi/rocm_smi64Config.h DEBIAN/postinst DEBIAN/prerm diff --git a/projects/amdsmi/CMakeLists.txt b/projects/amdsmi/CMakeLists.txt index a880988b2c..48bc89c70a 100755 --- a/projects/amdsmi/CMakeLists.txt +++ b/projects/amdsmi/CMakeLists.txt @@ -3,6 +3,10 @@ # 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 @@ -14,23 +18,16 @@ set(CMAKE_MODULE_PATH CACHE INTERNAL "Default module path.") ## Include common cmake modules include(utils) -include(GNUInstallDirs) +include(help_package) find_package(PkgConfig) -if(NOT DEFINED CPACK_RESOURCE_FILE_LICENSE) - set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/License.txt") -endif() - -set(ROCM_SMI "amd_smi") -set(ROCM_SMI_COMPONENT "lib${ROCM_SMI}") -set(ROCM_SMI_TARGET "${ROCM_SMI}64") -set(ROCM_SMI_LIB_NAME "lib${ROCM_SMI_TARGET}") +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 "rsmi_pkg_ver") +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}") @@ -47,25 +44,29 @@ set(PKG_VERSION_MINOR 0) set(PKG_VERSION_PATCH 0) set(PKG_VERSION_NUM_COMMIT 0) -## Define default variable and variables for the optional build target -## amd_smi_lib-dev -set(CMAKE_INSTALL_PREFIX - "/opt/rocm" - CACHE STRING "Default installation directory.") -set(ROCM_SMI_PACKAGE amd-smi-lib) +set(AMD_SMI_PACKAGE + amd-smi-lib + CACHE STRING "") project(${AMD_SMI_LIBS_TARGET}) -option(CMAKE_VERBOSE_MAKEFILE "Enable verbose output" ON) - -option(CMAKE_EXPORT_COMPILE_COMMANDS "Export compile commands for linters and autocompleters" ON) +include(GNUInstallDirs) option(BUILD_TESTS "Build test suite" OFF) +option(ENABLE_LDCONFIG "Set library links and caches using ldconfig." ON) -if(CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.4.0) - message("Compiler version is " ${CMAKE_CXX_COMPILER_VERSION}) - message(FATAL_ERROR "Require at least gcc-5.4.0") -endif() +# Packaging directives +set(CPACK_PACKAGE_NAME + ${AMD_SMI_PACKAGE} + CACHE STRING "") +set(CPACK_PACKAGE_CONTACT + "AMD-SMILib Support " + 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") @@ -75,16 +76,8 @@ 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") -# Clang does not set the build-id -if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--build-id=sha1") -endif() - ## Address Sanitize Flag if(${ADDRESS_SANITIZER}) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -g") - set(CMAKE_EXE_LINKER_FLAGS -fsanitize=address) - if(BUILD_SHARED_LIBS}) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -shared-libsan") else() @@ -98,15 +91,6 @@ else() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wtrampolines -Wl,-z,now -fPIE") endif() -# Use this instead of above for 32 bit -# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32") - -if("${CMAKE_BUILD_TYPE}" STREQUAL Release) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2") -else() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ggdb -O0 -DDEBUG") -endif() - 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") @@ -119,19 +103,9 @@ 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}/amd_smi/include ${DRM_INCLUDE_DIRS}) + ${CMAKE_CURRENT_SOURCE_DIR}/include/amd_smi ${DRM_INCLUDE_DIRS}) set(CMN_SRC_LIST - "${AMDSMI_SRC_DIR}/amd_smi.cc" - "${AMDSMI_SRC_DIR}/amd_smi_common.cc" - "${AMDSMI_SRC_DIR}/amd_smi_drm.cc" - "${AMDSMI_SRC_DIR}/amd_smi_gpu_device.cc" - "${AMDSMI_SRC_DIR}/amd_smi_lib_loader.cc" - "${AMDSMI_SRC_DIR}/amd_smi_socket.cc" - "${AMDSMI_SRC_DIR}/amd_smi_system.cc" - "${AMDSMI_SRC_DIR}/amd_smi_utils.cc" - "${AMDSMI_SRC_DIR}/amd_smi_uuid.cc" - "${AMDSMI_SRC_DIR}/fdinfo.cc" "${ROCM_SRC_DIR}/rocm_smi.cc" "${ROCM_SRC_DIR}/rocm_smi_counters.cc" "${ROCM_SRC_DIR}/rocm_smi_device.cc" @@ -145,14 +119,6 @@ set(CMN_SRC_LIST "${SHR_MUTEX_DIR}/shared_mutex.cc") set(CMN_INC_LIST - "${COMMON_INC_DIR}/amd_smi.h" - "${COMMON_INC_DIR}/impl/amd_smi_common.h" - "${COMMON_INC_DIR}/impl/amd_smi_device.h" - "${COMMON_INC_DIR}/impl/amd_smi_drm.h" - "${COMMON_INC_DIR}/impl/amd_smi_gpu_device.h" - "${COMMON_INC_DIR}/impl/amd_smi_lib_loader.h" - "${COMMON_INC_DIR}/impl/amd_smi_socket.h" - "${COMMON_INC_DIR}/impl/amd_smi_system.h" "${ROCM_INC_DIR}/rocm_smi.h" "${ROCM_INC_DIR}/rocm_smi_common.h" "${ROCM_INC_DIR}/rocm_smi_counters.h" @@ -167,56 +133,14 @@ set(CMN_INC_LIST "${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() -# Examples and docs -set(SMI_EXAMPLE_EXE "amd_smi_drm_ex") -add_executable(${SMI_EXAMPLE_EXE} "example/amd_smi_drm_example.cc") -target_link_libraries(${SMI_EXAMPLE_EXE} ${ROCM_SMI_TARGET}) -add_dependencies(${SMI_EXAMPLE_EXE} ${ROCM_SMI_TARGET}) - -set(SMI_NODRM_EXAMPLE_EXE "amd_smi_nodrm_ex") -add_executable(${SMI_NODRM_EXAMPLE_EXE} "example/amd_smi_nodrm_example.cc") -target_link_libraries(${SMI_NODRM_EXAMPLE_EXE} ${ROCM_SMI_TARGET}) -add_dependencies(${SMI_NODRM_EXAMPLE_EXE} ${ROCM_SMI_TARGET}) - -# Generate Doxygen documentation -find_package(Doxygen) -find_package(LATEX COMPONENTS PDFLATEX) - -if(DOXYGEN_FOUND AND LATEX_FOUND) - set(RSMI_MANUAL_NAME "AMD_SMI_Manual") - configure_file(${CMAKE_CURRENT_SOURCE_DIR}/docs/amd_smi_doxygen.cfg ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY) - - add_custom_command( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/latex/refman.tex - COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile - DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/docs/amd_smi_doxygen.cfg "${AMDSMI_INC_DIR}/amd_smi.h" - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) - add_custom_command( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/latex/refman.pdf - COMMAND make > /dev/null - COMMAND cp ${CMAKE_CURRENT_BINARY_DIR}/latex/refman.pdf - ${CMAKE_CURRENT_SOURCE_DIR}/docs/${RSMI_MANUAL_NAME}_new.pdf - DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/latex/refman.tex - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/latex) - - add_custom_target(amdsmi_docs DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/latex/refman.pdf) - - add_dependencies(${ROCM_SMI_TARGET} amdsmi_docs) - install( - FILES ${CMAKE_CURRENT_BINARY_DIR}/latex/refman.pdf - DESTINATION share/doc/${ROCM_SMI} - RENAME ${RSMI_MANUAL_NAME}.pdf) - install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/README.md DESTINATION share/doc/${ROCM_SMI}/) -else() - message("Doxygen or Latex is not found. Will not generate documents.") -endif(DOXYGEN_FOUND AND LATEX_FOUND) - # Generate python_wrapper and package targets find_program(PYTHON3 "python3") find_program(PIP3 "pip3") @@ -238,9 +162,9 @@ if(PYTHON3 AND PIP3) DEPENDS clang_tools_extract COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/amdsmi_wrapper COMMAND cp -r ${CMAKE_CURRENT_SOURCE_DIR}/include/amd_smi/amd_smi.h ${CMAKE_CURRENT_BINARY_DIR}/amdsmi_wrapper - COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/amdsmi_wrapper/rocm_smi + 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/rocm_smi/ + ${CMAKE_CURRENT_BINARY_DIR}/amdsmi_wrapper/amd_smi/ COMMAND python3 ${CMAKE_CURRENT_SOURCE_DIR}/tools/generator.py ${CMAKE_CURRENT_BINARY_DIR}/amdsmi_wrapper/amd_smi.h ${CMAKE_CURRENT_BINARY_DIR}/amdsmi_wrapper/ ${CMAKE_CURRENT_BINARY_DIR}/amdsmi_wrapper/ @@ -260,7 +184,7 @@ if(PYTHON3 AND PIP3) 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}/rocm_smi/libamd_smi64.so ${PACKAGE_OUTPUT_DIR} + COMMAND cp ${CMAKE_CURRENT_BINARY_DIR}/amd_smi/libamd_smi.so ${PACKAGE_OUTPUT_DIR} COMMAND cp ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE ${PACKAGE_OUTPUT_DIR} COMMAND echo ${PACKAGE_OUTPUT_DIR}) @@ -270,8 +194,10 @@ 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) +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 @@ -281,12 +207,12 @@ write_basic_package_version_file( install( FILES ${CMAKE_CURRENT_BINARY_DIR}/amd_smi-config.cmake ${CMAKE_CURRENT_BINARY_DIR}/amd_smi-config-version.cmake - DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${ROCM_SMI} + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${AMD_SMI} COMPONENT dev) # Create cmake target # Add all targets to the build-tree export set -export(TARGETS ${ROCM_SMI_TARGET} FILE "${PROJECT_BINARY_DIR}/rcom_smi_target.cmake") +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) @@ -294,33 +220,18 @@ export(PACKAGE amd_smi) # Create the amd_smiConfig.cmake and amd_smiConfigVersion files # ... for the build tree install( - EXPORT rocm_smiTargets - DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${ROCM_SMI}" + EXPORT amd_smiTargets + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${AMD_SMI} COMPONENT dev) #License file set(CPACK_RPM_PACKAGE_LICENSE "NCSA") install( FILES ${CPACK_RESOURCE_FILE_LICENSE} - DESTINATION share/doc/${ROCM_SMI} + DESTINATION share/doc/${AMD_SMI} RENAME LICENSE.txt) - -########################### -# Packaging directives -########################### -set(CPACK_GENERATOR - "DEB;RPM" - CACHE STRING "Default packaging generators.") -set(CPACK_PACKAGING_INSTALL_PREFIX - "${CMAKE_INSTALL_PREFIX}" - CACHE STRING "Default packaging prefix.") -set(ENABLE_LDCONFIG - ON - CACHE BOOL "Set library links and caches using ldconfig.") -set(CPACK_PACKAGE_NAME ${ROCM_SMI_PACKAGE}) -set(CPACK_PACKAGE_VENDOR "Advanced Micro Devices, Inc.") -set(CPACK_PACKAGE_CONTACT "RocmSMILib Support ") -set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "AMD System Management libraries") +#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 @@ -330,17 +241,9 @@ if(DEFINED ENV{ROCM_LIBPATCH_VERSION}) endif() #Debian package specific variables -set(CPACK_DEBIAN_PACKAGE_HOMEPAGE - ${CPACK_DEBIAN_PACKAGE_HOMEPAGE} - CACHE STRING "https://github.com/RadeonOpenCompute/ROCm") -if(DEFINED ENV{CPACK_DEBIAN_PACKAGE_RELEASE}) - set(CPACK_DEBIAN_PACKAGE_RELEASE $ENV{CPACK_DEBIAN_PACKAGE_RELEASE}) -else() - set(CPACK_DEBIAN_PACKAGE_RELEASE "local") -endif() -set(CPACK_DEBIAN_PACKAGE_PROVIDES "rocm-smi") -set(CPACK_DEBIAN_PACKAGE_SUGGESTS "sudo") -set(CPACK_DEBIAN_PACKAGE_DEPENDS "python3, rocm-core") +set(CPACK_DEBIAN_PACKAGE_PROVIDES "amd-smi") +set(CPACK_DEBIAN_PACKAGE_SUGGESTS "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) @@ -350,21 +253,22 @@ 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}") -if(DEFINED ENV{CPACK_RPM_PACKAGE_RELEASE}) - set(CPACK_RPM_PACKAGE_RELEASE $ENV{CPACK_RPM_PACKAGE_RELEASE}) -else() - set(CPACK_RPM_PACKAGE_RELEASE "local") -endif() #Set rpm distro if(CPACK_RPM_PACKAGE_RELEASE) set(CPACK_RPM_PACKAGE_RELEASE_DIST ON) endif() -set(CPACK_RPM_PACKAGE_PROVIDES "rocm-smi") -set(CPACK_RPM_PACKAGE_REQUIRES "python3, rocm-core") +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") +# set(CPACK_RPM_PACKAGE_SUGGESTS "sudo, libdrm-dev") #Prepare final version for the CPACK use set(CPACK_PACKAGE_VERSION @@ -380,10 +284,7 @@ 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") -# Remove dependency on rocm-core if -DROCM_DEP_ROCMCORE=ON not given to cmake -if(NOT ROCM_DEP_ROCMCORE) - string(REGEX REPLACE ",? ?rocm-core" "" CPACK_RPM_PACKAGE_REQUIRES ${CPACK_RPM_PACKAGE_REQUIRES}) - string(REGEX REPLACE ",? ?rocm-core" "" CPACK_DEBIAN_PACKAGE_DEPENDS ${CPACK_DEBIAN_PACKAGE_DEPENDS}) -endif() include(CPack) + +generic_package_post() diff --git a/projects/amdsmi/README.md b/projects/amdsmi/README.md index a06bfb785f..827944603c 100755 --- a/projects/amdsmi/README.md +++ b/projects/amdsmi/README.md @@ -17,7 +17,7 @@ installed to query firmware information and hardware IPs. ## Additional Required software for building In order to build the AMD SMI library, the following components are required. Note that the software versions listed are what was used in development. Earlier versions are not guaranteed to work: -* CMake (v3.5.0) +* CMake (v3.11.0) * g++ (5.4.0) In order to build the latest documentation, the following are required: @@ -27,17 +27,19 @@ In order to build the latest documentation, the following are required: The source code for AMD SMI is available on Github. After the AMD SMI library git repository has been cloned to a local Linux machine, building the library is achieved by following the typical CMake build sequence. Specifically, -##### ```$ mkdir -p build``` -##### ```$ cd build``` -##### ```$ cmake ``` -##### ```$ make``` -##### ```# Install library file and header; default location is /opt/rocm``` -##### ```$ make install``` +```bash +mkdir -p build +cd build +cmake +make -j $(nproc) +# Install library file and header; default location is /opt/rocm +make install``` The built library will appear in the `build` folder. To build the rpm and deb packages follow the above steps with: -##### ```$ make package``` +```bash +make package``` ## Documentation @@ -47,13 +49,12 @@ The reference manual, `refman.pdf` will be in the `latex` directory upon a succe In order to verify the build and capability of AMD SMI on your system and to see an example of how AMD SMI can be used, you may build and run the tests that are available in the repo. To build the tests, follow these steps: -##### ```# Set environment variables used in CMakeLists.txt file``` -##### ```$ AMDSMI_INC_DIR=``` -##### ```$ AMDSMI_LIB_DIR=``` -##### ```$ mkdir ``` -##### ```$ cd ``` -##### ```$ cmake -DAMDSMI_INC_DIR=$AMDSMI_INC_DIR -DAMDSMI_LIB_DIR=$AMDSMI_LIB_DIR /tests/amd_smi_test``` -##### ```$ make``` +```bash +mkdir -p build +cd build +cmake -DBUILD_TESTS=ON +make -j $(nproc) +``` ## Run the Tests @@ -75,7 +76,7 @@ When AMD-SMI is no longer being used, `amdsmi_shut_down()` should be called. Thi A simple "Hello World" type program that displays the temperature of detected devices would look like this: -``` +```c++ #include #include #include "amd_smi/amd_smi.h" diff --git a/projects/amdsmi/amd_smi-config.cmake.in b/projects/amdsmi/amd_smi-config.cmake.in index 61494dd708..ff8d903b45 100644 --- a/projects/amdsmi/amd_smi-config.cmake.in +++ b/projects/amdsmi/amd_smi-config.cmake.in @@ -1,27 +1,28 @@ -# - Config file for the rocm_smi package +# - Config file for the amd_smi package # It defines the following variables -# ROCM_SMI_INCLUDE_DIRS - include directories for rocm_smi -# ROCM_SMI_LIBRARIES - libraries to link against +# AMD_SMI_INCLUDE_DIRS - include directories for amd_smi +# AMD_SMI_LIBRARIES - libraries to link against # Compute paths @PACKAGE_INIT@ -get_filename_component(ROCM_SMI_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(AMD_SMI_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) + +set_and_check( amd_smi_INCLUDE_DIR "@PACKAGE_CMAKE_INSTALL_INCLUDEDIR@" ) +set_and_check( AMD_SMI_INCLUDE_DIR "@PACKAGE_CMAKE_INSTALL_INCLUDEDIR@" ) +set_and_check( AMD_SMI_INCLUDE_DIRS "@PACKAGE_CMAKE_INSTALL_INCLUDEDIR@" ) +set_and_check( amd_smi_LIB_DIR "@PACKAGE_CMAKE_INSTALL_LIBDIR@" ) +set_and_check( AMD_SMI_LIB_DIR "@PACKAGE_CMAKE_INSTALL_LIBDIR@" ) +set_and_check( AMD_SMI_LIB_DIRS "@PACKAGE_CMAKE_INSTALL_LIBDIR@" ) -set_and_check( rocm_smi_INCLUDE_DIR "@CMAKE_INSTALL_INCLUDEDIR@" ) -set_and_check( ROCM_SMI_INCLUDE_DIR "@CMAKE_INSTALL_INCLUDEDIR@" ) -set_and_check( ROCM_SMI_INCLUDE_DIRS "@CMAKE_INSTALL_INCLUDEDIR@" ) -set_and_check( rocm_smi_LIB_DIR "@CMAKE_INSTALL_LIBDIR@" ) -set_and_check( ROCM_SMI_LIB_DIR "@CMAKE_INSTALL_LIBDIR@" ) -set_and_check( ROCM_SMI_LIB_DIRS "@PACKAGE_CMAKE_INSTALL_LIBDIR@" ) # Our library dependencies (contains definitions for IMPORTED targets) -if(NOT TARGET rocm_smi AND NOT rocm_smi_BINARY_DIR) - include("${ROCM_SMI_CMAKE_DIR}/rocm_smiTargets.cmake") +if(NOT TARGET amd_smi AND NOT amd_smi_BINARY_DIR) + include("${AMD_SMI_CMAKE_DIR}/amd_smiTargets.cmake") endif() -# These are IMPORTED targets created by RocmSmiTargets.cmake +# These are IMPORTED targets created by AmdSmiTargets.cmake # TODO: Need to check if OAM libraries are needed here! -set(ROCM_SMI_LIBRARIES rocm_smi64) -set(ROCM_SMI_LIBRARY rocm_smi64) +set(AMD_SMI_LIBRARIES amd_smi) +set(AMD_SMI_LIBRARY amd_smi) -check_required_components(rocm_smi) +check_required_components(amd_smi) diff --git a/projects/amdsmi/cmake_modules/help_package.cmake b/projects/amdsmi/cmake_modules/help_package.cmake new file mode 100644 index 0000000000..c862678f75 --- /dev/null +++ b/projects/amdsmi/cmake_modules/help_package.cmake @@ -0,0 +1,130 @@ +# This module provides common functions used for building +# and packaging ROCm projects + +option(CMAKE_VERBOSE_MAKEFILE "Enable verbose output" ON) +option(CMAKE_EXPORT_COMPILE_COMMANDS "Export compile commands for linters and autocompleters" ON) + +function(generic_add_rocm) + set(ROCM_DIR + "/opt/rocm" + CACHE STRING "ROCm directory.") + if(DEFINED ENV{ROCM_RPATH} AND NOT DEFINED LIB_RUNPATH) + set(LIB_RUNPATH "\$ORIGIN:\$ORIGIN/../lib:\$ORIGIN/../lib64" PARENT_SCOPE) + endif() + + set(CMAKE_INSTALL_PREFIX ${ROCM_DIR} CACHE STRING "Default installation directory.") + set(CPACK_PACKAGING_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" CACHE STRING "Default packaging prefix.") + set(SHARE_INSTALL_PREFIX "share/${CMAKE_PROJECT_NAME}" CACHE STRING "Tests and Example install directory") + # add package search paths + set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} /usr/local PARENT_SCOPE) + set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} /usr/lib64 /usr/lib/x86_64-linux-gnu PARENT_SCOPE) +endfunction() + +function(generic_package) + if(CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.4.0) + message("Compiler version is " ${CMAKE_CXX_COMPILER_VERSION}) + message(FATAL_ERROR "Require at least gcc-5.4.0") + endif() + + if("${CMAKE_BUILD_TYPE}" STREQUAL Release) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2" PARENT_SCOPE) + else() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ggdb -O0 -DDEBUG" PARENT_SCOPE) + endif() + + # Add address sanitizer + if(${ADDRESS_SANITIZER}) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -g" PARENT_SCOPE) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address" PARENT_SCOPE) + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -shared-libasan" PARENT_SCOPE) + message(STATUS "ADDRESS_SANITIZE: CMAKE_CXX_FLAGS=: ${CMAKE_CXX_FLAGS}") + message(STATUS "ADDRESS_SANITIZE: CMAKE_EXE_LINKER_FLAGS=: ${CMAKE_EXE_LINKER_FLAGS}") + endif() + + # Clang does not set the build-id + if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--build-id=sha1" PARENT_SCOPE) + endif() + + # configure packaging + # cpack version is populated with CMAKE_PROJECT_VERSION implicitly + set(CPACK_PACKAGE_NAME + ${CMAKE_PROJECT_NAME} + CACHE STRING "") + set(CPACK_PACKAGE_VENDOR + "Advanced Micro Devices, Inc." + CACHE STRING "") + set(CPACK_PACKAGE_DESCRIPTION_SUMMARY + "Placeholder Tool" + CACHE STRING "") + set(CPACK_PACKAGE_DESCRIPTION + "This package contains the AMD ${CPACK_PACKAGE_DESCRIPTION_SUMMARY}." + CACHE STRING "") + set(CPACK_PACKAGING_INSTALL_PREFIX + "${CMAKE_INSTALL_PREFIX}" + CACHE STRING "Default packaging prefix.") + set(CPACK_RESOURCE_FILE_LICENSE + "${CMAKE_CURRENT_SOURCE_DIR}/License.txt" + CACHE STRING "") + set(CPACK_RPM_PACKAGE_LICENSE + "MIT" + CACHE STRING "") + set(CPACK_GENERATOR + "DEB;RPM" + CACHE STRING "Default packaging generators.") + set(CPACK_DEB_COMPONENT_INSTALL ON PARENT_SCOPE) + set(CPACK_RPM_COMPONENT_INSTALL ON PARENT_SCOPE) + mark_as_advanced(CPACK_PACKAGE_NAME CPACK_PACKAGE_VENDOR CPACK_PACKAGE_CONTACT CPACK_PACKAGE_DESCRIPTION_SUMMARY + CPACK_PACKAGE_DESCRIPTION CPACK_RESOURCE_FILE_LICENSE CPACK_RPM_PACKAGE_LICENSE CPACK_GENERATOR) + + # Debian package specific variables + if(DEFINED ENV{CPACK_DEBIAN_PACKAGE_RELEASE}) + set(CPACK_DEBIAN_PACKAGE_RELEASE $ENV{CPACK_DEBIAN_PACKAGE_RELEASE} PARENT_SCOPE) + else() + set(CPACK_DEBIAN_PACKAGE_RELEASE "local" PARENT_SCOPE) + endif() + message("Using CPACK_DEBIAN_PACKAGE_RELEASE ${CPACK_DEBIAN_PACKAGE_RELEASE}") + set(CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT" PARENT_SCOPE) + + # RPM package specific variables + if(DEFINED ENV{CPACK_RPM_PACKAGE_RELEASE}) + set(CPACK_RPM_PACKAGE_RELEASE $ENV{CPACK_RPM_PACKAGE_RELEASE} PARENT_SCOPE) + else() + set(CPACK_RPM_PACKAGE_RELEASE "local" PARENT_SCOPE) + endif() + message("Using CPACK_RPM_PACKAGE_RELEASE ${CPACK_RPM_PACKAGE_RELEASE}") + set(CPACK_RPM_FILE_NAME "RPM-DEFAULT" PARENT_SCOPE) + set(CPACK_RPM_PACKAGE_AUTOREQ 0 PARENT_SCOPE) + set(CPACK_RPM_PACKAGE_AUTOPROV 0 PARENT_SCOPE) + list( + APPEND + CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION + "/lib" + "/usr/sbin" + "/lib/systemd" + "/lib/systemd/system" + "/usr" + "/opt") + + # PACKAGE-tests need PACKAGE + set(CPACK_DEBIAN_TESTS_PACKAGE_DEPENDS "${CPACK_PACKAGE_NAME}" PARENT_SCOPE) + set(CPACK_RPM_TESTS_PACKAGE_REQUIRES "${CPACK_PACKAGE_NAME}" PARENT_SCOPE) + + # Treat runtime group as package base. + # Without it - the base package would be named 'rdc-runtime' + # resulting in rdc-runtime*.deb and rdc-runtime*.rpm + set(CPACK_DEBIAN_RUNTIME_PACKAGE_NAME "${CPACK_PACKAGE_NAME}" PARENT_SCOPE) + set(CPACK_RPM_RUNTIME_PACKAGE_NAME "${CPACK_PACKAGE_NAME}" PARENT_SCOPE) +endfunction() + +# this function goes after 'include(CPack)' +function(generic_package_post) + # PACKAGE package, no postfix + cpack_add_component_group("runtime") + cpack_add_component(dev GROUP runtime) + cpack_add_component(unspecified GROUP runtime) + + # PACKAGE-tests package, -tests postfix + cpack_add_component_group("tests") + cpack_add_component(tests GROUP tests) +endfunction() diff --git a/projects/amdsmi/example/CMakeLists.txt b/projects/amdsmi/example/CMakeLists.txt new file mode 100644 index 0000000000..ba375c27cd --- /dev/null +++ b/projects/amdsmi/example/CMakeLists.txt @@ -0,0 +1,27 @@ +# TODO: Provide a standalone CMakeLists.txt project example +# that can link against existing amd-smi library + +# copy .cc files into install directory +install( + DIRECTORY ./ + DESTINATION share/example/amd-smi + FILES_MATCHING + PATTERN "*.cc") + +# copy cmake file into install directory +install( + FILES CMakeLists.txt.in + RENAME CMakeLists.txt + DESTINATION share/example/amd-smi) + +# compile example files but do not install +# this is only useful if running from build directory +set(SMI_DRM_EXAMPLE_EXE "amd_smi_drm_ex") +add_executable(${SMI_DRM_EXAMPLE_EXE} "amd_smi_drm_example.cc") +target_link_libraries(${SMI_DRM_EXAMPLE_EXE} ${AMD_SMI_TARGET}) +add_dependencies(${SMI_DRM_EXAMPLE_EXE} ${AMD_SMI_TARGET}) + +set(SMI_NODRM_EXAMPLE_EXE "amd_smi_nodrm_ex") +add_executable(${SMI_NODRM_EXAMPLE_EXE} "amd_smi_nodrm_example.cc") +target_link_libraries(${SMI_NODRM_EXAMPLE_EXE} ${AMD_SMI_TARGET}) +add_dependencies(${SMI_NODRM_EXAMPLE_EXE} ${AMD_SMI_TARGET}) diff --git a/projects/amdsmi/example/CMakeLists.txt.in b/projects/amdsmi/example/CMakeLists.txt.in new file mode 100644 index 0000000000..4cf30ee0b2 --- /dev/null +++ b/projects/amdsmi/example/CMakeLists.txt.in @@ -0,0 +1,23 @@ +cmake_minimum_required(VERSION 3.11) + +option(CMAKE_VERBOSE_MAKEFILE "Enable verbose output" ON) +option(CMAKE_EXPORT_COMPILE_COMMANDS "Export compile commands for linters and autocompleters" ON) + +project(main LANGUAGES CXX) + +set(CMAKE_CXX_STANDARD + 11 + CACHE STRING "The C++ standard to use") + +find_package(amd_smi + HINTS + "../../../lib/cmake" + "../../../lib64/cmake" + "${ROCM_DIR}/lib/cmake" + "${ROCM_DIR}/lib64/cmake" + CONFIG REQUIRED) +link_libraries(amd_smi) + +# compile example files but do not install +add_executable(amd_smi_drm_ex "amd_smi_drm_example.cc") +add_executable(amd_smi_nodrm_ex "amd_smi_nodrm_example.cc") diff --git a/projects/amdsmi/rocm_smi/CMakeLists.txt b/projects/amdsmi/rocm_smi/CMakeLists.txt index 63712f6b69..43b723a7d0 100755 --- a/projects/amdsmi/rocm_smi/CMakeLists.txt +++ b/projects/amdsmi/rocm_smi/CMakeLists.txt @@ -15,11 +15,9 @@ message("--------Proj Src Dir: " ${PROJECT_SOURCE_DIR}) # message("--------Proj Bld Dir: " ${PROJECT_BINARY_DIR}) # message("--------Proj Lib Dir: " ${PROJECT_BINARY_DIR}/lib) # message("--------Proj Exe Dir: " ${PROJECT_BINARY_DIR}/bin) -# message("--------RSMI Lib Dir: " ${RSMI_LIB_DIR}) -# message("--------RSMI Inc Dir: " ${RSMI_INC_DIR}) # message("") -set(ROCM_SMI "amd_smi") +set(ROCM_SMI "rocm_smi") set(ROCM_SMI_COMPONENT "lib${ROCM_SMI}") set(ROCM_SMI_TARGET "${ROCM_SMI}64") @@ -50,19 +48,13 @@ set(${ROCM_SMI}_VERSION_BUILD "0") message("SOVERSION: ${SO_VERSION_STRING}") # Create a configure file to get version info from within library -configure_file("${PROJECT_SOURCE_DIR}/src/${ROCM_SMI_TARGET}Config.in" - "${PROJECT_SOURCE_DIR}/include/amd_smi/${ROCM_SMI_TARGET}Config.h") +configure_file("src/${ROCM_SMI_TARGET}Config.in" + "${CMAKE_CURRENT_SOURCE_DIR}/include/rocm_smi/${ROCM_SMI_TARGET}Config.h") set(rocm_smi_VERSION_MAJOR "${VERSION_MAJOR}") set(rocm_smi_VERSION_MINOR "${VERSION_MINOR}") set(rocm_smi_VERSION_PATCH "0") set(rocm_smi_VERSION_BUILD "0") -configure_file("${PROJECT_SOURCE_DIR}/rocm_smi/src/rocm_smi64Config.in" - "${PROJECT_SOURCE_DIR}/rocm_smi/include/rocm_smi/rocm_smi64Config.h") - -set(RSMI_SRC_DIR "src") -set(RSMI_INC_DIR "include") -set(RSMI_DOCS_DIR "docs") set(SMI_EXAMPLE_EXE "rocm_smi_ex") @@ -93,25 +85,32 @@ endif() #file reorganization changes #rocm_smi.py moved to libexec/rocm_smi. so creating rocm-smi symlink -file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin) -add_custom_target( - link-rocm-smi ALL - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - COMMAND ${CMAKE_COMMAND} -E create_symlink ../libexec/${ROCM_SMI}/rocm_smi.py - ${CMAKE_CURRENT_BINARY_DIR}/bin/rocm-smi) +#file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin) +#add_custom_target( +# link-rocm-smi ALL +# WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} +# COMMAND ${CMAKE_COMMAND} -E create_symlink ../libexec/${ROCM_SMI}/rocm_smi.py +# ${CMAKE_CURRENT_BINARY_DIR}/bin/rocm-smi) ## Add the install directives for the runtime library. -install( - TARGETS ${ROCM_SMI_TARGET} - EXPORT rocm_smiTargets - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT ${ROCM_SMI_COMPONENT}) - -install(FILES ${PROJECT_SOURCE_DIR}/include/amd_smi/amd_smi.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/amd_smi) -install(FILES ${PROJECT_SOURCE_DIR}/include/amd_smi/${ROCM_SMI_TARGET}Config.h - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/amd_smi) -install(FILES ${PROJECT_SOURCE_DIR}/rocm_smi/include/rocm_smi/kfd_ioctl.h - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/amd_smi) +#install( +# TARGETS ${ROCM_SMI_TARGET} +# EXPORT rocm_smiTargets +# LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} +# ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT ${ROCM_SMI_COMPONENT}) +# +#install( +# FILES ${CMAKE_CURRENT_SOURCE_DIR}/include/rocm_smi/rocm_smi.h +# DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rocm_smi +# COMPONENT ${ROCM_SMI_COMPONENT}) +#install( +# FILES ${CMAKE_CURRENT_SOURCE_DIR}/include/rocm_smi/${ROCM_SMI_TARGET}Config.h +# DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rocm_smi +# COMPONENT ${ROCM_SMI_COMPONENT}) +#install( +# FILES ${CMAKE_CURRENT_SOURCE_DIR}/include/rocm_smi/kfd_ioctl.h +# DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rocm_smi +# COMPONENT ${ROCM_SMI_COMPONENT}) #install(FILES ${PROJECT_SOURCE_DIR}/rocm_smi/python_smi_tools/rsmiBindings.py # DESTINATION libexec/${ROCM_SMI}) #install(FILES ${PROJECT_SOURCE_DIR}/rocm_smi/python_smi_tools/rocm_smi.py @@ -121,36 +120,4 @@ install(FILES ${PROJECT_SOURCE_DIR}/rocm_smi/include/rocm_smi/kfd_ioctl.h #install(FILES ${CMAKE_CURRENT_BINARY_DIR}/bin/rocm-smi # DESTINATION bin) -# Generate Doxygen documentation -find_package(Doxygen) -find_package(LATEX COMPONENTS PDFLATEX) - -if(DOXYGEN_FOUND AND LATEX_FOUND) - set(ASMI_MANUAL_NAME "AMD_SMI_Manual") - configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../docs/amd_smi_doxygen.cfg ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY) - - add_custom_command( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/latex/refman.tex - COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile - DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/../docs/amd_smi_doxygen.cfg - "${PROJECT_SOURCE_DIR}/include/amd_smi/amd_smi.h" - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) - add_custom_command( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/latex/refman.pdf - COMMAND make > /dev/null - COMMAND cp ${CMAKE_CURRENT_BINARY_DIR}/latex/refman.pdf - ${CMAKE_CURRENT_SOURCE_DIR}/../docs/${ASMI_MANUAL_NAME}_new.pdf - DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/latex/refman.tex - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/latex) - - add_custom_target(docs DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/latex/refman.pdf) - - add_dependencies(${ROCM_SMI_TARGET} docs) - install( - FILES ${CMAKE_CURRENT_BINARY_DIR}/latex/refman.pdf - DESTINATION share/doc/${ROCM_SMI} - RENAME ${ASMI_MANUAL_NAME}.pdf) - install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../README.md DESTINATION share/doc/${ROCM_SMI}/) -else() - message("Doxygen or Latex is not found. Will not generate documents.") -endif(DOXYGEN_FOUND AND LATEX_FOUND) +# NOTE: Doxygen generation has been stripped diff --git a/projects/amdsmi/src/CMakeLists.txt b/projects/amdsmi/src/CMakeLists.txt new file mode 100644 index 0000000000..0126410db4 --- /dev/null +++ b/projects/amdsmi/src/CMakeLists.txt @@ -0,0 +1,160 @@ +# +# Minimum version of cmake required +# + +message("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&") +message(" CMake AMD SMI (Library) ") +message("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&") + +message("") +message("Build Configuration:") +# message("-----------BuildType: " ${CMAKE_BUILD_TYPE}) +# message("------------Compiler: " ${CMAKE_CXX_COMPILER}) +# message("-------------Version: " ${CMAKE_CXX_COMPILER_VERSION}) +message("--------Proj Src Dir: " ${PROJECT_SOURCE_DIR}) +# message("--------Proj Bld Dir: " ${PROJECT_BINARY_DIR}) +# message("--------Proj Lib Dir: " ${PROJECT_BINARY_DIR}/lib) +# message("--------Proj Exe Dir: " ${PROJECT_BINARY_DIR}/bin) +# message("") + +## Include common cmake modules +include(utils) + +################# Determine the library version ######################### +set(SO_VERSION_GIT_TAG_PREFIX "amd_smi_so_ver") + +set(SRC_DIR "amd_smi") +set(INC_DIR "${PROJECT_SOURCE_DIR}/include/amd_smi") + +set(SRC_LIST + "${SRC_DIR}/amd_smi.cc" + "${SRC_DIR}/amd_smi_common.cc" + "${SRC_DIR}/amd_smi_drm.cc" + "${SRC_DIR}/amd_smi_gpu_device.cc" + "${SRC_DIR}/amd_smi_lib_loader.cc" + "${SRC_DIR}/amd_smi_socket.cc" + "${SRC_DIR}/amd_smi_system.cc" + "${SRC_DIR}/amd_smi_utils.cc" + "${SRC_DIR}/amd_smi_uuid.cc" + "${SRC_DIR}/fdinfo.cc" + "${CMN_SRC_LIST}") +set(INC_LIST + "${INC_DIR}/amd_smi.h" + "${INC_DIR}/impl/amd_smi_common.h" + "${INC_DIR}/impl/amd_smi_device.h" + "${INC_DIR}/impl/amd_smi_drm.h" + "${INC_DIR}/impl/amd_smi_gpu_device.h" + "${INC_DIR}/impl/amd_smi_lib_loader.h" + "${INC_DIR}/impl/amd_smi_socket.h" + "${INC_DIR}/impl/amd_smi_system.h" + "${PROJECT_SOURCE_DIR}/rocm_smi/include/rocm_smi/rocm_smi.h" + "${PROJECT_SOURCE_DIR}/rocm_smi/include/rocm_smi/rocm_smi_utils.h") + +# VERSION_* variables should be set by get_version_from_tag +message("Package version: ${PKG_VERSION_STR}") + +# Debian package specific variables +# Set a default value for the package version +get_version_from_tag("1.0.0.0" ${SO_VERSION_GIT_TAG_PREFIX} GIT) + +# VERSION_* variables should be set by get_version_from_tag +if(${ROCM_PATCH_VERSION}) + set(VERSION_PATCH ${ROCM_PATCH_VERSION}) + set(SO_VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}") +else() + set(SO_VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}") +endif() +set(${AMD_SMI}_VERSION_MAJOR "${VERSION_MAJOR}") +set(${AMD_SMI}_VERSION_MINOR "${VERSION_MINOR}") +set(${AMD_SMI}_VERSION_PATCH "0") +set(${AMD_SMI}_VERSION_BUILD "0") +message("SOVERSION: ${SO_VERSION_STRING}") + +# Create a configure file to get version info from within library +configure_file("${AMD_SMI_TARGET}Config.in" "${PROJECT_SOURCE_DIR}/include/amd_smi/${AMD_SMI_TARGET}Config.h") + +add_executable(amd_smi_ex "../example/amd_smi_drm_example.cc") +target_link_libraries(amd_smi_ex ${AMD_SMI_TARGET}) +add_library(${AMD_SMI_TARGET} ${SRC_LIST} ${INC_LIST}) +target_link_libraries(${AMD_SMI_TARGET} pthread rt dl) +target_include_directories(${AMD_SMI_TARGET} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}/rocm_smi/include + ${PROJECT_SOURCE_DIR}/common/shared_mutex) + +# use the target_include_directories() command to specify the include directories for the target +target_include_directories(${AMD_SMI_TARGET} PUBLIC "$" + "$") + +## Set the VERSION and SOVERSION values +set_property(TARGET ${AMD_SMI_TARGET} PROPERTY SOVERSION "${VERSION_MAJOR}") +set_property(TARGET ${AMD_SMI_TARGET} PROPERTY VERSION "${SO_VERSION_STRING}") + +## If the library is a release, strip the target library +if("${CMAKE_BUILD_TYPE}" STREQUAL Release) + if(${BUILD_SHARED_LIBS}) #stripping only for .so + add_custom_command( + TARGET ${AMD_SMI_TARGET} + POST_BUILD + COMMAND ${CMAKE_STRIP} lib${AMD_SMI_TARGET}.so.${SO_VERSION_STRING}) + endif() +endif() + +#file reorganization changes +#amd_smi.py moved to libexec/amd_smi. so creating amd-smi symlink +#file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin) +#add_custom_target( +# link-amd-smi ALL +# WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} +# COMMAND ${CMAKE_COMMAND} -E create_symlink ../libexec/${AMD_SMI}/amd_smi.py ${CMAKE_CURRENT_BINARY_DIR}/bin/amd-smi) + +## Add the install directives for the runtime library. +install( + TARGETS ${AMD_SMI_TARGET} + EXPORT amd_smiTargets + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT ${AMD_SMI_COMPONENT}) + +install(FILES ${PROJECT_SOURCE_DIR}/include/amd_smi/amd_smi.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/amd_smi) +install(FILES ${PROJECT_SOURCE_DIR}/include/amd_smi/${AMD_SMI_TARGET}Config.h + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/amd_smi) +install(FILES ${PROJECT_SOURCE_DIR}/rocm_smi/include/rocm_smi/kfd_ioctl.h + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/amd_smi) +#install(FILES ${PROJECT_SOURCE_DIR}/rocm_smi/python_smi_tools/rsmiBindings.py +# DESTINATION libexec/${AMD_SMI}) +#install(FILES ${PROJECT_SOURCE_DIR}/rocm_smi/python_smi_tools/rocm_smi.py +# PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ +# GROUP_WRITE GROUP_EXECUTE WORLD_READ WORLD_EXECUTE +# DESTINATION libexec/${AMD_SMI}) +#install(FILES ${CMAKE_CURRENT_BINARY_DIR}/bin/rocm-smi +# DESTINATION bin) + +# Generate Doxygen documentation +find_package(Doxygen) +find_package(LATEX COMPONENTS PDFLATEX) + +if(DOXYGEN_FOUND AND LATEX_FOUND) + set(ASMI_MANUAL_NAME "AMD_SMI_Manual") + configure_file(${PROJECT_SOURCE_DIR}/docs/amd_smi_doxygen.cfg ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY) + + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/latex/refman.tex + COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile + DEPENDS ${PROJECT_SOURCE_DIR}/docs/amd_smi_doxygen.cfg "${PROJECT_SOURCE_DIR}/include/amd_smi/amd_smi.h" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/latex/refman.pdf + COMMAND make > /dev/null + COMMAND cp ${CMAKE_CURRENT_BINARY_DIR}/latex/refman.pdf ${PROJECT_SOURCE_DIR}/docs/${ASMI_MANUAL_NAME}_new.pdf + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/latex/refman.tex + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/latex) + + add_custom_target(docs DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/latex/refman.pdf) + + add_dependencies(${AMD_SMI_TARGET} docs) + install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/latex/refman.pdf + DESTINATION share/doc/${AMD_SMI} + RENAME ${ASMI_MANUAL_NAME}.pdf) + install(FILES ${PROJECT_SOURCE_DIR}/README.md DESTINATION share/doc/${AMD_SMI}) +else() + message("Doxygen or Latex is not found. Will not generate documents.") +endif(DOXYGEN_FOUND AND LATEX_FOUND) diff --git a/projects/amdsmi/src/amd_smi64Config.in b/projects/amdsmi/src/amd_smiConfig.in similarity index 94% rename from projects/amdsmi/src/amd_smi64Config.in rename to projects/amdsmi/src/amd_smiConfig.in index 0bc11f932f..3d720f727e 100755 --- a/projects/amdsmi/src/amd_smi64Config.in +++ b/projects/amdsmi/src/amd_smiConfig.in @@ -43,8 +43,8 @@ * */ -#ifndef INCLUDE_AMD_SMI_AMD_SMI64CONFIG_H_ -#define INCLUDE_AMD_SMI_AMD_SMI64CONFIG_H_ +#ifndef INCLUDE_AMD_SMI_AMD_SMICONFIG_H_ +#define INCLUDE_AMD_SMI_AMD_SMICONFIG_H_ // This file is generated on build. @@ -53,4 +53,4 @@ #define amd_smi_VERSION_PATCH @amd_smi_VERSION_PATCH@ #define amd_smi_VERSION_BUILD "@amd_smi_VERSION_BUILD@" -#endif // INCLUDE_AMD_SMI_AMD_SMI64CONFIG_H_ +#endif // INCLUDE_AMD_SMI_AMD_SMICONFIG_H_ diff --git a/projects/amdsmi/tests/amd_smi_test/CMakeLists.txt b/projects/amdsmi/tests/amd_smi_test/CMakeLists.txt index e7406ab02c..87766c521a 100644 --- a/projects/amdsmi/tests/amd_smi_test/CMakeLists.txt +++ b/projects/amdsmi/tests/amd_smi_test/CMakeLists.txt @@ -2,7 +2,7 @@ option(INSTALL_GTEST "Install GTest (only useful if GTest is not already installed)" OFF) # Try to find googletest -find_package(GTest 1.12.0) +find_package(GTest 1.11.0) # GTest_FOUND is set to TRUE if ANY version is found # GTest_VERSION is set if 1.11.0 or newer version is found @@ -12,7 +12,7 @@ if(NOT GTest_FOUND STREQUAL "TRUE" OR NOT DEFINED GTest_VERSION) FetchContent_Declare( googletest GIT_REPOSITORY https://github.com/google/googletest.git - GIT_TAG release-1.12.0) + GIT_TAG release-1.11.0) FetchContent_MakeAvailable(googletest) endif() @@ -28,29 +28,24 @@ endif() # # Build Src directory # Build Binary directory -# Build Type: Debug Vs Release, 32 Vs 64 +# Build Type: Debug Vs Release # Compiler Version, etc # message("") message("Build Configuration:") -message("-------------IS64BIT: " ${IS64BIT}) -message("-----------BuildType: " ${BUILD_TYPE}) +message("-----------BuildType: " ${CMAKE_BUILD_TYPE}) message("------------Compiler: " ${CMAKE_CXX_COMPILER}) message("-------------Version: " ${CMAKE_CXX_COMPILER_VERSION}) message("--------Proj Src Dir: " ${PROJECT_SOURCE_DIR}) message("--------Proj Bld Dir: " ${PROJECT_BINARY_DIR}) message("--------Proj Lib Dir: " ${PROJECT_BINARY_DIR}/lib) message("--------Proj Exe Dir: " ${PROJECT_BINARY_DIR}/bin) -message("--------RSMI Lib Dir: " ${AMDSMI_LIB_DIR}) message("") - # Other source directories aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/functional functionalSources) -link_directories(${AMDSMI_LIB_DIR}) - -set(TEST "amdsmitst64") +set(TEST "amdsmitst") # Source files aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} tstSources) @@ -61,10 +56,9 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/..) # Build rules add_executable(${TEST} ${tstSources} ${functionalSources}) -target_link_libraries(${TEST} amd_smi64 c stdc++ pthread GTest::gtest_main) +target_link_libraries(${TEST} amd_smi c stdc++ pthread GTest::gtest_main) install( TARGETS ${TEST} - ARCHIVE DESTINATION ${PROJECT_BINARY_DIR}/lib - LIBRARY DESTINATION ${PROJECT_BINARY_DIR}/lib - RUNTIME DESTINATION ${PROJECT_BINARY_DIR}/bin) + DESTINATION ${SHARE_INSTALL_PREFIX}/tests/amd_smi + COMPONENT tests) diff --git a/projects/amdsmi/tests/rocm_smi_test/CMakeLists.txt b/projects/amdsmi/tests/rocm_smi_test/CMakeLists.txt index 233f40647f..30fde142ab 100755 --- a/projects/amdsmi/tests/rocm_smi_test/CMakeLists.txt +++ b/projects/amdsmi/tests/rocm_smi_test/CMakeLists.txt @@ -28,28 +28,23 @@ endif() # # Build Src directory # Build Binary directory -# Build Type: Debug Vs Release, 32 Vs 64 +# Build Type: Debug Vs Release # Compiler Version, etc # message("") message("Build Configuration:") -message("-------------IS64BIT: " ${IS64BIT}) -message("-----------BuildType: " ${BUILD_TYPE}) +message("-----------BuildType: " ${CMAKE_BUILD_TYPE}) message("------------Compiler: " ${CMAKE_CXX_COMPILER}) message("-------------Version: " ${CMAKE_CXX_COMPILER_VERSION}) message("--------Proj Src Dir: " ${PROJECT_SOURCE_DIR}) message("--------Proj Bld Dir: " ${PROJECT_BINARY_DIR}) message("--------Proj Lib Dir: " ${PROJECT_BINARY_DIR}/lib) message("--------Proj Exe Dir: " ${PROJECT_BINARY_DIR}/bin) -message("--------RSMI Lib Dir: " ${RSMI_LIB_DIR}) message("") - # Other source directories aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/functional functionalSources) -link_directories(${RSMI_LIB_DIR}) - set(TEST "rsmitst64") # Source files @@ -61,10 +56,9 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/..) # Build rules add_executable(${TEST} ${tstSources} ${functionalSources}) -target_link_libraries(${TEST} amd_smi64 c stdc++ pthread GTest::gtest_main) +target_link_libraries(${TEST} rocm_smi64 c stdc++ pthread GTest::gtest_main) -install( - TARGETS ${TEST} - ARCHIVE DESTINATION ${PROJECT_BINARY_DIR}/lib - LIBRARY DESTINATION ${PROJECT_BINARY_DIR}/lib - RUNTIME DESTINATION ${PROJECT_BINARY_DIR}/bin) +#install( +# TARGETS ${TEST} +# DESTINATION ${SHARE_INSTALL_PREFIX}/tests/amd_smi +# COMPONENT tests)