# MIT License # # Copyright (c) 2017-2019 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. # This variable is defined here to be accessible to other test sub-modules set(COMMON_TEST_HEADER_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) function(add_relative_test test_name test_target) get_target_property(EXE_PATH ${test_target} RUNTIME_OUTPUT_DIRECTORY) if(EXE_PATH STREQUAL "EXE_PATH-NOTFOUND") set(EXE_PATH ".") endif() get_filename_component(EXE_PATH "${EXE_PATH}" ABSOLUTE BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}") get_target_property(EXE_NAME ${test_target} RUNTIME_OUTPUT_NAME) if(EXE_NAME STREQUAL "EXE_NAME-NOTFOUND") get_target_property(EXE_NAME ${test_target} OUTPUT_NAME) if(EXE_NAME STREQUAL "EXE_NAME-NOTFOUND") set(EXE_NAME "${test_target}") endif() endif() file(RELATIVE_PATH rel_path "${CMAKE_CURRENT_BINARY_DIR}" "${EXE_PATH}/${EXE_NAME}") add_test(NAME "${test_name}" COMMAND "./${rel_path}") endfunction() function(add_hip_test TEST_NAME TEST_SOURCES) list(GET TEST_SOURCES 0 TEST_MAIN_SOURCE) get_filename_component(TEST_TARGET ${TEST_MAIN_SOURCE} NAME_WE) add_executable(${TEST_TARGET} ${TEST_SOURCES}) target_include_directories(${TEST_TARGET} SYSTEM BEFORE PUBLIC ${COMMON_TEST_HEADER_DIRECTORY} ) if(TARGET GTest::GTest) target_link_libraries(${TEST_TARGET} PRIVATE GTest::GTest GTest::Main ) else() target_link_libraries(${TEST_TARGET} PRIVATE GTest::gtest GTest::gtest_main ) endif() if(NOT USE_HIP_CPU) target_link_libraries(${TEST_TARGET} PRIVATE rocprim_hip ) else() target_link_libraries(${TEST_TARGET} PRIVATE rocprim Threads::Threads hip_cpu_rt::hip_cpu_rt ) if(STL_DEPENDS_ON_TBB) target_link_libraries(${TEST_TARGET} PRIVATE TBB::tbb ) endif() endif() target_compile_options(${TEST_TARGET} PRIVATE $<$: /bigobj # number of sections exceeded object file format limit: compile with /bigobj > ) set_target_properties(${TEST_TARGET} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/test" ) add_relative_test(${TEST_NAME} ${TEST_TARGET}) if (WIN32 AND NOT DEFINED DLLS_COPIED) set(DLLS_COPIED "YES") set(DLLS_COPIED ${DLLS_COPIED} PARENT_SCOPE) # for now adding in all .dll as dependency chain is not cmake based on win32 file( GLOB third_party_dlls LIST_DIRECTORIES ON CONFIGURE_DEPENDS ${HIP_DIR}/bin/*.dll ${CMAKE_SOURCE_DIR}/rtest.* ) foreach( file_i ${third_party_dlls}) add_custom_command( TARGET ${TEST_TARGET} POST_BUILD COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${file_i} ${PROJECT_BINARY_DIR}/test ) endforeach( file_i ) endif() endfunction() # **************************************************************************** # Tests # **************************************************************************** # HIP tests without using rocPRIM add_hip_test("hip.device_api" test_hip_api.cpp) # rocPRIM test add_subdirectory(rocprim)