cmake_minimum_required(VERSION 3.9)
project(ADIS LANGUAGES C CXX VERSION 0.1)

list(INSERT CMAKE_MODULE_PATH 0 "${PROJECT_SOURCE_DIR}/cmake")

# Add options for performing sanitization
include(cmake/ADISSanitize.cmake)

# Add options for performing code coverage tests
include(cmake/ADISCoverage.cmake)

include(ADISModule)

find_package(ADIOS2 REQUIRED)
find_package(VTKm REQUIRED)

option(BUILD_SHARED_LIBS "Build adis with shared libraries" ON)
set(ADIS_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS})
option(ADIS_ENABLE_TESTING "Enable ADIS Testing" ON)
option(ADIS_ENABLE_EXAMPLES "Build ADIS Examples" ON)

if(ADIOS2_HAVE_MPI)
  set(MPI_DEFS ADIS_USE_MPI)
  set(MPI_LIBS MPI::MPI_CXX)
endif()

option(ADIS_USE_EXTERNAL_RAPIDJSON "Use external RapidJSON" OFF)
mark_as_advanced(ADIS_USE_EXTERNAL_RAPIDJSON)
if (ADIS_USE_EXTERNAL_RAPIDJSON)
  find_package(RapidJSON REQUIRED)
endif()

if (NOT DEFINED ADIS_INSTALL_INCLUDE_DIR)
  set(ADIS_INSTALL_INCLUDE_DIR "include/adis")
endif()

if (NOT DEFINED ADIS_EXPORT_NAME)
  set(ADIS_EXPORT_NAME "ADISTargets")
endif()

add_subdirectory(adis)

# add third party
add_subdirectory(thirdparty/rapidjson)

if (ADIS_ENABLE_TESTING)
  enable_testing()
  include(CTest)
  add_subdirectory(tests)
endif()

if (ADIS_ENABLE_SANITIZER)
  set(preload_libraries)
  if (ADIS_SANITIZER MATCHES "address")
    find_library(ADIS_ASAN_LIBRARY NAMES libasan.so.5 DOC "ASan library")
    mark_as_advanced(ADIS_ASAN_LIBRARY)

    list(APPEND preload_libraries
      "${ADIS_ASAN_LIBRARY}")
  endif ()
endif()

set(ADIS_COVERAGE_ENABLED OFF)
if (ADIS_ENABLE_COVERAGE)
  set(ADIS_COVERAGE_ENABLED ON)
endif()

configure_file(
  "${CMAKE_CURRENT_SOURCE_DIR}/cmake/CTestCustom.cmake.in"
  "${CMAKE_CURRENT_BINARY_DIR}/CTestCustom.cmake"
  )

if (ADIS_ENABLE_EXAMPLES)
  add_subdirectory(examples)
endif()
