/* -----------------------------------------------------------------
 * Programmer(s): Cody J. Balos, Aaron Collier and Radu Serban @ LLNL
 * -----------------------------------------------------------------
 * SUNDIALS Copyright Start
 * Copyright (c) 2002-2024, Lawrence Livermore National Security
 * and Southern Methodist University.
 * All rights reserved.
 *
 * See the top-level LICENSE and NOTICE files for details.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 * SUNDIALS Copyright End
 * -----------------------------------------------------------------
 * SUNDIALS configuration header file.
 * -----------------------------------------------------------------*/

#ifndef _SUNDIALS_CONFIG_H
#define _SUNDIALS_CONFIG_H

#include "sundials/sundials_export.h"

/* Indicates that the function will not report an error via last_err,
   a return code. In C++, it is just defined as noexcept. */
#if defined(__cplusplus)
#define SUNDIALS_NOEXCEPT noexcept
#else
#define SUNDIALS_NOEXCEPT
#endif

#ifndef SUNDIALS_DEPRECATED_MSG
#  define SUNDIALS_DEPRECATED_MSG(msg) @SUNDIALS_DEPRECATED_MSG_MACRO@
#endif

#ifndef SUNDIALS_DEPRECATED_EXPORT_MSG
#  define SUNDIALS_DEPRECATED_EXPORT_MSG(msg) SUNDIALS_EXPORT SUNDIALS_DEPRECATED_MSG(msg)
#endif

#ifndef SUNDIALS_DEPRECATED_NO_EXPORT_MSG
#  define SUNDIALS_DEPRECATED_NO_EXPORT_MSG(msg) SUNDIALS_NO_EXPORT SUNDIALS_DEPRECATED_MSG(msg)
#endif

/* ------------------------------------------------------------------
 * Define SUNDIALS version numbers
 * -----------------------------------------------------------------*/


#define SUNDIALS_VERSION "@PACKAGE_VERSION@"
#define SUNDIALS_VERSION_MAJOR @PACKAGE_VERSION_MAJOR@
#define SUNDIALS_VERSION_MINOR @PACKAGE_VERSION_MINOR@
#define SUNDIALS_VERSION_PATCH @PACKAGE_VERSION_PATCH@
#define SUNDIALS_VERSION_LABEL "@PACKAGE_VERSION_LABEL@"
#define SUNDIALS_GIT_VERSION "@SUNDIALS_GIT_VERSION@"


/* ------------------------------------------------------------------
 * SUNDIALS build information
 * -----------------------------------------------------------------*/

#cmakedefine SUNDIALS_C_COMPILER_HAS_BUILTIN_EXPECT
#cmakedefine SUNDIALS_C_COMPILER_HAS_ATTRIBUTE_ASSUME
#cmakedefine SUNDIALS_C_COMPILER_HAS_BUILTIN_ASSUME
#cmakedefine SUNDIALS_C_COMPILER_HAS_ASSUME
#cmakedefine SUNDIALS_C_COMPILER_HAS_ATTRIBUTE_UNUSED

/* Define precision of SUNDIALS data type 'sunrealtype'
 * Depending on the precision level, one of the following
 * three macros will be defined:
 *     #define SUNDIALS_SINGLE_PRECISION 1
 *     #define SUNDIALS_DOUBLE_PRECISION 1
 *     #define SUNDIALS_EXTENDED_PRECISION 1
 */
@PRECISION_LEVEL@

/* Define type of vector indices in SUNDIALS 'sunindextype'.
 * Depending on user choice of index type, one of the following
 * two macros will be defined:
 *     #define SUNDIALS_INT64_T 1
 *     #define SUNDIALS_INT32_T 1
 */
@INDEX_TYPE@

/* Define the type of vector indices in SUNDIALS 'sunindextype'.
 * The macro will be defined with a type of the appropriate size.
 */
#define SUNDIALS_INDEX_TYPE @SUNDIALS_CINDEX_TYPE@

/* Use POSIX timers if available.
 *     #define SUNDIALS_HAVE_POSIX_TIMERS
 */
#cmakedefine SUNDIALS_HAVE_POSIX_TIMERS

/* BUILD CVODE with fused kernel functionality */
#cmakedefine SUNDIALS_BUILD_PACKAGE_FUSED_KERNELS

/* BUILD SUNDIALS with monitoring functionalities */
#cmakedefine SUNDIALS_BUILD_WITH_MONITORING

