diff --git a/tests/catch/CMakeLists.txt b/tests/catch/CMakeLists.txt index 1a272d03aa..ff12be86e3 100644 --- a/tests/catch/CMakeLists.txt +++ b/tests/catch/CMakeLists.txt @@ -13,7 +13,7 @@ if(HIP_PLATFORM STREQUAL "amd") message(FATAL_ERROR "Unexpected HIP_COMPILER:${HIP_COMPILER} is set for HIP_PLATFOR:amd") endif() elseif(HIP_PLATFORM STREQUAL "nvidia") - if(NOT DEFINED HIP_COMPILER OR NOT HIP_COMPILER STREQUAL "nvcc") + if(DEFINED HIP_COMPILER AND NOT HIP_COMPILER STREQUAL "nvcc") message(FATAL_ERROR "Unexpected HIP_COMPILER: ${HIP_COMPILER} is set for HIP_PLATFORM:nvidia") endif() else() @@ -63,6 +63,7 @@ else() OUTPUT_STRIP_TRAILING_WHITESPACE) endif() + string(REPLACE "." ";" VERSION_LIST ${HIP_VERSION}) list(GET VERSION_LIST 0 HIP_VERSION_MAJOR) list(GET VERSION_LIST 1 HIP_VERSION_MINOR) @@ -115,9 +116,11 @@ if (RTC_TESTING) endif() add_definitions(-DKERNELS_PATH="${CMAKE_CURRENT_SOURCE_DIR}/kernels/") -file(COPY ./hipTestMain/config DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/hipTestMain) -file(COPY ./external/Catch2/cmake/Catch2/CatchAddTests.cmake DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/script) -set(ADD_SCRIPT_PATH ${CMAKE_CURRENT_BINARY_DIR}/script/CatchAddTests.cmake) +set(CATCH_BUILD_DIR catch_tests) +file(COPY ./hipTestMain/config DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/${CATCH_BUILD_DIR}/hipTestMain) +file(COPY ./external/Catch2/cmake/Catch2/CatchAddTests.cmake + DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/${CATCH_BUILD_DIR}/script) +set(ADD_SCRIPT_PATH ${CMAKE_CURRENT_BINARY_DIR}/${CATCH_BUILD_DIR}/script/CatchAddTests.cmake) if (WIN32) configure_file(catchProp_in_rc.in ${CMAKE_CURRENT_BINARY_DIR}/catchProp.rc @ONLY) @@ -150,9 +153,16 @@ message(STATUS "CMAKE HIP ARCHITECTURES: ${CMAKE_HIP_ARCHITECTURES}") # This is done due to limitation of rocm_agent_enumerator # While building test parallelly, rocm_agent_enumerator can fail and give out an empty target # That results in hipcc building the test for gfx803 (the default target) -if(NOT DEFINED OFFLOAD_ARCH_STR AND EXISTS "${ROCM_PATH}/bin/rocm_agent_enumerator" +# preference to pass arch - +# OFFLOAD_ARCH_STR +# ENV{HCC_AMDGPU_TARGET} +# rocm_agent_enumerator +if(NOT DEFINED OFFLOAD_ARCH_STR + AND NOT DEFINED ENV{HCC_AMDGPU_TARGET} + AND EXISTS "${ROCM_PATH}/bin/rocm_agent_enumerator" AND HIP_PLATFORM STREQUAL "amd" AND UNIX) - execute_process(COMMAND ${ROCM_PATH}/bin/rocm_agent_enumerator OUTPUT_VARIABLE HIP_GPU_ARCH + execute_process(COMMAND ${ROCM_PATH}/bin/rocm_agent_enumerator + OUTPUT_VARIABLE HIP_GPU_ARCH RESULT_VARIABLE ROCM_AGENT_ENUM_RESULT) # Trim out gfx000 string(REPLACE "gfx000\n" "" HIP_GPU_ARCH ${HIP_GPU_ARCH}) @@ -165,7 +175,6 @@ if(NOT DEFINED OFFLOAD_ARCH_STR AND EXISTS "${ROCM_PATH}/bin/rocm_agent_enumerat foreach(_hip_gpu_arch ${HIP_GPU_ARCH_LIST}) set(OFFLOAD_ARCH_STR " ${OFFLOAD_ARCH_STR} --offload-arch=${_hip_gpu_arch} ") endforeach() - message(STATUS "Using offload arch string: ${OFFLOAD_ARCH_STR}") endif() else() message(STATUS "ROCm Agent Enumurator found no valid architectures") @@ -174,22 +183,56 @@ endif() if(DEFINED OFFLOAD_ARCH_STR) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OFFLOAD_ARCH_STR} ") +elseif(DEFINED ENV{HCC_AMDGPU_TARGET}) + # hipcc pl script appends it to the options + set(OFFLOAD_ARCH_STR " --offload-arch=$ENV{HCC_AMDGPU_TARGET}") + set(HIP_GPU_ARCH_LIST $ENV{HCC_AMDGPU_TARGET}) endif() +message(STATUS "Using offload arch string: ${OFFLOAD_ARCH_STR}") + +# prints the catch info to a file +string(TIMESTAMP _timestamp UTC) +set(_catchInfo "# Auto-generated by cmake on ${_timestamp} UTC\n") +set(_catchInfo ${_catchInfo} "HIP_VERSION=${HIP_VERSION}\n") +set(_catchInfo ${_catchInfo} "HIP_PLATFORM=${HIP_PLATFORM}\n") +set(_catchInfo ${_catchInfo} "ARCHS=${HIP_GPU_ARCH_LIST}\n") +file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${CATCH_BUILD_DIR}/catchInfo.txt ${_catchInfo}) # Disable CXX extensions (gnu++11 etc) set(CMAKE_CXX_EXTENSIONS OFF) add_custom_target(build_tests) + # Tests folder -add_subdirectory(unit) -add_subdirectory(ABM) -add_subdirectory(kernels) -add_subdirectory(hipTestMain) -add_subdirectory(stress) -add_subdirectory(TypeQualifiers) +add_subdirectory(unit ${CATCH_BUILD_DIR}/unit) +add_subdirectory(ABM ${CATCH_BUILD_DIR}/ABM) +add_subdirectory(kernels ${CATCH_BUILD_DIR}/kernels) +add_subdirectory(hipTestMain ${CATCH_BUILD_DIR}/hipTestMain) +add_subdirectory(stress ${CATCH_BUILD_DIR}/stress) +add_subdirectory(TypeQualifiers ${CATCH_BUILD_DIR}/TypeQualifiers) if(UNIX) - add_subdirectory(multiproc) + add_subdirectory(multiproc ${CATCH_BUILD_DIR}/multiproc) endif() cmake_policy(POP) + +# packaging the tests +# make package_test to generate packages for test +set(BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/packages/) +configure_file(packaging/hip-tests.txt ${BUILD_DIR}/CMakeLists.txt @ONLY) +if(UNIX) +add_custom_target(package_test COMMAND ${CMAKE_COMMAND} . + COMMAND rm -rf *.deb *.rpm *.tar.gz + COMMAND make package + COMMAND cp *.deb ${PROJECT_BINARY_DIR} + COMMAND cp *.rpm ${PROJECT_BINARY_DIR} + COMMAND cp *.tar.gz ${PROJECT_BINARY_DIR} + WORKING_DIRECTORY ${BUILD_DIR}) +else() +file(TO_NATIVE_PATH ${PROJECT_BINARY_DIR} CATCH_BINARY_DIR) +add_custom_target(package_test COMMAND ${CMAKE_COMMAND} . + COMMAND cpack + COMMAND copy *.zip ${CATCH_BINARY_DIR} + WORKING_DIRECTORY ${BUILD_DIR}) +endif() diff --git a/tests/catch/packaging/hip-tests.txt b/tests/catch/packaging/hip-tests.txt new file mode 100644 index 0000000000..bbf3ec0ade --- /dev/null +++ b/tests/catch/packaging/hip-tests.txt @@ -0,0 +1,73 @@ + +# Copyright (c) 2016 - 2021 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. +cmake_minimum_required(VERSION 3.16.8) +project(tests) +install(DIRECTORY @PROJECT_BINARY_DIR@/@CATCH_BUILD_DIR@ + DESTINATION . + USE_SOURCE_PERMISSIONS) +install(FILES @PROJECT_BINARY_DIR@/CTestTestfile.cmake + DESTINATION .) + +############################# +# Packaging steps +############################# +set(CPACK_SET_DESTDIR TRUE) +set(CPACK_INSTALL_PREFIX @ROCM_PATH@/test/hip/) +set(PKG_NAME catch-@HIP_PLATFORM@) +set(CPACK_PACKAGE_NAME ${PKG_NAME}) +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "HIP: Heterogenous-computing Interface for Portability [CATCH TESTS]") +set(CPACK_PACKAGE_DESCRIPTION "HIP: + Heterogenous-computing Interface for Portability [CATCH TESTS]") +set(CPACK_PACKAGE_VENDOR "Advanced Micro Devices, Inc.") +set(CPACK_PACKAGE_CONTACT "HIP Support ") +set(CPACK_PACKAGE_VERSION @HIP_VERSION_MAJOR@.@HIP_VERSION_MINOR@.@HIP_VERSION_PATCH_GITHASH@) + + +if(NOT WIN32) +set(CPACK_GENERATOR "TGZ;DEB;RPM" CACHE STRING "Linux package types for catch tests") +set(CPACK_BINARY_DEB "ON") +set(CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT") +set(CPACK_DEBIAN_PACKAGE_PROVIDES "catch") +set(CPACK_BINARY_RPM "ON") +set(CPACK_RPM_FILE_NAME "RPM-DEFAULT") +set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION "/opt") +if (CPACK_PACKAGE_VERSION MATCHES "local" ) + #If building locally default value will cause build failure + #DEBUG SYMBOL pacaking require SOURCE_DIR to be small + set(CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX ${CPACK_INSTALL_PREFIX}) +endif() + +set(CPACK_SOURCE_GENERATOR "TGZ") +# Install license file +set ( CPACK_RESOURCE_FILE_LICENSE "@CMAKE_CURRENT_LIST_DIR@/../../LICENSE.txt" ) +install(FILES ${CPACK_RESOURCE_FILE_LICENSE} DESTINATION .) +set(CPACK_RPM_PACKAGE_LICENSE "MIT") + +else() +# windows packaging +set(CPACK_INSTALL_PREFIX "") +set(CPACK_GENERATOR "ZIP" CACHE STRING "Windows package types for catch tests") +set(CPACK_TGZ_FILE_NAME "ZIP-DEFAULT") +set(CPACK_TEST_ZIP "ON") +set(CPACK_ZIP_TEST_PACKAGE_NAME "catch") +endif() + +include(CPack)