# Copyright (c) 2025 The YAC Authors
#
# SPDX-License-Identifier: BSD-3-Clause

add_library(
  yac_mci
  component.c
  config_yaml.c
  couple_config/couple_config.c
  couple_config/couple_config_component.c
  couple_config/couple_config_config_output.c
  couple_config/couple_config_couple.c
  couple_config/couple_config_field.c
  couple_config/couple_config_field_couple.c
  couple_config/couple_config_grid.c
  couple_config/couple_config_internal.c
  dist_merge.c
  event.c
  fields.c
  instance.c
  mpi_handshake.c
  yac.c
)

target_compile_features(yac_mci PRIVATE c_std_99 c_restrict c_variadic_macros)

set_target_properties(yac_mci PROPERTIES POSITION_INDEPENDENT_CODE TRUE)

target_include_directories(
  yac_mci
  PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
         $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/src> # needed for yac_config.h
         $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)

target_link_libraries(
  yac_mci
  PRIVATE yac_core yac_pak yac_utils mtime::mtime_c libfyaml::libfyaml
  PUBLIC MPI::MPI_C m
)

if(YAC_ENABLE_FORTRAN)
  target_sources(yac_mci PRIVATE yac_global.F90 yac_module.F90)
  target_include_directories(
    yac_mci
    PUBLIC
      "$<BUILD_INTERFACE:$<$<COMPILE_LANGUAGE:Fortran>:${CMAKE_CURRENT_BINARY_DIR}>>"
  )
  install(
    FILES ${CMAKE_CURRENT_BINARY_DIR}/yac.mod
    DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
  )
endif()

if(YAC_ENABLE_OPENMP)
  target_link_libraries(yac_mci PRIVATE OpenMP::OpenMP_C)
endif()

# Install public headers
install(FILES yac.h yac_version_check.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
