From 63c2f6d046252d6780ab536738d9f28ca78334f6 Mon Sep 17 00:00:00 2001
From: Dan Lipsa <dan.lipsa@kitware.com>
Date: Thu, 9 Jan 2025 16:05:22 -0500
Subject: [PATCH] Enable Catalyst for CUDA builds

---
 .gitlab/ci/configure_fedora39_cuda.cmake      |  1 -
 ...e_fedora39_cuda_mpi_offscreen_osmesa.cmake |  3 --
 .gitlab/ci/docker/fedora39-cuda/Dockerfile    |  3 ++
 .../docker/fedora39-cuda/install_catalyst.sh  | 46 +++++++++++++++++++
 .../ci/docker/fedora39-cuda/install_deps.sh   |  2 +-
 5 files changed, 50 insertions(+), 5 deletions(-)
 create mode 100755 .gitlab/ci/docker/fedora39-cuda/install_catalyst.sh

diff --git a/.gitlab/ci/configure_fedora39_cuda.cmake b/.gitlab/ci/configure_fedora39_cuda.cmake
index a78170bb24d..95168c0b083 100644
--- a/.gitlab/ci/configure_fedora39_cuda.cmake
+++ b/.gitlab/ci/configure_fedora39_cuda.cmake
@@ -23,7 +23,6 @@ set(VTK_MODULE_ENABLE_VTK_RenderingOpenXR NO CACHE STRING "") # OpenXR
 set(VTK_MODULE_ENABLE_VTK_RenderingRayTracing NO CACHE STRING "") # ospray
 set(VTK_MODULE_ENABLE_VTK_fides NO CACHE STRING "") # adios
 set(VTK_MODULE_ENABLE_VTK_xdmf3 NO CACHE STRING "") # boost
-set(VTK_ENABLE_CATALYST OFF CACHE BOOL "") # catalyst
 
 # These are all tested in the non-CUDA CI job instead. This focuses on the CUDA
 # bits.
diff --git a/.gitlab/ci/configure_fedora39_cuda_mpi_offscreen_osmesa.cmake b/.gitlab/ci/configure_fedora39_cuda_mpi_offscreen_osmesa.cmake
index 31a5613c552..ce26792f96f 100644
--- a/.gitlab/ci/configure_fedora39_cuda_mpi_offscreen_osmesa.cmake
+++ b/.gitlab/ci/configure_fedora39_cuda_mpi_offscreen_osmesa.cmake
@@ -1,9 +1,6 @@
 # Lowest-common denominator. Pascal = 60
 set(CMAKE_CUDA_ARCHITECTURES 60 CACHE STRING "")
 
-# catalyst is not installed on cuda image
-set(VTK_ENABLE_CATALYST OFF CACHE BOOL "")
-
 # OpenXR do not support OSMesa
 set(VTK_MODULE_ENABLE_VTK_RenderingOpenXR NO CACHE STRING "")
 
diff --git a/.gitlab/ci/docker/fedora39-cuda/Dockerfile b/.gitlab/ci/docker/fedora39-cuda/Dockerfile
index e3ab84c5fc7..d7024096bea 100644
--- a/.gitlab/ci/docker/fedora39-cuda/Dockerfile
+++ b/.gitlab/ci/docker/fedora39-cuda/Dockerfile
@@ -6,3 +6,6 @@ RUN sh /root/install_deps.sh
 
 COPY install_cuda.sh /root/install_cuda.sh
 RUN sh /root/install_cuda.sh
+
+COPY install_catalyst.sh /root/install_catalyst.sh
+RUN sh /root/install_catalyst.sh
diff --git a/.gitlab/ci/docker/fedora39-cuda/install_catalyst.sh b/.gitlab/ci/docker/fedora39-cuda/install_catalyst.sh
new file mode 100755
index 00000000000..1299dfd600f
--- /dev/null
+++ b/.gitlab/ci/docker/fedora39-cuda/install_catalyst.sh
@@ -0,0 +1,46 @@
+#!/bin/sh
+
+readonly catalyst_repo="https://gitlab.kitware.com/paraview/catalyst"
+# Use 2.0.0 release
+readonly catalyst_commit="v2.0.0"
+
+readonly catalyst_root="$HOME/catalyst"
+readonly catalyst_src="$catalyst_root/src"
+readonly catalyst_build_root="$catalyst_root/build"
+
+git clone "$catalyst_repo" "$catalyst_src"
+git -C "$catalyst_src" checkout "$catalyst_commit"
+
+catalyst_build () {
+    local subdir="$1"
+    shift
+
+    local prefix="$1"
+    shift
+
+    cmake -GNinja \
+        -S "$catalyst_src" \
+        -B "$catalyst_build_root/$subdir" \
+        -DCATALYST_BUILD_SHARED_LIBS=ON \
+        -DCATALYST_BUILD_TESTING=OFF \
+        -DCMAKE_BUILD_TYPE=Release \
+        "-DCMAKE_INSTALL_PREFIX=$prefix" \
+        "$@"
+    cmake --build "$catalyst_build_root/$subdir" --target install
+}
+
+# MPI-less
+catalyst_build nompi /usr \
+    -DCATALYST_USE_MPI=OFF
+
+# MPICH
+catalyst_build mpich /usr/lib64/mpich \
+    -DCATALYST_USE_MPI=ON \
+    -DCMAKE_INSTALL_LIBDIR=lib
+
+# OpenMPI
+catalyst_build openmpi /usr/lib64/openmpi \
+    -DCATALYST_USE_MPI=ON \
+    -DCMAKE_INSTALL_LIBDIR=lib
+
+rm -rf "$catalyst_root"
diff --git a/.gitlab/ci/docker/fedora39-cuda/install_deps.sh b/.gitlab/ci/docker/fedora39-cuda/install_deps.sh
index 9167ab240c6..e700823b776 100755
--- a/.gitlab/ci/docker/fedora39-cuda/install_deps.sh
+++ b/.gitlab/ci/docker/fedora39-cuda/install_deps.sh
@@ -8,7 +8,7 @@ dnf install -y --setopt=install_weak_deps=False \
 
 # Development tools
 dnf install -y --setopt=install_weak_deps=False \
-    ninja-build
+    cmake ninja-build
 
 # MPI dependencies
 dnf install -y --setopt=install_weak_deps=False \
-- 
GitLab