cmake_minimum_required (VERSION 3.8)

option (USE_STATIC_LIBRARIES "Link with static libraries if available" OFF)
option (TRY_CUDA  "compile Cuda files" OFF)
# c++ as a basis
project (FRSV LANGUAGES  CXX  C)

# optionally we can use cuda
# to compile conditionally
include(CheckLanguage)



find_package(HighFivee )

if (HighFive_FOUND)
  message(STATUS "found high five")
else()
  ## manual fix
  set( hfive_include_dir  ${PROJECT_SOURCE_DIR}/HighFive/include/  "/usr/include/hdf5/serial/" ) 
  set( hfive_libs  /usr/lib/x86_64-linux-gnu/hdf5/serial/libhdf5.so ) 
endif()


find_package(MPI )

if(MPI_C_FOUND)
  message(STATUS "YES :  MPI support: configured variable   MPI_C_COMPILER  = ${MPI_C_COMPILER}      " ) 
  message(STATUS "                                          MPI_C_COMPILE_FLAGS  = ${MPI_C_COMPILEFLAGS}      " ) 
  message(STATUS "                                          MPI_C_INCLUDE_PATH   = ${MPI_C_INCLUDE_PATH}      " ) 
  message(STATUS "                                          MPI_C_LINK_FLAGS   = ${MPI_C_LINK_FLAGS}      " ) 
  message(STATUS "                                          MPI_C_ LIBRARIES   = ${MPI_C_LIBRARIES}      " ) 
  message(STATUS "                                          MPI_CXX_COMPILER  = ${MPI_CXX_COMPILER}      " ) 
  message(STATUS "                                          MPI_CXX_COMPILE_FLAGS  = ${MPI_CXX_COMPILEFLAGS}      " ) 
  message(STATUS "                                          MPI_CXX_INCLUDE_PATH   = ${MPI_CXX_INCLUDE_PATH}      " ) 
  message(STATUS "                                          MPI_CXX_LINK_FLAGS   = ${MPI_CXX_LINK_FLAGS}      " ) 
  message(STATUS "                                          MPI_CXX_ LIBRARIES   = ${MPI_CXX_LIBRARIES}      " ) 
endif()



find_package(Boost 1.50 REQUIRED COMPONENTS filesystem system)
message(STATUS "Boost version: ${Boost_VERSION}")
if(Boost_FOUND)
  message(" FOUND Boost")
  message(  Boost_INCLUDEDIR "${BOOST_INCLUDE_DIR}"  ) 
  message(  Boost_LIBRARY_DIR_RELEASE "${BOOST_LIBRARY_DIR_RELEASE}"  ) 
  message(   "${}"  ) 
  message(   "${}"  ) 
endif()


find_package(Yaml-cpp)

if(Yaml-cpp_FOUND)
  message(" FOUND YAML-CPP")
  message(STATUS "YAML_CPP_INCLUDE_DIR  ${YAML_CPP_INCLUDE_DIR} "  ) 
  message(STATUS "YAML_CPP_LIBRARIES  ${YAML_CPP_LIBRARIES} "  ) 
  message(STATUS "                                              YAML_CPP_VERSION         = ${YAML_CPP_VERSION}      " ) 
  message(STATUS "                                              YAML_CPP_LIBRARY_DIR         = ${YAML_CPP_LIBRARY_DIR}      " ) 
endif()

include(CheckCXXCompilerFlag)


# The version number.
set (FRSV_VERSION_MAJOR 1)
set (FRSV_VERSION_MINOR 0)

# Set minimum C++ to 2011 standards
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)


      
# configure a header file to pass some of the CMake settings
# to the source code
configure_file (
  "${PROJECT_SOURCE_DIR}/FRSVConfig.h.in"
  "${PROJECT_BINARY_DIR}/FRSVConfig.h"
  )


# add the binary tree to the search path for include files
# so that we will find FRSVConfig.h
include_directories("${PROJECT_BINARY_DIR}")

set(CMAKE_BUILD_TYPE RELEASE)

if(NOT CMAKE_BUILD_TYPE)
  set(CMAKE_BUILD_TYPE DEBUG)
endif()


find_package(OpenMP)
if (OPENMP_FOUND)
    set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
    set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
    set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")
  endif()

  

## set(CMAKE_CXX_FLAGS "-Wextra -Wall  -mfpmath=sse -Ofast -flto -mcpu=native  ${CMAKE_CXX_FLAGS} "  )
set(CMAKE_CXX_FLAGS_DEBUG "-g -Wextra -Wall -fopenmp ${CMAKE_CXX_FLAGS} "  )
set(CMAKE_CXX_FLAGS_RELEASE " -g -Wextra -Wall -fopenmp  -Ofast  -mtune=native${CMAKE_CXX_FLAGS}  "  )
## set(CMAKE_CXX_FLAGS_PIPPO "-g -Wextra -Wall  -Ofast -flto -mtune=native ${CMAKE_CXX_FLAGS}"     )
set(CMAKE_CXX_FLAGS_PIPPO "-g -Wextra -Wall   ${CMAKE_CXX_FLAGS}"     )

# set(CMAKE_CXX_FLAGS "-g -Wextra -Wall -mfpmath=sse -Ofast -mtune=native  ${CMAKE_CXX_FLAGS}"     )

add_executable (frsv frsv.cc)

if (HighFivee_FOUND)
  target_link_libraries( frsv  PRIVATE yaml-cpp  Boost::filesystem Boost::system )  
  target_include_directories ( frsv  PRIVATE   "${PROJECT_SOURCE_DIR}" )
else()
  target_link_libraries( frsv  PRIVATE yaml-cpp  Boost::filesystem Boost::system   ${hfive_libs}  )  
  target_include_directories ( frsv  PRIVATE   "${PROJECT_SOURCE_DIR}"      ${hfive_include_dir}    )
endif()

