From 698f704cd015ee0de469b46cfdeddce4584f6bf8 Mon Sep 17 00:00:00 2001
From: Frederik Hennig <frederik.hennig@fau.de>
Date: Wed, 19 Mar 2025 15:16:57 +0100
Subject: [PATCH] Prepare and test CUDA support

---
 tests/BasicLbmScenarios/CMakeLists.txt | 29 +++++++++++++++++++++-----
 tests/CMakeLists.txt                   |  2 +-
 tests/CMakePresets.json                | 13 +++++++++++-
 3 files changed, 37 insertions(+), 7 deletions(-)

diff --git a/tests/BasicLbmScenarios/CMakeLists.txt b/tests/BasicLbmScenarios/CMakeLists.txt
index 4b9eef3..42a1ced 100644
--- a/tests/BasicLbmScenarios/CMakeLists.txt
+++ b/tests/BasicLbmScenarios/CMakeLists.txt
@@ -15,18 +15,37 @@ foreach( TestID ${TestIDs} )
 endforeach()
 
 
+if( $CACHE{WALBERLA_BUILD_WITH_CUDA} )
+    find_package( CUDAToolkit )
+    
+    #   Workaround: CUDA headers are included in core/timing
+    target_link_libraries( TestBasicLbmScenariosCPU PRIVATE CUDA::cudart )
+
+    set( _codegen_suffixes hpp cu )
+
+    add_executable( TestBasicLbmScenariosCUDA TestBasicLbmScenarios.cpp )
+    walberla_generate_sources( TestBasicLbmScenariosCUDA SCRIPTS LbmAlgorithms.py SCRIPT_ARGS --target=cuda FILE_EXTENSIONS ${_codegen_suffixes} )
+    target_link_libraries( TestBasicLbmScenariosCUDA PRIVATE walberla::core walberla::blockforest walberla::field walberla::gpu walberla::geometry walberla::experimental CUDA::cudart )
+
+    add_dependencies( SfgTests TestBasicLbmScenariosCUDA )
+
+    foreach( TestID ${TestIDs} )
+        add_test( NAME "BasicLbmScenarios - CUDA - ${TestID}" COMMAND TestBasicLbmScenariosCUDA ${TestID} )
+    endforeach()
+endif()
+
 if( $CACHE{WALBERLA_BUILD_WITH_HIP} )
     find_package(hip REQUIRED)
 
     set( _codegen_suffixes hpp cpp )
 
-    add_executable( TestBasicLbmScenariosGPU TestBasicLbmScenarios.cpp )
-    walberla_generate_sources( TestBasicLbmScenariosGPU SCRIPTS LbmAlgorithms.py SCRIPT_ARGS --target=hip FILE_EXTENSIONS ${_codegen_suffixes} )
-    target_link_libraries( TestBasicLbmScenariosGPU PRIVATE walberla::core walberla::blockforest walberla::field walberla::gpu walberla::geometry walberla::experimental hip::host )
+    add_executable( TestBasicLbmScenariosHIP TestBasicLbmScenarios.cpp )
+    walberla_generate_sources( TestBasicLbmScenariosHIP SCRIPTS LbmAlgorithms.py SCRIPT_ARGS --target=hip FILE_EXTENSIONS ${_codegen_suffixes} )
+    target_link_libraries( TestBasicLbmScenariosHIP PRIVATE walberla::core walberla::blockforest walberla::field walberla::gpu walberla::geometry walberla::experimental hip::host )
 
-    add_dependencies( SfgTests TestBasicLbmScenariosGPU )
+    add_dependencies( SfgTests TestBasicLbmScenariosHIP )
 
     foreach( TestID ${TestIDs} )
-        add_test( NAME "BasicLbmScenarios - HIP - ${TestID}" COMMAND TestBasicLbmScenariosGPU ${TestID} )
+        add_test( NAME "BasicLbmScenarios - HIP - ${TestID}" COMMAND TestBasicLbmScenariosHIP ${TestID} )
     endforeach()
 endif()
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index eb3cb86..1d719cb 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -1,5 +1,5 @@
 cmake_minimum_required( VERSION 3.24 )
-project( sfg-walberla-testsuite )
+project( sfg-walberla-testsuite LANGUAGES CXX CUDA )
 
 set(WALBERLA_BUILD_TESTS OFF CACHE BOOL "")
 set(WALBERLA_BUILD_BENCHMARKS OFF CACHE BOOL "")
diff --git a/tests/CMakePresets.json b/tests/CMakePresets.json
index b187c21..a064ccf 100644
--- a/tests/CMakePresets.json
+++ b/tests/CMakePresets.json
@@ -7,13 +7,24 @@
     },
     "configurePresets": [
         {
-            "name": "testsuite-dbg",
+            "name": "testsuite-dbg-cpu",
             "binaryDir": "${sourceDir}/build/${presetName}",
             "generator": "Ninja",
             "cacheVariables": {
                 "CMAKE_BUILD_TYPE": "Debug",
                 "WALBERLA_BUILD_TESTS": false
             }
+        },
+        {
+            "name": "testsuite-dbg-cuda",
+            "binaryDir": "${sourceDir}/build/${presetName}",
+            "generator": "Ninja",
+            "cacheVariables": {
+                "CMAKE_BUILD_TYPE": "Debug",
+                "WALBERLA_BUILD_TESTS": false,
+                "WALBERLA_BUILD_WITH_CUDA": true,
+                "CMAKE_CUDA_ARCHITECTURES": "native"
+            }
         }
     ]
 }
-- 
GitLab