Skip to content
Snippets Groups Projects
CMakeLists.txt 4.24 KiB
Newer Older
  • Learn to ignore specific revisions
  • Daria Gladskikh's avatar
    Daria Gladskikh committed
    cmake_minimum_required(VERSION 3.19)
    
    Ramil Ahtamyanov's avatar
    Ramil Ahtamyanov committed
    
    
    option(USE_NETCDF "NetCDF build in mode" OFF)
    
    option(USE_SFX "Build with new sfx module"    ON)
    option(USE_CONFIG_PARSER "Build config parser"    ON)
    
    数学の武士's avatar
    ю  
    数学の武士 committed
    option(BUILD_DOC    "Build documentation"    OFF)
    
    Ramil Ahtamyanov's avatar
    Ramil Ahtamyanov committed
    
    
    Daria Gladskikh's avatar
    Daria Gladskikh committed
    project(OceanVerticalMixing)
    
    Ramil Ahtamyanov's avatar
    Ramil Ahtamyanov committed
    enable_language(Fortran)
    
    Daria Gladskikh's avatar
    Daria Gladskikh committed
    if(NOT USE_NETCDF)
        add_definitions(-DOBL_EXCLUDE_NETCDF)
    endif(NOT USE_NETCDF)
    
    
    数学の武士's avatar
    ю  
    数学の武士 committed
    if(BUILD_DOC)
        find_package(Doxygen)
        if (DOXYGEN_FOUND)
            set(DOXYGEN_IN ../doxygen/config)    # doxygen config file
    
            # option ALL allows to build the docs together with the code
            add_custom_target( doc_doxygen ALL
                COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_IN}
                WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} )
        else()
        message("Doxygen need to be installed to generate the doxygen documentation")
        endif (DOXYGEN_FOUND)
    endif(BUILD_DOC)
    
    
    set(CMAKE_Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/modules/)
    
    Ramil Ahtamyanov's avatar
    Ramil Ahtamyanov committed
    
    set(SOURCES
    
    Evgeny Mortikov's avatar
    Evgeny Mortikov committed
        obl_common.f90
    
    Evgeny Mortikov's avatar
    Evgeny Mortikov committed
        obl_grid.f90
    
        obl_tslice.f90
    
        obl_tseries.f90
    
        obl_tforcing.f90
    
        obl_state.f90
    
    Evgeny Mortikov's avatar
    Evgeny Mortikov committed
        obl_output.f90
    
        obl_common_phys.f90
    
        obl_math.f90
    
    Ramil Ahtamyanov's avatar
    Ramil Ahtamyanov committed
        obl_state_eq.f90
    
        obl_init.f90
        obl_bc.f90
    
        obl_turb_common.f90
    
        obl_diag.f90
    
    Ramil Ahtamyanov's avatar
    Ramil Ahtamyanov committed
        obl_k_epsilon.f90
    
        obl_pph.f90
        obl_pph_dyn.f90
    
    Evgeny Mortikov's avatar
    Evgeny Mortikov committed
        obl_fluxes.f90
    
    Ramil Ahtamyanov's avatar
    Ramil Ahtamyanov committed
        obl_main.f90
    
    Daria Gladskikh's avatar
    Daria Gladskikh committed
        io_metadata.f90
        io.f90
    
        obl_run_kato.f90
        obl_run_papa_fluxes.f90
        obl_run_papa_meteo.f90
    
    Evgeny Mortikov's avatar
    Evgeny Mortikov committed
        obl_run_cbl.f90
    
    Evgeny Mortikov's avatar
    Evgeny Mortikov committed
        obl_run_cyclone.f90
    
    Ramil Ahtamyanov's avatar
    Ramil Ahtamyanov committed
    )
    
    
    add_executable(obl ${SOURCES})
    
    Daria Gladskikh's avatar
    Daria Gladskikh committed
    
    
    #Compilation keys
    if (CMAKE_Fortran_COMPILER_ID MATCHES "Intel")
    
        target_compile_options(obl PRIVATE $<$<COMPILE_LANGUAGE:Fortran>: -cpp -O2>)
    
    elseif (CMAKE_Fortran_COMPILER_ID MATCHES "GNU")
    
        target_compile_options(obl PRIVATE $<$<COMPILE_LANGUAGE:Fortran>: -cpp -O2>)
    
    endif ()
    IF (USE_SFX)
        #fetch sfx model
        FetchContent_Declare(
                inmcm60_sfx
                GIT_REPOSITORY http://tesla.parallel.ru/inmcm-mirror/sfx.git
                GIT_TAG        origin/main)
        FetchContent_MakeAvailable(inmcm60_sfx)
        FetchContent_GetProperties(inmcm60_sfx)
        if(NOT inmcm60_sfx_POPULATED)
            FetchContent_Populate(sfx_lib)
            add_subdirectory(${inmcm60_sfx_SOURCE_DIR} ${inmcm60_sfx_BINARY_DIR}  EXCLUDE_FROM_ALL)
        endif()
        add_definitions(-DUSE_SFX)
        if(USE_CONFIG)
        add_definitions(-DUSE_CONFIG_PARSER)
        endif (USE_CONFIG)
    
        target_link_libraries(obl PRIVATE sfx_lib)
    
    else ()
        if(USE_CONFIG)
            message(ERROR "Config can be only used with new sfx enabled")
        endif (USE_CONFIG)
    endif (USE_SFX)
    
    
    Ramil Ahtamyanov's avatar
    Ramil Ahtamyanov committed
    add_library(ocevermix ocevermix.f90)
    
    Daria Gladskikh's avatar
    Daria Gladskikh committed
    if(USE_NETCDF)
        #NetCDF handling
        execute_process (
    
                COMMAND bash -c "nf-config --fflags | grep -Eo '^[^ ]+' | tr -d '\n'"
                OUTPUT_VARIABLE netcdf_inc
    
    Daria Gladskikh's avatar
    Daria Gladskikh committed
        )
        cmake_path(SET netcfd_inc_dir " ${netcdf_inc}" )
        message("CMake path is ${netcdf_inc}")
    
        target_compile_options(obl PRIVATE ${netcdf_inc})
    
        include_directories(${netcdf_inc})
    
    Daria Gladskikh's avatar
    Daria Gladskikh committed
        execute_process (
    
                COMMAND bash -c "nf-config --flibs | tr -d '\n'"
                OUTPUT_VARIABLE temp
    
    Daria Gladskikh's avatar
    Daria Gladskikh committed
        )
        separate_arguments(netcdff_libs UNIX_COMMAND "${temp}")
        execute_process (
    
                COMMAND bash -c "nc-config --libs | tr -d '\n'"
                OUTPUT_VARIABLE temp
    
    Daria Gladskikh's avatar
    Daria Gladskikh committed
        )
        separate_arguments(netcdf_libs UNIX_COMMAND "${temp}")
        execute_process (
    
                COMMAND bash -c "nc-config --all | grep -Eo '\-\-static.*' | cut -d ' ' -f10- | tr -d '\n'"
                OUTPUT_VARIABLE temp
    
    Daria Gladskikh's avatar
    Daria Gladskikh committed
        )
        separate_arguments(netcdf_static UNIX_COMMAND "${temp}")
    
        #target_include_directories(lib_scm_io PRIVATE ${netCDF_INCLUDE_DIR})
    
    
    
    Ramil Ahtamyanov's avatar
    Ramil Ahtamyanov committed
    
    
        target_link_options(obl PRIVATE ${netcdff_libs})
        target_link_options(obl PRIVATE ${netcdf_libs})
        target_link_options(obl PRIVATE ${netcdf_static})
    
    add_custom_command(
            TARGET obl POST_BUILD
            COMMAND ${CMAKE_COMMAND} -E copy_directory
            ${CMAKE_SOURCE_DIR}/meteo-init/
            ${CMAKE_CURRENT_BINARY_DIR}/meteo-init/)
    
    add_custom_command(
            TARGET obl POST_BUILD
            COMMAND ${CMAKE_COMMAND} -E copy_directory
            ${CMAKE_SOURCE_DIR}/meteo-forcing/
            ${CMAKE_CURRENT_BINARY_DIR}/meteo-forcing/)