diff --git a/bindings/Fortran/CMakeLists.txt b/bindings/Fortran/CMakeLists.txt index 2e0cb2c1b3..5347fb6d43 100644 --- a/bindings/Fortran/CMakeLists.txt +++ b/bindings/Fortran/CMakeLists.txt @@ -23,14 +23,34 @@ if(ADIOS2_USE_Fortran_flag_argument_mismatch) set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fallow-argument-mismatch") endif() -add_library(adios2_fortran +# separate the cpp files and fortran files into separate targets +# otherwise clang complains about unknown arg -fallow-argument-mismatch for cpp files +add_library(adios2_f2c f2c/adios2_f2c_adios.cpp f2c/adios2_f2c_attribute.cpp f2c/adios2_f2c_io.cpp f2c/adios2_f2c_variable.cpp f2c/adios2_f2c_engine.cpp f2c/adios2_f2c_operator.cpp +) +set_property(TARGET adios2_f2c PROPERTY EXPORT_NAME f2c) +set_property(TARGET adios2_f2c PROPERTY OUTPUT_NAME adios2${ADIOS2_LIBRARY_SUFFIX}_f2c) +target_include_directories(adios2_f2c + PUBLIC + $ + $ + PRIVATE + ${CMAKE_CURRENT_BINARY_DIR} +) + +target_link_libraries(adios2_f2c + PRIVATE + adios2_c + adios2_core +) + +add_library(adios2_fortran modules/adios2_mod.f90 modules/adios2_functions_mod.f90 modules/adios2_functions_allocate_mod.f90 @@ -69,6 +89,7 @@ target_link_libraries(adios2_fortran PRIVATE adios2_c adios2_core + adios2_f2c ) if(ADIOS2_HAVE_FORTRAN_SUBMODULES) @@ -81,20 +102,40 @@ set_target_properties(adios2_fortran PROPERTIES SOVERSION ${ADIOS2_LIBRARY_SOVERSION} ) +add_library(adios2::f2c ALIAS adios2_f2c) add_library(adios2::fortran ALIAS adios2_fortran) if(ADIOS2_HAVE_MPI) target_compile_definitions(adios2_fortran PRIVATE "$<$:ADIOS2_HAVE_MPI_F>") + set(adios2_f2c_mpi_srcs + f2c/adios2_f2c_adios_mpi.cpp + f2c/adios2_f2c_io_mpi.cpp + ) set(adios2_fortran_mpi_srcs modules/adios2_adios_init_mpi_smod.F90 modules/adios2_io_open_mpi_smod.F90 - f2c/adios2_f2c_adios_mpi.cpp - f2c/adios2_f2c_io_mpi.cpp ) if(ADIOS2_HAVE_FORTRAN_SUBMODULES) # With submodules we can put MPI implementations in a separate library. + add_library(adios2_f2c_mpi ${adios2_f2c_mpi_srcs}) + target_include_directories(adios2_f2c_mpi PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) + target_link_libraries(adios2_f2c_mpi + PUBLIC + adios2_f2c + PRIVATE + adios2_c_mpi + adios2_core_mpi + PUBLIC + MPI::MPI_C + ) + set_target_properties(adios2_f2c_mpi PROPERTIES + VERSION ${ADIOS2_LIBRARY_VERSION} + SOVERSION ${ADIOS2_VERSION_MAJOR} + ) + set_property(TARGET adios2_f2c_mpi PROPERTY OUTPUT_NAME adios2${ADIOS2_LIBRARY_SUFFIX}_f2c_mpi) + add_library(adios2_fortran_mpi ${adios2_fortran_mpi_srcs}) target_include_directories(adios2_fortran_mpi PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) target_link_libraries(adios2_fortran_mpi @@ -103,6 +144,7 @@ if(ADIOS2_HAVE_MPI) PRIVATE adios2_c_mpi adios2_core_mpi + adios2_f2c_mpi PUBLIC MPI::MPI_Fortran ) @@ -120,19 +162,23 @@ if(ADIOS2_HAVE_MPI) target_link_libraries(adios2_fortran PRIVATE adios2_c_mpi adios2_core_mpi) endif() + set_property(TARGET adios2_f2c_mpi PROPERTY EXPORT_NAME fortran2c_mpi) + target_compile_definitions(adios2_f2c_mpi INTERFACE ADIOS2_USE_MPI) + add_library(adios2::f2c_mpi ALIAS adios2_f2c_mpi) + set_property(TARGET adios2_fortran_mpi PROPERTY EXPORT_NAME fortran_mpi) target_compile_definitions(adios2_fortran_mpi INTERFACE ADIOS2_USE_MPI) add_library(adios2::fortran_mpi ALIAS adios2_fortran_mpi) - set(maybe_adios2_fortran_mpi adios2_fortran_mpi) + set(maybe_adios2_fortran_mpi adios2_fortran_mpi adios2_f2c_mpi) else() set(maybe_adios2_fortran_mpi) endif() add_library(adios2_f INTERFACE) -target_link_libraries(adios2_f INTERFACE ${maybe_adios2_fortran_mpi} adios2_fortran) +target_link_libraries(adios2_f INTERFACE ${maybe_adios2_fortran_mpi} adios2_fortran adios2_f2c) install( - TARGETS adios2_fortran ${maybe_adios2_fortran_mpi} adios2_f EXPORT adios2FortranExports + TARGETS adios2_f2c adios2_fortran ${maybe_adios2_fortran_mpi} adios2_f EXPORT adios2FortranExports RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT adios2_fortran-runtime LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT adios2_fortran-libraries NAMELINK_COMPONENT adios2_fortran-development ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT adios2_fortran-development