/* StarPU --- Runtime system for heterogeneous multicore architectures.
 *
 * Copyright (C) 2009-2020  Université de Bordeaux, CNRS (LaBRI UMR 5800), Inria
 * Copyright (C) 2020       Federal University of Rio Grande do Sul (UFRGS)
 *
 * StarPU is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation; either version 2.1 of the License, or (at
 * your option) any later version.
 *
 * StarPU is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 *
 * See the GNU Lesser General Public License in COPYING.LGPL for more details.
 */

/*
 * This is the public config.h file, installed along libstarpu.
 *
 * It should only contain the build-time #defines which have an effect on the
 * API & ABI.
 */

#ifndef __STARPU_CONFIG_PUBLIC_H__
#define __STARPU_CONFIG_PUBLIC_H__

/**
   Define the major version of StarPU. This is the version used when
   compiling the application.
   @ingroup API_Versioning
*/
#undef STARPU_MAJOR_VERSION

/**
   @ingroup API_Versioning
   Define the minor version of StarPU. This is the version used when
   compiling the application.
*/
#undef STARPU_MINOR_VERSION

/**
   Define the release version of StarPU. This is the version used when
   compiling the application.
   @ingroup API_Versioning
*/
#undef STARPU_RELEASE_VERSION

#undef STARPU_USE_CPU

/**
   Defined when StarPU has been installed with
   CUDA support. It should be used in your code to detect the
   availability of CUDA.
   @ingroup API_CUDA_Extensions
*/
#undef STARPU_USE_CUDA

/**
   Defined when StarPU has been installed with OpenCL support. It
   should be used in your code to detect the availability of OpenCL as
   shown in \ref FullSourceCodeVectorScal.
   @ingroup API_OpenCL_Extensions
*/
#undef STARPU_USE_OPENCL

/**
   Defined when StarPU has been installed with MIC support. It should
   be used in your code to detect the availability of MIC.
   @ingroup API_MIC_Extensions
*/
#undef STARPU_USE_MIC

/**
   Defined when StarPU has been installed with MPI Master Slave
   support. It should be used in your code to detect the availability
   of MPI Master Slave.
   @ingroup API_MPI_Support
*/
#undef STARPU_USE_MPI_MASTER_SLAVE

/**
   Defined when StarPU has been installed with OpenMP Runtime support.
   It should be used in your code to detect the availability of the
   runtime support for OpenMP.
   @ingroup API_OpenMP_Runtime_Support
*/
#undef STARPU_OPENMP

#undef STARPU_CLUSTER

#undef STARPU_SIMGRID
#undef STARPU_SIMGRID_MC
#undef STARPU_SIMGRID_HAVE_XBT_BARRIER_INIT
#undef STARPU_HAVE_SIMGRID_MSG_H
#undef STARPU_HAVE_MSG_MSG_H
#undef STARPU_HAVE_SIMGRID_ACTOR_H
#undef STARPU_HAVE_SIMGRID_SEMAPHORE_H
#undef STARPU_HAVE_SIMGRID_MUTEX_H
#undef STARPU_HAVE_SIMGRID_COND_H
#undef STARPU_HAVE_SIMGRID_BARRIER_H
#undef STARPU_HAVE_XBT_SYNCHRO_H
#undef STARPU_HAVE_VALGRIND_H
#undef STARPU_HAVE_MEMCHECK_H
#undef STARPU_VALGRIND_FULL
#undef STARPU_SANITIZE_LEAK
#undef STARPU_NON_BLOCKING_DRIVERS
/* workers must call callbacks on sleep/wake-up */
#undef STARPU_WORKER_CALLBACKS

#undef STARPU_HAVE_ICC

/**
   Defined when StarPU has been installed with MPI support. It should
   be used in your code to detect the availability of MPI.
   @ingroup API_MPI_Support
*/
#undef STARPU_USE_MPI
#undef STARPU_USE_MPI_MPI
#undef STARPU_USE_MPI_NMAD
#undef STARPU_USE_MPI_FT
#undef STARPU_USE_MPI_FT_STATS

#undef STARPU_ATLAS
#undef STARPU_GOTO
#undef STARPU_OPENBLAS
#undef STARPU_MKL
#undef STARPU_ARMPL
#undef STARPU_SYSTEM_BLAS
#undef STARPU_HAVE_CBLAS_H

/**
   Define the directory in which the OpenCL codelets of the
   applications provided with StarPU have been installed.
   @ingroup API_OpenCL_Extensions
*/
#undef STARPU_OPENCL_DATADIR
#undef STARPU_HAVE_MAGMA

#undef STARPU_OPENGL_RENDER
#undef STARPU_USE_GTK
#undef STARPU_HAVE_X11
#undef STARPU_PAPI

#undef STARPU_HAVE_POSIX_MEMALIGN

#undef STARPU_HAVE_MEMALIGN

#undef STARPU_HAVE_MALLOC_H

#undef STARPU_HAVE_SYNC_BOOL_COMPARE_AND_SWAP
#undef STARPU_HAVE_SYNC_VAL_COMPARE_AND_SWAP
#undef STARPU_HAVE_SYNC_FETCH_AND_ADD
#undef STARPU_HAVE_SYNC_FETCH_AND_OR
#undef STARPU_HAVE_SYNC_LOCK_TEST_AND_SET
#undef STARPU_HAVE_SYNC_SYNCHRONIZE

#undef STARPU_DEVEL
#undef STARPU_MODEL_DEBUG
#undef STARPU_NO_ASSERT
#undef STARPU_DEBUG
#undef STARPU_VERBOSE
#undef STARPU_GDB_PATH

