cmake_minimum_required (VERSION 3.18) project (AQM VERSION 0.2.0 LANGUAGES Fortran) # check dependencies if this is built as a CMake subproject # GNU configure will check the dependencies if built as standalone project get_directory_property(isSubproject PARENT_DIRECTORY) if (isSubproject) if (NOT ESMF_FOUND) find_package (ESMF REQUIRED) endif () if (NOT NetCDF_Fortran_FOUND) find_package (NetCDF REQUIRED Fortran) endif () endif () if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU") set(CMAKE_Fortran_FLAGS "-ffree-line-length-none -ffixed-line-length-none") elseif(CMAKE_Fortran_COMPILER_ID MATCHES "Intel") set(CMAKE_Fortran_FLAGS "-extend-source 132") set(CMAKE_Fortran_FLAGS_DEBUG "-O0 -g -check all -check noarg_temp_created -fpe0 -fno-alias -ftrapuv -traceback") else() message(WARNING "Fortran compiler with ID ${CMAKE_Fortran_COMPILER_ID} will be used with CMake default options") endif() include("aqm_files.cmake") # src/shr add_library(shr OBJECT ${aqm_shr_files}) add_dependencies(shr ioapi aqmio) set_target_properties(shr PROPERTIES Fortran_MODULE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/mod) target_include_directories(shr PRIVATE $ $ $ $ $ $) target_compile_definitions(shr PUBLIC SUBST_CONST="CONST.EXT" SUBST_FILES_ID="FILES_CTM.EXT") target_link_libraries(shr PRIVATE esmf) # src/drv add_library(drv OBJECT ${aqm_drv_files}) add_dependencies(drv shr) set_target_properties(drv PROPERTIES Fortran_MODULE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/mod) target_include_directories(drv PRIVATE $ $ $ $ $) target_compile_definitions(drv PUBLIC verbose_driver) #target_link_libraries(drv PRIVATE shr CCTM esmf) target_link_libraries(drv PRIVATE shr CCTM) # src/io/aqmio add_library(aqmio OBJECT ${aqm_aqmio_files}) set_target_properties(aqmio PROPERTIES Fortran_MODULE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/mod) target_include_directories(aqmio PRIVATE $) target_link_libraries(aqmio PRIVATE esmf) # src/io/ioapi add_library(ioapi OBJECT ${aqm_ioapi_files}) set_target_properties(ioapi PROPERTIES Fortran_MODULE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/mod) target_include_directories(ioapi PRIVATE $ $) target_compile_definitions(ioapi PUBLIC SUBST_FILES_ID="FILES_CTM.EXT") target_link_libraries(ioapi PRIVATE esmf) # custom targets add_custom_target(aqm_mosaic COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_CURRENT_BINARY_DIR}/mod/mosaic_module.mod ${CMAKE_CURRENT_BINARY_DIR}/mod/mosaic_mod.mod ) # src/model add_library(CCTM OBJECT ${aqm_CCTM_files}) add_dependencies(CCTM shr aqmio ioapi aqm_mosaic) set_target_properties(CCTM PROPERTIES Fortran_MODULE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/mod) target_include_directories(CCTM PRIVATE $ $ $ $ $ $ $ $ $) target_compile_definitions(CCTM PUBLIC SUBST_FILES_ID="FILES_CTM.EXT" SUBST_CONST="CONST.EXT" SUBST_EMISPRM="EMISPRM.EXT" SUBST_PE_COMM="PE_COMM.EXT" SUBST_COMM=NOOP_COMM SUBST_BARRIER=NOOP_BARRIER SUBST_SUBGRID_INDEX=NOOP_SUBGRID_INDEX AQCHEM=DUMMY_AQCHEM CONVCLD_ACM=DUMMY_CONVCLD_ACM EDDYX=DUMMY_EDDYX MOSAIC_MOD=MOSAIC_MODULE Mosaic_Mod=Mosaic_Module OPCONC=DUMMY_OPCONC OPACONC=DUMMY_OPACONC OPWDEP=DUMMY_OPWDEP WR_INIT=DUMMY_WR_INIT verbose_aero verbose_gas mpas _AQM_) # AQM add_library(aqm STATIC ${aqm_files} $ $ $ $ $) set_target_properties(aqm PROPERTIES Fortran_MODULE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/mod) add_library(aqm::aqm ALIAS aqm) target_include_directories(aqm PUBLIC $ $) target_link_libraries(aqm PUBLIC esmf NetCDF::NetCDF_Fortran) list(APPEND LIB_TARGETS aqm) ############################################################################### ### Install ############################################################################### install( TARGETS ${LIB_TARGETS} EXPORT AQMExports LIBRARY DESTINATION lib ARCHIVE DESTINATION lib COMPONENT Library) export(EXPORT AQMExports NAMESPACE aqm:: FILE aqm-targets.cmake) install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/mod DESTINATION ${CMAKE_INSTALL_PREFIX}/AQM) install(EXPORT AQMExports NAMESPACE aqm:: FILE aqm-targets.cmake DESTINATION lib/cmake)