[sollve_vv] Autodetected native GPU (#129)

Using the CMake option `-DTEST_SUITE_SYSTEM_GPU=native` or (`-DTEST_SUITE_SYSTEM_GPU=auto`), automatically pre-selects the tests that are expected to work based on the system's GPU.

Also fixes a lot of other issues:
 * `SYSTEM_GPU` violates naming conventions
 * `SYSTEM_GPU` is not a cached variable, i.e. after re-running CMake (e.g. after changing a `CMakeLists.txt`), its value is forgotten
 * Remove `intel` and `regression` options. There are no lists for these
 * Remove possibility to specify multiple pre-select lists. The union of those would run, causing them to fail if run on the other vendor's GPU.
 * Remove duplicate `test_metadirective_arch_is_nvidia.c` in preselect lists
 * Update documentation
 * Add messages whenever SOLLVE V&V is skipped
 * Do not dump test directories into the builddir root
 * Replace `TEST_SUITE_FORCE_ALL` with `-DTEST_SUITE_SYSTEM_GPU=all`
 * Remove uses of `remove_definitions`. Just don't add those flags if you don't want them.

The variable `SYSTEM_GPU` is also used in External/HeCBench and External/smoke. These are based on sollve_vv's previous `CMakeLists.txt` and are not affected.
diff --git a/External/OpenMPOffloading.cmake b/External/OpenMPOffloading.cmake
new file mode 100644
index 0000000..7a8e345
--- /dev/null
+++ b/External/OpenMPOffloading.cmake
@@ -0,0 +1,78 @@
+# Introspection of OpenMP offloading support
+# TODO: Could become a find_package module
+
+if (NOT OpenMP_FOUND)
+  message(STATUS "OpenMP Offloading not available because OpenMP is not available")
+  return ()
+endif ()
+
+
+set(TEST_SUITE_SYSTEM_GPU "auto" CACHE STRING "Select only tests that Clang/Flang is expected to work with for the selected GPU (auto, native, amd, nvidia, or all)")
+set_property(CACHE TEST_SUITE_SYSTEM_GPU PROPERTY STRINGS "amd" "nvidia" "all" "native" "auto")
+
+# TODO: Run only once if included multiple times
+set(TEST_SUITE_EFFECTIVE_SYSTEM_GPU "${TEST_SUITE_SYSTEM_GPU}")
+if (TEST_SUITE_EFFECTIVE_SYSTEM_GPU STREQUAL "auto")
+  # Test sets only maintained for Flang/Clang
+  if ((CMAKE_C_COMPILER_ID STREQUAL "Clang") OR (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") OR (CMAKE_Fortran_COMPILER_ID STREQUAL "LLVMFlang"))
+    set (TEST_SUITE_EFFECTIVE_SYSTEM_GPU "native")
+  else ()
+    set (TEST_SUITE_EFFECTIVE_SYSTEM_GPU "all")
+  endif ()
+endif ()
+if (TEST_SUITE_EFFECTIVE_SYSTEM_GPU STREQUAL "native")
+  # For LLVM, nvptx-arch and amdgpu-arch are executables in the bin directory, next to clang/flang.
+  set(_searchpaths)
+  foreach (_compiler IN ITEMS ${CMAKE_C_COMPILER} ${CMAKE_CXX_COMPILER} ${CMAKE_Fortran_COMPILER})
+    get_filename_component(_compiler_dir "${_compiler}" DIRECTORY)
+    list(APPEND _searchpaths "${_compiler_dir}")
+  endforeach ()
+
+  find_program(NVPTX_ARCH_EXECUTABLE nvptx-arch HINTS ${_searchpaths})
+  execute_process(COMMAND "${NVPTX_ARCH_EXECUTABLE}" RESULT_VARIABLE _nvptx_arch_result OUTPUT_VARIABLE _nvptx_arch_output ERROR_VARIABLE _nvptx_arch_error)
+  if (_nvptx_arch_result STREQUAL "0" AND _nvptx_arch_output)
+    # Which Nvidia GPU is detected currently does not matter
+    set(TEST_SUITE_EFFECTIVE_SYSTEM_GPU "nvidia")
+  endif ()
+
+  find_program(AMDGPU_ARCH_EXECUTABLE amdgpu-arch HINTS ${_searchpaths})
+  execute_process(COMMAND "${AMDGPU_ARCH_EXECUTABLE}" RESULT_VARIABLE _amdgpu_arch_result OUTPUT_VARIABLE _amdgpu_arch_output ERROR_VARIABLE _amdgpu_arch_error)
+  if (_amdgpu_arch_result STREQUAL "0" AND _amdgpu_arch_output)
+    # Which AMD GPU is detected currently does not matter
+    set(TEST_SUITE_EFFECTIVE_SYSTEM_GPU "amd")
+  endif ()
+
+  if (TEST_SUITE_EFFECTIVE_SYSTEM_GPU STREQUAL "native")
+    if (TEST_SUITE_SYSTEM_GPU STREQUAL "auto")
+      # If no preselected list is available, run all tests
+      set(TEST_SUITE_EFFECTIVE_SYSTEM_GPU "all")
+    else ()
+      message(STATUS "OpenMP Offloading not available because no native GPU detected")
+      return()
+    endif ()
+  else ()
+    message(STATUS "Native GPU is ${_effective_SYSTEM_GPU}")
+  endif ()
+endif ()
+
+
+# Do not try to create OpenMP_Offloading multiple times.
+if (TARGET OpenMP_Offloading)
+  return ()
+endif ()
+
+add_library(OpenMP_Offloading INTERFACE IMPORTED)
+foreach (_lang IN ITEMS C CXX Fortran)
+  if (lang STREQUAL "Fortran" AND NOT TEST_SUITE_FORTRAN)
+    continue ()
+  endif ()
+  set(TEST_SUITE_OFFLOADING_${_lang}_FLAGS   "--offload-arch=native" CACHE STRING "Compiler arguments for OpenMP offloading in ${_lang}")
+  set(TEST_SUITE_OFFLOADING_${_lang}_LDFLAGS "--offload-arch=native" CACHE STRING "Linker arguments for OpenMP offloading in ${_lang}")
+  if (TARGET OpenMP::OpenMP_${_lang})
+    target_link_libraries(OpenMP_Offloading INTERFACE OpenMP::OpenMP_${_lang})
+  endif ()
+  separate_arguments(_flags NATIVE_COMMAND "${TEST_SUITE_OFFLOADING_${_lang}_FLAGS}")
+  separate_arguments(_ldflags NATIVE_COMMAND "${TEST_SUITE_OFFLOADING_${_lang}_LDFLAGS}")
+  target_compile_options(OpenMP_Offloading INTERFACE $<$<COMPILE_LANGUAGE:${_lang}>:${_flags}>)
+  target_link_options(OpenMP_Offloading INTERFACE $<$<COMPILE_LANGUAGE:${_lang}>:${_ldflags}>)
+endforeach ()
diff --git a/External/sollve_vv/CMakeLists.txt b/External/sollve_vv/CMakeLists.txt
index 1d89a6d..0d0f0a4 100644
--- a/External/sollve_vv/CMakeLists.txt
+++ b/External/sollve_vv/CMakeLists.txt
@@ -1,138 +1,89 @@
 # SOLLVE OpenMP Offloading Validation & Verification Suite
 # https://crpl.cis.udel.edu/ompvvsollve/
 
+if (TEST_SUITE_BENCHMARKING_ONLY)
+  message(STATUS "Skipping OpenMP Validiation & Verification because benchmarking-only mode")
+  return ()
+endif ()
+
 include(External)
+llvm_externals_find(TEST_SUITE_SOLLVEVV_ROOT "sollve_vv" "OpenMP Offloading Validation & Verification Suite")
+if (NOT TEST_SUITE_SOLLVEVV_ROOT)
+  message(STATUS "Skipping OpenMP Validiation & Verification because external sources not specified")
+  return ()
+endif ()
 
-remove_definitions(-w)
-remove_definitions(-Werror=date-time)
+include(../OpenMPOffloading.cmake)
+if (NOT TARGET OpenMP_Offloading)
+  message(STATUS "Skipping OpenMP Validiation & Verification because OpenMP Offloading not available")
+  return ()
+endif ()
 
-option(TEST_SUITE_FORCE_ALL "Execute all SOLLVE V&V tests, even those known to be unsupported by Clang" OFF)
+message(STATUS "Adding OpenMP Offloading Validiation & Verification tests")
+if (TEST_SUITE_EFFECTIVE_SYSTEM_GPU STREQUAL "all")
+  file(GLOB_RECURSE _tests_sources RELATIVE "${TEST_SUITE_SOLLVEVV_ROOT}/tests"
+      "${TEST_SUITE_SOLLVEVV_ROOT}/tests/*.c"
+      "${TEST_SUITE_SOLLVEVV_ROOT}/tests/*.cpp"
+      "${TEST_SUITE_SOLLVEVV_ROOT}/tests/*.F90"
+    )
+  set(TEST_SUITE_SOLLVEVV_TESTS ${_tests_sources})
+  message(STATUS "Using all SOLLVE V&V tests")
+else ()
+  include(sollvevv_${TEST_SUITE_EFFECTIVE_SYSTEM_GPU}_tests.cmake)
+endif ()
 
-set(TEST_SUITE_OFFLOADING_C_FLAGS --offload-arch=native CACHE STRING "Compiler arguments for OpenMP offloading for C")
-set(TEST_SUITE_OFFLOADING_CXX_FLAGS --offload-arch=native CACHE STRING "Compiler arguments for OpenMP offloading for CXX")
-set(TEST_SUITE_OFFLOADING_Fortran_FLAGS --offload-arch=native CACHE STRING "Compiler arguments for OpenMP offloading for Fortran")
-set(TEST_SUITE_OFFLOADING_C_LDFLAGS --offload-arch=native CACHE STRING "Linker arguments for OpenMP offloading")
-set(TEST_SUITE_OFFLOADING_CXX_LDFLAGS --offload-arch=native CACHE STRING "Linker arguments for OpenMP offloading")
-set(TEST_SUITE_OFFLOADING_Fortran_LDFLAGS --offload-arch=native CACHE STRING "Linker arguments for OpenMP offloading")
 
-set(ALL_LIST_OPTIONS
-  AMD
-  INTEL
-  NVIDIA
-  REGRESSION
-)
-
-set(CHOOSEN_LISTS)
-
-set(REGRESSION)
-set(INTEL)
-
-include(sollvevv_nvidia_tests.cmake)
-include(sollvevv_amd_tests.cmake)
-
-function (add_sollvevv LANG)
+function (add_sollvevv lang)
   set(_includedir "${TEST_SUITE_SOLLVEVV_ROOT}/ompvv" )
 
-  if ("${LANG}" STREQUAL "Fortran" AND NOT TEST_SUITE_FORTRAN)
+  if (lang STREQUAL "Fortran" AND NOT TEST_SUITE_FORTRAN)
+    message(STATUS "Skipping SOLLVE V&V Fortran tests in because Fortran tests are disabled")
     return ()
   endif ()
 
-  if (NOT OpenMP_${LANG}_FOUND)
-    message(FATAL_ERROR "OpenMP for ${LANG} not found")
+  if (NOT OpenMP_${lang}_FOUND)
+    message(STATUS "Skipping SOLLVE V&V ${lang} tests in because no OpenMP for ${lang} found")
     return ()
   endif ()
 
-  #if (OpenMP_${LANG}_VERSION VERSION_LESS "4.5")
-  #  message(FATAL_ERROR "OpenMP version ${OpenMP_${LANG}_VERSION} too old")
-  #endif ()
-
-  if ("${LANG}" STREQUAL "C")
+  if (lang STREQUAL "C")
     set(_langext ".c")
-  elseif ("${LANG}" STREQUAL "CXX")
+  elseif (lang STREQUAL "CXX")
     set(_langext ".cpp")
-  elseif ("${LANG}" STREQUAL "Fortran")
+  elseif (lang STREQUAL "Fortran")
     set(_langext ".F90")
   else ()
-    message(FATAL_ERROR "Unsupported languge ${LANG}")
+    return ()
   endif ()
 
-  file(GLOB_RECURSE _tests_sources RELATIVE "${TEST_SUITE_SOLLVEVV_ROOT}/tests" "${TEST_SUITE_SOLLVEVV_ROOT}/tests/*${_langext}" )
-  foreach (_file IN LISTS _tests_sources)
+  foreach (_file IN LISTS TEST_SUITE_SOLLVEVV_TESTS)
     get_filename_component(_ext "${_file}" EXT)
     get_filename_component(_basename "${_file}" NAME_WE)
     get_filename_component(_directory "${_file}" DIRECTORY)
+
+    if (NOT (_ext STREQUAL _langext))
+      continue ()
+    endif ()
+
     string(REPLACE "." "" _ext "${_ext}")
     string(REPLACE "/" "_" _directory "${_directory}")
     string(REPLACE "." "" _directory "${_directory}")
     set(_name "omptargetvv-${_basename}-${_directory}-${_ext}")
 
-    if (NOT TEST_SUITE_FORCE_ALL AND NOT "${_file}" IN_LIST CHOOSEN_LISTS)
-      message(STATUS "Skipping SOLLVE V&V test ${_file}")
-      continue ()
-    endif ()
-
     # Create a directory for the test
-    set(test_dir "${CMAKE_BINARY_DIR}/${_name}")
-    file(MAKE_DIRECTORY ${test_dir})
+    set(_module_dir "${CMAKE_CURRENT_BINARY_DIR}/modules/${_name}")
+    file(MAKE_DIRECTORY ${_module_dir})
 
     llvm_test_run()
 
     llvm_test_executable(${_name} "${TEST_SUITE_SOLLVEVV_ROOT}/tests/${_file}")
     target_include_directories(${_name} PRIVATE "${_includedir}")
-    target_link_libraries(${_name} PUBLIC OpenMP::OpenMP_${_lang} m)
-
-    # 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})
-
-    set_target_properties(${_name} PROPERTIES Fortran_MODULE_DIRECTORY ${test_dir})
-
-    # CMake's find_package(OpenMP) currently does not not introspect flags necessary for offloading.
-    target_compile_options(${_name} PUBLIC ${TEST_SUITE_OFFLOADING_${LANG}_FLAGS})
-
-    target_link_options(${_name} PUBLIC ${TEST_SUITE_OFFLOADING_${LANG}_LDFLAGS})
+    target_link_libraries(${_name} PUBLIC OpenMP_Offloading m)
+    set_target_properties(${_name} PROPERTIES Fortran_MODULE_DIRECTORY ${_module_dir})
   endforeach ()
 endfunction ()
 
-
-llvm_externals_find(TEST_SUITE_SOLLVEVV_ROOT "sollve_vv" "OpenMP Offloading Validation & Verification Suite")
-
-if(TEST_SUITE_SOLLVEVV_ROOT AND NOT TEST_SUITE_BENCHMARKING_ONLY)
-  if(OpenMP_FOUND)
-    message(STATUS "Adding OpenMP Offloading Validiation & Verification")
-  else()
-    message(STATUS "NOT using OpenMP Validiation & Verification 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 "NVIDIA")
-        list(APPEND CHOOSEN_LISTS ${NVIDIA})
-        message(STATUS "adding NVIDIA")
-      endif()
-      if(list_option STREQUAL "INTEL")
-        list(APPEND CHOOSEN_LISTS ${INTEL})
-        message(STATUS "adding INTEL")
-      endif()
-      if(list_option STREQUAL "REGRESSION")
-        list(APPEND CHOOSEN_LISTS ${REGRESSION})
-        message(STATUS "adding REGRESSION")
-      endif()
-    else()
-      message(STATUS "Option is unrecognized (${list_option})")
-    endif()
-  endforeach()
-  list(REMOVE_DUPLICATES CHOOSEN_LISTS)
-
-  foreach (_lang in C CXX Fortran)
-    if(CMAKE_${_lang}_COMPILER)
-      add_sollvevv(${_lang})
-    endif()
-  endforeach ()
-endif ()
+get_property(_enabled_languages GLOBAL PROPERTY ENABLED_LANGUAGES)
+foreach (_lang IN LISTS _enabled_languages)
+  add_sollvevv(${_lang})
+endforeach ()
diff --git a/External/sollve_vv/README b/External/sollve_vv/README
index 7364f30..f194e02 100644
--- a/External/sollve_vv/README
+++ b/External/sollve_vv/README
@@ -19,55 +19,56 @@
 machine.
 
 Fortran source files won't be run unless specified. Add TEST_SUITE_FORTRAN=ON
-and TEST_SUITE_OFFLOADING_Fortran_FLAGS to the CMAKE build. 
+to the CMake build.
 
-To specify the offloading flags, add TEST_SUITE_OFFLOADING_<lang>_FLAGS 
-where <lang> is C, CXX, or Fortran to the CMAKE build.
+To specify the offloading flags, add TEST_SUITE_OFFLOADING_<lang>_FLAGS and
+TEST_SUITE_OFFLOADING_<lang>_LDFLAGS where <lang> is C, CXX, or Fortran to the
+CMake build. It defaults to `--offload-arch=native`, which is Clang's command
+line option to compile for the GPU(s) installed in the current machine.
 
-The CMakeLists.txt contains internal greenlists and redlists that the user
-must declare which options to use with SYSTEM_GPU. The user is able to 
-declare multiple lists to use.
+Not all features that the SOLLVE V&V suite is testing are currently supported
+by Clang/Flang. To avoid tests that are known to always fail, the CMake option
+`TEST_SUITE_SYSTEM_GPU` can be used to pre-select a set of tests are are known
+to work. Available options are:
 
-here are all of the options:
--amd (this is the greenlist that contains tests that passes)
--nvidia (this is the greenlist that contains tests that passes)
--intel (this is the greenlist that contains tests that passes)
+ * `-DTEST_SUITE_SYSTEM_GPU=amd` (select tests that should work with Clang/Flang on recent AMD GPUs)
+ * `-DTEST_SUITE_SYSTEM_GPU=nvidia` (select tests that should work with Clang/Flang on recent Nvidia GPUs)
+ * `-DTEST_SUITE_SYSTEM_GPU=native` (select one of the options above based on which GPU is installed)
+ * `-DTEST_SUITE_SYSTEM_GPU=all` (select all SOLLVE V&V tests)
+ * `-DTEST_SUITE_SYSTEM_GPU=auto` (Use suitable preselected list, otherwise `all`)
 
 
-OpenMP support is autodetected by CMake, but clang requires additional
-flags to enable offloading. An example run is:
+An example run is:
 
-$ cmake ../llvm-test-suite -GNinja -DCMAKE_BUILD_TYPE=Release           \
-  -DTEST_SUITE_SOLLVEVV_ROOT=${HOME}/src/sollve_vv                      \
-  -DTEST_SUITE_LIT=${HOME}/build/llvm-project/release/bin/llvm-lit      \
-  -DCMAKE_C_COMPILER=${HOME}/install/llvm-project/release/bin/clang     \
-  -DCMAKE_CXX_COMPILER=${HOME}/install/llvm-project/release/bin/clang++ \
-  -DTEST_SUITE_SUBDIRS=External/sollve_vv                               \
-  -DTEST_SUITE_SOLLVEVV_OFFLOADING_C_FLAGS=-fopenmp-targets=nvptx64-nvidia-cuda;--cuda-path=/soft/compilers/cuda/cuda-10.1.243;-Xopenmp-target;-march=sm_70 \
-  -DTEST_SUITE_SOLLVEVV_OFFLOADING_CXX_FLAGS=-fopenmp-targets=nvptx64-nvidia-cuda;--cuda-path=/soft/compilers/cuda/cuda-10.1.243;-Xopenmp-target;-march=sm_70 \
-  -DTEST_SUITE_SOLLVEVV_OFFLOADING_LDFLAGS=-fopenmp-targets=nvptx64-nvidia-cuda;--cuda-path=/soft/compilers/cuda/cuda-10.1.243;-Xopenmp-target;-march=sm_70;-lopenmptarget \
-  -DSYSTEM_GPU="amd\;amd_runtime_redlist" \
-  -DTEST_SUITE_LIT_FLAGS=-svj1
+    $ COMMON_OFFLOAD="-fopenmp-targets=nvptx64-nvidia-cuda --cuda-path=/soft/compilers/cuda/cuda-10.1.243 -Xopenmp-target -march=sm_70" \
+      cmake ../llvm-test-suite -GNinja -DCMAKE_BUILD_TYPE=Release           \
+      -DTEST_SUITE_SOLLVEVV_ROOT=${HOME}/src/sollve_vv                      \
+      -DTEST_SUITE_LIT=${HOME}/build/llvm-project/release/bin/llvm-lit      \
+      -DCMAKE_C_COMPILER=${HOME}/install/llvm-project/release/bin/clang     \
+      -DCMAKE_CXX_COMPILER=${HOME}/install/llvm-project/release/bin/clang++ \
+      -DTEST_SUITE_SUBDIRS=External/sollve_vv                               \
+      "-DTEST_SUITE_OFFLOADING_C_FLAGS=${COMMON_OFFLOAD}"                   \
+      "-DTEST_SUITE_OFFLOADING_CXX_FLAGS=${COMMON_OFFLOAD}"                 \
+      "-DTEST_SUITE_OFFLOADING_C_LDFLAGS=${COMMON_OFFLOAD}"                 \
+      "-DTEST_SUITE_OFFLOADING_CXX_LDFLAGS=${COMMON_OFFLOAD}"               \
+      -DTEST_SUITE_SYSTEM_GPU=nvidia                                        \
+      -DTEST_SUITE_LIT_FLAGS=-svj1
 
-$ LD_LIBRARY_PATH=${HOME}/install/llvm-project/release/lib ninja check
-
+    $ LD_LIBRARY_PATH=${HOME}/install/llvm-project/release/lib ninja check
 
 Clang also needs to be compiled with enabled offloading for the chosen
 target. A configuration compatible for the commands above is:
 
-$ cmake ../llvm-project/llvm -GNinja -DCMAKE_BUILD_TYPE=Release   \
-  -DCMAKE_INSTALL_PREFIX=${HOME}/install/llvm-project/release     \
-  -DLLVM_ENABLE_PROJECTS=clang;openmp;offload;flang;mlir          \
-  -DCUDA_TOOLKIT_ROOT_DIR=/soft/compilers/cuda/cuda-10.1.243      \
-  -DLIBOMPTARGET_NVPTX_COMPUTE_CAPABILITIES=70
+    $ cmake ../llvm-project/llvm -GNinja -DCMAKE_BUILD_TYPE=Release   \
+      -DCMAKE_INSTALL_PREFIX=${HOME}/install/llvm-project/release     \
+      "-DLLVM_ENABLE_PROJECTS=clang"                                  \
+      "-DLLVM_ENABLE_RUNTIMES=openmp;offload"                         \
+      -DCUDA_TOOLKIT_ROOT_DIR=/soft/compilers/cuda/cuda-10.1.243
 
-$ cmake install
-
+    $ ninja install
 
 In this example, Clang is not installed into a default search path such
-that the paths have to be specified explicitly. The options
-"-DLIBOMPTARGET_NVPTX_COMPUTE_CAPABILITIES=70" and "-march=sm_70" are to
-select the PTX version to compile to. "-DCUDA_TOOLKIT_ROOT_DIR" and
-"--cuda-path" point to the CUDA SDK to use. The option
+that the paths have to be specified explicitly. "-DCUDA_TOOLKIT_ROOT_DIR"
+and "--cuda-path" point to the CUDA SDK to use. The option
 "-DTEST_SUITE_LIT_FLAGS=-j1" is required to not run the tests in parallel;
 multiple tests may conflict while running on the same GPU and thus fail.
diff --git a/External/sollve_vv/sollvevv_amd_tests.cmake b/External/sollve_vv/sollvevv_amd_tests.cmake
index 93e0d22..08cbf89 100644
--- a/External/sollve_vv/sollvevv_amd_tests.cmake
+++ b/External/sollve_vv/sollvevv_amd_tests.cmake
@@ -1,8 +1,5 @@
-# SOLLVE OpenMP Offloading Validation & Verification Suite
-# https://crpl.cis.udel.edu/ompvvsollve/
-# Maintained By: Aaron Jarmusch <Jarmusch@udel.edu>
-
-set(AMD
+message(STATUS "Using SOLLVE V&V tests known to work with Clang/Flang on AMD GPUs")
+set(TEST_SUITE_SOLLVEVV_TESTS
   4.5/application_kernels/alpaka_complex_template.cpp
   4.5/application_kernels/gemv_target.cpp
   4.5/application_kernels/gemv_target_many_matrices.cpp
@@ -182,7 +179,6 @@
   5.0/master_taskloop/test_master_taskloop.c
   5.0/master_taskloop_simd/test_master_taskloop_simd.c
   5.0/metadirective/test_metadirective_arch_is_nvidia.c
-  5.0/metadirective/test_metadirective_arch_is_nvidia.c
   5.0/metadirective/test_metadirective_arch_nvidia_or_amd.c
   5.0/parallel_for/test_parallel_for_allocate.c
   5.0/parallel_for/test_parallel_for_notequals.c
@@ -322,4 +318,4 @@
   5.0/requires/test_requires_atomic_default_mem_order_seq_cst.F90
   5.0/simd/test_simd_if.F90
   4.5/offloading_success.F90
-) # AMD
+)
diff --git a/External/sollve_vv/sollvevv_nvidia_tests.cmake b/External/sollve_vv/sollvevv_nvidia_tests.cmake
index 3e23c25..c6da9d6 100644
--- a/External/sollve_vv/sollvevv_nvidia_tests.cmake
+++ b/External/sollve_vv/sollvevv_nvidia_tests.cmake
@@ -1,9 +1,5 @@
-# SOLLVE OpenMP Offloading Validation & Verification Suite
-# https://crpl.cis.udel.edu/ompvvsollve/
-# Maintained By: Aaron Jarmusch <Jarmusch@udel.edu>
-
-
-set(NVIDIA
+message(STATUS "Using SOLLVE V&V tests known to work with Clang/Flang on Nvidia GPUs")
+set(TEST_SUITE_SOLLVEVV_TESTS
   4.5/application_kernels/alpaka_complex_template.cpp
   4.5/application_kernels/gemv_target.cpp
   4.5/application_kernels/gemv_target_many_matrices.cpp
@@ -187,7 +183,6 @@
   5.0/master_taskloop_simd/test_master_taskloop_simd.c
   5.0/master_taskloop_simd/test_master_taskloop_simd_device.c
   5.0/metadirective/test_metadirective_arch_is_nvidia.c
-  5.0/metadirective/test_metadirective_arch_is_nvidia.c
   5.0/metadirective/test_metadirective_arch_nvidia_or_amd.c
   5.0/parallel_for/test_parallel_for_allocate.c
   5.0/parallel_for/test_parallel_for_notequals.c
@@ -363,4 +358,4 @@
   4.5/target_update/test_target_update_from.F90
   4.5/target_update/test_target_update_if.F90
   4.5/target_update/test_target_update_to.F90
-) # NVIDIA
+)