###
#
#  @copyright 2013-2017 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
#                       Univ. Bordeaux. All rights reserved.
#
#  @version 1.0.0
#  @author Mathieu Faverge
#  @date 2013-06-24
#
###
include(RulesPrecisions)
include(AddSourceFiles)

### reset variables
set(generated_sources "")
set(generated_headers "")

include_directories("${CMAKE_CURRENT_BINARY_DIR}")
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/drivers")

### Generate the headers in all precisions
set(HEADERS
  z_spm.h
)

precisions_rules_py(generated_headers
  "${HEADERS}"
  PRECISIONS "p;s;d;c;z")

set(spm_headers
  ${generated_headers}
  spm.h
  spm_drivers.h
  )

add_custom_target(spm_headers_tgt
  DEPENDS ${spm_headers} )

### Generate the sources in all precisions
set(SOURCES
  z_spm.c
  z_spm_2dense.c
  z_spm_dof_extend.c
  z_spm_norm.c
  z_spm_scal.c

  z_spm_convert_to_csc.c
  z_spm_convert_to_csr.c
  z_spm_convert_to_ijv.c
  z_spm_expand.c
  z_spm_genrhs.c
  z_spm_integer.c
  z_spm_laplacian.c
  z_spm_matrixvector.c
  z_spm_print.c
  )

precisions_rules_py(generated_sources
  "${SOURCES}"
  PRECISIONS "p;s;d;c;z")

set(spm_sources
  ${generated_sources}
  spm.c
  spm_io.c
  spm_integers.c
  spm_dof_extend.c
  spm_read_driver.c
  spm_gen_fake_values.c
  drivers/iohb.c
  drivers/mmio.c
  drivers/laplacian.c
  drivers/readhb.c
  drivers/readijv.c
  drivers/readmm.c
  )

if (PASTIX_WITH_FORTRAN)
  set(spm_sources
    ${spm_sources}
    drivers/skitf.f
    drivers/readrsa.c
    )
endif()

add_library(pastix_spm
  ${spm_sources}
  )

target_link_libraries(pastix_spm
  ${LAPACKE_LIBRARIES}
  ${LAPACK_SEQ_LIBRARIES}
  ${CBLAS_LIBRARIES}
  ${BLAS_SEQ_LIBRARIES}
  )

add_dependencies(pastix_spm
  spm_headers_tgt
)

### Generate the lib
if (MPI_C_FOUND)
  set_target_properties(pastix_spm PROPERTIES COMPILE_FLAGS "${MPI_COMPILE_FLAGS}")
  target_link_libraries(pastix_spm
    ${MPI_C_LIBRARIES}
    )
endif (MPI_C_FOUND)

install(TARGETS pastix_spm
  ARCHIVE DESTINATION lib
  LIBRARY DESTINATION lib)

install(FILES spm.h
  DESTINATION include )

### Add documented files to the global property
add_documented_files(
  DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
  ${generated_headers}
  ${generated_sources}
  )

add_documented_files(
  # Headers
  spm.h
  #spm_drivers.h
  # Source files
  spm.c
  spm_io.c
  spm_read_driver.c
  spm_dof_extend.c
  spm_integers.c
  )