/* BUILD SUNDIALS with profiling functionalities */
#cmakedefine SUNDIALS_BUILD_WITH_PROFILING

/* Enable error checking within SUNDIALS */
#cmakedefine SUNDIALS_ENABLE_ERROR_CHECKS

/* BUILD SUNDIALS with logging functionalities */
#define SUNDIALS_LOGGING_LEVEL @SUNDIALS_LOGGING_LEVEL@

/* Build metadata */
#define SUN_C_COMPILER "@CMAKE_C_COMPILER_ID@"
#define SUN_C_COMPILER_VERSION "@CMAKE_C_COMPILER_VERSION@"
#define SUN_C_COMPILER_FLAGS "@CMAKE_C_FLAGS@"

#define SUN_CXX_COMPILER "@CMAKE_CXX_COMPILER_ID@"
#define SUN_CXX_COMPILER_VERSION "@CMAKE_CXX_COMPILER_VERSION@"
#define SUN_CXX_COMPILER_FLAGS "@CMAKE_CXX_FLAGS@"

#define SUN_FORTRAN_COMPILER "@CMAKE_FORTRAN_COMPILER_ID@"
#define SUN_FORTRAN_COMPILER_VERSION "@CMAKE_FORTRAN_COMPILER_VERSION@"
#define SUN_FORTRAN_COMPILER_FLAGS "@CMAKE_FORTRAN_FLAGS@"

#define SUN_BUILD_TYPE "@CMAKE_BUILD_TYPE@"

#define SUN_JOB_ID "@JOB_ID@"
#define SUN_JOB_START_TIME "@JOB_START_TIME@"

#define SUN_TPL_LIST "@SUNDIALS_TPL_LIST@"
#define SUN_TPL_LIST_SIZE "@SUNDIALS_TPL_LIST_SIZE@"

#define SUNDIALS_SPACK_VERSION "@SPACK_VERSION@"

/* ------------------------------------------------------------------
 * SUNDIALS TPL macros
 * -----------------------------------------------------------------*/

/* Caliper */
#cmakedefine SUNDIALS_CALIPER_ENABLED

/* Adiak */
#cmakedefine SUNDIALS_ADIAK_ENABLED

/* Ginkgo */
#cmakedefine SUNDIALS_GINKGO_ENABLED
#define SUN_GINKGO_VERSION "@Ginkgo_VERSION@"

/* HYPRE */
#cmakedefine SUNDIALS_HYPRE_ENABLED
#define SUN_HYPRE_VERSION "@HYPRE_VERSION@"
#define SUN_HYPRE_VERSION_MAJOR @HYPRE_VERSION_MAJOR@
#define SUN_HYPRE_VERSION_MINOR @HYPRE_VERSION_MINOR@
#define SUN_HYPRE_VERSION_PATCH @HYPRE_VERSION_PATCH@

/* KLU */
#cmakedefine SUNDIALS_KLU_ENABLED
#define SUN_KLU_VERSION "@KLU_VERSION@"

/* KOKKOS */
#cmakedefine SUNDIALS_KOKKOS_ENABLED
#define SUN_KOKKOS_VERSION "@Kokkos_VERSION@"

/* KOKKOS_KERNELS */
#cmakedefine SUNDIALS_KOKKOS_KERNELS_ENABLED
#define SUN_KOKKOS_KERNELS_VERSION "@KokkosKernels_VERSION@"

/* LAPACK */
#cmakedefine SUNDIALS_BLAS_LAPACK_ENABLED
#define SUN_LAPACK_VERSION "@LAPACK_VERSION@"

/* MAGMA */
#cmakedefine SUNDIALS_MAGMA_ENABLED
#define SUN_MAGMA_VERSION "@MAGMA_VERSION@"

/* MPI */
#define SUN_MPI_C_COMPILER "@MPI_C_COMPILER@"
#define SUN_MPI_C_VERSION "@MPI_C_VERSION@"

#define SUN_MPI_CXX_COMPILER "@MPI_CXX_COMPILER@"
#define SUN_MPI_CXX_VERSION "@MPI_CXX_VERSION@"

#define SUN_MPI_FORTRAN_COMPILER "@MPI_FORTRAN_COMPILER@"
#define SUN_MPI_FORTRAN_VERSION "@MPI_FORTRAN_VERSION@"

