diff --git a/projects/roctracer/.gitignore b/projects/roctracer/.gitignore index ef6bb1deef..88880693df 100644 --- a/projects/roctracer/.gitignore +++ b/projects/roctracer/.gitignore @@ -5,5 +5,3 @@ *.swp *.Po build -test/MatrixTranspose/MatrixTranspose -test/MatrixTranspose_test/MatrixTranspose diff --git a/projects/roctracer/CMakeLists.txt b/projects/roctracer/CMakeLists.txt index dc0c6b83f6..98f7c5f819 100644 --- a/projects/roctracer/CMakeLists.txt +++ b/projects/roctracer/CMakeLists.txt @@ -20,69 +20,46 @@ ## IN THE SOFTWARE. ################################################################################ -cmake_minimum_required ( VERSION 3.5.0 ) +cmake_minimum_required(VERSION 3.16.0) ## Set module name and project name. -set ( ROCTRACER_NAME "roctracer" ) -set ( ROCTRACER_TARGET "${ROCTRACER_NAME}64" ) -set ( ROCTRACER_LIBRARY "lib${ROCTRACER_TARGET}" ) -project ( ${ROCTRACER_TARGET} VERSION 4.0.0) +set(ROCTRACER_NAME "roctracer") +set(ROCTRACER_TARGET "${ROCTRACER_NAME}") -## Adding default path cmake modules -list ( APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules" ) -## Include common cmake modules -include ( utils ) -## Set build environment -include ( env ) +project(ROCTRACER VERSION 4.0.0) -## Setup the package version. -get_version ( "1.0.0" ) - -set ( BUILD_VERSION_MAJOR ${VERSION_MAJOR} ) -set ( BUILD_VERSION_MINOR ${VERSION_MINOR} ) -set ( BUILD_VERSION_PATCH ${VERSION_PATCH} ) - -if ( DEFINED VERSION_BUILD AND NOT ${VERSION_BUILD} STREQUAL "" ) - message ( "VERSION BUILD DEFINED ${VERSION_BUILD}" ) - set ( BUILD_VERSION_PATCH "${BUILD_VERSION_PATCH}-${VERSION_BUILD}" ) +## Build is not supported on Windows plaform +if(WIN32) + message(FATAL_ERROR "Windows build is not supported.") endif () -set ( LIB_VERSION_MAJOR ${BUILD_VERSION_MAJOR} ) -set ( LIB_VERSION_MINOR ${BUILD_VERSION_MINOR} ) -if (DEFINED ENV{ROCM_LIBPATCH_VERSION}) - set (LIB_VERSION_PATCH $ENV{ROCM_LIBPATCH_VERSION} ) -else () - set (LIB_VERSION_PATCH ${BUILD_VERSION_PATCH} ) +## Adding default path cmake modules +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules") + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +add_compile_options(-Wall -Werror) + +set(THREADS_PREFER_PTHREAD_FLAG ON) +find_package(Threads REQUIRED) + +find_package(hsa-runtime64 REQUIRED CONFIG PATHS /opt/rocm/) +find_package(HIP REQUIRED CONFIG PATHS /opt/rocm/) + +if(NOT DEFINED LIBRARY_TYPE) + set(LIBRARY_TYPE SHARED) endif() -set ( LIB_VERSION_STRING "${LIB_VERSION_MAJOR}.${LIB_VERSION_MINOR}.${LIB_VERSION_PATCH}" ) -message ( "-- LIB-VERSION: ${LIB_VERSION_MAJOR}.${LIB_VERSION_MINOR}.${LIB_VERSION_PATCH}" ) -## Set target and root/lib/test directory -set ( TARGET_NAME "${ROCTRACER_TARGET}" ) -set ( ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}" ) -set ( LIB_DIR "${ROOT_DIR}/src" ) -set ( TEST_DIR "${ROOT_DIR}/test" ) -set ( DEST_NAME ${ROCTRACER_NAME} ) - -## Build library -include ( ${LIB_DIR}/CMakeLists.txt ) - -## Set the VERSION and SOVERSION values -set_property ( TARGET ${TARGET_NAME} PROPERTY VERSION "${LIB_VERSION_STRING}" ) -set_property ( TARGET ${TARGET_NAME} PROPERTY SOVERSION "${LIB_VERSION_MAJOR}" ) - -# If the library is a release, strip the target library -#if ( "${CMAKE_BUILD_TYPE}" STREQUAL release ) -# add_custom_command ( TARGET ${ROCTRACER_TARGET} POST_BUILD COMMAND ${CMAKE_STRIP} *.so ) -#endif () +## Build libraries +include(src/CMakeLists.txt) ## Build tests -if ( ${LIBRARY_TYPE} STREQUAL SHARED ) -add_subdirectory ( ${TEST_DIR} ${PROJECT_BINARY_DIR}/test ) +if(${LIBRARY_TYPE} STREQUAL SHARED) +add_subdirectory(test ${PROJECT_BINARY_DIR}/test) endif() ## pbulic headers -set ( PUBLIC_HEADERS +set(PUBLIC_HEADERS roctx.h roctracer.h roctracer_ext.h @@ -92,44 +69,23 @@ set ( PUBLIC_HEADERS roctracer_roctx.h ext/prof_protocol.h ) -set ( GEN_HEADERS +set(GEN_HEADERS hip_ostream_ops.h hsa_prof_str.h hsa_ostream_ops.h ) -if ( ${LIBRARY_TYPE} STREQUAL SHARED ) +if(${LIBRARY_TYPE} STREQUAL SHARED) ## Installation and packaging -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} ) +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}) endif () -message ( "-----------Dest-name: ${DEST_NAME}" ) -message ( "------Install-prefix: ${CMAKE_INSTALL_PREFIX}" ) -message ( "-----------CPACK-dir: ${CPACK_PACKAGING_INSTALL_PREFIX}" ) - -## Install information -install ( TARGETS ${ROCTRACER_TARGET} LIBRARY DESTINATION lib ) -foreach ( header ${PUBLIC_HEADERS} ) - get_filename_component ( header_subdir ${header} DIRECTORY ) - install ( FILES ${CMAKE_CURRENT_SOURCE_DIR}/inc/${header} DESTINATION include/${DEST_NAME}/${header_subdir} ) -endforeach () -foreach ( header ${GEN_HEADERS} ) - get_filename_component ( header_subdir ${header} DIRECTORY ) - install ( FILES ${PROJECT_BINARY_DIR}/inc/${header} DESTINATION include/${DEST_NAME}/${header_subdir} ) -endforeach () - -## rocTX -set ( ROCTX_TARGET "roctx64" ) -set ( ROCTX_LIBRARY "lib${ROCTX_TARGET}" ) - -## Set the VERSION and SOVERSION values -set_property ( TARGET ${ROCTX_TARGET} PROPERTY VERSION "${LIB_VERSION_STRING}" ) -set_property ( TARGET ${ROCTX_TARGET} PROPERTY SOVERSION "${LIB_VERSION_MAJOR}" ) - -install ( TARGETS ${ROCTX_TARGET} LIBRARY DESTINATION lib ) +message("-----------Dest-name: ${DEST_NAME}") +message("------Install-prefix: ${CMAKE_INSTALL_PREFIX}") +message("-----------CPACK-dir: ${CPACK_PACKAGING_INSTALL_PREFIX}") option(FILE_REORG_BACKWARD_COMPATIBILITY "Enable File Reorg with backward compatibility" ON) if(FILE_REORG_BACKWARD_COMPATIBILITY) @@ -137,58 +93,59 @@ if(FILE_REORG_BACKWARD_COMPATIBILITY) endif() ## Packaging directives -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 "${ROCTRACER_NAME}-dev" ) -set ( CPACK_PACKAGE_VENDOR "Advanced Micro Devices, Inc." ) -set ( CPACK_PACKAGE_VERSION_MAJOR ${BUILD_VERSION_MAJOR} ) -set ( CPACK_PACKAGE_VERSION_MINOR ${BUILD_VERSION_MINOR} ) -set ( CPACK_PACKAGE_VERSION_PATCH ${BUILD_VERSION_PATCH} ) -set ( CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}" ) -if ( DEFINED ENV{ROCM_LIBPATCH_VERSION} ) - set ( CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION}.$ENV{ROCM_LIBPATCH_VERSION}" ) +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 "${ROCTRACER_NAME}-dev") +set(CPACK_PACKAGE_VENDOR "Advanced Micro Devices, Inc.") +set(CPACK_PACKAGE_VERSION_MAJOR ${ROCTRACER_VERSION_MAJOR}) +set(CPACK_PACKAGE_VERSION_MINOR ${ROCTRACER_VERSION_MINOR}) +set(CPACK_PACKAGE_VERSION_PATCH ${ROCTRACER_VERSION_PATCH}) +set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}") +set(CPACK_PACKAGE_CONTACT "ROCm Profiler Support ") +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}") endif() -message ( "-- CPACK_PACKAGE_VERSION: ${CPACK_PACKAGE_VERSION}" ) -set ( CPACK_PACKAGE_CONTACT "ROCm Profiler Support " ) -set ( CPACK_PACKAGE_DESCRIPTION_SUMMARY "AMD ROCTRACER library" ) -set ( CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE" ) # Install license file install(FILES ${CPACK_RESOURCE_FILE_LICENSE} DESTINATION share/doc/${CPACK_PACKAGE_NAME}) ## Debian package specific variables -if ( DEFINED ENV{CPACK_DEBIAN_PACKAGE_RELEASE} ) - set ( CPACK_DEBIAN_PACKAGE_RELEASE $ENV{CPACK_DEBIAN_PACKAGE_RELEASE} ) +if(DEFINED ENV{CPACK_DEBIAN_PACKAGE_RELEASE}) + set(CPACK_DEBIAN_PACKAGE_RELEASE $ENV{CPACK_DEBIAN_PACKAGE_RELEASE}) else() - set ( CPACK_DEBIAN_PACKAGE_RELEASE "local" ) + set(CPACK_DEBIAN_PACKAGE_RELEASE "local") endif() -message ( "Using CPACK_DEBIAN_PACKAGE_RELEASE ${CPACK_DEBIAN_PACKAGE_RELEASE}" ) -set ( CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT" ) +message ("Using CPACK_DEBIAN_PACKAGE_RELEASE ${CPACK_DEBIAN_PACKAGE_RELEASE}") +set (CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT") ## RPM package specific variables -if ( DEFINED ENV{CPACK_RPM_PACKAGE_RELEASE} ) - set ( CPACK_RPM_PACKAGE_RELEASE $ENV{CPACK_RPM_PACKAGE_RELEASE} ) +if(DEFINED ENV{CPACK_RPM_PACKAGE_RELEASE}) + set(CPACK_RPM_PACKAGE_RELEASE $ENV{CPACK_RPM_PACKAGE_RELEASE}) else() - set ( CPACK_RPM_PACKAGE_RELEASE "local" ) + set(CPACK_RPM_PACKAGE_RELEASE "local") endif() -message ( "Using CPACK_RPM_PACKAGE_RELEASE ${CPACK_RPM_PACKAGE_RELEASE}" ) +message("Using CPACK_RPM_PACKAGE_RELEASE ${CPACK_RPM_PACKAGE_RELEASE}") -set( CPACK_RPM_PACKAGE_LICENSE "MIT" ) +set( CPACK_RPM_PACKAGE_LICENSE "MIT") ## 'dist' breaks manual builds on debian systems due to empty Provides execute_process( COMMAND rpm --eval %{?dist} RESULT_VARIABLE PROC_RESULT OUTPUT_VARIABLE EVAL_RESULT - OUTPUT_STRIP_TRAILING_WHITESPACE ) + OUTPUT_STRIP_TRAILING_WHITESPACE) message("RESULT_VARIABLE ${PROC_RESULT} OUTPUT_VARIABLE: ${EVAL_RESULT}") -if ( PROC_RESULT EQUAL "0" AND NOT EVAL_RESULT STREQUAL "" ) - string ( APPEND CPACK_RPM_PACKAGE_RELEASE "%{?dist}" ) +if(PROC_RESULT EQUAL "0" AND NOT EVAL_RESULT STREQUAL "") + string(APPEND CPACK_RPM_PACKAGE_RELEASE "%{?dist}") endif() -set ( CPACK_RPM_FILE_NAME "RPM-DEFAULT" ) +set(CPACK_RPM_FILE_NAME "RPM-DEFAULT") message("CPACK_RPM_PACKAGE_RELEASE: ${CPACK_RPM_PACKAGE_RELEASE}") -include ( CPack ) +include(CPack) endif() diff --git a/projects/roctracer/build.sh b/projects/roctracer/build.sh index 02ae67b746..871926b4c3 100755 --- a/projects/roctracer/build.sh +++ b/projects/roctracer/build.sh @@ -39,7 +39,6 @@ if [ -e "$DEFAULTS" ] ; then source "$DEFAULTS"; fi if [ -z "$ROCTRACER_ROOT" ]; then ROCTRACER_ROOT=$SRC_DIR; fi if [ -z "$BUILD_DIR" ] ; then BUILD_DIR=$PWD; fi -if [ -z "$HIP_PATH" ] ; then export HIP_PATH="$ROCM_PATH/hip"; fi if [ -z "$BUILD_TYPE" ] ; then BUILD_TYPE="release"; fi if [ -z "$PACKAGE_ROOT" ] ; then PACKAGE_ROOT=$ROCM_PATH; fi if [ -z "$PACKAGE_PREFIX" ] ; then PACKAGE_PREFIX="$ROCM_PATH/$COMPONENT"; fi diff --git a/projects/roctracer/build_proto.sh b/projects/roctracer/build_proto.sh deleted file mode 100755 index 709fe34645..0000000000 --- a/projects/roctracer/build_proto.sh +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/bash -x - -################################################################################ -# Copyright (c) 2018-2022 Advanced Micro Devices, Inc. -# -# 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. -################################################################################ - -COMPONENT="roctracer" -ROCM_PATH="/opt/rocm" - -fatal() { - echo "$1" - exit 1 -} - -umask 022 - -if [ -z "$ROCTRACER_ROOT" ]; then export ROCTRACER_ROOT=$PWD; fi -if [ -z "$BUILD_DIR" ] ; then export BUILD_DIR=$PWD; fi -if [ -z "$PACKAGE_ROOT" ] ; then export PACKAGE_ROOT=$ROCM_PATH; fi -if [ -z "$PACKAGE_PREFIX" ] ; then export PACKAGE_PREFIX="$ROCM_PATH/$COMPONENT"; fi - -MAKE_OPTS="-j 8 -C $BUILD_DIR" - -mkdir -p $BUILD_DIR -pushd $BUILD_DIR -cmake \ - -DCMAKE_MODULE_PATH=$ROCTRACER_ROOT/cmake_modules \ - -DCMAKE_INSTALL_PREFIX=$PACKAGE_ROOT \ - -DCPACK_PACKAGING_INSTALL_PREFIX=$PACKAGE_PREFIX \ - -DCPACK_GENERATOR="DEB;RPM" \ - $ROCTRACER_ROOT/inc/ext -popd - -make package - -exit 0 diff --git a/projects/roctracer/build_static.sh b/projects/roctracer/build_static.sh index d313b0a5a0..a85399e5a0 100755 --- a/projects/roctracer/build_static.sh +++ b/projects/roctracer/build_static.sh @@ -39,7 +39,6 @@ if [ -e "$DEFAULTS" ] ; then source "$DEFAULTS"; fi if [ -z "$ROCTRACER_ROOT" ]; then ROCTRACER_ROOT=$SRC_DIR; fi if [ -z "$BUILD_DIR" ] ; then BUILD_DIR=$PWD; fi -if [ -z "$HIP_PATH" ] ; then export HIP_PATH="$ROCM_PATH/hip"; fi if [ -z "$BUILD_TYPE" ] ; then BUILD_TYPE="release"; fi if [ -z "$PACKAGE_ROOT" ] ; then PACKAGE_ROOT=$ROCM_PATH; fi if [ -z "$PACKAGE_PREFIX" ] ; then PACKAGE_PREFIX="$ROCM_PATH/$COMPONENT"; fi diff --git a/projects/roctracer/cmake_modules/env.cmake b/projects/roctracer/cmake_modules/env.cmake deleted file mode 100644 index beed3762eb..0000000000 --- a/projects/roctracer/cmake_modules/env.cmake +++ /dev/null @@ -1,179 +0,0 @@ -################################################################################ -## Copyright (c) 2018-2022 Advanced Micro Devices, Inc. -## -## 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. -################################################################################ - -## Build is not supported on Windows plaform -if ( WIN32 ) - message ( FATAL_ERROR "Windows build is not supported." ) -endif () - -set ( CMAKE_CXX_STANDARD 17 ) -set ( CMAKE_CXX_STANDARD_REQUIRED ON ) - -## Compiler Preprocessor definitions. -add_definitions ( -DAMD_INTERNAL_BUILD ) -add_definitions ( -D__HIP_PLATFORM_HCC__=1 ) - -## Linux Compiler options -add_compile_options ( -Wall -Werror ) - -add_link_options("-Bdynamic -z,noexecstck") - -find_package(Python3 COMPONENTS Interpreter REQUIRED) - -execute_process( - COMMAND ${Python3_EXECUTABLE} -c "import CppHeaderParser" - RESULT_VARIABLE CPPHEADERPARSER - OUTPUT_QUIET -) - -if(NOT ${CPPHEADERPARSER} EQUAL 0) - message(FATAL_ERROR - "The \"CppHeaderParser\" Python3 package is not installed. Please install it using the following command: \"pip3 install CppHeaderParser\"." - ) -endif() - -## CLANG options -if ( "$ENV{CXX}" STREQUAL "/usr/bin/clang++" ) - set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ferror-limit=1000000" ) -endif() - -## Enable debug trace -if ( DEFINED CMAKE_DEBUG_TRACE ) - add_definitions ( -DDEBUG_TRACE_ON=1 ) -endif() -if ( DEFINED ENV{CMAKE_DEBUG_TRACE} ) - add_definitions ( -DDEBUG_TRACE_ON=1 ) -endif() - -if ( NOT DEFINED LIBRARY_TYPE ) - set ( LIBRARY_TYPE SHARED ) -endif() -if ( ${LIBRARY_TYPE} STREQUAL STATIC ) - add_definitions ( -DSTATIC_BUILD=1 ) -endif() - -## Enable Hip API call to translate hip call args function -add_definitions ( -DHIP_PROF_HIP_API_STRING=1 ) - -## Enable HIP_VDI mode -add_definitions ( -D__HIP_ROCclr__=1 ) -set ( HIP_DEFINES "-D__HIP_PLATFORM_HCC__=1 -D__HIP_ROCclr__=1" ) - -## Enable HIP local build -if ( DEFINED LOCAL_BUILD ) - add_definitions ( -DLOCAL_BUILD=${LOCAL_BUILD} ) -else() - add_definitions ( -DLOCAL_BUILD=1 ) -endif() - -## Enable direct loading of AQL-profile HSA extension -if ( DEFINED ENV{CMAKE_LD_AQLPROFILE} ) - add_definitions ( -DROCP_LD_AQLPROFILE=1 ) -endif() - -## Build type -if ( NOT DEFINED CMAKE_BUILD_TYPE OR "${CMAKE_BUILD_TYPE}" STREQUAL "" ) - if ( DEFINED ENV{CMAKE_BUILD_TYPE} ) - set ( CMAKE_BUILD_TYPE $ENV{CMAKE_BUILD_TYPE} ) - endif() -endif() - -## Installation prefix path -if ( NOT DEFINED CMAKE_PREFIX_PATH AND DEFINED ENV{CMAKE_PREFIX_PATH} ) - set ( CMAKE_PREFIX_PATH $ENV{CMAKE_PREFIX_PATH} ) -endif() -set ( ENV{CMAKE_PREFIX_PATH} ${CMAKE_PREFIX_PATH} ) - -set ( HIP_PATH "/opt/rocm/hip" ) -if ( DEFINED ENV{HIP_PATH} ) - set ( HIP_PATH $ENV{HIP_PATH} ) -endif() -set ( HIP_INC_DIR "${HIP_PATH}/include" ) - -## Extend Compiler flags based on build type -string ( TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE ) -if ( "${CMAKE_BUILD_TYPE}" STREQUAL debug ) - set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ggdb" ) - set ( CMAKE_BUILD_TYPE "debug" ) -else () - set ( CMAKE_BUILD_TYPE "release" ) -endif () - -## Extend Compiler flags based on Processor architecture -if ( ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86_64" ) - set ( NBIT 64 ) - set ( NBITSTR "64" ) - set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m64 -msse -msse2" ) -elseif ( ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86" ) - set ( NBIT 32 ) - set ( NBITSTR "" ) - set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32" ) -endif () - -## Find hsa-runtime headers/lib -find_file ( HSA_RUNTIME_INC "hsa/hsa.h" ) -find_library ( HSA_RUNTIME_LIB "libhsa-runtime${NBIT}.so" ) -get_filename_component ( HSA_RUNTIME_INC_PATH "${HSA_RUNTIME_INC}" DIRECTORY ) -get_filename_component ( HSA_RUNTIME_LIB_PATH "${HSA_RUNTIME_LIB}" DIRECTORY ) - -find_library ( HSA_KMT_LIB "libhsakmt.so" ) -if ( "${HSA_KMT_LIB_PATH}" STREQUAL "" ) - find_library ( HSA_KMT_LIB "libhsakmt.a" ) -endif() -get_filename_component ( HSA_KMT_LIB_PATH "${HSA_KMT_LIB}" DIRECTORY ) -set ( HSA_KMT_INC_PATH "${HSA_KMT_LIB_PATH}/../include" ) - -get_filename_component ( ROCM_ROOT_DIR "${HSA_KMT_LIB_PATH}" DIRECTORY ) -set ( ROCM_INC_PATH "${ROCM_ROOT_DIR}/include" ) - -## Basic Tool Chain Information -message ( "----------------NBit: ${NBIT}" ) -message ( "----------Build-Type: ${CMAKE_BUILD_TYPE}" ) -message ( "----------C-Compiler: ${CMAKE_C_COMPILER}" ) -message ( "--C-Compiler-Version: ${CMAKE_C_COMPILER_VERSION}" ) -message ( "--------CXX-Compiler: ${CMAKE_CXX_COMPILER}" ) -message ( "CXX-Compiler-Version: ${CMAKE_CXX_COMPILER_VERSION}" ) -message ( "-----HSA-Runtime-Inc: ${HSA_RUNTIME_INC_PATH}" ) -message ( "-----HSA-Runtime-Lib: ${HSA_RUNTIME_LIB_PATH}" ) -message ( "----HSA_KMT_LIB_PATH: ${HSA_KMT_LIB_PATH}" ) -message ( "-------ROCM_ROOT_DIR: ${ROCM_ROOT_DIR}" ) -message ( "-------ROCM_INC_PATH: ${ROCM_INC_PATH}" ) -message ( "-------------KFD-Inc: ${HSA_KMT_INC_PATH}" ) -message ( "-------------HIP-Inc: ${HIP_INC_DIR}" ) -message ( "-----CMAKE_CXX_FLAGS: ${CMAKE_CXX_FLAGS}" ) -message ( "---CMAKE_PREFIX_PATH: ${CMAKE_PREFIX_PATH}" ) -message ( "---------GPU_TARGETS: ${GPU_TARGETS}" ) -message ( "--------LIBRARY_TYPE: ${LIBRARY_TYPE}" ) - -## Check the ROCm pathes -if ( "${HSA_RUNTIME_INC_PATH}" STREQUAL "" ) - message ( FATAL_ERROR "HSA_RUNTIME_INC_PATH is not found." ) -endif () -if ( "${HSA_RUNTIME_LIB_PATH}" STREQUAL "" ) - message ( FATAL_ERROR "HSA_RUNTIME_LIB_PATH is not found." ) -endif () -if ( "${HSA_KMT_LIB_PATH}" STREQUAL "" ) - message ( FATAL_ERROR "HSA_KMT_LIB_PATH is not found." ) -endif () -if ( "${ROCM_ROOT_DIR}" STREQUAL "" ) - message ( FATAL_ERROR "ROCM_ROOT_DIR is not found." ) -endif () diff --git a/projects/roctracer/cmake_modules/utils.cmake b/projects/roctracer/cmake_modules/utils.cmake deleted file mode 100644 index 1b2f342ea4..0000000000 --- a/projects/roctracer/cmake_modules/utils.cmake +++ /dev/null @@ -1,96 +0,0 @@ -################################################################################ -## Copyright (c) 2018-2022 Advanced Micro Devices, Inc. -## -## 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. -################################################################################ - -## Parses the VERSION_STRING variable and places -## the first, second and third number values in -## the major, minor and patch variables. -function( parse_version VERSION_STRING ) - - string ( FIND ${VERSION_STRING} "-" STRING_INDEX ) - - if ( ${STRING_INDEX} GREATER -1 ) - math ( EXPR STRING_INDEX "${STRING_INDEX} + 1" ) - string ( SUBSTRING ${VERSION_STRING} ${STRING_INDEX} -1 VERSION_BUILD ) - endif () - - string ( REGEX MATCHALL "[0123456789]+" VERSIONS ${VERSION_STRING} ) - list ( LENGTH VERSIONS VERSION_COUNT ) - - if ( ${VERSION_COUNT} GREATER 0) - list ( GET VERSIONS 0 MAJOR ) - set ( VERSION_MAJOR ${MAJOR} PARENT_SCOPE ) - set ( TEMP_VERSION_STRING "${MAJOR}" ) - endif () - - if ( ${VERSION_COUNT} GREATER 1 ) - list ( GET VERSIONS 1 MINOR ) - set ( VERSION_MINOR ${MINOR} PARENT_SCOPE ) - set ( TEMP_VERSION_STRING "${TEMP_VERSION_STRING}.${MINOR}" ) - endif () - - if ( ${VERSION_COUNT} GREATER 2 ) - list ( GET VERSIONS 2 PATCH ) - set ( VERSION_PATCH ${PATCH} PARENT_SCOPE ) - set ( TEMP_VERSION_STRING "${TEMP_VERSION_STRING}.${PATCH}" ) - endif () - - if ( DEFINED VERSION_BUILD ) - set ( VERSION_BUILD "${VERSION_BUILD}" PARENT_SCOPE ) - endif () - - set ( VERSION_STRING "${TEMP_VERSION_STRING}" PARENT_SCOPE ) - -endfunction () - -## Gets the current version of the repository -## using versioning tags and git describe. -## Passes back a packaging version string -## and a library version string. -function ( get_version DEFAULT_VERSION_STRING ) - - parse_version ( ${DEFAULT_VERSION_STRING} ) - - find_program ( GIT NAMES git ) - - if ( GIT ) - - execute_process ( COMMAND "git describe --dirty --long --match [0-9]* 2>/dev/null" - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - OUTPUT_VARIABLE GIT_TAG_STRING - OUTPUT_STRIP_TRAILING_WHITESPACE - RESULT_VARIABLE RESULT ) - - if ( ${RESULT} EQUAL 0 ) - - parse_version ( ${GIT_TAG_STRING} ) - - endif () - - endif () - - set( VERSION_STRING "${VERSION_STRING}" PARENT_SCOPE ) - set( VERSION_MAJOR "${VERSION_MAJOR}" PARENT_SCOPE ) - set( VERSION_MINOR "${VERSION_MINOR}" PARENT_SCOPE ) - set( VERSION_PATCH "${VERSION_PATCH}" PARENT_SCOPE ) - set( VERSION_BUILD "${VERSION_BUILD}" PARENT_SCOPE ) - -endfunction() diff --git a/projects/roctracer/doc/Doxyfile.in b/projects/roctracer/doc/Doxyfile.in index 46b8e55638..74e1204811 100644 --- a/projects/roctracer/doc/Doxyfile.in +++ b/projects/roctracer/doc/Doxyfile.in @@ -58,7 +58,7 @@ PROJECT_NAME = "@ROCTRACER_NAME@" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = @roctracer64_VERSION_MAJOR@.@roctracer64_VERSION_MINOR@.@roctracer64_VERSION_PATCH@ +PROJECT_NUMBER = @ROCTRACER_VERSION_MAJOR@.@ROCTRACER_VERSION_MINOR@.@ROCTRACER_VERSION_PATCH@ # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/projects/roctracer/src/CMakeLists.txt b/projects/roctracer/src/CMakeLists.txt index 27cda80cfb..0910c8e3bd 100644 --- a/projects/roctracer/src/CMakeLists.txt +++ b/projects/roctracer/src/CMakeLists.txt @@ -20,39 +20,160 @@ ## IN THE SOFTWARE. ################################################################################ -# Generating tracing primitives -set ( GEN_INC_DIR ${PROJECT_BINARY_DIR}/inc ) -set ( GEN_SRC_DIR ${PROJECT_BINARY_DIR}/src ) -execute_process ( COMMAND sh -xc "mkdir -p ${GEN_INC_DIR}" ) -execute_process ( COMMAND sh -xc "mkdir -p ${GEN_SRC_DIR}" ) -execute_process ( COMMAND sh -xc "${CMAKE_C_COMPILER} -E ${HSA_RUNTIME_INC_PATH}/hsa.h > ${GEN_INC_DIR}/hsa_pp.h" ) -execute_process ( COMMAND sh -xc "${CMAKE_C_COMPILER} -E ${HSA_RUNTIME_INC_PATH}/hsa_ext_amd.h > ${GEN_INC_DIR}/hsa_ext_amd_pp.h" ) -execute_process ( COMMAND sh -xc "python3 ${ROOT_DIR}/script/gen_ostream_ops.py -in ${GEN_INC_DIR}/hsa_pp.h,${GEN_INC_DIR}/hsa_ext_amd_pp.h -out ${GEN_INC_DIR}/hsa_ostream_ops.h" ) -execute_process ( COMMAND sh -xc "python3 ${ROOT_DIR}/script/hsaap.py ${PROJECT_BINARY_DIR} ${HSA_RUNTIME_INC_PATH}" ) -execute_process ( COMMAND sh -xc "${CMAKE_C_COMPILER} -E ${HSA_KMT_INC_PATH}/hsakmttypes.h > ${GEN_INC_DIR}/hsakmttypes_pp.h" ) -execute_process ( COMMAND sh -xc "${CMAKE_C_COMPILER} -E ${HIP_PATH}/include/hip/hip_runtime_api.h ${HIP_DEFINES} -I${HIP_PATH}/include -I${ROCM_ROOT_DIR}/hsa/include > ${GEN_INC_DIR}/hip_runtime_api_pp.h" ) -execute_process ( COMMAND sh -xc "python3 ${ROOT_DIR}/script/gen_ostream_ops.py -in ${GEN_INC_DIR}/hip_runtime_api_pp.h -out ${GEN_INC_DIR}/hip_ostream_ops.h" ) -execute_process ( COMMAND sh -xc "mkdir ${GEN_INC_DIR}/rocprofiler" ) -execute_process ( COMMAND sh -xc "ln -s ${ROOT_DIR}/../rocprofiler/inc/rocprofiler.h ${GEN_INC_DIR}/rocprofiler/rocprofiler.h" ) -execute_process ( COMMAND sh -xc "ln -s ${ROOT_DIR}/../rocprofiler/src/core/activity.h ${GEN_INC_DIR}/rocprofiler/activity.h" ) +find_package(Python3 COMPONENTS Interpreter REQUIRED) -# Build dynamic Library object -set ( TARGET_LIB ${TARGET_NAME} ) -set ( LIB_SRC - ${LIB_DIR}/core/roctracer.cpp +execute_process( + COMMAND ${Python3_EXECUTABLE} -c "import CppHeaderParser" + RESULT_VARIABLE CPPHEADERPARSER + OUTPUT_QUIET ) -add_library ( ${TARGET_LIB} ${LIBRARY_TYPE} ${LIB_SRC} ) -target_compile_definitions ( ${TARGET_LIB} PRIVATE PROF_API_IMPL ) -target_include_directories ( ${TARGET_LIB} PRIVATE ${LIB_DIR} ${ROOT_DIR} ${ROOT_DIR}/inc ${HSA_RUNTIME_INC_PATH} ${ROCM_INC_PATH} ${HIP_INC_DIR} ${HSA_KMT_INC_PATH} ${GEN_INC_DIR} ) -target_link_libraries( ${TARGET_LIB} PRIVATE ${HSA_RUNTIME_LIB} c stdc++ ) -set_target_properties( ${TARGET_LIB} PROPERTIES CXX_VISIBILITY_PRESET hidden ) -# Build ROCTX tracing library -set ( ROCTX_LIB "roctx64" ) -set ( ROCTX_LIB_SRC - ${LIB_DIR}/roctx/roctx.cpp +if(NOT ${CPPHEADERPARSER} EQUAL 0) + message(FATAL_ERROR + "The \"CppHeaderParser\" Python3 package is not installed. Please install it using the following command: \"pip3 install CppHeaderParser\"." + ) +endif() + +if(${LIBRARY_TYPE} STREQUAL STATIC) + add_definitions(-DSTATIC_BUILD=1) +endif() + +option(DEBUG_TRACE "Enable debug tracing") +if(DEBUG_TRACE) + add_definitions(-DDEBUG_TRACE_ON=1) +endif() + +set(GEN_INC_DIR ${PROJECT_BINARY_DIR}/inc) + +# FIXME!!! should not depend on another project's internal files +execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory "${GEN_INC_DIR}/rocprofiler") +execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink "${PROJECT_SOURCE_DIR}/../rocprofiler/inc/rocprofiler.h" "${GEN_INC_DIR}/rocprofiler/rocprofiler.h") +execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink "${PROJECT_SOURCE_DIR}/../rocprofiler/src/core/activity.h" "${GEN_INC_DIR}/rocprofiler/activity.h") + +get_property(HSA_RUNTIME_INCLUDE_DIRECTORIES TARGET hsa-runtime64::hsa-runtime64 PROPERTY INTERFACE_INCLUDE_DIRECTORIES) +find_file(hsa_h_file hsa.h + PATHS ${HSA_RUNTIME_INCLUDE_DIRECTORIES} + PATH_SUFFIXES hsa + NO_DEFAULT_PATH + REQUIRED ) -add_library ( ${ROCTX_LIB} SHARED ${ROCTX_LIB_SRC} ) -target_include_directories ( ${ROCTX_LIB} PRIVATE ${LIB_DIR} ${ROOT_DIR} ${ROOT_DIR}/inc ${HSA_RUNTIME_INC_PATH} ${GEN_INC_DIR} ) -target_link_libraries( ${ROCTX_LIB} PRIVATE c stdc++ ) -set_target_properties( ${ROCTX_LIB} PROPERTIES CXX_VISIBILITY_PRESET hidden ) +get_filename_component(HSA_RUNTIME_INC_PATH ${hsa_h_file} DIRECTORY) + +add_custom_command( + OUTPUT "${GEN_INC_DIR}/hsa_prof_str.h" + COMMAND ${CMAKE_COMMAND} -E make_directory "${GEN_INC_DIR}" + COMMAND ${Python3_EXECUTABLE} + "${PROJECT_SOURCE_DIR}/script/hsaap.py" + "${PROJECT_BINARY_DIR}" "${HSA_RUNTIME_INC_PATH}" > /dev/null + DEPENDS "${PROJECT_SOURCE_DIR}/script/hsaap.py" + "${HSA_RUNTIME_INC_PATH}/hsa.h" "${HSA_RUNTIME_INC_PATH}/hsa_ext_amd.h" + "${HSA_RUNTIME_INC_PATH}/hsa_ext_image.h" "${HSA_RUNTIME_INC_PATH}/hsa_api_trace.h" + COMMENT "Generating hsa_prof_str.h..." +) + +add_custom_command( + OUTPUT "${GEN_INC_DIR}/hsa_ostream_ops.h" + COMMAND ${CMAKE_COMMAND} -E make_directory "${GEN_INC_DIR}" + COMMAND ${CMAKE_C_COMPILER} -E "${HSA_RUNTIME_INC_PATH}/hsa.h" -o "${GEN_INC_DIR}/hsa.h.i" + COMMAND ${CMAKE_C_COMPILER} -E "${HSA_RUNTIME_INC_PATH}/hsa_ext_amd.h" -o "${GEN_INC_DIR}/hsa_ext_amd.h.i" + BYPRODUCTS "${GEN_INC_DIR}/hsa.h.i" "${GEN_INC_DIR}/hsa_ext_amd.h.i" + COMMAND ${Python3_EXECUTABLE} + "${PROJECT_SOURCE_DIR}/script/gen_ostream_ops.py" + -in "${GEN_INC_DIR}/hsa.h.i,${GEN_INC_DIR}/hsa_ext_amd.h.i" + -out "${GEN_INC_DIR}/hsa_ostream_ops.h" > /dev/null + DEPENDS "${PROJECT_SOURCE_DIR}/script/gen_ostream_ops.py" + "${HSA_RUNTIME_INC_PATH}/hsa.h" "${HSA_RUNTIME_INC_PATH}/hsa_ext_amd.h" + COMMENT "Generating hsa_ostream_ops.h..." +) + +get_property(HIP_INCLUDE_DIRECTORIES TARGET hip::amdhip64 PROPERTY INTERFACE_INCLUDE_DIRECTORIES) + +find_file(HIP_RUNTIME_API_H hip_runtime_api.h + PATHS ${HIP_INCLUDE_DIRECTORIES} + PATH_SUFFIXES hip + NO_DEFAULT_PATH + REQUIRED +) + +add_custom_command( + OUTPUT "${GEN_INC_DIR}/hip_ostream_ops.h" + COMMAND ${CMAKE_COMMAND} -E make_directory "${GEN_INC_DIR}" + COMMAND ${CMAKE_C_COMPILER} + "$<$:-I$-I>>" + -E "${HIP_RUNTIME_API_H}" -D__HIP_PLATFORM_HCC__=1 -D__HIP_ROCclr__=1 -o ${GEN_INC_DIR}/hip_runtime_api.h.i + BYPRODUCTS "${GEN_INC_DIR}/hip_runtime_api.h.i" + COMMAND ${Python3_EXECUTABLE} + "${PROJECT_SOURCE_DIR}/script/gen_ostream_ops.py" + -in "${GEN_INC_DIR}/hip_runtime_api.h.i" + -out "${GEN_INC_DIR}/hip_ostream_ops.h" > /dev/null + DEPENDS "${PROJECT_SOURCE_DIR}/script/gen_ostream_ops.py" "${HIP_RUNTIME_API_H}" + COMMENT "Generating hip_ostream_ops.h..." + COMMAND_EXPAND_LISTS +) + +# Build the ROCtracer library + +file(GLOB ROCTRACER_SOURCES "src/core/*.cpp" "src/util/*.cpp") + +add_library(roctracer ${LIBRARY_TYPE} + ${ROCTRACER_SOURCES} + "${GEN_INC_DIR}/hsa_ostream_ops.h" + "${GEN_INC_DIR}/hsa_prof_str.h" + "${GEN_INC_DIR}/hip_ostream_ops.h" +) + +set_target_properties(roctracer PROPERTIES + CXX_VISIBILITY_PRESET hidden + OUTPUT_NAME "roctracer64" + VERSION ${ROCTRACER_VERSION} + SOVERSION ${ROCTRACER_VERSION_MAJOR} +) + +target_compile_definitions(roctracer + PUBLIC + AMD_INTERNAL_BUILD + PRIVATE + PROF_API_IMPL + HIP_PROF_HIP_API_STRING=1 + __HIP_PLATFORM_HCC__=1 +) + +target_include_directories(roctracer + PUBLIC + ${HIP_INCLUDE_DIRECTORIES} ${HSA_RUNTIME_INCLUDE_DIRECTORIES} + PRIVATE + ${PROJECT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}/inc ${PROJECT_SOURCE_DIR}/src + ${PROJECT_BINARY_DIR}/inc +) +target_link_libraries(roctracer PRIVATE hsa-runtime64::hsa-runtime64 Threads::Threads dl) + +install(TARGETS ${ROCTRACER_TARGET} LIBRARY DESTINATION lib) +foreach(header ${PUBLIC_HEADERS}) + get_filename_component(header_subdir ${header} DIRECTORY) + install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/inc/${header} DESTINATION include/${ROCTRACER_NAME}/${header_subdir}) +endforeach() + +foreach(header ${GEN_HEADERS}) + get_filename_component(header_subdir ${header} DIRECTORY) + install(FILES ${GEN_INC_DIR}/${header} DESTINATION include/${ROCTRACER_NAME}/${header_subdir}) +endforeach() + +# Build the ROCTX library + +file(GLOB ROCTX_SOURCES "src/roctx/*.cpp") + +add_library(roctx ${LIBRARY_TYPE} ${ROCTX_SOURCES}) + +set_target_properties(roctx PROPERTIES + CXX_VISIBILITY_PRESET hidden + OUTPUT_NAME "roctx64" + VERSION ${ROCTRACER_VERSION} + SOVERSION ${ROCTRACER_VERSION_MAJOR} +) + +target_include_directories(roctx PRIVATE + ${PROJECT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}/inc + ${PROJECT_SOURCE_DIR}/src +) + +install(TARGETS roctx LIBRARY DESTINATION lib) diff --git a/projects/roctracer/test/CMakeLists.txt b/projects/roctracer/test/CMakeLists.txt index 4f2ab13146..09a3f5e48b 100644 --- a/projects/roctracer/test/CMakeLists.txt +++ b/projects/roctracer/test/CMakeLists.txt @@ -20,89 +20,82 @@ ## IN THE SOFTWARE. ################################################################################ -cmake_minimum_required ( VERSION 3.5.0 ) +add_custom_target(mytest) # builds all the tests +add_dependencies(mytest roctracer_tool ctrl) -if ( NOT DEFINED ROOT_DIR ) - MESSAGE ( FATAL_ERROR "ROOT_DIR is not defined" ) -endif () -if ( NOT DEFINED INC_PATH ) - set ( INC_PATH "${ROOT_DIR}/inc" ) -endif () -if ( NOT DEFINED LIB_PATH ) - set ( LIB_PATH "${PROJECT_BINARY_DIR}" ) -endif () -if ( NOT DEFINED TEST_DIR ) - set ( TEST_DIR "${CMAKE_CURRENT_SOURCE_DIR}" ) - ## Adding default path cmake modules - list ( APPEND CMAKE_MODULE_PATH "${ROOT_DIR}/cmake_modules" ) - ## Include common cmake modules - include ( utils ) - ## Set build environment - include ( env ) -endif () - -## Path to HSA test -set ( HSA_TEST_DIR "${TEST_DIR}/hsa/test" ) - -## test run script -set ( RUN_SCRIPT "${TEST_DIR}/run.sh" ) +# Add a 'check' target to run the tests. +add_custom_target(check COMMAND ${PROJECT_BINARY_DIR}/run.sh DEPENDS mytest) ## build HIP tests -set ( GEN_INC_DIR ${PROJECT_BINARY_DIR}/inc ) -set ( INC_PATH "${INC_PATH} ${GEN_INC_DIR}" ) -set ( TEST_ENV ROCM_PATH=${ROCM_ROOT_DIR} HSA_PATH=${ROCM_ROOT_DIR}/hsa INC_PATH=${INC_PATH} LIB_PATH=${LIB_PATH} HIPCC_VERBOSE=3 ) -add_custom_target( mytest - COMMAND ${TEST_ENV} make -C "${TEST_DIR}/MatrixTranspose" -j1 - COMMAND sh -xc "cp ${TEST_DIR}/MatrixTranspose/MatrixTranspose ${PROJECT_BINARY_DIR}/test" - COMMAND ${TEST_ENV} make -C "${TEST_DIR}/MatrixTranspose_test" -j1 - COMMAND sh -xc "cp ${TEST_DIR}/MatrixTranspose_test/MatrixTranspose ${PROJECT_BINARY_DIR}/test/MatrixTranspose_test" - COMMAND HIP_API_ACTIVITY_ON=1 ${TEST_ENV} make -C "${TEST_DIR}/MatrixTranspose_test" -j1 - COMMAND sh -xc "cp ${TEST_DIR}/MatrixTranspose_test/MatrixTranspose ${PROJECT_BINARY_DIR}/test/MatrixTranspose_hipaact_test" - COMMAND MGPU_TEST=1 ${TEST_ENV} make -C "${TEST_DIR}/MatrixTranspose_test" -j1 - COMMAND sh -xc "cp ${TEST_DIR}/MatrixTranspose_test/MatrixTranspose ${PROJECT_BINARY_DIR}/test/MatrixTranspose_mgpu" - COMMAND C_TEST=1 ${TEST_ENV} make -C "${TEST_DIR}/MatrixTranspose_test" -j1 - COMMAND sh -xc "cp ${TEST_DIR}/MatrixTranspose_test/MatrixTranspose ${PROJECT_BINARY_DIR}/test/MatrixTranspose_ctest" -# copy traces - COMMAND sh -xc "cp ${TEST_DIR}/golden_traces/*_trace.txt ${PROJECT_BINARY_DIR}/test/" - COMMAND sh -xc "cp ${TEST_DIR}/golden_traces/tests_trace_cmp_levels.txt ${PROJECT_BINARY_DIR}/test/" -) +set(GEN_INC_DIR ${PROJECT_BINARY_DIR}/inc) + +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "/opt/rocm/hip/cmake") +find_package(HIP REQUIRED MODULE) + +set_source_files_properties(MatrixTranspose/MatrixTranspose.cpp MatrixTranspose_test/MatrixTranspose.cpp + PROPERTIES HIP_SOURCE_PROPERTY_FORMAT 1) + +hip_add_executable(MatrixTranspose EXCLUDE_FROM_ALL MatrixTranspose/MatrixTranspose.cpp) +target_include_directories(MatrixTranspose PRIVATE ${PROJECT_SOURCE_DIR}/inc) +target_link_libraries(MatrixTranspose PRIVATE roctracer roctx) +add_dependencies(mytest MatrixTranspose) + +function(build_matrix_transpose_test OUTPUT_FILE DEFINITIONS) + hip_add_executable(${OUTPUT_FILE} EXCLUDE_FROM_ALL MatrixTranspose_test/MatrixTranspose.cpp) + target_compile_definitions(${OUTPUT_FILE} PRIVATE ITERATIONS=100 HIP_TEST=1 ${DEFINITIONS}) + target_include_directories(${OUTPUT_FILE} PRIVATE ${PROJECT_SOURCE_DIR}/inc ${GEN_INC_DIR}) + target_link_libraries(${OUTPUT_FILE} PRIVATE roctracer roctx) + add_dependencies(mytest ${OUTPUT_FILE}) +endfunction(build_matrix_transpose_test) + + +build_matrix_transpose_test(MatrixTranspose_test "") +build_matrix_transpose_test(MatrixTranspose_hipaact_test HIP_API_ACTIVITY_ON=1) +build_matrix_transpose_test(MatrixTranspose_mgpu MGPU_TEST=1) + +add_custom_command(OUTPUT MatrixTranspose.c + COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_CURRENT_SOURCE_DIR}/MatrixTranspose_test/MatrixTranspose.cpp MatrixTranspose.c) + +hip_add_executable(MatrixTranspose_ctest EXCLUDE_FROM_ALL MatrixTranspose.c) +target_compile_definitions(MatrixTranspose_ctest PRIVATE HIP_TEST=0 __HIP_PLATFORM_HCC__) +target_include_directories(MatrixTranspose_ctest PRIVATE ${PROJECT_SOURCE_DIR}/inc ${GEN_INC_DIR}) +target_link_libraries(MatrixTranspose_ctest PRIVATE roctracer roctx) +add_dependencies(mytest MatrixTranspose_ctest) + +file(GLOB files "${CMAKE_CURRENT_SOURCE_DIR}/golden_traces/*_trace.txt") +foreach(file ${files}) + execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${file} ${PROJECT_BINARY_DIR}/test/) +endforeach() +execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/golden_traces/tests_trace_cmp_levels.txt ${PROJECT_BINARY_DIR}/test/) ## Build HSA test -set ( TMP ${TEST_DIR} ) -set ( TEST_DIR ${HSA_TEST_DIR} ) -add_subdirectory ( ${HSA_TEST_DIR} ${PROJECT_BINARY_DIR}/test/hsa ) -set ( TEST_DIR ${TMP} ) +add_subdirectory(hsa/test ${PROJECT_BINARY_DIR}/test/hsa) -## Util sources -file( GLOB UTIL_SRC "${HSA_TEST_DIR}/util/*.cpp" ) - -if ( DEFINED ROCTRACER_TARGET ) - ## Build test library - set ( TEST_LIB "roctracer_tool" ) - set ( TEST_LIB_SRC ${TEST_DIR}/tool/tracer_tool.cpp ${UTIL_SRC} ) - add_library ( ${TEST_LIB} SHARED ${TEST_LIB_SRC} ) - target_include_directories ( ${TEST_LIB} PRIVATE ${HSA_TEST_DIR} ${ROOT_DIR} ${ROOT_DIR}/inc ${HSA_RUNTIME_INC_PATH} ${ROCM_INC_PATH} ${HIP_INC_DIR} ${HSA_KMT_INC_PATH} ${GEN_INC_DIR} ) - target_link_libraries ( ${TEST_LIB} ${ROCTRACER_TARGET} ${HSA_RUNTIME_LIB} c stdc++ atomic dl pthread rt numa ) - set_target_properties( ${TEST_LIB} PROPERTIES CXX_VISIBILITY_PRESET hidden ) - install ( TARGETS ${TEST_LIB} LIBRARY DESTINATION lib/${DEST_NAME}) +if(DEFINED ROCTRACER_TARGET) + ## Build the tracer_tool library + file(GLOB TRACER_TOOL_SOURCES "tool/*.cpp" "${PROJECT_SOURCE_DIR}/src/util/*.cpp") + add_library(roctracer_tool SHARED ${TRACER_TOOL_SOURCES}) + target_compile_definitions(roctracer_tool PRIVATE HIP_PROF_HIP_API_STRING=1 __HIP_PLATFORM_HCC__) + target_include_directories(roctracer_tool PRIVATE hsa/test ${PROJECT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}/inc ${HIP_INCLUDE_DIRECTORIES} ${GEN_INC_DIR}) + target_link_libraries(roctracer_tool ${ROCTRACER_TARGET} hsa-runtime64::hsa-runtime64 Threads::Threads atomic dl) + set_target_properties(roctracer_tool PROPERTIES CXX_VISIBILITY_PRESET hidden) + install(TARGETS roctracer_tool LIBRARY DESTINATION lib/${ROCTRACER_NAME}) endif () ## Build hsaco_test.cpp referenc test -set ( CO_LIB_NAME "hsaco_test" ) -set ( CO_LIB_SRC ${TEST_DIR}/app/hsaco_test.cpp ) -add_library ( ${CO_LIB_NAME} SHARED ${CO_LIB_SRC} ) -target_include_directories ( ${CO_LIB_NAME} PRIVATE ${HSA_RUNTIME_INC_PATH} ) -target_link_libraries ( ${CO_LIB_NAME} ${HSA_RUNTIME_LIB} c stdc++ ) +add_library(hsaco_test SHARED EXCLUDE_FROM_ALL app/hsaco_test.cpp) +target_compile_definitions(hsaco_test PRIVATE AMD_INTERNAL_BUILD) +target_link_libraries(hsaco_test hsa-runtime64::hsa-runtime64) +add_dependencies(mytest hsaco_test) ## Build codeobj event test -set ( CO_LIB_NAME "codeobj_test" ) -set ( CO_LIB_SRC ${TEST_DIR}/app/codeobj_test.cpp ) -add_library ( ${CO_LIB_NAME} SHARED ${CO_LIB_SRC} ) -target_include_directories ( ${CO_LIB_NAME} PRIVATE ${TEST_DIR} ${ROOT_DIR} ${ROOT_DIR}/inc ${GEN_INC_DIR} ${HSA_RUNTIME_INC_PATH} ${ROCM_INC_PATH} ) -target_link_libraries ( ${CO_LIB_NAME} ${ROCTRACER_TARGET} c stdc++ ) +add_library(codeobj_test SHARED EXCLUDE_FROM_ALL app/codeobj_test.cpp) +target_include_directories(codeobj_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${PROJECT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}/inc ${GEN_INC_DIR}) +target_link_libraries(codeobj_test roctracer) +add_dependencies(mytest codeobj_test) ## copying run script -execute_process ( COMMAND sh -xc "cp ${RUN_SCRIPT} ${PROJECT_BINARY_DIR}" ) -execute_process ( COMMAND sh -xc "ln -s run.sh ${PROJECT_BINARY_DIR}/run_ci.sh" ) +execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/run.sh ${PROJECT_BINARY_DIR}) +execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink run.sh ${PROJECT_BINARY_DIR}/run_ci.sh) ## copying tests output check script -execute_process ( COMMAND sh -xc "cp ${ROOT_DIR}/script/check_trace.py ${PROJECT_BINARY_DIR}/test/." ) +execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/script/check_trace.py ${PROJECT_BINARY_DIR}/test/.) diff --git a/projects/roctracer/test/MatrixTranspose/Makefile b/projects/roctracer/test/MatrixTranspose/Makefile deleted file mode 100644 index 9a805fb194..0000000000 --- a/projects/roctracer/test/MatrixTranspose/Makefile +++ /dev/null @@ -1,41 +0,0 @@ -ROOT_PATH ?= ../.. -INC_PATH ?= $(ROOT_PATH)/inc -LIB_PATH ?= $(ROOT_PATH)/build -ROCM_PATH ?= /opt/rocm -ROC_LIBS = -Wl,--rpath,${LIB_PATH} $(LIB_PATH)/libroctracer64.so $(LIB_PATH)/libroctx64.so - -HIP_PATH ?= $(wildcard /opt/rocm/hip) -ifeq (,$(HIP_PATH)) - HIP_PATH=../../.. -endif - -HIPCC=$(HIP_PATH)/bin/hipcc - -TARGET=hcc - -SOURCES = MatrixTranspose.cpp -OBJECTS = $(SOURCES:.cpp=.o) - -EXECUTABLE=./MatrixTranspose - -.PHONY: test - - -all: clean $(EXECUTABLE) - -CXXFLAGS =-g $(INC_PATH:%=-I%) -DLOCAL_BUILD=1 --rocm-path=$(ROCM_PATH) -CXX=$(HIPCC) - -$(EXECUTABLE): $(OBJECTS) - /usr/bin/env - $(HIPCC) $(OBJECTS) -o $@ $(ROC_LIBS) - -test: $(EXECUTABLE) - $(EXECUTABLE) - - -clean: - rm -f $(EXECUTABLE) - rm -f $(OBJECTS) - rm -f $(HIP_PATH)/src/*.o - diff --git a/projects/roctracer/test/MatrixTranspose_test/Makefile b/projects/roctracer/test/MatrixTranspose_test/Makefile deleted file mode 100644 index d0eab5a24b..0000000000 --- a/projects/roctracer/test/MatrixTranspose_test/Makefile +++ /dev/null @@ -1,55 +0,0 @@ -ROOT_PATH ?= ../.. -INC_PATH ?= $(ROOT_PATH)/inc -LIB_PATH ?= $(ROOT_PATH)/build -ROCM_PATH ?= /opt/rocm -HIP_VDI ?= 0 -ITERATIONS ?= 100 - -ROC_LIBS = -Wl,--rpath,${LIB_PATH} $(LIB_PATH)/libroctracer64.so $(LIB_PATH)/libroctx64.so - -HIP_PATH ?= $(wildcard /opt/rocm/hip) -ifeq (,$(HIP_PATH)) - HIP_PATH=../../.. -endif - -HIPCC=$(HIP_PATH)/bin/hipcc -TARGET=hcc - -EXECUTABLE=./MatrixTranspose -OBJECTS = MatrixTranspose.o -FLAGS =-g $(INC_PATH:%=-I%) -I$(ROCM_PATH)/hsa/include/hsa -I$(ROCM_PATH)/hsa/include -I$(ROCM_PATH)/hip/include -I$(ROCM_PATH)/include -DLOCAL_BUILD=1 -DITERATIONS=$(ITERATIONS) -DAMD_INTERNAL_BUILD=1 - -ifeq ($(C_TEST), 1) - COMP=${CC} - SOURCES = MatrixTranspose.c - FLAGS += -DHIP_TEST=0 -D__HIP_PLATFORM_HCC__=1 -else - COMP=$(HIPCC) - SOURCES = MatrixTranspose.cpp - FLAGS += -DHIP_TEST=1 --rocm-path=$(ROCM_PATH) -endif -ifeq ($(MGPU_TEST), 1) - FLAGS += -DMGPU_TEST=1 -endif -ifeq ($(HIP_API_ACTIVITY_ON), 1) - FLAGS += -DHIP_API_ACTIVITY_ON=1 -endif - -.PHONY: test - -all: clean $(EXECUTABLE) - -$(OBJECTS): $(SOURCES) - $(COMP) $(FLAGS) -c -o $@ $< - -$(EXECUTABLE): $(OBJECTS) - $(HIPCC) $(OBJECTS) -o $@ $(ROC_LIBS) - -test: $(EXECUTABLE) - LD_PRELOAD="librocprofiler64.so" $(EXECUTABLE) - -clean: - rm -f $(EXECUTABLE) - rm -f $(OBJECTS) - rm -f $(HIP_PATH)/src/*.o - diff --git a/projects/roctracer/test/MatrixTranspose_test/MatrixTranspose.c b/projects/roctracer/test/MatrixTranspose_test/MatrixTranspose.c deleted file mode 120000 index 14d96acbc8..0000000000 --- a/projects/roctracer/test/MatrixTranspose_test/MatrixTranspose.c +++ /dev/null @@ -1 +0,0 @@ -MatrixTranspose.cpp \ No newline at end of file diff --git a/projects/roctracer/test/MatrixTranspose_test/MatrixTranspose.cpp b/projects/roctracer/test/MatrixTranspose_test/MatrixTranspose.cpp index 1c7051de3c..840df63741 100644 --- a/projects/roctracer/test/MatrixTranspose_test/MatrixTranspose.cpp +++ b/projects/roctracer/test/MatrixTranspose_test/MatrixTranspose.cpp @@ -114,8 +114,10 @@ int main() { float* TransposeMatrix; float* cpuTransposeMatrix; +#if HIP_TEST float* gpuMatrix; float* gpuTransposeMatrix; +#endif int i; int errors; diff --git a/projects/roctracer/test/hsa/test/CMakeLists.txt b/projects/roctracer/test/hsa/test/CMakeLists.txt index bfe3728e73..eaab608759 100644 --- a/projects/roctracer/test/hsa/test/CMakeLists.txt +++ b/projects/roctracer/test/hsa/test/CMakeLists.txt @@ -20,44 +20,60 @@ ## IN THE SOFTWARE. ################################################################################ -cmake_minimum_required ( VERSION 2.8.12 ) +find_package(Clang REQUIRED CONFIG + PATHS + "/opt/rocm/" + PATH_SUFFIXES + "llvm/lib/cmake/clang") -set ( EXE_NAME "ctrl" ) +function(generate_hsaco TARGET_ID INPUT_FILE OUTPUT_FILE) + separate_arguments(CLANG_ARG_LIST UNIX_COMMAND + "-O2 -x cl -Xclang -finclude-default-header -cl-denorms-are-zero -cl-std=CL2.0 + -target amdgcn-amd-amdhsa -mcpu=${TARGET_ID} -o ${OUTPUT_FILE} ${INPUT_FILE}") -if ( NOT DEFINED TEST_DIR ) - set ( TEST_DIR ${CMAKE_CURRENT_SOURCE_DIR} ) - project ( ${EXE_NAME} ) - ## Set build environment - include ( env ) -endif () + ## Add custom command to produce a code object file. + ## This depends on the kernel source file & compiler. + ## It does not pickup devicelib changes. It is not clear + ## how to do that after conversion to --rocm-path is done. + add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/${OUTPUT_FILE} + COMMAND clang ${CLANG_ARG_LIST} + WORKING_DIRECTORY ${PROJECT_BINARY_DIR} + DEPENDS ${INPUT_FILE} clang + COMMENT "Building ${OUTPUT_FILE}..." + VERBATIM) -if ( NOT DEFINED ROCM_ROOT_DIR ) - set ( ROCM_ROOT_DIR "" ) -endif () -if ( NOT DEFINED GPU_TARGETS ) - set ( GPU_TARGETS "" ) -endif () + set(HSACO_TARGET_LIST ${HSACO_TARGET_LIST} ${PROJECT_BINARY_DIR}/${OUTPUT_FILE} PARENT_SCOPE) +endfunction(generate_hsaco) -## Util sources -file( GLOB UTIL_SRC "${TEST_DIR}/util/*.cpp" ) +function(build_kernel_for_devices KERNEL_FILE KERNEL_NAME) + foreach(target_id ${GPU_TARGETS}) + ## generate kernel bitcodes + generate_hsaco(${target_id} ${KERNEL_FILE} ${target_id}_${KERNEL_NAME}.hsaco) + endforeach(target_id) + set(HSACO_TARGET_LIST ${HSACO_TARGET_LIST} PARENT_SCOPE) +endfunction(build_kernel_for_devices) -## Test control sources -set ( CTRL_SRC - ${TEST_DIR}/app/test.cpp - ${TEST_DIR}/ctrl/test_hsa.cpp -) - -## Dummy kernel -set ( DUMMY_NAME dummy_kernel ) -execute_process ( COMMAND sh -xc "${TEST_DIR}/../script/build_kernel.sh '${TEST_DIR}/${DUMMY_NAME}/${DUMMY_NAME}' '${PROJECT_BINARY_DIR}' '${ROCM_ROOT_DIR}' '${GPU_TARGETS}'" ) +set(HSACO_TARGET_LIST "") +build_kernel_for_devices("${CMAKE_CURRENT_SOURCE_DIR}/dummy_kernel/dummy_kernel.cl" "DummyKernel") +build_kernel_for_devices("${CMAKE_CURRENT_SOURCE_DIR}/simple_convolution/simple_convolution.cl" "SimpleConvolution") +add_custom_target(hsaco_targets DEPENDS ${HSACO_TARGET_LIST}) ## Test kernel -set ( TEST_NAME simple_convolution ) -set ( KERN_SRC ${TEST_DIR}/${TEST_NAME}/${TEST_NAME}.cpp ) -execute_process ( COMMAND sh -xc "${TEST_DIR}/../script/build_kernel.sh '${TEST_DIR}/${TEST_NAME}/${TEST_NAME}' '${PROJECT_BINARY_DIR}' '${ROCM_ROOT_DIR}' '${GPU_TARGETS}'" ) +set(TEST_NAME simple_convolution) +set(KERN_SRC ${TEST_NAME}/${TEST_NAME}.cpp) + +## Util sources +file(GLOB UTIL_SRC "util/*.cpp") + +## Test control sources +set(CTRL_SRC + app/test.cpp + ctrl/test_hsa.cpp) ## Building ctrl test executable -add_executable ( ${EXE_NAME} ${CTRL_SRC} ${UTIL_SRC} ${KERN_SRC} ) -target_include_directories ( ${EXE_NAME} PRIVATE ${TEST_DIR} ${ROOT_DIR} ${HSA_RUNTIME_INC_PATH} ) -target_link_libraries( ${EXE_NAME} ${HSA_RUNTIME_LIB} ${HSA_KMT_LIB} c stdc++ dl pthread rt ) -execute_process ( COMMAND sh -xc "cp ${TEST_DIR}/run.sh ${PROJECT_BINARY_DIR}" ) +add_executable(ctrl EXCLUDE_FROM_ALL ${CTRL_SRC} ${UTIL_SRC} ${KERN_SRC}) +target_compile_definitions(ctrl PRIVATE AMD_INTERNAL_BUILD) +target_include_directories(ctrl PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}) +target_link_libraries(ctrl hsa-runtime64::hsa-runtime64 Threads::Threads dl) +add_dependencies(ctrl hsaco_targets) +add_dependencies(mytest ctrl)