55# Options #
66#]==============================================================================]
77
8- # Configurations to build
9- # TO-DO add UM
10- list (APPEND KnownConfigurations MOM6 CICE6 WW3 MOM6-CICE6 CICE6-WW3 MOM6-WW3 MOM6-CICE6-WW3)
11- set (BuildConfigurations)
8+ # These combinations are known to build. Other combinations of MOM6-CICE6-WW3-UM13
9+ # would be possible
10+ list (APPEND KnownConfigurations
11+ MOM6 CICE6 WW3 MOM6-CICE6 CICE6-WW3 MOM6-WW3 MOM6-CICE6-WW3 MOM6-UM13 MOM6-CICE6-UM13
12+ )
13+ set (BuildConfigurations) # Configurations to build
1214
1315option (ENABLE_MOM6 "Build MOM6 configuration" OFF )
1416option (ENABLE_CICE6 "Build CICE6 configuration" OFF )
1517option (ENABLE_WW3 "Build WW3 configuration" OFF )
18+ option (ENABLE_UM13 "Build UM13 configuration" OFF )
1619
1720# Check validity of requested components
1821foreach (_conf IN LISTS BuildConfigurations)
1922 if (NOT _conf IN_LIST KnownConfigurations)
2023 message (FATAL_ERROR "Unsupported configuration: ${_conf} " )
2124 endif ()
22- # Do not build try to include that are not going to be used
2325 if (_conf MATCHES MOM6)
2426 set (ENABLE_MOM6 ON )
2527 endif ()
@@ -29,15 +31,20 @@ foreach(_conf IN LISTS BuildConfigurations)
2931 if (_conf MATCHES WW3)
3032 set (ENABLE_WW3 ON )
3133 endif ()
34+ if (_conf MATCHES UM13)
35+ set (ENABLE_UM13 ON )
36+ endif ()
3237endforeach ()
3338
3439message (STATUS "BuildConfigurations" )
3540message (STATUS "${BuildConfigurations} " )
3641message (STATUS " - MOM6 ${ENABLE_MOM6} " )
3742message (STATUS " - CICE6 ${ENABLE_CICE6} " )
3843message (STATUS " - WW3 ${ENABLE_WW3} " )
44+ message (STATUS " - UM13 ${ENABLE_UM13} " )
45+
3946
40- if (NOT (ENABLE_MOM6 OR ENABLE_CICE6 OR ENABLE_WW3))
47+ if (NOT (ENABLE_MOM6 OR ENABLE_CICE6 OR ENABLE_WW3 OR ENABLE_UM13 ))
4148 message (FATAL_ERROR "No model components have been requested, atleast one ENABLE_ configuration must be set" )
4249endif ()
4350
@@ -52,62 +59,82 @@ endif()
5259if (ENABLE_WW3)
5360 find_package (Ww3lib REQUIRED AccessWW3Cmeps_Development )
5461endif ()
62+ if (ENABLE_UM13)
63+ find_package (PkgConfig REQUIRED )
64+ pkg_check_modules (UM REQUIRED IMPORTED_TARGET "libum-atmos" )
65+ endif ()
5566
5667# Main Definitions
5768
5869# Add executable for each enabled configuration
5970foreach (CONF IN LISTS BuildConfigurations)
6071
6172 set (ComponentsTargets "" )
73+ set (CompileDefinitions MED_PRESENT)
6274 if (CONF MATCHES MOM6)
6375 list (APPEND ComponentsTargets Access3::mom6lib)
6476 else ()
6577 list (APPEND ComponentsTargets Access3::cdeps-docn)
6678 endif ()
79+ list (APPEND CompileDefinitions OCN_PRESENT)
80+
6781 if (CONF MATCHES CICE6)
6882 list (APPEND ComponentsTargets Access3::cicelib)
6983 else ()
7084 list (APPEND ComponentsTargets Access3::cdeps-dice)
7185 endif ()
86+ list (APPEND CompileDefinitions ICE_PRESENT)
87+
7288 if (CONF MATCHES WW3)
7389 list (APPEND ComponentsTargets Access3::ww3lib)
7490 else ()
7591 list (APPEND ComponentsTargets Access3::cdeps-dwav)
7692 endif ()
93+ list (APPEND CompileDefinitions WAV_PRESENT)
94+
95+ if (CONF MATCHES UM13)
96+ list (APPEND ComponentsTargets PkgConfig::UM)
97+ list (APPEND CompileDefinitions ATM_PRESENT)
98+ else ()
99+ list (APPEND ComponentsTargets Access3::cdeps-drof Access3::cdeps-datm)
100+ list (APPEND CompileDefinitions ATM_PRESENT ROF_PRESENT)
101+ endif ()
77102
78103 # We use the CESM driver from CMEPS
79- add_fortran_library (OM3_cesm_driver_ ${CONF} mod/OM3_cesm_driver_ ${CONF} STATIC
104+ add_fortran_library (cesm_driver_ ${CONF} mod/cesm_driver_ ${CONF} STATIC
80105 CMEPS/CMEPS/cesm/driver/esm.F90
81106 CMEPS/CMEPS/cesm/driver/ensemble_driver.F90
82107 CMEPS/CMEPS/cesm/driver/esm_time_mod.F90
83108 )
84- target_link_libraries (OM3_cesm_driver_${CONF}
109+
110+ target_link_libraries (cesm_driver_${CONF}
85111 PUBLIC ESMF::ESMF
86- PRIVATE ${ComponentsTargets} Access3::cdeps-drof Access3::cdeps-datm Access3:: cmeps Access3::nuopc_cap_share Access3::share Access3::timing
112+ PRIVATE ${ComponentsTargets} Access3::cmeps Access3::nuopc_cap_share Access3::share Access3::timing
87113 )
88- target_compile_definitions (OM3_cesm_driver_${CONF} PRIVATE MED_PRESENT
89- ATM_PRESENT
90- ICE_PRESENT
91- OCN_PRESENT
92- WAV_PRESENT
93- ROF_PRESENT
94- $<$<CONFIG :Debug >:DEBUG >
114+ target_compile_definitions (cesm_driver_${CONF} PRIVATE ${CompileDefinitions}
115+ $<$<CONFIG :Debug >:DEBUG >
95116 )
96117
97- add_executable (OM3_${CONF} CMEPS/CMEPS/cesm/driver/esmApp.F90 )
98- target_link_libraries (OM3_${CONF} PRIVATE OM3_cesm_driver_${CONF} Access3::share ESMF::ESMF )
118+ add_executable (${CONF} CMEPS/CMEPS/cesm/driver/esmApp.F90 )
119+ target_link_libraries (${CONF} PRIVATE cesm_driver_${CONF} Access3::share ESMF::ESMF )
120+
121+ if (ENABLE_MOM6 AND NOT ENABLE_UM13)
122+ set (BinName access-om3-${CONF} )
123+ else ()
124+ set (BinName access3-${CONF} )
125+ endif ()
99126
100- set_target_properties (OM3_ ${CONF} PROPERTIES
127+ set_target_properties (${CONF} PROPERTIES
101128 LINKER_LANGUAGE Fortran
102- OUTPUT_NAME access-om3-${CONF }
129+ OUTPUT_NAME ${BinName }
103130 )
104131endforeach ()
105132
106133# Install
107134
108135foreach (CONF IN LISTS BuildConfigurations)
109136
110- install (TARGETS OM3_ ${CONF}
137+ install (TARGETS ${CONF}
111138 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
112139 )
113140endforeach ()
0 commit comments