Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
468 changes: 16 additions & 452 deletions CMakeLists.txt

Large diffs are not rendered by default.

22 changes: 16 additions & 6 deletions cmake/FortranLib.cmake
Original file line number Diff line number Diff line change
@@ -1,10 +1,20 @@
# Copyright ACCESS-NRI and contributors. See the top-level LICENSE file for details.

function(add_fortran_library LIB MOD_DIR)
add_library(${LIB} ${ARGN})
function(add_fortran_target TARGET_NAME TYPE MOD_DIR)
if(${TYPE} STREQUAL "LIB")
add_library(${TARGET_NAME} ${ARGN})
elseif(${TYPE} STREQUAL "EXE")
add_executable(${TARGET_NAME} ${ARGN})
else()
message(FATAL_ERROR "Invalid TYPE '${TYPE}' for add_fortran_target. Use LIB or EXE.")
endif()

get_target_property(LIB_DIR ${LIB} BINARY_DIR)
set_target_properties(${LIB} PROPERTIES Fortran_MODULE_DIRECTORY ${LIB_DIR}/${MOD_DIR})
# Set Fortran module directory
get_target_property(TGT_BUILD_DIR ${TARGET_NAME} BINARY_DIR)
set_target_properties(${TARGET_NAME} PROPERTIES
Fortran_MODULE_DIRECTORY "${TGT_BUILD_DIR}/${MOD_DIR}"
)

target_include_directories(${LIB} INTERFACE "$<BUILD_INTERFACE:${LIB_DIR}/${MOD_DIR}>")
endfunction(add_fortran_library)
# Add the module directory to the include path
target_include_directories(${TARGET_NAME} INTERFACE "$<BUILD_INTERFACE:${TGT_BUILD_DIR}/${MOD_DIR}>")
endfunction()
3 changes: 3 additions & 0 deletions config_src/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Copyright ACCESS-NRI and contributors. See the top-level LICENSE file for details.

add_subdirectory(drivers)
11 changes: 11 additions & 0 deletions config_src/drivers/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Copyright ACCESS-NRI and contributors. See the top-level LICENSE file for details.

if(MOM6_ACCESS3)
## Build MOM6 library for use in ACCESS3
add_subdirectory(nuopc_cap)
endif()

if(MOM6_SOLO)
## Build MOM6 solo executable
add_subdirectory(solo_driver)
endif()
60 changes: 60 additions & 0 deletions config_src/drivers/nuopc_cap/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# Copyright ACCESS-NRI and contributors. See the top-level LICENSE file for details.

add_fortran_target(mom6lib LIB mod STATIC)

target_link_libraries(mom6lib PRIVATE
mom6shared
Access3::nuopc_cap_share
Access3::share
Access3::timing
Access3::cdeps-common
ESMF::ESMF
)

target_compile_definitions(mom6lib PRIVATE CESMCOUPLED)

target_sources(mom6lib PRIVATE
mom_cap_time.F90
mom_surface_forcing_nuopc.F90
ocn_comp_NUOPC.F90
time_utils.F90
mom_cap.F90
mom_cap_methods.F90
mom_cap_gtracer_flux.F90
mom_ocean_model_nuopc.F90
)

# Install and export
set_target_properties(mom6lib PROPERTIES
OUTPUT_NAME access-mom6lib
EXPORT_NAME mom6lib
)
install(TARGETS mom6lib mom6shared
EXPORT Mom6libTargets
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT AccessMOM6_runtime NAMELINK_COMPONENT AccessMOM6_Development
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT AccessMOM6_Development
)
# Fortran module files are a special case, as currently there is no standard
# way of handling them in CMake
target_include_directories(mom6lib PUBLIC "$<INSTALL_INTERFACE:${CMAKE_INSTALL_MODULEDIR}/Mom6lib>")
get_target_property(mom_moddir mom6lib Fortran_MODULE_DIRECTORY)
install(FILES ${mom_moddir}/ocn_comp_nuopc.mod ${mom_moddir}/mom_cap_mod.mod
DESTINATION ${CMAKE_INSTALL_MODULEDIR}/Mom6lib
COMPONENT AccessMOM6_Development
)
install(EXPORT Mom6libTargets
FILE Mom6libTargets.cmake
NAMESPACE Access3::
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/Mom6lib
)

configure_package_config_file(
cmake/Mom6libConfig.cmake.in
"${CMAKE_CURRENT_BINARY_DIR}/Mom6libConfig.cmake"
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/Mom6lib
)

install(FILES ${CMAKE_SOURCE_DIR}/cmake/FindNetCDF.cmake ${CMAKE_CURRENT_BINARY_DIR}/Mom6libConfig.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/Mom6lib
COMPONENT AccessMOM6_Development
)
24 changes: 24 additions & 0 deletions config_src/drivers/solo_driver/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Copyright ACCESS-NRI and contributors. See the top-level LICENSE file for details.

add_fortran_target(MOM6 EXE mod)

target_link_libraries(MOM6 PRIVATE
mom6shared
)

target_sources(MOM6 PRIVATE
MOM_surface_forcing.F90
MESO_surface_forcing.F90
user_surface_forcing.F90
MOM_driver.F90
)

set_target_properties(MOM6 PROPERTIES
LINKER_LANGUAGE Fortran
OUTPUT_NAME mom6-solo
)

# Install
install(TARGETS MOM6
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
Loading