#undef STARPU_HAVE_FFTW
#undef STARPU_HAVE_FFTWF
#undef STARPU_HAVE_FFTWL
#undef STARPU_HAVE_CUFFTDOUBLECOMPLEX

#undef STARPU_HAVE_CURAND

/**
   Define the maximum number of memory nodes managed by StarPU. The
   default value can be modified at configure by using the option \ref
   enable-maxnodes "--enable-maxnodes". Reducing it allows to
   considerably reduce memory used by StarPU data structures.
   @ingroup API_Workers_Properties
*/
#undef STARPU_MAXNODES

/**
   Define the maximum number of buffers that tasks will be able to
   take as parameters. The default value is 8, it can be changed by
   using the configure option \ref enable-maxbuffers
   "--enable-maxbuffers".
   @ingroup API_Codelet_And_Tasks
*/
#undef STARPU_NMAXBUFS

/**
   Define the maximum number of fxt mpi files that can be read when
   generating traces. The default value is 64, it can be changed by
   using the configure option \ref enable-fxt-max-files
   "--enable-fxt-max-files".
   @ingroup API_MPI_Support
*/
#undef STARPU_FXT_MAX_FILES

/**
   Define the maximum number of CPU workers managed by StarPU. The
   default value can be modified at configure by using the option \ref
   enable-maxcpus "--enable-maxcpus".
   @ingroup API_Workers_Properties
*/
#undef STARPU_MAXCPUS

/**
   Define the maximum number of NUMA nodes managed by StarPU. The
   default value can be modified at configure by using the option \ref
   enable-maxnumanodes "--enable-maxnumanodes".
   @ingroup API_Workers_Properties
*/
#undef STARPU_MAXNUMANODES

/**
 * Define the maximum number of CUDA devices that are supported by StarPU.
 * @ingroup API_CUDA_Extensions
 */
#undef STARPU_MAXCUDADEVS

/**
   Define the maximum number of OpenCL devices that are supported by
   StarPU.
   @ingroup API_OpenCL_Extensions
*/
#undef STARPU_MAXOPENCLDEVS

/**
   Define the maximum number of MIC devices that are supported by
   StarPU.
   @ingroup API_MIC_Extensions
*/
#undef STARPU_MAXMICDEVS

/**
   Define the maximum number of workers managed by StarPU.
   @ingroup API_Workers_Properties
*/
#undef STARPU_NMAXWORKERS

/**
   Define the maximum number of scheduling contexts managed by StarPU.
   The default value can be modified at configure by using the option
   \ref enable-max-sched-ctxs "--enable-max-sched-ctxs".
   @ingroup API_Scheduling_Policy
*/
#undef STARPU_NMAX_SCHED_CTXS

/**
   Define the maximum number of implementations per architecture. The
   default value can be modified at configure by using the option \ref
   enable-maximplementations "--enable-maximplementations".
   @ingroup API_Scheduling_Policy
*/
#undef STARPU_MAXIMPLEMENTATIONS

#undef STARPU_MAXMPKERNELS
#undef STARPU_USE_SC_HYPERVISOR
#undef STARPU_SC_HYPERVISOR_DEBUG
#undef STARPU_HAVE_GLPK_H

#undef STARPU_HAVE_CUDA_MEMCPY_PEER
#undef STARPU_HAVE_LIBNUMA

#undef STARPU_HAVE_WINDOWS
#undef STARPU_LINUX_SYS
#undef STARPU_HAVE_SETENV
#undef STARPU_HAVE_UNSETENV
#undef STARPU_HAVE_UNISTD_H
#undef STARPU_HAVE_HDF5

#undef STARPU_USE_FXT
#undef STARPU_FXT_LOCK_TRACES

#ifdef _MSC_VER
typedef long starpu_ssize_t;
#define __starpu_func__ __FUNCTION__
#else
#  include <sys/types.h>
typedef ssize_t starpu_ssize_t;
#define __starpu_func__ __func__
#endif

#if defined(c_plusplus) || defined(__cplusplus)
/* inline is part of C++ */
#  define __starpu_inline inline
#elif defined(_MSC_VER) || defined(__HP_cc)
#  define __starpu_inline __inline
#else
#  define __starpu_inline __inline__
#endif

#undef STARPU_QUICK_CHECK
#undef STARPU_LONG_CHECK
#undef STARPU_USE_DRAND48
#undef STARPU_USE_ERAND48_R
#undef STARPU_HAVE_NEARBYINTF
#undef STARPU_HAVE_RINTF

#undef STARPU_HAVE_HWLOC
#undef STARPU_HAVE_PTHREAD_SPIN_LOCK
#undef STARPU_HAVE_PTHREAD_BARRIER
#undef STARPU_HAVE_PTHREAD_SETNAME_NP
#undef STARPU_HAVE_STRUCT_TIMESPEC
#undef STARPU_PTHREAD_MUTEX_INITIALIZER_ZERO
#undef STARPU_PTHREAD_COND_INITIALIZER_ZERO
#undef STARPU_PTHREAD_RWLOCK_INITIALIZER_ZERO

/* This is only for building examples */
#undef STARPU_HAVE_HELGRIND_H

/* Enable Fortran to C MPI interface */
#undef  HAVE_MPI_COMM_F2C

#undef STARPU_HAVE_DARWIN

#undef STARPU_HAVE_CXX11
#undef STARPU_HAVE_STRERROR_R
#undef STARPU_HAVE_STATEMENT_EXPRESSIONS
#undef STARPU_PERF_MODEL_DIR

#endif
