blob: 6841aadc8614b1ce9722b5be024514b7b7150113 [file] [log] [blame]
include(External)
# This file provides common functions and macros to generate
# targets and executables for the tests in External/CUDA and
# External/HIP.
# Helper macro to extract version number at the end of the string
# Input: get_version(Var String)
# Where String = /some/string/with/version-x.y.z
# Output:
# Sets Var=x.y.z
macro(get_version Var Path)
string(REGEX MATCH "[0-9]+(\\.[0-9]+)*$" ${Var} ${Path})
endmacro (get_version)
# Helper function to glob CUDA source files and set LANGUAGE property
# to CXX on each of them. Sets Var in parent scope to the list of
# files found.
macro(gpu_glob Var)
file(GLOB FileList ${ARGN})
foreach(File IN LISTS FileList)
if(${File} MATCHES ".*\.cu$" OR ${File} MATCHES ".*\.hip$")
set_source_files_properties(${File} PROPERTIES LANGUAGE CXX)
endif()
endforeach()
set(${Var} ${FileList})
endmacro(gpu_glob)
macro(create_one_local_test_f Name FileGlob FilterRegex
VariantOffload VariantSuffix
VariantCPPFLAGS VariantLibs)
if (${VariantSuffix} MATCHES ${FilterRegex})
gpu_glob(_sources ${FileGlob})
set(_executable ${Name}-${VariantSuffix})
set(_executable_path ${CMAKE_CURRENT_BINARY_DIR}/${_executable})
llvm_test_run()
set(REFERENCE_OUTPUT)
# Verify reference output if it exists.
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${Name}.reference_output)
set(REFERENCE_OUTPUT ${Name}.reference_output)
llvm_test_verify(WORKDIR %S
%b/${FPCMP} %o ${REFERENCE_OUTPUT}-${VariantSuffix}
)
llvm_test_executable(${_executable} ${_sources})
llvm_test_data(${_executable}
DEST_SUFFIX "-${VariantSuffix}"
${REFERENCE_OUTPUT})
else()
llvm_test_executable(${_executable} ${_sources})
endif()
target_compile_options(${_executable} PUBLIC ${VariantCPPFLAGS})
if(VariantLibs)
target_link_libraries(${_executable} ${VariantLibs})
endif()
if (${VariantOffload} MATCHES "hip")
add_dependencies(hip-tests-simple-${VariantSuffix} ${_executable})
else()
add_dependencies(cuda-tests-simple-${VariantSuffix} ${_executable})
endif()
# Local tests are presumed to be fast.
list(APPEND VARIANT_SIMPLE_TEST_TARGETS ${_executable}.test)
endif()
endmacro()
# Helper macro to create a local test for a VariantSuffix.
# Inputs: Name, File, Offload, Suffix, CPPFLAGS, Libs
# Output: Dependencies added for <cuda||hip>-tests-simple-<suffix>,
# and VARIANT_SIMPLE_TEST_TARGETS created.
macro(create_one_local_test Name FileGlob
VariantOffload VariantSuffix
VariantCPPFLAGS VariantLibs)
create_one_local_test_f(${Name} ${FileGlob} ".*"
${VariantOffload} ${VariantSuffix}
"${VariantCPPFLAGS}" "${VariantLibs}")
endmacro()