blob: 64feb2c9332064763d6ebec67dd827f481029d69 [file] [log] [blame]
# Smoke
# https://github.com/ROCm-Developer-Tools/aomp.git
include(External)
option(TEST_SUITE_SMOKE_FORCE_ALL "Execute all Smoke tests, even those known to be unsupported by Clang" OFF)
set(TEST_SUITE_OFFLOADING_FLAGS --offload-arch=native CACHE STRING "Compiler arguments for OpenMP offloading")
set(TEST_SUITE_OFFLOADING_LDFLAGS --offload-arch=native CACHE STRING "Linker arguments for OpenMP offloading")
set(ALL_LIST_OPTIONS
AMD
AMD_RUNTIME_REDLIST
AMD_COMPILER_REDLIST
AMD_REDLIST
INTEL
INTEL_RUNTIME_REDLIST
INTEL_COMPILER_REDLIST
INTEL_REDLIST
NVIDIA
NVIDIA_RUNTIME_REDLIST
NVIDIA_COMPILER_REDLIST
NVIDIA_REDLIST
)
set(CHOOSEN_LISTS)
set(AMD
alignedattribute
already_locked
ancestorC
assertok_error
assume_no_openmp
atomic
atomic_double
bugz-50967
bugz-50967-c
bugz-50968
CanonNE
clang-262701
clang-273738
clang-273739
clang-274983
clang-282491-1
clang-282491-2
clang-282491-3
clang-296953-ornla-38
clang-310869-scan
clang-313307_simple_arr
clang-313307_simple_spmd
clang-325070
clang-326105
clang-337336
clang-357649
clang-358841
clang-359947
clang-388381
clang-392854
clang-alloc1
clang-gfx1030
clang-host-targ
clang-ifaces
clang-meta
clang-meta2
clang-meta3
clang-meta4
clang-meta5
clang-nest-nothing
clang-new-driver
clang_private
clang-red-DblComplex
clang-red-SglComplex
clang-reduction-and
clang-tracekernel
class
closed_bug2
collapse
collapse-nonrectangle
collapse_parallel_spmd
complex
complex2
complex-debug
complex_reduction
const_global_ctor-308039
d2h_slow_copy
data_enter_issue01
data_issue_59
data_share1
declare_target_pointer
decl_map_targ
devices
devito_prob1
double_complex_scalar
extern_init
famd-opt-279975
firstprivate
firstprivate2
flags
func-ptr
function
function_overload
function_template
gdb_teams
gpus
helloworld
helloworld_cov4
host_or_device
host_targ
host_teams_numa_affinity
icvars-nest
issue_001
issue_002
kokkos_log2
launch_latency
lds-prob1
lds-prob2
lds-prob3
leopold-devicePtr
libgomp-292348
longDouble
loop-dir-3
loop-dir-4
loop-dir-5
loop-dir-6
loop-dir-7
loop_order
lto_teams
Makefile
Makefile.rules
many_arrays
ManyKernels
map_to_from_prob
map_zero_bug
MasterBarrier
math_exp
math_modff
math_pow
matmul_fun
matmul_parallel_spmd
MaxNumThrds
memcmp
mem_foot_print
memory_mgmt_routines
modf_template
multi-image
multi-image3
nativetests
nested_loop
nested_loop_trunk
nested_loop_trunk1
nested_targ
noarg_target_function
omp_get_device_num
omp_get_initial
omp_loop
omp_num_teams_generic
omp_num_teams_SPMD
omp_places
omp_targ_err1
omp_target_is
omp_wtime
openmp-gpu-burn
pfspecifier
pfspecifier_str
printf_parallel_for_target
README
red_bug_51
reduce
reduc_map_prob
reduction
reduction_array
reduction_array_section
reduction_issue_16
reduction_shared_array
reduction_team
reduction_teams
reduction_teams_distribute_parallel
requires_usm
simd
simple_ctor
slices
targ-273742
targc-272328
targc-274983
targc-generic
targc-spmd
target_depend
targetid_multi_image
target_nowait
target-shared-variables
targets_in_loop
task_detach
task-helper
taskwait_prob
team_prob
teams
teams_nest
teams_notarget
teams_notarget_get_num_teams
teams_notarget_get_team_num
test
thread_limit
threads
use_device_addr
usm1
vasp1
veccopy
veccopy-kernels
virtual_functions
vmuldemo
wgs64
)
set(AMD_RUNTIME_REDLIST)
set(AMD_COMPILER_REDLIST)
set(INTEL)
set(INTEL_RUNTIME_REDLIST)
set(INTEL_COMPILER_REDLIST)
set(NVIDIA
alignedattribute
already_locked
ancestorC
assume_no_openmp
atomic
atomic_double
bugz-50967
bugz-50967-c
bugz-50968
CanonNE
clang-262701
clang-273738
clang-273739
clang-274983
clang-282491-1
clang-282491-2
clang-282491-3
clang-296953-ornla-38
clang-310869-scan
clang-313307_simple_arr
clang-325070
clang-326105
clang-337336
clang-357649
clang-358841
clang-359947
clang-388381
clang-392854
clang-alloc1
clang-gfx1030
clang-host-targ
clang-ifaces
clang-meta
clang-meta2
clang-meta3
clang-meta4
clang-meta5
clang-nest-nothing
clang-new-driver
clang_private
clang-red-DblComplex
clang-red-SglComplex
clang-reduction-and
clang-tracekernel
class
closed_bug2
collapse
collapse-nonrectangle
collapse_parallel_spmd
complex
complex2
complex-debug
complex_reduction
const_global_ctor-308039
d2h_slow_copy
data_enter_issue01
data_issue_59
data_share1
declare_target_pointer
decl_map_targ
devices
devito_prob1
double_complex_scalar
extern_init
famd-opt-279975
firstprivate
firstprivate2
flags
function
function_overload
function_template
gdb_teams
gpus
helloworld
helloworld_cov4
host_or_device
host_targ
host_teams_numa_affinity
icvars-nest
issue_001
issue_002
kokkos_log2
launch_latency
lds-prob1
lds-prob2
lds-prob3
libgomp-292348
loop-dir-3
loop-dir-4
loop-dir-5
loop-dir-6
loop-dir-7
loop_order
lto_teams
Makefile
Makefile.rules
many_arrays
ManyKernels
map_to_from_prob
map_zero_bug
MasterBarrier
math_exp
math_modff
math_pow
matmul_fun
matmul_parallel_spmd
MaxNumThrds
memcmp
mem_foot_print
memory_mgmt_routines
modf_template
multi-image
multi-image3
nested_loop
nested_loop_trunk
nested_loop_trunk1
nested_targ
noarg_target_function
omp_get_device_num
omp_get_initial
omp_loop
omp_num_teams_generic
omp_num_teams_SPMD
omp_places
omp_targ_err1
omp_target_is
openmp-gpu-burn
pfspecifier
pfspecifier_str
printf_parallel_for_target
README
red_bug_51
reduce
reduc_map_prob
reduction
reduction_array
reduction_array_section
reduction_issue_16
reduction_shared_array
reduction_team
reduction_teams
reduction_teams_distribute_parallel
simd
simple_ctor
slices
targ-273742
targc-272328
targc-274983
targc-generic
targc-spmd
target_depend
targetid_multi_image
target_nowait
target-shared-variables
targets_in_loop
task_detach
task-helper
taskwait_prob
team_prob
teams
teams_nest
teams_notarget
teams_notarget_get_num_teams
teams_notarget_get_team_num
test
thread_limit
threads
use_device_addr
vasp1
veccopy
veccopy-kernels
virtual_functions
vmuldemo
wgs64
)
set(NVIDIA_RUNTIME_REDLIST)
set(NVIDIA_COMPILER_REDLIST)
function (add_smoke LANG)
set(_includedir "${TEST_SUITE_SMOKE_ROOT}/ompvv" )
if (NOT OPENMP_${LANG}_FOUND)
message(FATAL_ERROR "OpenMP for ${LANG} not found")
return ()
endif ()
if ("${LANG}" STREQUAL "C")
set(_langext ".c")
elseif ("${LANG}" STREQUAL "CXX")
set(_langext ".cpp")
else ()
message(FATAL_ERROR "Unsupported languge ${LANG}")
endif ()
file(GLOB_RECURSE _tests_sources RELATIVE "${TEST_SUITE_SMOKE_ROOT}/test/smoke" "${TEST_SUITE_SMOKE_ROOT}/test/smoke/*/Makefile" )
foreach (_makefile IN LISTS _tests_sources)
get_filename_component(_directory "${_makefile}" DIRECTORY)
set(_name "smoke-${_directory}")
if (NOT TEST_SUITE_SMOKE_FORCE_ALL AND NOT "${_directory}" IN_LIST CHOOSEN_LISTS)
message(STATUS "Skipping Smoke test ${_directory}")
continue ()
endif ()
# Define the path to the benchmark directory
set(BENCHMARK_DIR "${TEST_SUITE_SMOKE_ROOT}/test/smoke/${_directory}")
# Find the Makefile in the benchmark directory
file(GLOB_RECURSE MAKEFILE_PATH "${BENCHMARK_DIR}/Makefile")
if(MAKEFILE_PATH)
# Read the content of the Makefile into a variable
file(READ "${MAKEFILE_PATH}" MAKEFILE_CONTENT)
# Use regular expressions to find the names of the files to run
string(REGEX MATCH "TESTSRC_MAIN[ \t]*=[ \t]*([^ \t]+)" TESTSRC_MAIN_MATCH "${MAKEFILE_CONTENT}")
string(REGEX MATCH "TESTSRC_AUX[ \t]*=[ \t]*([^ \t]+)" TESTSRC_AUX_MATCH "${MAKEFILE_CONTENT}")
# Check if the names were found in the Makefile
if(TESTSRC_MAIN_MATCH)
# Format the extracted files
string(REPLACE "TESTSRC_AUX" "" TESTSRC_MAIN_MATCH "${TESTSRC_MAIN_MATCH}")
string(REPLACE "\n" "" TESTSRC_MAIN_MATCH "${TESTSRC_MAIN_MATCH}")
string(REGEX REPLACE ".*=" "" TESTSRC_MAIN_MATCH "${TESTSRC_MAIN_MATCH}")
string(REPLACE " " "" TESTSRC_MAIN_MATCH "${TESTSRC_MAIN_MATCH}")
set(_file "${TESTSRC_MAIN_MATCH}")
else()
message(FATAL_ERROR "TESTSRC_MAIN not found in Makefile. ${_directory}")
endif()
else()
message(STATUS "Makefile not found in ${_directory}")
endif()
message(STATUS "${_directory}")
llvm_test_run()
llvm_test_executable(${_name} "${TEST_SUITE_SMOKE_ROOT}/test/smoke/${_directory}/${_file}")
target_include_directories(${_name} PRIVATE "${_includedir}")
target_link_libraries(${_name} PUBLIC OpenMP::OpenMP_${_lang})
# Add -fopenmp to linker command line; for some reason this is not done by target_link_libraries.
target_link_options(${_name} PRIVATE ${OpenMP_${LANG}_FLAGS})
# CMake's find_package(OpenMP) currently does not not introspect flags necessary for offloading.
target_compile_options(${_name} PUBLIC ${TEST_SUITE_OFFLOADING_FLAGS})
target_link_options(${_name} PUBLIC ${TEST_SUITE_OFFLOADING_LDFLAGS})
endforeach ()
endfunction ()
llvm_externals_find(TEST_SUITE_SMOKE_ROOT "smoke" "Smoke")
if(TEST_SUITE_SMOKE_ROOT AND NOT TEST_SUITE_BENCHMARKING_ONLY)
if(OPENMP_FOUND)
message(STATUS "Adding Smoke")
else()
message(STATUS "NOT using Smoke because OpenMP was not found")
return()
endif()
list(REMOVE_DUPLICATES SYSTEM_GPU)
foreach(list_option ${SYSTEM_GPU})
string(TOUPPER ${list_option} list_option)
if(list_option IN_LIST ALL_LIST_OPTIONS)
if(list_option STREQUAL "AMD")
list(APPEND CHOOSEN_LISTS ${AMD})
message(STATUS "adding AMD")
endif()
if(list_option STREQUAL "AMD_RUNTIME_REDLIST" OR list_option STREQUAL "AMD_REDLIST")
list(APPEND CHOOSEN_LISTS ${AMD_RUNTIME_REDLIST})
message(STATUS "adding AMD_RUNTIME_REDLIST")
endif()
if(list_option STREQUAL "AMD_COMPILER_REDLIST" OR list_option STREQUAL "AMD_REDLIST")
list(APPEND CHOOSEN_LISTS ${AMD_COMPILER_REDLIST})
message(STATUS "adding AMD_COMPILER_REDLIST")
endif()
if(list_option STREQUAL "NVIDIA")
list(APPEND CHOOSEN_LISTS ${NVIDIA})
message(STATUS "adding NVIDIA")
endif()
if(list_option STREQUAL "NVIDIA_RUNTIME_REDLIST" OR list_option STREQUAL "NVIDIA_REDLIST")
list(APPEND CHOOSEN_LISTS ${NVIDIA_RUNTIME_REDLIST})
message(STATUS "adding NVIDIA_RUNTIME_REDLIST")
endif()
if(list_option STREQUAL "NVIDIA_COMPILER_REDLIST" OR list_option STREQUAL "NVIDIA_REDLIST")
list(APPEND CHOOSEN_LISTS ${NVIDIA_COMPILER_REDLIST})
message(STATUS "adding NVIDIA_COMPILER_REDLIST")
endif()
if(list_option STREQUAL "INTEL")
list(APPEND CHOOSEN_LISTS ${INTEL})
message(STATUS "adding INTEL")
endif()
if(list_option STREQUAL "INTEL_RUNTIME_REDLIST" OR list_option STREQUAL "INTEL_REDLIST")
list(APPEND CHOOSEN_LISTS ${INTEL_RUNTIME_REDLIST})
message(STATUS "adding INTEL_RUNTIME_REDLIST")
endif()
if(list_option STREQUAL "INTEL_COMPILER_REDLIST" OR list_option STREQUAL "INTEL_REDLIST")
list(APPEND CHOOSEN_LISTS ${INTEL_COMPILER_REDLIST})
message(STATUS "adding INTEL_COMPILER_REDLIST")
endif()
else()
message(STATUS "Option is unrecognized (${list_option})")
endif()
endforeach()
list(REMOVE_DUPLICATES CHOOSEN_LISTS)
foreach (_lang in C)
if(CMAKE_${_lang}_COMPILER)
add_SMOKE(${_lang})
endif()
endforeach ()
endif ()