From 309a8e069bd416ce73233dd13cb85682bb9e13a8 Mon Sep 17 00:00:00 2001 From: "Jonathan R. Madsen" Date: Fri, 15 Dec 2023 14:39:13 -0600 Subject: [PATCH] Update packaging (#306) * Restructured tests - support standalone compilation - move tests/kernel-tracing/serialization.hpp to tests/common/serialization.hpp - created tests/common library - handle cloning of cereal library in standalone build * Update install and packaging * Update cmake/rocprofiler_config_packaging.cmake - condense core, samples, development, and tools install components into single rocprofiler-sdk package - keep tests install component in separate rocprofiler-sdk-tests package * Update CI workflow to test install and packaging * Update CI workflow - install newer cmake for packaging checks * Update cmake/rocprofiler_config_packaging.cmake - disable auto-generation of shared-lib deps and provides for tests package * Update CI workflow - add sbin to PATH for dpkg install * Update CI workflow - remove using github.workspace when installing packages * Update CI workflow - hack to fix ordering of dpkg install * Update CI workflow - whitespace cleanup [ROCm/rocprofiler-sdk commit: 8ed68ce4f3b093e7044ed6177e430af04ac86ecd] --- .../workflows/continuous_integration.yml | 37 ++++++- projects/rocprofiler-sdk/CMakeLists.txt | 2 + .../cmake/rocprofiler_config_install.cmake | 18 +++- .../cmake/rocprofiler_config_packaging.cmake | 100 +++++++++++++++++- .../rocprofiler-sdk/samples/CMakeLists.txt | 1 + .../rocprofiler-sdk/source/bin/CMakeLists.txt | 2 +- .../source/include/CMakeLists.txt | 2 + .../include/rocprofiler-sdk/CMakeLists.txt | 6 +- .../rocprofiler-sdk/hip/CMakeLists.txt | 6 +- .../rocprofiler-sdk/hsa/CMakeLists.txt | 6 +- .../rocprofiler-sdk/marker/CMakeLists.txt | 6 +- .../rocprofiler-sdk/source/lib/CMakeLists.txt | 3 + projects/rocprofiler-sdk/tests/CMakeLists.txt | 41 +++---- .../apps/reproducible-runtime/CMakeLists.txt | 2 +- .../tests/apps/transpose/CMakeLists.txt | 2 +- .../tests/common/CMakeLists.txt | 84 +++++++++++++++ .../rocprofiler-sdk/tests/common/defines.hpp | 40 +++++++ .../tests/common/filesystem.hpp | 77 ++++++++++++++ .../serialization.hpp | 13 ++- .../tests/kernel-tracing/CMakeLists.txt | 19 ++-- .../tests/kernel-tracing/kernel-tracing.cpp | 22 +--- 21 files changed, 412 insertions(+), 77 deletions(-) create mode 100644 projects/rocprofiler-sdk/tests/common/CMakeLists.txt create mode 100644 projects/rocprofiler-sdk/tests/common/defines.hpp create mode 100644 projects/rocprofiler-sdk/tests/common/filesystem.hpp rename projects/rocprofiler-sdk/tests/{kernel-tracing => common}/serialization.hpp (97%) 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