set(SRC_dmr
    # Submodules
    dmr_device_memcpy.F90
    dmr_target_alloc.F90
    dmr_target_free.F90
    dmr_target_init.F90
    dmr_target_is_present.F90
    dmr_target_memcpy.F90
    dmr_target_memcpy_rect.F90
    # Modules
    dmr_environment.F90
    dmr.F90)

if(DMR_ENABLE_OMP5.1 STREQUAL "ON")
    set(SRC_dmr
        ${SRC_dmr}
        dmr_target_associate_ptr.F90
        dmr_target_disassociate_ptr.F90
        dmr_get_mapped_ptr.F90)
endif()

set_source_files_properties(${SRC_dmr}
    PROPERTIES LANGUAGE Fortran)

set_source_files_properties(${SRC_dmr}
    PROPERTIES Fortran_PREPROCESS ON)

set_source_files_properties(${SRC_dmr}
    PROPERTIES CMAKE_Fortran_FORMAT FREE)

add_library(dmr ${SRC_dmr})
add_library(dmr_obj OBJECT ${SRC_dmr})

set(dmrTargets
    dmr
    dmr_obj)

target_link_libraries(dmr
    PRIVATE
        compilerCustomConfigc)

foreach(TARGET ${dmrTargets})
    if(DMR_ENABLE_REAL_128 STREQUAL "ON")
       target_compile_definitions(${TARGET}
          PRIVATE
             "_real128")
    endif()
    if(DMR_ENABLE_OMP5.1 STREQUAL "ON")
       target_compile_definitions(${TARGET}
          PRIVATE
             "_OpenMP_5_1")
    endif()
    if(DMR_ENABLE_F2008 STREQUAL "ON")
       target_compile_definitions(${TARGET}
          PRIVATE
             "_F2008")
    endif()
    # Linking for OpenMP host
    target_link_libraries(${TARGET}
       INTERFACE
        	 OpenMP::OpenMP_Fortran)
endforeach(TARGET)

install(
    TARGETS ${dmrTargets}
    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
