Files
rocm-systems/CMakeLists.txt
T

227 lines
8.7 KiB
CMake
Raw Normal View History

2018-05-10 13:19:10 -05:00
################################################################################
2022-04-19 07:18:05 -07:00
## Copyright (c) 2018-2022 Advanced Micro Devices, Inc.
2018-05-10 13:19:10 -05:00
##
2022-04-19 07:18:05 -07:00
## Permission is hereby granted, free of charge, to any person obtaining a copy
## of this software and associated documentation files (the "Software"), to
## deal in the Software without restriction, including without limitation the
## rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
## sell copies of the Software, and to permit persons to whom the Software is
## furnished to do so, subject to the following conditions:
2018-05-10 13:19:10 -05:00
##
2022-04-19 07:18:05 -07:00
## The above copyright notice and this permission notice shall be included in
## all copies or substantial portions of the Software.
2018-05-10 13:19:10 -05:00
##
## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
## IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2022-04-19 07:18:05 -07:00
## FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2018-05-10 13:19:10 -05:00
## AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
2022-04-19 07:18:05 -07:00
## LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
## FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
## IN THE SOFTWARE.
2018-05-10 13:19:10 -05:00
################################################################################
2022-05-20 09:12:22 -07:00
cmake_minimum_required(VERSION 3.18.0)
2018-05-10 13:19:10 -05:00
2022-07-01 09:35:26 -07:00
project(roctracer VERSION 4.1.0)
2022-06-21 10:06:43 -07:00
include(GNUInstallDirs)
# set default ROCM_PATH
if(NOT DEFINED ROCM_PATH)
set(ROCM_PATH "/opt/rocm" CACHE STRING "Default ROCM installation directory")
endif()
2022-05-11 19:49:52 -07:00
## Build is not supported on Windows plaform
if(WIN32)
message(FATAL_ERROR "Windows build is not supported.")
2022-05-20 09:12:22 -07:00
endif()
2022-05-11 19:49:52 -07:00
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
add_compile_options(-Wall -Werror)
2018-05-10 13:19:10 -05:00
2022-05-11 19:49:52 -07:00
set(THREADS_PREFER_PTHREAD_FLAG ON)
2022-05-11 19:49:52 -07:00
find_package(Threads REQUIRED)
2018-05-10 13:19:10 -05:00
find_package(hsa-runtime64 REQUIRED CONFIG PATHS ${ROCM_PATH})
find_package(HIP REQUIRED CONFIG PATHS ${ROCM_PATH})
2018-05-10 13:19:10 -05:00
2022-05-11 19:49:52 -07:00
if(NOT DEFINED LIBRARY_TYPE)
set(LIBRARY_TYPE SHARED)
endif()
2018-11-10 21:33:34 -06:00
2022-05-11 19:49:52 -07:00
## Build libraries
2022-05-20 09:12:22 -07:00
add_subdirectory(src)
2018-11-10 21:33:34 -06:00
2018-11-28 12:36:11 -06:00
## Build tests
2022-05-11 19:49:52 -07:00
if(${LIBRARY_TYPE} STREQUAL SHARED)
2022-05-20 09:12:22 -07:00
add_subdirectory(test)
2020-08-05 00:37:28 -05:00
endif()
2018-11-28 12:36:11 -06:00
2022-08-08 19:20:32 -05:00
## Build Plugins
add_subdirectory(plugin)
2022-05-11 19:49:52 -07:00
if(${LIBRARY_TYPE} STREQUAL SHARED)
2020-08-05 00:37:28 -05:00
2020-03-23 17:35:18 -05:00
## Installation and packaging
2022-05-11 19:49:52 -07:00
if(DEFINED CPACK_PACKAGING_INSTALL_PREFIX)
get_filename_component(DEST_NAME ${CPACK_PACKAGING_INSTALL_PREFIX} NAME)
get_filename_component(DEST_DIR ${CPACK_PACKAGING_INSTALL_PREFIX} DIRECTORY)
set(CPACK_PACKAGING_INSTALL_PREFIX ${DEST_DIR})
2022-05-20 09:12:22 -07:00
endif()
2022-05-11 19:49:52 -07:00
message("-----------Dest-name: ${DEST_NAME}")
message("------Install-prefix: ${CMAKE_INSTALL_PREFIX}")
message("-----------CPACK-dir: ${CPACK_PACKAGING_INSTALL_PREFIX}")
2018-11-10 21:33:34 -06:00
## Packaging directives
2022-05-11 19:49:52 -07:00
set(CPACK_GENERATOR "DEB" "RPM" "TGZ" CACHE STRING "CPACK GENERATOR DEB;RPM")
set(ENABLE_LDCONFIG ON CACHE BOOL "Set library links and caches using ldconfig.")
set(CPACK_PACKAGE_NAME "${PROJECT_NAME}")
2022-05-11 19:49:52 -07:00
set(CPACK_PACKAGE_VENDOR "Advanced Micro Devices, Inc.")
2022-07-01 09:35:26 -07:00
set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
2022-05-11 19:49:52 -07:00
set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
set(CPACK_PACKAGE_CONTACT "ROCm Profiler Support <dl.ROCm-Profiler.support@amd.com>")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "AMD ROCTRACER library")
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
if(DEFINED ENV{ROCM_LIBPATCH_VERSION})
set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION}.$ENV{ROCM_LIBPATCH_VERSION}")
message("Using CPACK_PACKAGE_VERSION ${CPACK_PACKAGE_VERSION}")
2020-10-16 12:20:40 -07:00
endif()
2018-11-10 21:33:34 -06:00
2022-05-20 09:12:22 -07:00
## Install license file
2022-06-23 16:01:06 -07:00
install(FILES ${CPACK_RESOURCE_FILE_LICENSE}
2022-06-21 10:06:43 -07:00
DESTINATION ${CMAKE_INSTALL_DOCDIR}
2022-06-23 16:01:06 -07:00
COMPONENT runtime)
2022-12-02 14:19:14 -08:00
install(FILES ${CPACK_RESOURCE_FILE_LICENSE}
DESTINATION ${CMAKE_INSTALL_DOCDIR}-asan
COMPONENT asan)
2018-11-10 21:33:34 -06:00
## Debian package specific variables
2022-05-11 19:49:52 -07:00
if(DEFINED ENV{CPACK_DEBIAN_PACKAGE_RELEASE})
set(CPACK_DEBIAN_PACKAGE_RELEASE $ENV{CPACK_DEBIAN_PACKAGE_RELEASE})
2020-10-16 12:20:40 -07:00
else()
2022-05-11 19:49:52 -07:00
set(CPACK_DEBIAN_PACKAGE_RELEASE "local")
2020-10-16 12:20:40 -07:00
endif()
2022-05-20 09:12:22 -07:00
message("Using CPACK_DEBIAN_PACKAGE_RELEASE ${CPACK_DEBIAN_PACKAGE_RELEASE}")
2022-06-23 16:01:06 -07:00
set(CPACK_DEB_COMPONENT_INSTALL ON)
2022-05-20 09:12:22 -07:00
set(CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT")
set(CPACK_DEBIAN_RUNTIME_PACKAGE_NAME "${PROJECT_NAME}")
2022-06-23 16:01:06 -07:00
set(CPACK_DEBIAN_RUNTIME_PACKAGE_DEPENDS "rocm-core")
set(CPACK_DEBIAN_DEV_PACKAGE_NAME "${PROJECT_NAME}-dev")
set(CPACK_DEBIAN_DEV_PACKAGE_DEPENDS "${PROJECT_NAME}, rocm-core")
2022-06-23 16:01:06 -07:00
set(CPACK_DEBIAN_TESTS_PACKAGE_NAME "${PROJECT_NAME}-tests")
set(CPACK_DEBIAN_TESTS_PACKAGE_DEPENDS "${PROJECT_NAME}-dev")
2022-12-02 14:19:14 -08:00
# Debian package specific variable for ASAN
set(CPACK_DEBIAN_ASAN_PACKAGE_NAME "${PROJECT_NAME}-asan" )
set(CPACK_DEBIAN_ASAN_PACKAGE_DEPENDS "rocm-core-asan" )
2018-11-10 21:33:34 -06:00
## RPM package specific variables
2022-05-11 19:49:52 -07:00
if(DEFINED ENV{CPACK_RPM_PACKAGE_RELEASE})
set(CPACK_RPM_PACKAGE_RELEASE $ENV{CPACK_RPM_PACKAGE_RELEASE})
2020-10-16 12:20:40 -07:00
else()
2022-05-11 19:49:52 -07:00
set(CPACK_RPM_PACKAGE_RELEASE "local")
2020-10-16 12:20:40 -07:00
endif()
2022-05-11 19:49:52 -07:00
message("Using CPACK_RPM_PACKAGE_RELEASE ${CPACK_RPM_PACKAGE_RELEASE}")
2020-10-16 12:20:40 -07:00
2022-06-01 11:59:50 -05:00
set(CPACK_RPM_PACKAGE_LICENSE "MIT")
2020-10-16 12:20:40 -07:00
## 'dist' breaks manual builds on debian systems due to empty Provides
2022-05-20 09:12:22 -07:00
execute_process(COMMAND rpm --eval %{?dist}
RESULT_VARIABLE PROC_RESULT
OUTPUT_VARIABLE EVAL_RESULT
OUTPUT_STRIP_TRAILING_WHITESPACE)
2020-10-16 12:20:40 -07:00
message("RESULT_VARIABLE ${PROC_RESULT} OUTPUT_VARIABLE: ${EVAL_RESULT}")
2022-05-11 19:49:52 -07:00
if(PROC_RESULT EQUAL "0" AND NOT EVAL_RESULT STREQUAL "")
string(APPEND CPACK_RPM_PACKAGE_RELEASE "%{?dist}")
2020-10-16 12:20:40 -07:00
endif()
2022-06-23 16:01:06 -07:00
set(CPACK_RPM_COMPONENT_INSTALL ON)
2022-05-11 19:49:52 -07:00
set(CPACK_RPM_FILE_NAME "RPM-DEFAULT")
set(CPACK_RPM_RUNTIME_PACKAGE_NAME "${PROJECT_NAME}")
2022-06-23 16:01:06 -07:00
set(CPACK_RPM_RUNTIME_PACKAGE_REQUIRES "rocm-core")
set(CPACK_RPM_DEV_PACKAGE_NAME "${PROJECT_NAME}-devel")
set(CPACK_RPM_DEV_PACKAGE_REQUIRES "${PROJECT_NAME}, rocm-core")
set(CPACK_RPM_DEV_PACKAGE_PROVIDES "${PROJECT_NAME}-dev")
set(CPACK_RPM_DEV_PACKAGE_OBSOLETES "${PROJECT_NAME}-dev")
2022-06-23 16:01:06 -07:00
set(CPACK_RPM_TESTS_PACKAGE_NAME "${PROJECT_NAME}-tests")
set(CPACK_RPM_TESTS_PACKAGE_REQUIRES "${PROJECT_NAME}-devel")
2020-10-16 12:20:40 -07:00
message("CPACK_RPM_PACKAGE_RELEASE: ${CPACK_RPM_PACKAGE_RELEASE}")
2022-12-02 14:19:14 -08:00
# RPM package specific variable for ASAN
set(CPACK_RPM_ASAN_PACKAGE_NAME "${PROJECT_NAME}-asan" )
set(CPACK_RPM_ASAN_PACKAGE_REQUIRES "rocm-core-asan" )
2018-11-10 21:33:34 -06:00
2022-06-01 11:59:50 -05:00
if(NOT ROCM_DEP_ROCMCORE)
2022-06-23 16:01:06 -07:00
string(REGEX REPLACE ",? ?rocm-core" "" CPACK_RPM_RUNTIME_PACKAGE_REQUIRES ${CPACK_RPM_RUNTIME_PACKAGE_REQUIRES})
string(REGEX REPLACE ",? ?rocm-core" "" CPACK_RPM_DEV_PACKAGE_REQUIRES ${CPACK_RPM_DEV_PACKAGE_REQUIRES})
2022-12-02 14:19:14 -08:00
string(REGEX REPLACE ",? ?rocm-core-asan" "" CPACK_RPM_ASAN_PACKAGE_REQUIRES ${CPACK_RPM_ASAN_PACKAGE_REQUIRES})
2022-06-23 16:01:06 -07:00
string(REGEX REPLACE ",? ?rocm-core" "" CPACK_DEBIAN_RUNTIME_PACKAGE_DEPENDS ${CPACK_DEBIAN_RUNTIME_PACKAGE_DEPENDS})
string(REGEX REPLACE ",? ?rocm-core" "" CPACK_DEBIAN_DEV_PACKAGE_DEPENDS ${CPACK_DEBIAN_DEV_PACKAGE_DEPENDS})
2022-12-02 14:19:14 -08:00
string(REGEX REPLACE ",? ?rocm-core-asan" "" CPACK_DEBIAN_ASAN_PACKAGE_DEPENDS ${CPACK_DEBIAN_ASAN_PACKAGE_DEPENDS})
2022-06-01 11:59:50 -05:00
endif()
2022-12-02 14:19:14 -08:00
if(ENABLE_ASAN_PACKAGING)
# ASAN Package requires asan component with only libraries and license file
set(CPACK_COMPONENTS_ALL asan)
else()
set(CPACK_COMPONENTS_ALL runtime dev)
endif()
2022-06-23 16:01:06 -07:00
2022-05-11 19:49:52 -07:00
include(CPack)
2020-08-05 00:37:28 -05:00
2022-06-23 16:01:06 -07:00
cpack_add_component(runtime
DISPLAY_NAME "Runtime"
DESCRIPTION "Dynamic libraries for the ROCtracer")
cpack_add_component(dev
DISPLAY_NAME "Devel"
DESCRIPTION "Header files and documentation for ROCtracer")
2022-06-23 16:01:06 -07:00
cpack_add_component(tests
DISPLAY_NAME "Tests"
DESCRIPTION "Tests for the ROCtracer"
DEPENDS runtime)
2022-12-02 14:19:14 -08:00
cpack_add_component(asan
DISPLAY_NAME "ASAN"
DESCRIPTION "ASAN libraries for the ROCtracer")
2020-08-05 00:37:28 -05:00
endif()
2022-04-29 19:13:30 +00:00
find_package(Doxygen)
if(DOXYGEN_FOUND)
2022-05-20 09:12:22 -07:00
## Set input and output files
2022-04-29 19:13:30 +00:00
set(DOXYGEN_IN ${CMAKE_CURRENT_SOURCE_DIR}/doc/Doxyfile.in)
set(DOXYGEN_OUT ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile)
2022-05-20 09:12:22 -07:00
## Request to configure the file
2022-04-29 19:13:30 +00:00
configure_file(${DOXYGEN_IN} ${DOXYGEN_OUT} @ONLY)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/doc/html/index.html ${CMAKE_CURRENT_BINARY_DIR}/doc/latex/refman.pdf
COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_OUT}
COMMAND make -C ${CMAKE_CURRENT_BINARY_DIR}/doc/latex pdf
MAIN_DEPENDENCY ${DOXYGEN_OUT} ${DOXYGEN_IN}
2022-08-08 19:20:32 -05:00
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/inc/roctracer.h ${CMAKE_CURRENT_SOURCE_DIR}/inc/roctracer_plugin.h
2022-04-29 19:13:30 +00:00
COMMENT "Generating documentation")
add_custom_target(doc DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/doc/html/index.html
${CMAKE_CURRENT_BINARY_DIR}/doc/latex/refman.pdf)
install(FILES
"${CMAKE_CURRENT_BINARY_DIR}/doc/latex/refman.pdf"
2022-06-21 10:06:43 -07:00
DESTINATION ${CMAKE_INSTALL_DOCDIR}
2022-04-29 19:13:30 +00:00
RENAME "roctracer.pdf"
2022-06-23 16:01:06 -07:00
OPTIONAL
COMPONENT dev)
2022-04-29 19:13:30 +00:00
install(DIRECTORY
"${CMAKE_CURRENT_BINARY_DIR}/doc/html/"
2022-06-21 10:06:43 -07:00
DESTINATION ${CMAKE_INSTALL_DATADIR}/html/${PROJECT_NAME}
2022-06-23 16:01:06 -07:00
OPTIONAL
COMPONENT dev)
2022-04-29 19:13:30 +00:00
endif()