/* ONEMKL */
#cmakedefine SUNDIALS_ONEMKL_ENABLED
#define SUN_ONEMKL_VERSION "@MKL_VERSION@"

/* OpenMP */
#cmakedefine SUNDIALS_OPENMP_ENABLED
#define SUN_OPENMP_VERSION "@OpenMP_VERSION@"

/* PETSC */
#cmakedefine SUNDIALS_PETSC_ENABLED
#define SUN_PETSC_VERSION "@PETSC_VERSION@"

/* PTHREADS */
#cmakedefine SUNDIALS_PTHREADS_ENABLED
#define SUN_PTHREADS_VERSION "@Threads_VERSION@"

/* RAJA */
#cmakedefine SUNDIALS_RAJA_ENABLED
#define SUN_RAJA_VERSION "@RAJA_VERSION@"

/* SUPERLUDIST */
#cmakedefine SUNDIALS_SUPERLUDIST_ENABLED
#define SUN_SUPERLUDIST_VERSION "@SUPERLUDIST_VERSION@"

/* SUPERLUMT */
#cmakedefine SUNDIALS_SUPERLUMT_ENABLED
#define SUN_SUPERLUMT_VERSION "@SUPERLUMT_VERSION@"

/* TRILLINOS */
#cmakedefine SUNDIALS_TRILLINOS_ENABLED
#define SUN_TRILLINOS_VERSION "@Trillinos_VERSION@"

/* XBRAID */
#cmakedefine SUNDIALS_XBRAID_ENABLED
#define SUN_XBRAID_VERSION "@XBRAID_VERSION@"

/* RAJA backends */
#cmakedefine SUNDIALS_RAJA_BACKENDS_CUDA
#cmakedefine SUNDIALS_RAJA_BACKENDS_HIP
#cmakedefine SUNDIALS_RAJA_BACKENDS_SYCL

/* Ginkgo backends */
#cmakedefine SUNDIALS_GINKGO_BACKENDS_CUDA
#cmakedefine SUNDIALS_GINKGO_BACKENDS_HIP
#cmakedefine SUNDIALS_GINKGO_BACKENDS_OMP
#cmakedefine SUNDIALS_GINKGO_BACKENDS_REF
#cmakedefine SUNDIALS_GINKGO_BACKENDS_SYCL

/* MAGMA backends */
#cmakedefine SUNDIALS_MAGMA_BACKENDS_CUDA
#cmakedefine SUNDIALS_MAGMA_BACKENDS_HIP

/* Set if SUNDIALS is built with MPI support, then
 *     #define SUNDIALS_MPI_ENABLED 1
 * otherwise
 *     #define SUNDIALS_MPI_ENABLED 0
 */
#cmakedefine01 SUNDIALS_MPI_ENABLED

/* oneMKL interface options */
#cmakedefine SUNDIALS_ONEMKL_USE_GETRF_LOOP
#cmakedefine SUNDIALS_ONEMKL_USE_GETRS_LOOP

/* SUPERLUMT threading type */
#define SUNDIALS_SUPERLUMT_THREAD_TYPE "@SUPERLUMT_THREAD_TYPE@"

/* Trilinos with MPI is available, then
 *    #define SUNDIALS_TRILINOS_HAVE_MPI
 */
#cmakedefine SUNDIALS_TRILINOS_HAVE_MPI


/* ------------------------------------------------------------------
 * SUNDIALS language macros
 * -----------------------------------------------------------------*/

/* CUDA */
#cmakedefine SUNDIALS_CUDA_ENABLED
#define SUN_CUDA_VERSION "@CMAKE_CUDA_COMPILER_VERSION@"
#define SUN_CUDA_COMPILER "@CMAKE_CUDA_COMPILER@"
#define SUN_CUDA_ARCHITECTURES "@CMAKE_CUDA_ARCHITECTURES@"

/* HIP */
#cmakedefine SUNDIALS_HIP_ENABLED
#define SUN_HIP_VERSION "@HIP_VERSION@"
#define SUN_AMDGPU_TARGETS "@AMDGPU_TARGETS@"

/* SYCL options */
#cmakedefine SUNDIALS_SYCL_2020_UNSUPPORTED


/* ------------------------------------------------------------------
 * SUNDIALS modules enabled
 * -----------------------------------------------------------------*/

@SUNDIALS_CONFIGH_BUILDS@

#endif /* _SUNDIALS_CONFIG_H */
