From 5eb16852e8541ccefae601fecccd6df6bd111585 Mon Sep 17 00:00:00 2001
From: Abhishek Yenpure <abhishek.yenpure@hotmail.com>
Date: Tue, 30 Jan 2024 17:56:28 -0800
Subject: [PATCH] Changing VTK-m backend initialization while using Kokkos

---
 Accelerators/Vtkm/Core/CMakeLists.txt            |  3 ++-
 .../Vtkm/Core/vtkmlib/vtkmInitializer.cxx        |  4 ++--
 Accelerators/Vtkm/DataModel/CMakeLists.txt       | 16 ++++++++++------
 Accelerators/Vtkm/Filters/CMakeLists.txt         | 16 +++++++++-------
 4 files changed, 23 insertions(+), 16 deletions(-)

diff --git a/Accelerators/Vtkm/Core/CMakeLists.txt b/Accelerators/Vtkm/Core/CMakeLists.txt
index 1b41748f2ff..51f7ccfdc6b 100644
--- a/Accelerators/Vtkm/Core/CMakeLists.txt
+++ b/Accelerators/Vtkm/Core/CMakeLists.txt
@@ -53,11 +53,12 @@ if (TARGET vtkm::cuda)
   vtk_module_set_properties(VTK::AcceleratorsVTKmCore CUDA_SEPARABLE_COMPILATION ON)
 
 elseif (TARGET vtkm::kokkos_cuda)
-  string(APPEND CMAKE_CUDA_FLAGS " -Xnvlink -w")
+  add_compile_definitions(VTK_USE_KOKKOS)
   set_source_files_properties(${device_sources} PROPERTIES LANGUAGE CUDA)
   kokkos_compilation(SOURCE ${device_sources})
 
 elseif (TARGET vtkm::kokkos_hip)
+  add_compile_definitions(VTK_USE_KOKKOS)
   set_source_files_properties(${device_sources} PROPERTIES LANGUAGE HIP)
   kokkos_compilation(SOURCE ${device_sources})
 endif ()
diff --git a/Accelerators/Vtkm/Core/vtkmlib/vtkmInitializer.cxx b/Accelerators/Vtkm/Core/vtkmlib/vtkmInitializer.cxx
index eb185d3112d..7af361d3221 100644
--- a/Accelerators/Vtkm/Core/vtkmlib/vtkmInitializer.cxx
+++ b/Accelerators/Vtkm/Core/vtkmlib/vtkmInitializer.cxx
@@ -9,8 +9,8 @@
 VTK_ABI_NAMESPACE_BEGIN
 void InitializeVTKm()
 {
-// Only Kokkos HIP backend needs to be initialized
-#ifdef VTKM_HIP
+// Kokkos enabled devices needs to be initialized
+#ifdef VTK_USE_KOKKOS
   static bool isInitialized{ false };
   if (!isInitialized)
   {
diff --git a/Accelerators/Vtkm/DataModel/CMakeLists.txt b/Accelerators/Vtkm/DataModel/CMakeLists.txt
index 0267d6af24b..9b6f144f96c 100644
--- a/Accelerators/Vtkm/DataModel/CMakeLists.txt
+++ b/Accelerators/Vtkm/DataModel/CMakeLists.txt
@@ -48,7 +48,7 @@ vtkm_add_target_information(${vtkm_accel_target}
                             MODIFY_CUDA_FLAGS
                             DEVICE_SOURCES ${sources})
 
-if (TARGET vtkm::cuda OR TARGET vtkm::kokkos_cuda)
+if (TARGET vtkm::cuda)
   # Temporarily suppress "has address taken but no possible call to it" warnings,
   # until we figure out its implications.
   # We are disabling all warnings as nvlink has no known way to suppress
@@ -59,14 +59,18 @@ if (TARGET vtkm::cuda OR TARGET vtkm::kokkos_cuda)
   set(cuda_impl ${nowrap_sources} vtkmDataSet.cxx)
   set_source_files_properties(${cuda_impl} PROPERTIES LANGUAGE CUDA)
 
-  if (TARGET vtkm::cuda)
-    vtk_module_set_properties(VTK::AcceleratorsVTKmDataModel
-      CUDA_SEPARABLE_COMPILATION ON)
-  endif()
+  vtk_module_set_properties(VTK::AcceleratorsVTKmDataModel CUDA_SEPARABLE_COMPILATION ON)
 
   vtk_module_compile_options(VTK::AcceleratorsVTKmDataModel
     PUBLIC $<$<COMPILE_LANGUAGE:CUDA>:-Xcudafe --diag_suppress=extra_semicolon>)
-endif ()
+
+elseif (TARGET vtkm::kokkos_cuda)
+  list(TRANSFORM nowrap_classes APPEND ".cxx" OUTPUT_VARIABLE nowrap_sources)
+  set(cuda_impl ${nowrap_sources} vtkmDataSet.cxx)
+  set_source_files_properties(${cuda_impl} PROPERTIES LANGUAGE CUDA)
+  kokkos_compilation(SOURCE ${cuda_impl})
+
+endif()
 
 if (MSVC)
   set(msvc_warning_flags
diff --git a/Accelerators/Vtkm/Filters/CMakeLists.txt b/Accelerators/Vtkm/Filters/CMakeLists.txt
index 5f45cdfa7c8..c8fcdce4eae 100644
--- a/Accelerators/Vtkm/Filters/CMakeLists.txt
+++ b/Accelerators/Vtkm/Filters/CMakeLists.txt
@@ -106,7 +106,7 @@ vtkm_add_target_information(${vtkm_accel_target}
                             MODIFY_CUDA_FLAGS
                             DEVICE_SOURCES ${sources})
 
-if (TARGET vtkm::cuda OR TARGET vtkm::kokkos_cuda)
+if (TARGET vtkm::cuda)
   # Temporarily suppress "has address taken but no possible call to it" warnings,
   # until we figure out its implications.
   # We are disabling all warnings as nvlink has no known way to suppress
@@ -115,15 +115,17 @@ if (TARGET vtkm::cuda OR TARGET vtkm::kokkos_cuda)
 
   list(TRANSFORM classes APPEND ".cxx" OUTPUT_VARIABLE cuda_impl)
   set_source_files_properties(${cuda_impl} PROPERTIES LANGUAGE CUDA)
-
-  if (TARGET vtkm::cuda)
-    vtk_module_set_properties(VTK::AcceleratorsVTKmFilters
-      CUDA_SEPARABLE_COMPILATION ON)
-  endif()
+  vtk_module_set_properties(VTK::AcceleratorsVTKmFilters CUDA_SEPARABLE_COMPILATION ON)
 
   vtk_module_compile_options(VTK::AcceleratorsVTKmFilters
     PUBLIC $<$<COMPILE_LANGUAGE:CUDA>:-Xcudafe --diag_suppress=extra_semicolon>)
-endif ()
+elseif (TARGET vtkm::kokkos_cuda)
+
+  list(TRANSFORM classes APPEND ".cxx" OUTPUT_VARIABLE cuda_impl)
+  set_source_files_properties(${cuda_impl} PROPERTIES LANGUAGE CUDA)
+  kokkos_compilation(SOURCE ${cuda_impl})
+
+endif()
 
 if (MSVC)
   set(msvc_warning_flags
-- 
GitLab