cmake_minimum_required(VERSION 3.0)
project(fio C Fortran)

# Compilers
enable_language(Fortran CXX)

# Global settings
set(CMAKE_VERBOSE_MAKEFILE "On" )
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_VERBOSE_MAKEFILE "On" )

set(CMAKE_Fortran_COMPILER mpif90 )
set(CMAKE_C_COMPILER mpicc )


# External packages
find_package(MPI REQUIRED)
find_package(OpenMP REQUIRED)
find_package(HDF5 REQUIRED COMPONENTS  Fortran  HL)


get_filename_component (Fortran_COMPILER_NAME ${CMAKE_Fortran_COMPILER} NAME)
if (Fortran_COMPILER_NAME MATCHES "mpif90*")
  set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -cpp")
  string(APPEND CMAKE_CXX_COMPILE_FLAGS "${CMAKE_Fortran_FLAGS} -Wall -cpp")
  string(APPEND CMAKE_Fortran_FLAGS_RELEASE " -fdefault-real-8 -cpp")
  string(APPEND CMAKE_Fortran_FLAGS_DEBUG   " -fdefault-real-8 -Wall -Wextra -cpp")
  string(APPEND CMAKE_Fortran_FLAGS_RELEASE " -funroll-all-loops -O3 -cpp")
  string(APPEND CMAKE_Fortran_FLAGS_DEBUG   " -fbacktrace -fbounds-check -Og -g -cpp")
  string(APPEND CMAKE_Fortran_FLAGS_DEBUG   " -check all -fpe0 -warn -traceback -debug extended -O0 -g -cpp")
  string(APPEND CMAKE_Fortran_LINK_FLAGS " -lstdc++")
else ()
    message ("CMAKE_Fortran_COMPILER found but unsupported")
    message ("Let's try using it...")
endif ()

set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib )
set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib )
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin )
set( CMAKE_Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/mod )


# C++
string(APPEND CMAKE_CXX_COMPILE_FLAGS " ${MPI_COMPILE_FLAGS}")
string(APPEND CMAKE_CXX_LINK_FLAGS " ${MPI_LINK_FLAGS}")
string(APPEND CMAKE_Fortran_COMPILE_FLAGS " ${MPI_COMPILE_FLAGS} ${MPI_Fortran_COMPILE_FLAGS}")
string(APPEND CMAKE_Fortran_LINK_FLAGS " ${MPI_LINK_FLAGS} ${MPI_Fortran_LINK_FLAGS}")

add_executable( fio
    src/test_fio.f90
    src/wdfile.f90
    src/h5file.f90
    )	

target_link_libraries(fio
  ${MPI_Fortran_LIBRARIES}
  ${MPI_LIBRARIES}
  ${HDF5_LIBRARIES}
  ${HDF5_HL_LIBRARIES}
  ${HDF5_Fortran_LIBRARIES}    
)

set_target_properties(fio PROPERTIES LINKER_LANGUAGE Fortran)

install (TARGETS fio DESTINATION ${CMAKE_INSTALL_PREFIX}/bin/)

