1# ---------------------------------------------------------------
2# Programmer(s): Cody J. Balos @ LLNL
3# ---------------------------------------------------------------
4# SUNDIALS Copyright Start
5# Copyright (c) 2002-2021, Lawrence Livermore National Security
6# and Southern Methodist University.
7# All rights reserved.
8#
9# See the top-level LICENSE and NOTICE files for details.
10#
11# SPDX-License-Identifier: BSD-3-Clause
12# SUNDIALS Copyright End
13# ---------------------------------------------------------------
14# SUNDIALS build options that are interepreted after all other
15# CMake configuration.
16# ---------------------------------------------------------------
17
18# ---------------------------------------------------------------
19# Option to use specialized fused kernels in the packages.
20# Currently only available in CVODE.
21# ---------------------------------------------------------------
22
23sundials_option(SUNDIALS_BUILD_PACKAGE_FUSED_KERNELS BOOL "Build specialized fused CUDA kernels" OFF
24                DEPENDS_ON ENABLE_CUDA CMAKE_CUDA_COMPILER BUILD_CVODE
25                DEPENDS_ON_THROW_ERROR
26                SHOW_IF ENABLE_CUDA CMAKE_CUDA_COMPILER BUILD_CVODE)
27
28# ---------------------------------------------------------------
29# Options to enable/disable build for NVECTOR modules.
30# ---------------------------------------------------------------
31
32# required modules are in the build list, but cannot be disabled
33set(BUILD_NVECTOR_SERIAL TRUE)
34list(APPEND SUNDIALS_BUILD_LIST "BUILD_NVECTOR_SERIAL")
35
36sundials_option(BUILD_NVECTOR_CUDA BOOL "Build the NVECTOR_CUDA module (requires CUDA)" ON
37                DEPENDS_ON ENABLE_CUDA CMAKE_CUDA_COMPILER
38                ADVANCED)
39list(APPEND SUNDIALS_BUILD_LIST "BUILD_NVECTOR_CUDA")
40
41sundials_option(BUILD_NVECTOR_HIP BOOL "Build the NVECTOR_HIP module (requires HIP)" ON
42                DEPENDS_ON ENABLE_HIP
43                ADVANCED)
44list(APPEND SUNDIALS_BUILD_LIST "BUILD_NVECTOR_HIP")
45
46sundials_option(BUILD_NVECTOR_SYCL BOOL "Build the NVECTOR_SYCL module (requires SYCL)" ON
47                DEPENDS_ON ENABLE_SYCL
48                ADVANCED)
49list(APPEND SUNDIALS_BUILD_LIST "BUILD_NVECTOR_SYCL")
50
51sundials_option(BUILD_NVECTOR_MANYVECTOR BOOL "Build the NVECTOR_MANYVECTOR module" ON
52                ADVANCED)
53list(APPEND SUNDIALS_BUILD_LIST "BUILD_NVECTOR_MANYVECTOR")
54
55sundials_option(BUILD_NVECTOR_MPIMANYVECTOR BOOL "Build the NVECTOR_MPIMANYVECTOR module (requires MPI)" ON
56                DEPENDS_ON ENABLE_MPI MPI_C_FOUND
57                ADVANCED)
58list(APPEND SUNDIALS_BUILD_LIST "BUILD_NVECTOR_MPIMANYVECTOR")
59
60sundials_option(BUILD_NVECTOR_MPIPLUSX BOOL "Build the NVECTOR_MPIPLUSX module (requires MPI)" ON
61                DEPENDS_ON ENABLE_MPI MPI_C_FOUND BUILD_NVECTOR_MPIMANYVECTOR
62                ADVANCED)
63list(APPEND SUNDIALS_BUILD_LIST "BUILD_NVECTOR_MPIPLUSX")
64
65sundials_option(BUILD_NVECTOR_PARALLEL BOOL "Build the NVECTOR_PARALLEL module (requires MPI)" ON
66                DEPENDS_ON ENABLE_MPI MPI_C_FOUND
67                ADVANCED)
68list(APPEND SUNDIALS_BUILD_LIST "BUILD_NVECTOR_PARALLEL")
69
70sundials_option(BUILD_NVECTOR_OPENMP BOOL "Build the NVECTOR_OPENMP module" ON
71                DEPENDS_ON ENABLE_OPENMP
72                ADVANCED)
73list(APPEND SUNDIALS_BUILD_LIST "BUILD_NVECTOR_OPENMP")
74
75sundials_option(BUILD_NVECTOR_OPENMPDEV BOOL "Build the NVECTOR_OPENMPDEV module" ON
76                DEPENDS_ON ENABLE_OPENMP_DEVICE OPENMP_SUPPORTS_DEVICE_OFFLOADING
77                ADVANCED)
78list(APPEND SUNDIALS_BUILD_LIST "BUILD_NVECTOR_OPENMPDEV")
79
80sundials_option(BUILD_NVECTOR_PARHYP BOOL "Build the NVECTOR_PARHYP module (requires hypre)" ON
81                DEPENDS_ON ENABLE_HYPRE HYPRE_WORKS
82                ADVANCED)
83list(APPEND SUNDIALS_BUILD_LIST "BUILD_NVECTOR_PARHYP")
84
85sundials_option(BUILD_NVECTOR_PETSC BOOL "Build the NVECTOR_PETSC module (requires PETSc)" ON
86                DEPENDS_ON ENABLE_PETSC PETSC_WORKS
87                ADVANCED)
88list(APPEND SUNDIALS_BUILD_LIST "BUILD_NVECTOR_PETSC")
89
90sundials_option(BUILD_NVECTOR_PTHREADS BOOL "Build the NVECTOR_PTHREADS module" ON
91                DEPENDS_ON ENABLE_PTHREAD
92                ADVANCED)
93list(APPEND SUNDIALS_BUILD_LIST "BUILD_NVECTOR_PTHREADS")
94
95sundials_option(BUILD_NVECTOR_RAJA BOOL "Build the NVECTOR_RAJA module (requires RAJA)" ON
96                DEPENDS_ON ENABLE_RAJA
97                ADVANCED)
98list(APPEND SUNDIALS_BUILD_LIST "BUILD_NVECTOR_RAJA")
99
100sundials_option(BUILD_NVECTOR_TRILINOS BOOL "Build the NVECTOR_TRILINOS module (requires Trilinos)" ON
101                DEPENDS_ON ENABLE_TRILINOS Trilinos_WORKS
102                ADVANCED)
103list(APPEND SUNDIALS_BUILD_LIST "BUILD_NVECTOR_TRILINOS")
104
105
106# ---------------------------------------------------------------
107# Options to enable/disable build for SUNMATRIX modules.
108# ---------------------------------------------------------------
109
110# required modules are in the build list, but cannot be disabled
111set(BUILD_SUNMATRIX_BAND TRUE)
112list(APPEND SUNDIALS_BUILD_LIST "BUILD_SUNMATRIX_BAND")
113set(BUILD_SUNMATRIX_DENSE TRUE)
114list(APPEND SUNDIALS_BUILD_LIST "BUILD_SUNMATRIX_DENSE")
115set(BUILD_SUNMATRIX_SPARSE TRUE)
116list(APPEND SUNDIALS_BUILD_LIST "BUILD_SUNMATRIX_SPARSE")
117
118set(_COMPATIBLE_INDEX_SIZE FALSE)
119if(SUNDIALS_INDEX_SIZE MATCHES "32")
120  set(_COMPATIBLE_INDEX_SIZE TRUE)
121endif()
122sundials_option(BUILD_SUNMATRIX_CUSPARSE BOOL "Build the SUNMATRIX_CUSPARSE module (requires CUDA and 32-bit indexing)" ON
123                DEPENDS_ON ENABLE_CUDA CMAKE_CUDA_COMPILER _COMPATIBLE_INDEX_SIZE BUILD_NVECTOR_CUDA
124                ADVANCED)
125list(APPEND SUNDIALS_BUILD_LIST "BUILD_SUNMATRIX_CUSPARSE")
126
127sundials_option(BUILD_SUNMATRIX_SLUNRLOC BOOL "Build the SUNMATRIX_SLUNRLOC module (requires SuperLU_DIST)" ON
128                DEPENDS_ON ENABLE_SUPERLUDIST SUPERLUDIST_WORKS
129                ADVANCED)
130list(APPEND SUNDIALS_BUILD_LIST "BUILD_SUNMATRIX_SLUNRLOC")
131
132sundials_option(BUILD_SUNMATRIX_MAGMADENSE BOOL "Build the SUNMATRIX_MAGMADENSE module (requires MAGMA)" ON
133                DEPENDS_ON ENABLE_MAGMA MAGMA_WORKS
134                ADVANCED)
135list(APPEND SUNDIALS_BUILD_LIST "BUILD_SUNMATRIX_MAGMADENSE")
136
137# ---------------------------------------------------------------
138# Options to enable/disable build for SUNLINSOL modules.
139# ---------------------------------------------------------------
140
141# required modules are in the build list, but cannot be disabled
142set(BUILD_SUNLINSOL_BAND TRUE)
143list(APPEND SUNDIALS_BUILD_LIST "BUILD_SUNLINSOL_BAND")
144set(BUILD_SUNLINSOL_DENSE TRUE)
145list(APPEND SUNDIALS_BUILD_LIST "BUILD_SUNLINSOL_DENSE")
146set(BUILD_SUNLINSOL_PCG TRUE)
147list(APPEND SUNDIALS_BUILD_LIST "BUILD_SUNLINSOL_PCG")
148set(BUILD_SUNLINSOL_SPBCGS TRUE)
149list(APPEND SUNDIALS_BUILD_LIST "BUILD_SUNLINSOL_SPBCGS")
150set(BUILD_SUNLINSOL_SPFGMR TRUE)
151list(APPEND SUNDIALS_BUILD_LIST "BUILD_SUNLINSOL_SPFGMR")
152set(BUILD_SUNLINSOL_SPGMR TRUE)
153list(APPEND SUNDIALS_BUILD_LIST "BUILD_SUNLINSOL_SPGMR")
154set(BUILD_SUNLINSOL_SPTFQMR TRUE)
155list(APPEND SUNDIALS_BUILD_LIST "BUILD_SUNLINSOL_SPTFQMR")
156
157sundials_option(BUILD_SUNLINSOL_CUSOLVERSP BOOL "Build the SUNLINSOL_CUSOLVERSP module (requires CUDA and 32-bit indexing)" ON
158                DEPENDS_ON ENABLE_CUDA CMAKE_CUDA_COMPILER BUILD_NVECTOR_CUDA BUILD_SUNMATRIX_CUSPARSE
159                ADVANCED)
160list(APPEND SUNDIALS_BUILD_LIST "BUILD_SUNLINSOL_CUSOLVERSP")
161
162sundials_option(BUILD_SUNLINSOL_KLU BOOL "Build the SUNLINSOL_KLU module (requires KLU)" ON
163                DEPENDS_ON ENABLE_KLU KLU_WORKS
164                ADVANCED)
165list(APPEND SUNDIALS_BUILD_LIST "BUILD_SUNLINSOL_KLU")
166
167sundials_option(BUILD_SUNLINSOL_LAPACKBAND BOOL "Build the SUNLINSOL_LAPACKBAND module (requires LAPACK)" ON
168                DEPENDS_ON ENABLE_LAPACK LAPACK_WORKS
169                ADVANCED)
170list(APPEND SUNDIALS_BUILD_LIST "BUILD_SUNLINSOL_LAPACKBAND")
171
172sundials_option(BUILD_SUNLINSOL_LAPACKDENSE BOOL "Build the SUNLINSOL_LAPACKDENSE module (requires LAPACK)" ON
173                DEPENDS_ON ENABLE_LAPACK LAPACK_WORKS
174                ADVANCED)
175list(APPEND SUNDIALS_BUILD_LIST "BUILD_SUNLINSOL_LAPACKDENSE")
176
177sundials_option(BUILD_SUNLINSOL_MAGMADENSE BOOL "Build the SUNLINSOL_MAGMADENSE module (requires MAGMA)" ON
178                DEPENDS_ON ENABLE_MAGMA MAGMA_WORKS
179                ADVANCED)
180list(APPEND SUNDIALS_BUILD_LIST "BUILD_SUNLINSOL_MAGMADENSE")
181
182sundials_option(BUILD_SUNLINSOL_SUPERLUDIST BOOL "Build the SUNLINSOL_SUPERLUDIST module (requires SUPERLUDIST)" ON
183                DEPENDS_ON ENABLE_SUPERLUDIST SUPERLUDIST_WORKS BUILD_SUNMATRIX_SLUNRLOC
184                ADVANCED)
185list(APPEND SUNDIALS_BUILD_LIST "BUILD_SUNLINSOL_SUPERLUDIST")
186
187sundials_option(BUILD_SUNLINSOL_SUPERLUMT BOOL "Build the SUNLINSOL_SUPERLUMT module (requires SUPERLUMT)" ON
188                DEPENDS_ON ENABLE_SUPERLUMT SUPERLUMT_WORKS
189                ADVANCED)
190list(APPEND SUNDIALS_BUILD_LIST "BUILD_SUNLINSOL_SUPERLUMT")
191
192
193# ---------------------------------------------------------------
194# Options to enable/disable build for SUNNONLINSOL modules.
195# ---------------------------------------------------------------
196
197# required modules are in the build list, but cannot be disabled
198set(BUILD_SUNNONLINSOL_NEWTON TRUE)
199list(APPEND SUNDIALS_BUILD_LIST "BUILD_SUNNONLINSOL_NEWTON")
200set(BUILD_SUNNONLINSOL_FIXEDPOINT TRUE)
201list(APPEND SUNDIALS_BUILD_LIST "BUILD_SUNNONLINSOL_FIXEDPOINT")
202
203sundials_option(BUILD_SUNNONLINSOL_PETSCSNES BOOL "Build the SUNNONLINSOL_PETSCSNES module (requires PETSc)" ON
204                DEPENDS_ON ENABLE_PETSC PETSC_FOUND
205                ADVANCED)
206list(APPEND SUNDIALS_BUILD_LIST "BUILD_SUNNONLINSOL_PETSCSNES")
207