diff --git a/projects/hip-tests/catch/CMakeLists.txt b/projects/hip-tests/catch/CMakeLists.txt index 2a4c6a31a5..1b53c746d3 100644 --- a/projects/hip-tests/catch/CMakeLists.txt +++ b/projects/hip-tests/catch/CMakeLists.txt @@ -215,13 +215,29 @@ elseif(DEFINED ENV{HCC_AMDGPU_TARGET}) endif() message(STATUS "Using offload arch string: ${OFFLOAD_ARCH_STR}") +find_package(Git) +# get hip-tests commit short hash +execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + RESULT_VARIABLE git_result + OUTPUT_VARIABLE git_output + OUTPUT_STRIP_TRAILING_WHITESPACE) +if(git_result EQUAL 0) + set(HIP_TESTS_GITHASH ${git_output}) +endif() + + # 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(_autogen "# Auto-generated by cmake on ${_timestamp} UTC\n") +set(_catchInfo ${_autogen} "HIP_VERSION=${HIP_VERSION}\n") set(_catchInfo ${_catchInfo} "HIP_PLATFORM=${HIP_PLATFORM}\n") +set(_catchInfo ${_catchInfo} "HIP_TESTS_GITHASH=${HIP_TESTS_GITHASH}\n") set(_catchInfo ${_catchInfo} "ARCHS=${HIP_GPU_ARCH_LIST}\n") file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${CATCH_BUILD_DIR}/catchInfo.txt ${_catchInfo}) +# allows user to run ctest from catch_tests level +set(_subdirs ${_autogen} "subdirs(..)\n") +file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${CATCH_BUILD_DIR}/CTestTestfile.cmake ${_subdirs}) # Enable device lambda on nvidia platforms if(HIP_COMPILER MATCHES "nvcc") @@ -250,19 +266,15 @@ 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) +add_subdirectory(packaging) 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}) + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_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}) + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) endif() diff --git a/projects/hip-tests/catch/external/Catch2/cmake/Catch2/Catch.cmake b/projects/hip-tests/catch/external/Catch2/cmake/Catch2/Catch.cmake index 0a76641fe5..c6c7471554 100644 --- a/projects/hip-tests/catch/external/Catch2/cmake/Catch2/Catch.cmake +++ b/projects/hip-tests/catch/external/Catch2/cmake/Catch2/Catch.cmake @@ -228,6 +228,7 @@ function(catch_discover_tests TARGET_LIST TEST_SET) file(RELATIVE_PATH _CATCH_ADD_TEST_SCRIPT ${CMAKE_CURRENT_BINARY_DIR} ${ADD_SCRIPT_PATH}) file(RELATIVE_PATH CATCH_INCLUDE_PATH ${CMAKE_CURRENT_BINARY_DIR} ${CATCH_INCLUDE_PATH}) if(NOT ${CMAKE_VERSION} VERSION_LESS "3.10.0") + file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${ctestfilepath} "") file(WRITE ${ctest_include_file} "set(exc_names ${TARGET_LIST})\n") file(APPEND ${ctest_include_file} "set(TARGET ${TEST_SET})\n") file(APPEND ${ctest_include_file} "set(_TEST_LIST ${TEST_SET}_TESTS)\n") diff --git a/projects/hip-tests/catch/external/Catch2/cmake/Catch2/CatchAddTests.cmake b/projects/hip-tests/catch/external/Catch2/cmake/Catch2/CatchAddTests.cmake index 2b13187a7d..29a8e9aa12 100644 --- a/projects/hip-tests/catch/external/Catch2/cmake/Catch2/CatchAddTests.cmake +++ b/projects/hip-tests/catch/external/Catch2/cmake/Catch2/CatchAddTests.cmake @@ -29,110 +29,116 @@ function(add_command NAME) set(script "${script}${NAME}(${_args})\n" PARENT_SCOPE) endfunction() -get_filename_component(TEST_EXECUTABLE ${TEST_EXECUTABLE} ABSOLUTE) -# Run test executable to get list of available tests -if(NOT EXISTS "${TEST_EXECUTABLE}") - message(FATAL_ERROR - "Specified test executable '${TEST_EXECUTABLE}' does not exist" - ) -endif() -execute_process( - COMMAND ${TEST_EXECUTOR} "${TEST_EXECUTABLE}" ${spec} --list-test-names-only - OUTPUT_VARIABLE output - RESULT_VARIABLE result - WORKING_DIRECTORY "${TEST_WORKING_DIR}" -) -# Catch --list-test-names-only reports the number of tests, so 0 is... surprising -if(${result} EQUAL 0) - message(WARNING - "Test executable '${TEST_EXECUTABLE}' contains no tests!\n" - ) -elseif(${result} LESS 0) - message(FATAL_ERROR - "Error running test executable '${TEST_EXECUTABLE}':\n" - " Result: ${result}\n" - " Output: ${output}\n" - ) -endif() - -string(REPLACE "\n" ";" output "${output}") - -# Run test executable to get list of available reporters -execute_process( - COMMAND ${TEST_EXECUTOR} "${TEST_EXECUTABLE}" ${spec} --list-reporters - OUTPUT_VARIABLE reporters_output - RESULT_VARIABLE reporters_result - WORKING_DIRECTORY "${TEST_WORKING_DIR}" -) -if(${reporters_result} EQUAL 0) - message(WARNING - "Test executable '${TEST_EXECUTABLE}' contains no reporters!\n" - ) -elseif(${reporters_result} LESS 0) - message(FATAL_ERROR - "Error running test executable '${TEST_EXECUTABLE}':\n" - " Result: ${reporters_result}\n" - " Output: ${reporters_output}\n" - ) -endif() -string(FIND "${reporters_output}" "${reporter}" reporter_is_valid) -if(reporter AND ${reporter_is_valid} EQUAL -1) - message(FATAL_ERROR - "\"${reporter}\" is not a valid reporter!\n" - ) -endif() - -# Prepare reporter -if(reporter) - set(reporter_arg "--reporter ${reporter}") -endif() - -# Prepare output dir -if(output_dir AND NOT IS_ABSOLUTE ${output_dir}) - set(output_dir "${TEST_WORKING_DIR}/${output_dir}") - if(NOT EXISTS ${output_dir}) - file(MAKE_DIRECTORY ${output_dir}) +foreach(TEST_EXECUTABLE ${TEST_EXE_LIST}) + if(WIN32) + set(TEST_EXECUTABLE ${TEST_EXECUTABLE}.exe) endif() -endif() + get_filename_component(TEST_EXECUTABLE ${TEST_EXECUTABLE} ABSOLUTE) -# Parse output -foreach(line ${output}) - set(test ${line}) - # Escape characters in test case names that would be parsed by Catch2 - set(test_name ${test}) - foreach(char , [ ]) - string(REPLACE ${char} "\\${char}" test_name ${test_name}) - endforeach(char) - # ...add output dir - if(output_dir) - string(REGEX REPLACE "[^A-Za-z0-9_]" "_" test_name_clean ${test_name}) - set(output_dir_arg "--out ${output_dir}/${output_prefix}${test_name_clean}${output_suffix}") + # Run test executable to get list of available tests + if(NOT EXISTS "${TEST_EXECUTABLE}") + # exe does not exist moving to the next executable + continue() + endif() + execute_process( + COMMAND ${TEST_EXECUTOR} "${TEST_EXECUTABLE}" ${spec} --list-test-names-only + OUTPUT_VARIABLE output + RESULT_VARIABLE result + WORKING_DIRECTORY "${TEST_WORKING_DIR}" + ) + # Catch --list-test-names-only reports the number of tests, so 0 is... surprising + if(${result} EQUAL 0) + message(WARNING + "Test executable '${TEST_EXECUTABLE}' contains no tests!\n" + ) + elseif(${result} LESS 0) + message(FATAL_ERROR + "Error running test executable '${TEST_EXECUTABLE}':\n" + " Result: ${result}\n" + " Output: ${output}\n" + ) endif() - file(RELATIVE_PATH exe_path ${CMAKE_CURRENT_BINARY_DIR} ${TEST_EXECUTABLE}) + string(REPLACE "\n" ";" output "${output}") - # ...and add to script - add_command(add_test - "${prefix}${test}${suffix}" - ${TEST_EXECUTOR} - "${exe_path}" - "${test_name}" - ${extra_args} - "${reporter_arg}" - "${output_dir_arg}" + # Run test executable to get list of available reporters + execute_process( + COMMAND ${TEST_EXECUTOR} "${TEST_EXECUTABLE}" ${spec} --list-reporters + OUTPUT_VARIABLE reporters_output + RESULT_VARIABLE reporters_result + WORKING_DIRECTORY "${TEST_WORKING_DIR}" ) - add_command(set_tests_properties - "${prefix}${test}${suffix}" - PROPERTIES - ${properties} - ) - list(APPEND tests "${prefix}${test}${suffix}") + if(${reporters_result} EQUAL 0) + message(WARNING + "Test executable '${TEST_EXECUTABLE}' contains no reporters!\n" + ) + elseif(${reporters_result} LESS 0) + message(FATAL_ERROR + "Error running test executable '${TEST_EXECUTABLE}':\n" + " Result: ${reporters_result}\n" + " Output: ${reporters_output}\n" + ) + endif() + string(FIND "${reporters_output}" "${reporter}" reporter_is_valid) + if(reporter AND ${reporter_is_valid} EQUAL -1) + message(FATAL_ERROR + "\"${reporter}\" is not a valid reporter!\n" + ) + endif() + + # Prepare reporter + if(reporter) + set(reporter_arg "--reporter ${reporter}") + endif() + + # Prepare output dir + if(output_dir AND NOT IS_ABSOLUTE ${output_dir}) + set(output_dir "${TEST_WORKING_DIR}/${output_dir}") + if(NOT EXISTS ${output_dir}) + file(MAKE_DIRECTORY ${output_dir}) + endif() + endif() + + # Parse output + foreach(line ${output}) + set(test ${line}) + # Escape characters in test case names that would be parsed by Catch2 + set(test_name ${test}) + foreach(char , [ ]) + string(REPLACE ${char} "\\${char}" test_name ${test_name}) + endforeach(char) + # ...add output dir + if(output_dir) + string(REGEX REPLACE "[^A-Za-z0-9_]" "_" test_name_clean ${test_name}) + set(output_dir_arg "--out ${output_dir}/${output_prefix}${test_name_clean}${output_suffix}") + endif() + + file(RELATIVE_PATH exe_path ${CMAKE_CURRENT_BINARY_DIR} ${TEST_EXECUTABLE}) + + # ...and add to script + add_command(add_test + "${prefix}${test}${suffix}" + ${TEST_EXECUTOR} + "${exe_path}" + "${test_name}" + ${extra_args} + "${reporter_arg}" + "${output_dir_arg}" + ) + add_command(set_tests_properties + "${prefix}${test}${suffix}" + PROPERTIES + ${properties} + ) + list(APPEND tests "${prefix}${test}${suffix}") + endforeach() + + # Create a list of all discovered tests, which users may use to e.g. set + # properties on the tests + add_command(set ${TEST_LIST} ${tests}) + endforeach() -# Create a list of all discovered tests, which users may use to e.g. set -# properties on the tests -add_command(set ${TEST_LIST} ${tests}) - # Write CTest script -file(APPEND "${CTEST_FILE}" "${script}") +file(WRITE "${CTEST_FILE}" "${script}") diff --git a/projects/hip-tests/catch/external/Catch2/cmake/Catch2/catch_include.cmake b/projects/hip-tests/catch/external/Catch2/cmake/Catch2/catch_include.cmake index 9d37d62260..2c9efa030d 100644 --- a/projects/hip-tests/catch/external/Catch2/cmake/Catch2/catch_include.cmake +++ b/projects/hip-tests/catch/external/Catch2/cmake/Catch2/catch_include.cmake @@ -2,40 +2,29 @@ # _tests.cmake contains the add_test macro which runs the individual test. get_filename_component(_cmake_path cmake ABSOLUTE) +execute_process( +COMMAND "${_cmake_path}" + -D "TEST_TARGET=${TARGET}" + -D "TEST_EXE_LIST=${exc_names}" + -D "TEST_EXECUTOR=${crosscompiling_emulator}" + -D "TEST_WORKING_DIR=${_workdir}" + -D "TEST_SPEC=${_TEST_SPEC}" + -D "TEST_EXTRA_ARGS=${_EXTRA_ARGS}" + -D "TEST_PROPERTIES=${_PROPERTIES}" + -D "TEST_PREFIX=${_TEST_PREFIX}" + -D "TEST_SUFFIX=${_TEST_SUFFIX}" + -D "TEST_LIST=${_TEST_LIST}" + -D "TEST_REPORTER=${_REPORTER}" + -D "TEST_OUTPUT_DIR=${_OUTPUT_DIR}" + -D "TEST_OUTPUT_PREFIX=${_OUTPUT_PREFIX}" + -D "TEST_OUTPUT_SUFFIX=${_OUTPUT_SUFFIX}" + -D "CTEST_FILE=${ctestfilepath}" + -P "${_CATCH_ADD_TEST_SCRIPT}" +OUTPUT_VARIABLE output +RESULT_VARIABLE result +WORKING_DIRECTORY "${TEST_WORKING_DIR}" +) -if(NOT EXISTS "${ctestfilepath}") - foreach(EXEC_NAME ${exc_names}) - if(WIN32) - set(EXEC_NAME ${EXEC_NAME}.exe) - endif() - if(EXISTS "${EXEC_NAME}") - execute_process( - COMMAND "${_cmake_path}" - -D "TEST_TARGET=${TARGET}" - -D "TEST_EXECUTABLE=${EXEC_NAME}" - -D "TEST_EXECUTOR=${crosscompiling_emulator}" - -D "TEST_WORKING_DIR=${_workdir}" - -D "TEST_SPEC=${_TEST_SPEC}" - -D "TEST_EXTRA_ARGS=${_EXTRA_ARGS}" - -D "TEST_PROPERTIES=${_PROPERTIES}" - -D "TEST_PREFIX=${_TEST_PREFIX}" - -D "TEST_SUFFIX=${_TEST_SUFFIX}" - -D "TEST_LIST=${_TEST_LIST}" - -D "TEST_REPORTER=${_REPORTER}" - -D "TEST_OUTPUT_DIR=${_OUTPUT_DIR}" - -D "TEST_OUTPUT_PREFIX=${_OUTPUT_PREFIX}" - -D "TEST_OUTPUT_SUFFIX=${_OUTPUT_SUFFIX}" - -D "CTEST_FILE=${ctestfilepath}" - -P "${_CATCH_ADD_TEST_SCRIPT}" - OUTPUT_VARIABLE output - RESULT_VARIABLE result - WORKING_DIRECTORY "${TEST_WORKING_DIR}" - ) - else() - message("executable not found : ${EXEC_NAME}" ) - endif() - endforeach() -endif() if(EXISTS "${ctestfilepath}") # include the generated ctest file for execution diff --git a/projects/hip-tests/catch/packaging/hip-tests.txt b/projects/hip-tests/catch/packaging/CMakeLists.txt similarity index 72% rename from projects/hip-tests/catch/packaging/hip-tests.txt rename to projects/hip-tests/catch/packaging/CMakeLists.txt index 1c74ff4d2a..1b124bb847 100644 --- a/projects/hip-tests/catch/packaging/hip-tests.txt +++ b/projects/hip-tests/catch/packaging/CMakeLists.txt @@ -1,5 +1,5 @@ -# Copyright (c) 2016 - 2022 Advanced Micro Devices, Inc. All rights reserved. +# Copyright (c) 2016 - 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 @@ -25,58 +25,24 @@ cmake_minimum_required(VERSION 3.16.8) # to skip the simple compiler test set(CMAKE_C_COMPILER_WORKS 1) set(CMAKE_CXX_COMPILER_WORKS 1) - -project(tests) - -MACRO(SUBDIRLIST result curdir) - FILE(GLOB children RELATIVE ${curdir} ${curdir}/*) - SET(dirlist "") - FOREACH(child ${children}) - IF(IS_DIRECTORY ${curdir}/${child}) - LIST(APPEND dirlist ${child}) - ENDIF() - ENDFOREACH() - SET(${result} ${dirlist}) -ENDMACRO() - -SUBDIRLIST(SUBDIRS @PROJECT_BINARY_DIR@/@CATCH_BUILD_DIR@) - -FOREACH(subdir ${SUBDIRS}) - set(CONTENT ${CONTENT} "subdirs(${subdir}) \n") -ENDFOREACH() -# Creating a CTestTestfile so ctest can be executed from @CATCH_BUILD_DIR@ level -# This also helps in executing through jenkins and avoid permission issues -file(WRITE @PROJECT_BINARY_DIR@/@CATCH_BUILD_DIR@/CTestTestfile.cmake - ${CONTENT}) - -install(DIRECTORY @PROJECT_BINARY_DIR@/@CATCH_BUILD_DIR@ - DESTINATION . - USE_SOURCE_PERMISSIONS - DIRECTORY_PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE - GROUP_WRITE GROUP_READ GROUP_EXECUTE - WORLD_WRITE WORLD_READ WORLD_EXECUTE) - -install(FILES @PROJECT_BINARY_DIR@/CTestTestfile.cmake - DESTINATION .) +include(GNUInstallDirs) ############################# # Packaging steps ############################# set(CPACK_SET_DESTDIR TRUE) -set(CPACK_INSTALL_PREFIX @CPACK_INSTALL_PREFIX@) if(NOT DEFINED CPACK_INSTALL_PREFIX) - set(CPACK_INSTALL_PREFIX "/opt/rocm/test/hip/") + set(CPACK_INSTALL_PREFIX "/opt/rocm/") endif() - -set(PKG_NAME hip-catch-@HIP_PLATFORM@) +set(PKG_NAME hip-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_PACKAGING_VERSION_PATCH@) +set(CPACK_PACKAGE_VERSION ${HIP_VERSION_MAJOR}.${HIP_VERSION_MINOR}.${HIP_PACKAGING_VERSION_PATCH}) # by default rpm tries to reduce the file size by stripping the executable # To avoid build/packaging failures SWDEV-375603 and skip stripping set(CPACK_RPM_SPEC_MORE_DEFINE "%global __os_install_post %{nil}") @@ -87,6 +53,11 @@ set (CPACK_DEBIAN_PACKAGE_DEPENDS "rocm-core, hip-runtime-amd") set (CPACK_RPM_PACKAGE_REQUIRES "rocm-core, hip-runtime-amd") if(NOT WIN32) +install(DIRECTORY ${PROJECT_BINARY_DIR}/${CATCH_BUILD_DIR} + DESTINATION ${CMAKE_INSTALL_DATADIR}/hip + USE_SOURCE_PERMISSIONS) +install(FILES ${PROJECT_BINARY_DIR}/CTestTestfile.cmake DESTINATION ${CMAKE_INSTALL_DATADIR}/hip) + 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") @@ -123,14 +94,19 @@ 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_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/../LICENSE.txt" ) +install(FILES ${CPACK_RESOURCE_FILE_LICENSE} DESTINATION ${CMAKE_INSTALL_DATADIR}/hip) set(CPACK_RPM_PACKAGE_LICENSE "MIT") else() # windows packaging -set(CPACK_SYSTEM_NAME "") set(CPACK_INSTALL_PREFIX "") +install(DIRECTORY ${PROJECT_BINARY_DIR}/${CATCH_BUILD_DIR} + DESTINATION . + USE_SOURCE_PERMISSIONS) +install(FILES ${PROJECT_BINARY_DIR}/CTestTestfile.cmake DESTINATION .) +set(CPACK_SYSTEM_NAME "") set(CPACK_GENERATOR "ZIP" CACHE STRING "Windows package types for catch tests") set(CPACK_TEST_ZIP "ON") set(CPACK_ZIP_TEST_PACKAGE_NAME "catch")