diff --git a/projects/rocprofiler-sdk/.github/workflows/continuous_integration.yml b/projects/rocprofiler-sdk/.github/workflows/continuous_integration.yml
index b4ae40ffd3..269706bd91 100644
--- a/projects/rocprofiler-sdk/.github/workflows/continuous_integration.yml
+++ b/projects/rocprofiler-sdk/.github/workflows/continuous_integration.yml
@@ -94,6 +94,7 @@ jobs:
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 20 --slave /usr/bin/g++ g++ /usr/bin/g++-12
python3 -m pip install -r requirements.txt
python3 -m pip install pytest
+ python3 -m pip install 'cmake>=3.22.0'
- name: List Files
shell: bash
@@ -118,6 +119,7 @@ jobs:
-DCMAKE_BUILD_TYPE=${{ matrix.build-type }}
-DCMAKE_INSTALL_PREFIX=/opt/rocprofiler/v2
-DCPACK_GENERATOR='DEB;RPM;TGZ'
+ -DCPACK_PACKAGING_INSTALL_PREFIX="$(realpath /opt/rocm)"
-DPython3_EXECUTABLE=$(which python3)
- name: Install
@@ -125,17 +127,42 @@ jobs:
run:
cmake --build build --target install --parallel 8
+ - name: Build Packaging
+ timeout-minutes: 10
+ run:
+ cmake --build build --target package --parallel 8
+
- name: Test Install Build
timeout-minutes: 10
shell: bash
run: |
CMAKE_PREFIX_PATH=/opt/rocprofiler/v2 cmake -B build-samples samples
+ CMAKE_PREFIX_PATH=/opt/rocprofiler/v2 cmake -B build-tests tests
+ export LD_LIBRARY_PATH=/opt/rocprofiler/v2/lib:${LD_LIBRARY_PATH}
cmake --build build-samples --target all --parallel 8
+ cmake --build build-tests --target all --parallel 8
+ ctest --test-dir build-samples --output-on-failure
+ ctest --test-dir build-tests --output-on-failure
- - name: Build Packaging
- timeout-minutes: 10
- run:
- cmake --build build --target package --parallel 8
+ - name: Install Packages
+ timeout-minutes: 5
+ shell: bash
+ run: |
+ export PATH=${PATH}:/usr/local/sbin:/usr/sbin:/sbin
+ ls -la
+ ls -la ./build
+ for i in $(ls -S ./build/rocprofiler-sdk*.deb); do dpkg -i ${i}; done;
+
+ - name: Test Installed Packages
+ timeout-minutes: 20
+ shell: bash
+ run: |
+ CMAKE_PREFIX_PATH=/opt/rocm cmake -B build-samples-deb /opt/rocm/share/rocprofiler-sdk/samples
+ CMAKE_PREFIX_PATH=/opt/rocm cmake -B build-tests-deb /opt/rocm/share/rocprofiler-sdk/tests
+ cmake --build build-samples-deb --target all --parallel 8
+ cmake --build build-tests-deb --target all --parallel 8
+ ctest --test-dir build-samples-deb --output-on-failure
+ ctest --test-dir build-tests-deb --output-on-failure
- name: Archive production artifacts
uses: actions/upload-artifact@v3
@@ -173,7 +200,7 @@ jobs:
container:
image: compute-artifactory.amd.com:5000/rocm-plus-docker/compute-rocm-dkms-no-npi-hipclang:${{ needs.get_latest_mainline_build_number.outputs.LATEST_BUILD_NUMBER }}-${{ matrix.os }}-stg1
options: --ipc=host --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --cap-add CAP_SYS_PTRACE --cap-add CAP_SYS_ADMIN --security-opt seccomp=unconfined
-
+
# container:
# image: compute-artifactory.amd.com:5000/rocm-plus-docker/compute-rocm-dkms-no-npi-hipclang:${{ needs.get_latest_mainline_build_number.outputs.LATEST_BUILD_NUMBER }}-${{ matrix.os }}-stg1
# options: --memory=128g --cpus=32 --ipc=host --device=/dev/kfd --device=/dev/dri${{ matrix.device }} --group-add video --cap-add=SYS_PTRACE --cap-add CAP_SYS_PTRACE --cap-add CAP_SYS_ADMIN --security-opt seccomp=unconfined
diff --git a/projects/rocprofiler-sdk/CMakeLists.txt b/projects/rocprofiler-sdk/CMakeLists.txt
index a38fa8666b..961a324b97 100644
--- a/projects/rocprofiler-sdk/CMakeLists.txt
+++ b/projects/rocprofiler-sdk/CMakeLists.txt
@@ -30,6 +30,8 @@ project(
DESCRIPTION "ROCm GPU performance analysis"
HOMEPAGE_URL "https://github.com/ROCm-Developer-Tools/rocprofiler-v2-internal")
+set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME "core")
+
find_package(Git)
if(Git_FOUND AND EXISTS "${PROJECT_SOURCE_DIR}/.git")
diff --git a/projects/rocprofiler-sdk/cmake/rocprofiler_config_install.cmake b/projects/rocprofiler-sdk/cmake/rocprofiler_config_install.cmake
index ddd95a096d..8b860d709e 100644
--- a/projects/rocprofiler-sdk/cmake/rocprofiler_config_install.cmake
+++ b/projects/rocprofiler-sdk/cmake/rocprofiler_config_install.cmake
@@ -5,14 +5,22 @@ include(CMakePackageConfigHelpers)
set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME config)
-install(DIRECTORY ${PROJECT_SOURCE_DIR}/samples
- DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}-sdk)
+install(
+ DIRECTORY ${PROJECT_SOURCE_DIR}/samples
+ DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}-sdk
+ COMPONENT samples)
+
+install(
+ DIRECTORY ${PROJECT_SOURCE_DIR}/tests
+ DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}-sdk
+ COMPONENT tests)
install(
EXPORT rocprofiler-sdk-library-targets
FILE rocprofiler-sdk-library-targets.cmake
NAMESPACE rocprofiler::
- DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/cmake/${PROJECT_NAME}-sdk)
+ DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/cmake/${PROJECT_NAME}-sdk
+ COMPONENT development)
# ------------------------------------------------------------------------------#
# install tree
@@ -37,9 +45,9 @@ write_basic_package_version_file(
install(
FILES
${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_DATAROOTDIR}/cmake/${PROJECT_NAME}-sdk/${PROJECT_NAME}-sdk-config.cmake
- ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_DATAROOTDIR}/cmake/${PROJECT_NAME}-sdk/${PROJECT_NAME}-sdk-version.cmake
+ ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_DATAROOTDIR}/cmake/${PROJECT_NAME}-sdk/${PROJECT_NAME}-sdk-config-version.cmake
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/cmake/${PROJECT_NAME}-sdk
- OPTIONAL)
+ COMPONENT development)
export(PACKAGE ${PROJECT_NAME})
diff --git a/projects/rocprofiler-sdk/cmake/rocprofiler_config_packaging.cmake b/projects/rocprofiler-sdk/cmake/rocprofiler_config_packaging.cmake
index 00982fd06b..9b47f1af38 100644
--- a/projects/rocprofiler-sdk/cmake/rocprofiler_config_packaging.cmake
+++ b/projects/rocprofiler-sdk/cmake/rocprofiler_config_packaging.cmake
@@ -3,15 +3,16 @@
#
# Add packaging directives
-set(CPACK_PACKAGE_NAME ${PROJECT_NAME})
+set(CPACK_PACKAGE_NAME ${PROJECT_NAME}-sdk)
set(CPACK_PACKAGE_VENDOR "Advanced Micro Devices, Inc.")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PROJECT_DESCRIPTION}")
set(CPACK_PACKAGE_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}")
set(CPACK_PACKAGE_VERSION_MINOR "${PROJECT_VERSION_MINOR}")
set(CPACK_PACKAGE_VERSION_PATCH "${PROJECT_VERSION_PATCH}")
-set(CPACK_PACKAGE_CONTACT "jonathan.madsen@amd.com")
+set(CPACK_PACKAGE_CONTACT "ROCm Profiler Support
")
set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE")
set(CPACK_INCLUDE_TOPLEVEL_DIRECTORY OFF)
+set(CPACK_STRIP_FILES OFF) # eventually this should be set to ON
set(ROCPROFILER_CPACK_SYSTEM_NAME
"${CMAKE_SYSTEM_NAME}"
CACHE STRING "System name, e.g. Linux or Ubuntu-18.04")
@@ -29,12 +30,101 @@ set(ROCPROFILER_PACKAGE_FILE_NAME
)
rocprofiler_add_feature(ROCPROFILER_PACKAGE_FILE_NAME "CPack filename")
+get_cmake_property(ROCPROFILER_PACKAGING_COMPONENTS COMPONENTS)
+
+rocprofiler_add_feature(ROCPROFILER_PACKAGING_COMPONENTS "Packaging components")
+list(REMOVE_ITEM ROCPROFILER_PACKAGING_COMPONENTS "Development" "Unspecified")
+list(LENGTH ROCPROFILER_PACKAGING_COMPONENTS NUM_ROCPROFILER_PACKAGING_COMPONENTS)
+
+# the packages we will generate
+set(ROCPROFILER_COMPONENT_GROUPS "core" "tests")
+
+set(COMPONENT_GROUP_core_COMPONENTS "core" "development" "samples" "tools" "Development"
+ "Unspecified")
+set(COMPONENT_GROUP_tests_COMPONENTS "tests")
+
+# variables for each component group. Note: eventually we will probably want to separate
+# the core to just be the runtime libraries, development to be the headers and cmake
+# files, the samples to just be the samples, and tools just be the tool files but right
+# now we are just combining core, development, samples, and tools into one package
+set(COMPONENT_NAME_core "")
+set(COMPONENT_NAME_development "dev")
+set(COMPONENT_NAME_samples "samples")
+set(COMPONENT_NAME_tools "tools")
+set(COMPONENT_NAME_tests "tests")
+
+set(COMPONENT_SEP_core "")
+set(COMPONENT_SEP_development "-")
+set(COMPONENT_SEP_samples "-")
+set(COMPONENT_SEP_tools "-")
+set(COMPONENT_SEP_tests "-")
+
+set(COMPONENT_DEP_core "")
+set(COMPONENT_DEP_development "rocprofiler-sdk")
+set(COMPONENT_DEP_samples "rocprofiler-sdk")
+set(COMPONENT_DEP_tools "rocprofiler-sdk")
+set(COMPONENT_DEP_tests "rocprofiler-sdk")
+
+set(COMPONENT_DESC_core "rocprofiler-sdk libraries, headers, samples, and tools")
+set(COMPONENT_DESC_development "rocprofiler-sdk development files")
+set(COMPONENT_DESC_samples "rocprofiler-sdk samples")
+set(COMPONENT_DESC_tools "rocprofiler-sdk tools")
+set(COMPONENT_DESC_tests "rocprofiler-sdk tests")
+
+if(NOT NUM_ROCPROFILER_PACKAGING_COMPONENTS EQUAL 5)
+ message(
+ FATAL_ERROR
+ "Error new install component needs COMPONENT_NAME_* and COMPONENT_SEP_* entries"
+ )
+endif()
+
+if(ROCM_DEP_ROCMCORE OR ROCPROFILER_DEP_ROCMCORE)
+ set(CPACK_DEBIAN_PACKAGE_DEPENDS "rocm-core")
+ set(CPACK_RPM_PACKAGE_REQUIRES "rocm-core")
+else()
+ set(CPACK_DEBIAN_PACKAGE_DEPENDS "")
+ set(CPACK_RPM_PACKAGE_REQUIRES "")
+endif()
+
+foreach(COMPONENT_GROUP ${ROCPROFILER_COMPONENT_GROUPS})
+ set(_SEP "${COMPONENT_SEP_${COMPONENT_GROUP}}")
+ set(_DEP "${COMPONENT_DEP_${COMPONENT_GROUP}}")
+ set(_NAME "${COMPONENT_NAME_${COMPONENT_GROUP}}")
+ set(_DESC "${COMPONENT_DESC_${COMPONENT_GROUP}}")
+
+ cpack_add_component_group(
+ ${COMPONENT_GROUP}
+ DISPLAY_NAME "${_NAME}"
+ DESCRIPTION "${_DESC}")
+
+ if(ROCM_DEP_ROCMCORE OR ROCPROFILER_DEP_ROCMCORE)
+ list(INSERT _DEP 0 "rocm-core")
+ endif()
+
+ string(TOUPPER "${COMPONENT_GROUP}" UCOMPONENT)
+ set(CPACK_DEBIAN_${UCOMPONENT}_PACKAGE_NAME "${PROJECT_NAME}-sdk${_SEP}${_NAME}")
+ set(CPACK_DEBIAN_${UCOMPONENT}_PACKAGE_DEPENDS "${_DEP}")
+ set(CPACK_RPM_${UCOMPONENT}_PACKAGE_NAME "${PROJECT_NAME}-sdk${_SEP}${_NAME}")
+ set(CPACK_RPM_${UCOMPONENT}_PACKAGE_REQUIRES "${_DEP}")
+
+ foreach(COMPONENT ${COMPONENT_GROUP_${COMPONENT_GROUP}_COMPONENTS})
+ cpack_add_component(${COMPONENT} REQUIRED GROUP "${COMPONENT_GROUP}")
+ endforeach()
+endforeach()
+
# -------------------------------------------------------------------------------------- #
#
# Debian package specific variables
#
# -------------------------------------------------------------------------------------- #
+set(CPACK_DEBIAN_PACKAGE_EPOCH 0)
+set(CPACK_DEB_COMPONENT_INSTALL ON)
+set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON) # auto-generate deps based on shared libs
+set(CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS ON) # generate list of shared libs provided by
+ # package
+set(CPACK_DEBIAN_TESTS_PACKAGE_SHLIBDEPS OFF) # disable for tests package
+set(CPACK_DEBIAN_TESTS_PACKAGE_GENERATE_SHLIBS OFF) # disable for tests package
set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "${PROJECT_HOMEPAGE_URL}")
set(CPACK_DEBIAN_PACKAGE_RELEASE
"${ROCPROFILER_CPACK_SYSTEM_NAME}${ROCPROFILER_CPACK_PACKAGE_SUFFIX}")
@@ -69,6 +159,12 @@ if(DEFINED CPACK_PACKAGING_INSTALL_PREFIX)
set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION "${CPACK_PACKAGING_INSTALL_PREFIX}")
endif()
+set(CPACK_RPM_PACKAGE_EPOCH 0)
+set(CPACK_RPM_COMPONENT_INSTALL ON)
+set(CPACK_RPM_PACKAGE_AUTOREQ ON) # auto-generate deps based on shared libs
+set(CPACK_RPM_PACKAGE_AUTOPROV ON) # generate list of shared libs provided by package
+set(CPACK_RPM_TESTS_PACKAGE_AUTOREQ OFF) # disable for tests package
+set(CPACK_RPM_TESTS_PACKAGE_AUTOPROV OFF) # disable for tests package
set(CPACK_RPM_PACKAGE_RELEASE
"${ROCPROFILER_CPACK_SYSTEM_NAME}${ROCPROFILER_CPACK_PACKAGE_SUFFIX}")
string(REGEX REPLACE "([a-zA-Z])-([0-9])" "\\1\\2" CPACK_RPM_PACKAGE_RELEASE
diff --git a/projects/rocprofiler-sdk/samples/CMakeLists.txt b/projects/rocprofiler-sdk/samples/CMakeLists.txt
index dad701a647..f185b55af2 100644
--- a/projects/rocprofiler-sdk/samples/CMakeLists.txt
+++ b/projects/rocprofiler-sdk/samples/CMakeLists.txt
@@ -5,6 +5,7 @@ cmake_minimum_required(VERSION 3.21.0 FATAL_ERROR)
project(rocprofiler-sdk-samples LANGUAGES C CXX)
+set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME "samples")
if(CMAKE_BUILD_TYPE STREQUAL "")
set(CMAKE_BUILD_TYPE
"RelWithDebInfo"
diff --git a/projects/rocprofiler-sdk/source/bin/CMakeLists.txt b/projects/rocprofiler-sdk/source/bin/CMakeLists.txt
index 266ea9e5ac..e8d0562233 100644
--- a/projects/rocprofiler-sdk/source/bin/CMakeLists.txt
+++ b/projects/rocprofiler-sdk/source/bin/CMakeLists.txt
@@ -9,4 +9,4 @@ install(
FILES rocprofv3
DESTINATION ${CMAKE_INSTALL_BINDIR}
PERMISSIONS OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
- COMPONENT runtime)
+ COMPONENT tools)
diff --git a/projects/rocprofiler-sdk/source/include/CMakeLists.txt b/projects/rocprofiler-sdk/source/include/CMakeLists.txt
index a3392e5dfb..30c49d5ae8 100644
--- a/projects/rocprofiler-sdk/source/include/CMakeLists.txt
+++ b/projects/rocprofiler-sdk/source/include/CMakeLists.txt
@@ -1,4 +1,6 @@
#
#
#
+set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME "development")
+
add_subdirectory(rocprofiler-sdk)
diff --git a/projects/rocprofiler-sdk/source/include/rocprofiler-sdk/CMakeLists.txt b/projects/rocprofiler-sdk/source/include/rocprofiler-sdk/CMakeLists.txt
index b844b78e49..a5414b7974 100644
--- a/projects/rocprofiler-sdk/source/include/rocprofiler-sdk/CMakeLists.txt
+++ b/projects/rocprofiler-sdk/source/include/rocprofiler-sdk/CMakeLists.txt
@@ -33,8 +33,10 @@ set(ROCPROFILER_HEADER_FILES
spm.h
${CMAKE_CURRENT_BINARY_DIR}/version.h)
-install(FILES ${ROCPROFILER_HEADER_FILES}
- DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rocprofiler-sdk)
+install(
+ FILES ${ROCPROFILER_HEADER_FILES}
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rocprofiler-sdk
+ COMPONENT development)
add_subdirectory(hip)
add_subdirectory(hsa)
diff --git a/projects/rocprofiler-sdk/source/include/rocprofiler-sdk/hip/CMakeLists.txt b/projects/rocprofiler-sdk/source/include/rocprofiler-sdk/hip/CMakeLists.txt
index c98a1cbab2..83209cfde2 100644
--- a/projects/rocprofiler-sdk/source/include/rocprofiler-sdk/hip/CMakeLists.txt
+++ b/projects/rocprofiler-sdk/source/include/rocprofiler-sdk/hip/CMakeLists.txt
@@ -5,5 +5,7 @@
#
set(ROCPROFILER_HIP_HEADER_FILES api_args.h api_id.h)
-install(FILES ${ROCPROFILER_HIP_HEADER_FILES}
- DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rocprofiler-sdk/hip)
+install(
+ FILES ${ROCPROFILER_HIP_HEADER_FILES}
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rocprofiler-sdk/hip
+ COMPONENT development)
diff --git a/projects/rocprofiler-sdk/source/include/rocprofiler-sdk/hsa/CMakeLists.txt b/projects/rocprofiler-sdk/source/include/rocprofiler-sdk/hsa/CMakeLists.txt
index 142bc03639..ea48e8123e 100644
--- a/projects/rocprofiler-sdk/source/include/rocprofiler-sdk/hsa/CMakeLists.txt
+++ b/projects/rocprofiler-sdk/source/include/rocprofiler-sdk/hsa/CMakeLists.txt
@@ -5,5 +5,7 @@
#
set(ROCPROFILER_HSA_HEADER_FILES api_args.h api_id.h table_api_id.h)
-install(FILES ${ROCPROFILER_HSA_HEADER_FILES}
- DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rocprofiler-sdk/hsa)
+install(
+ FILES ${ROCPROFILER_HSA_HEADER_FILES}
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rocprofiler-sdk/hsa
+ COMPONENT development)
diff --git a/projects/rocprofiler-sdk/source/include/rocprofiler-sdk/marker/CMakeLists.txt b/projects/rocprofiler-sdk/source/include/rocprofiler-sdk/marker/CMakeLists.txt
index eae50bee32..1833198590 100644
--- a/projects/rocprofiler-sdk/source/include/rocprofiler-sdk/marker/CMakeLists.txt
+++ b/projects/rocprofiler-sdk/source/include/rocprofiler-sdk/marker/CMakeLists.txt
@@ -5,5 +5,7 @@
#
set(ROCPROFILER_MARKER_HEADER_FILES api_args.h api_id.h)
-install(FILES ${ROCPROFILER_MARKER_HEADER_FILES}
- DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rocprofiler-sdk/marker)
+install(
+ FILES ${ROCPROFILER_MARKER_HEADER_FILES}
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rocprofiler-sdk/marker
+ COMPONENT development)
diff --git a/projects/rocprofiler-sdk/source/lib/CMakeLists.txt b/projects/rocprofiler-sdk/source/lib/CMakeLists.txt
index c2e6d9f24f..df1677a215 100644
--- a/projects/rocprofiler-sdk/source/lib/CMakeLists.txt
+++ b/projects/rocprofiler-sdk/source/lib/CMakeLists.txt
@@ -1,8 +1,11 @@
#
#
#
+set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME "core")
add_subdirectory(common)
add_subdirectory(rocprofiler-sdk)
+
+set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME "tools")
add_subdirectory(rocprofiler-sdk-tool)
add_subdirectory(plugins)
diff --git a/projects/rocprofiler-sdk/tests/CMakeLists.txt b/projects/rocprofiler-sdk/tests/CMakeLists.txt
index 2f7aa4a554..cb5f7b2406 100644
--- a/projects/rocprofiler-sdk/tests/CMakeLists.txt
+++ b/projects/rocprofiler-sdk/tests/CMakeLists.txt
@@ -3,43 +3,36 @@
#
cmake_minimum_required(VERSION 3.21.0 FATAL_ERROR)
-project(rocprofiler-tests LANGUAGES C CXX)
-
if(COMMAND rocprofiler_deactivate_clang_tidy)
rocprofiler_deactivate_clang_tidy()
endif()
-if(NOT TARGET rocprofiler::cereal)
- get_filename_component(ROCPROFILER_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/.."
- REALPATH)
+project(rocprofiler-tests LANGUAGES C CXX)
- rocprofiler_checkout_git_submodule(
- RECURSIVE
- RELATIVE_PATH external/cereal
- WORKING_DIRECTORY ${ROCPROFILER_SOURCE_DIR}
- REPO_URL https://github.com/jrmadsen/cereal.git
- REPO_BRANCH "rocprofiler")
+set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME "tests")
- add_library(rocprofiler-cereal INTERFACE)
- add_library(rocprofiler::cereal ALIAS rocprofiler-cereal)
- target_compile_definitions(rocprofiler-cereal
- INTERFACE $)
- target_include_directories(
- rocprofiler-cereal
- INTERFACE $)
+if(NOT CMAKE_BUILD_TYPE)
+ set(CMAKE_BUILD_TYPE
+ "Release"
+ CACHE STRING "" FORCE)
endif()
-add_library(rocprofiler-tests-build-flags INTERFACE)
-add_library(rocprofiler::tests-build-flags ALIAS rocprofiler-tests-build-flags)
-target_compile_options(rocprofiler-tests-build-flags INTERFACE -W -Wall -Wextra -Wshadow)
+set(CMAKE_CXX_STANDARD 17)
+set(CMAKE_CXX_EXTENSIONS OFF)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+set(CMAKE_HIP_STANDARD 17)
+set(CMAKE_HIP_EXTENSIONS OFF)
+set(CMAKE_HIP_STANDARD_REQUIRED ON)
-if(ROCPROFILER_BUILD_CI OR ROCPROFILER_BUILD_WERROR)
- target_compile_options(rocprofiler-tests-build-flags INTERFACE -Werror)
-endif()
+enable_testing()
+include(CTest)
# needed for validation
find_package(Python3 REQUIRED)
+# common utilities
+add_subdirectory(common)
+
# applications used by integration tests
add_subdirectory(apps)
diff --git a/projects/rocprofiler-sdk/tests/apps/reproducible-runtime/CMakeLists.txt b/projects/rocprofiler-sdk/tests/apps/reproducible-runtime/CMakeLists.txt
index 96b1e2d882..0a58bd9f38 100644
--- a/projects/rocprofiler-sdk/tests/apps/reproducible-runtime/CMakeLists.txt
+++ b/projects/rocprofiler-sdk/tests/apps/reproducible-runtime/CMakeLists.txt
@@ -52,4 +52,4 @@ endif()
install(
TARGETS reproducible-runtime
DESTINATION bin
- COMPONENT rocprofiler-test-apps)
+ COMPONENT tests)
diff --git a/projects/rocprofiler-sdk/tests/apps/transpose/CMakeLists.txt b/projects/rocprofiler-sdk/tests/apps/transpose/CMakeLists.txt
index a3709666b4..1391f681a2 100644
--- a/projects/rocprofiler-sdk/tests/apps/transpose/CMakeLists.txt
+++ b/projects/rocprofiler-sdk/tests/apps/transpose/CMakeLists.txt
@@ -51,4 +51,4 @@ endif()
install(
TARGETS transpose
DESTINATION bin
- COMPONENT rocprofiler-test-apps)
+ COMPONENT tests)
diff --git a/projects/rocprofiler-sdk/tests/common/CMakeLists.txt b/projects/rocprofiler-sdk/tests/common/CMakeLists.txt
new file mode 100644
index 0000000000..49b58aae4c
--- /dev/null
+++ b/projects/rocprofiler-sdk/tests/common/CMakeLists.txt
@@ -0,0 +1,84 @@
+#
+# common utilities for tests
+#
+
+# build flags
+add_library(rocprofiler-tests-build-flags INTERFACE)
+add_library(rocprofiler::tests-build-flags ALIAS rocprofiler-tests-build-flags)
+target_compile_options(rocprofiler-tests-build-flags INTERFACE -W -Wall -Wextra -Wshadow)
+target_compile_features(rocprofiler-tests-build-flags INTERFACE cxx_std_17)
+
+if(ROCPROFILER_BUILD_CI OR ROCPROFILER_BUILD_WERROR)
+ target_compile_options(rocprofiler-tests-build-flags INTERFACE -Werror)
+endif()
+
+# serialization library
+if(NOT TARGET rocprofiler::cereal)
+ get_filename_component(ROCPROFILER_SOURCE_DIR "${PROJECT_SOURCE_DIR}/.." REALPATH)
+
+ add_library(rocprofiler-cereal INTERFACE)
+ add_library(rocprofiler::cereal ALIAS rocprofiler-cereal)
+ target_compile_definitions(rocprofiler-cereal
+ INTERFACE $)
+
+ if(EXISTS ${ROCPROFILER_SOURCE_DIR}/external AND COMMAND
+ rocprofiler_checkout_git_submodule)
+ rocprofiler_checkout_git_submodule(
+ RECURSIVE
+ RELATIVE_PATH external/cereal
+ WORKING_DIRECTORY ${ROCPROFILER_SOURCE_DIR}
+ REPO_URL https://github.com/jrmadsen/cereal.git
+ REPO_BRANCH "rocprofiler")
+
+ target_include_directories(
+ rocprofiler-cereal SYSTEM
+ INTERFACE $
+ )
+ else()
+ include(FetchContent)
+
+ set(FETCHCONTENT_BASE_DIR ${PROJECT_BINARY_DIR}/external)
+
+ fetchcontent_declare(
+ cereal
+ GIT_REPOSITORY https://github.com/jrmadsen/cereal.git
+ GIT_TAG rocprofiler
+ SOURCE_DIR ${PROJECT_BINARY_DIR}/external/cereal BINARY_DIR
+ ${PROJECT_BINARY_DIR}/external/build/cereal-build SUBBUILD_DIR
+ ${PROJECT_BINARY_DIR}/external/build/cereal-subdir)
+
+ # This particular version of projD requires workarounds
+ fetchcontent_getproperties(cereal)
+
+ if(NOT cereal_POPULATED)
+ fetchcontent_populate(cereal)
+ endif()
+
+ target_include_directories(
+ rocprofiler-cereal SYSTEM
+ INTERFACE $)
+ endif()
+endif()
+
+# common utilities
+cmake_path(GET CMAKE_CURRENT_SOURCE_DIR PARENT_PATH COMMON_LIBRARY_INCLUDE_DIR)
+
+add_library(rocprofiler-tests-common-library INTERFACE)
+add_library(rocprofiler::tests-common-library ALIAS rocprofiler-tests-common-library)
+target_link_libraries(rocprofiler-tests-common-library
+ INTERFACE rocprofiler::tests-build-flags rocprofiler::cereal)
+target_compile_features(rocprofiler-tests-common-library INTERFACE cxx_std_17)
+target_include_directories(rocprofiler-tests-common-library
+ INTERFACE ${COMMON_LIBRARY_INCLUDE_DIR})
+
+set(EXTERNAL_SUBMODULE_DIR "${PROJECT_SOURCE_DIR}/../external")
+cmake_path(ABSOLUTE_PATH EXTERNAL_SUBMODULE_DIR NORMALIZE)
+
+if(EXISTS ${EXTERNAL_SUBMODULE_DIR}/filesystem/include/ghc/filesystem.hpp)
+ target_compile_definitions(
+ rocprofiler-tests-common-library
+ INTERFACE $)
+ target_include_directories(
+ rocprofiler-tests-common-library SYSTEM
+ INTERFACE $)
+endif()
diff --git a/projects/rocprofiler-sdk/tests/common/defines.hpp b/projects/rocprofiler-sdk/tests/common/defines.hpp
new file mode 100644
index 0000000000..36c7c597ab
--- /dev/null
+++ b/projects/rocprofiler-sdk/tests/common/defines.hpp
@@ -0,0 +1,40 @@
+// MIT License
+//
+// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved.
+//
+// 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:
+//
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// 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.
+
+#pragma once
+
+#define ROCPROFILER_CALL(result, msg) \
+ { \
+ rocprofiler_status_t CHECKSTATUS = result; \
+ if(CHECKSTATUS != ROCPROFILER_STATUS_SUCCESS) \
+ { \
+ std::string status_name = rocprofiler_get_status_name(CHECKSTATUS); \
+ std::string status_msg = rocprofiler_get_status_string(CHECKSTATUS); \
+ std::cerr << "[" #result "][" << __FILE__ << ":" << __LINE__ << "] " << msg \
+ << " failed with error code " << status_name << " (" << CHECKSTATUS \
+ << "): " << status_msg << std::endl; \
+ std::stringstream errmsg{}; \
+ errmsg << "[" #result "][" << __FILE__ << ":" << __LINE__ << "] " << msg " failure (" \
+ << status_name << ": " << status_msg << ")"; \
+ throw std::runtime_error(errmsg.str()); \
+ } \
+ }
diff --git a/projects/rocprofiler-sdk/tests/common/filesystem.hpp b/projects/rocprofiler-sdk/tests/common/filesystem.hpp
new file mode 100644
index 0000000000..8cc6af3ebe
--- /dev/null
+++ b/projects/rocprofiler-sdk/tests/common/filesystem.hpp
@@ -0,0 +1,77 @@
+// MIT License
+//
+// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved.
+//
+// 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:
+//
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// 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.
+
+#pragma once
+
+#if !defined(ROCPROFILER_TESTS_HAS_GHC_LIB_FILESYSTEM)
+# if defined __has_include
+# if __has_include()
+# define ROCPROFILER_TESTS_HAS_GHC_LIB_FILESYSTEM 1
+# else
+# define ROCPROFILER_TESTS_HAS_GHC_LIB_FILESYSTEM 0
+# endif
+# else
+# define ROCPROFILER_TESTS_HAS_GHC_LIB_FILESYSTEM 0
+# endif
+#endif
+
+#if ROCPROFILER_TESTS_HAS_GHC_LIB_FILESYSTEM == 0
+# if defined __has_include
+# if __has_include()
+# include
+# endif
+# endif
+
+# if defined(__cpp_lib_filesystem)
+# define ROCPROFILER_TESTS_HAS_CPP_LIB_FILESYSTEM 1
+# else
+# if defined __has_include
+# if __has_include()
+# define ROCPROFILER_TESTS_HAS_CPP_LIB_FILESYSTEM 1
+# endif
+# endif
+# endif
+#endif
+
+// include the correct filesystem header
+#if defined(ROCPROFILER_TESTS_HAS_GHC_LIB_FILESYSTEM) && \
+ ROCPROFILER_TESTS_HAS_GHC_LIB_FILESYSTEM > 0
+# include
+#elif defined(ROCPROFILER_TESTS_HAS_CPP_LIB_FILESYSTEM) && \
+ ROCPROFILER_TESTS_HAS_CPP_LIB_FILESYSTEM > 0
+# include
+#else
+# include
+#endif
+
+namespace common
+{
+#if defined(ROCPROFILER_TESTS_HAS_GHC_LIB_FILESYSTEM) && \
+ ROCPROFILER_TESTS_HAS_GHC_LIB_FILESYSTEM > 0
+namespace fs = ::ghc::filesystem; // NOLINT
+#elif defined(ROCPROFILER_TESTS_HAS_CPP_LIB_FILESYSTEM) && \
+ ROCPROFILER_TESTS_HAS_CPP_LIB_FILESYSTEM > 0
+namespace fs = ::std::filesystem; // NOLINT
+#else
+namespace fs = ::std::experimental::filesystem; // NOLINT
+#endif
+} // namespace common
diff --git a/projects/rocprofiler-sdk/tests/kernel-tracing/serialization.hpp b/projects/rocprofiler-sdk/tests/common/serialization.hpp
similarity index 97%
rename from projects/rocprofiler-sdk/tests/kernel-tracing/serialization.hpp
rename to projects/rocprofiler-sdk/tests/common/serialization.hpp
index 0a72a688dd..c5a61c614d 100644
--- a/projects/rocprofiler-sdk/tests/kernel-tracing/serialization.hpp
+++ b/projects/rocprofiler-sdk/tests/common/serialization.hpp
@@ -56,15 +56,17 @@
#include
#include
-#define SAVE_DATA_FIELD(FIELD) ar(cereal::make_nvp(#FIELD, data.FIELD))
-#define SAVE_DATA_VALUE(NAME, VALUE) ar(cereal::make_nvp(NAME, data.VALUE))
-#define SAVE_DATA_CSTR(FIELD) ar(cereal::make_nvp(#FIELD, std::string{data.FIELD}))
+#define SAVE_DATA_FIELD(FIELD) ar(make_nvp(#FIELD, data.FIELD))
+#define SAVE_DATA_VALUE(NAME, VALUE) ar(make_nvp(NAME, data.VALUE))
+#define SAVE_DATA_CSTR(FIELD) ar(make_nvp(#FIELD, std::string{data.FIELD}))
#define SAVE_DATA_BITFIELD(NAME, VALUE) \
{ \
auto _val = data.VALUE; \
- ar(cereal::make_nvp(NAME, _val)); \
+ ar(make_nvp(NAME, _val)); \
}
+namespace cereal
+{
template
void
save(ArchiveT& ar, rocprofiler_context_id_t data)
@@ -441,12 +443,13 @@ save(ArchiveT& ar, const rocprofiler_agent_t& data)
vec.reserve(size);
for(uint64_t i = 0; i < size; ++i)
vec.emplace_back(value[i]);
- ar(cereal::make_nvp(name, vec));
+ ar(make_nvp(name, vec));
};
generate("mem_banks", data.mem_banks, data.mem_banks_count);
generate("caches", data.caches, data.caches_count);
generate("io_links", data.io_links, data.io_links_count);
}
+} // namespace cereal
#undef SAVE_DATA_FIELD
diff --git a/projects/rocprofiler-sdk/tests/kernel-tracing/CMakeLists.txt b/projects/rocprofiler-sdk/tests/kernel-tracing/CMakeLists.txt
index 535b06fc73..6fe854790f 100644
--- a/projects/rocprofiler-sdk/tests/kernel-tracing/CMakeLists.txt
+++ b/projects/rocprofiler-sdk/tests/kernel-tracing/CMakeLists.txt
@@ -3,7 +3,10 @@
#
cmake_minimum_required(VERSION 3.21.0 FATAL_ERROR)
-project(rocprofiler-tests-kernel-tracing LANGUAGES CXX)
+project(
+ rocprofiler-tests-kernel-tracing
+ LANGUAGES CXX
+ VERSION 0.0.0)
find_package(rocprofiler-sdk REQUIRED)
@@ -11,16 +14,20 @@ add_library(kernel-tracing-test-tool SHARED)
target_sources(kernel-tracing-test-tool PRIVATE kernel-tracing.cpp)
target_link_libraries(
kernel-tracing-test-tool
- PRIVATE rocprofiler::rocprofiler rocprofiler::cereal
- $)
+ PRIVATE rocprofiler::rocprofiler rocprofiler::cereal rocprofiler::tests-build-flags
+ rocprofiler::tests-common-library)
set_target_properties(
- kernel-tracing-test-tool PROPERTIES INSTALL_RPATH "\$ORIGIN:\$ORIGIN/.."
- INSTALL_RPATH_USE_LINK_PATH ON)
+ kernel-tracing-test-tool
+ PROPERTIES INSTALL_RPATH "\$ORIGIN:\$ORIGIN/.."
+ INSTALL_RPATH_USE_LINK_PATH ON
+ SOVERSION ${PROJECT_VERSION_MINOR}
+ VERSION
+ ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH})
install(
TARGETS kernel-tracing-test-tool
DESTINATION lib/rocprofiler-sdk
- COMPONENT rocprofiler-test-libs)
+ COMPONENT tests)
if(ROCPROFILER_MEMCHECK_PRELOAD_ENV)
set(PRELOAD_ENV
diff --git a/projects/rocprofiler-sdk/tests/kernel-tracing/kernel-tracing.cpp b/projects/rocprofiler-sdk/tests/kernel-tracing/kernel-tracing.cpp
index b1fd32e143..e12fb88f76 100644
--- a/projects/rocprofiler-sdk/tests/kernel-tracing/kernel-tracing.cpp
+++ b/projects/rocprofiler-sdk/tests/kernel-tracing/kernel-tracing.cpp
@@ -31,8 +31,9 @@
* @brief Test rocprofiler tool
*/
-#include "lib/common/filesystem.hpp"
-#include "serialization.hpp"
+#include "common/defines.hpp"
+#include "common/filesystem.hpp"
+#include "common/serialization.hpp"
#include
#include
@@ -62,23 +63,6 @@
#include
#include
-#define ROCPROFILER_CALL(result, msg) \
- { \
- rocprofiler_status_t CHECKSTATUS = result; \
- if(CHECKSTATUS != ROCPROFILER_STATUS_SUCCESS) \
- { \
- std::string status_name = rocprofiler_get_status_name(CHECKSTATUS); \
- std::string status_msg = rocprofiler_get_status_string(CHECKSTATUS); \
- std::cerr << "[" #result "][" << __FILE__ << ":" << __LINE__ << "] " << msg \
- << " failed with error code " << status_name << " (" << CHECKSTATUS \
- << "): " << status_msg << std::endl; \
- std::stringstream errmsg{}; \
- errmsg << "[" #result "][" << __FILE__ << ":" << __LINE__ << "] " << msg " failure (" \
- << status_name << ": " << status_msg << ")"; \
- throw std::runtime_error(errmsg.str()); \
- } \
- }
-
namespace client
{
namespace