Skip to content

Commit a9fb28c

Browse files
committed
Support linking with UM13
1 parent 62ebd72 commit a9fb28c

1 file changed

Lines changed: 49 additions & 21 deletions

File tree

cmake/Access3BinInstall.cmake

Lines changed: 49 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,23 @@
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

1315
option(ENABLE_MOM6 "Build MOM6 configuration" OFF)
1416
option(ENABLE_CICE6 "Build CICE6 configuration" OFF)
1517
option(ENABLE_WW3 "Build WW3 configuration" OFF)
18+
option(ENABLE_UM13 "Build UM13 configuration" OFF)
1619

1720
# Check validity of requested components
1821
foreach(_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()
3237
endforeach()
3338

3439
message(STATUS "BuildConfigurations")
3540
message(STATUS "${BuildConfigurations}")
3641
message(STATUS " - MOM6 ${ENABLE_MOM6}")
3742
message(STATUS " - CICE6 ${ENABLE_CICE6}")
3843
message(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")
4249
endif()
4350

@@ -52,62 +59,83 @@ endif()
5259
if(ENABLE_WW3)
5360
find_package(Ww3lib REQUIRED AccessWW3Cmeps_Development)
5461
endif()
62+
if(ENABLE_UM13)
63+
find_package(PkgConfig REQUIRED)
64+
pkg_check_modules(UM REQUIRED IMPORTED_TARGET "libum-atmos")
65+
pkg_check_modules(GCOM REQUIRED IMPORTED_TARGET "libgcom")
66+
endif()
5567

5668
# Main Definitions
5769

5870
# Add executable for each enabled configuration
5971
foreach(CONF IN LISTS BuildConfigurations)
6072

6173
set(ComponentsTargets "")
74+
set(CompileDefinitions MED_PRESENT)
6275
if(CONF MATCHES MOM6)
6376
list(APPEND ComponentsTargets Access3::mom6lib)
6477
else()
6578
list(APPEND ComponentsTargets Access3::cdeps-docn)
6679
endif()
80+
list(APPEND CompileDefinitions OCN_PRESENT)
81+
6782
if(CONF MATCHES CICE6)
6883
list(APPEND ComponentsTargets Access3::cicelib)
6984
else()
7085
list(APPEND ComponentsTargets Access3::cdeps-dice)
7186
endif()
87+
list(APPEND CompileDefinitions ICE_PRESENT)
88+
7289
if(CONF MATCHES WW3)
7390
list(APPEND ComponentsTargets Access3::ww3lib)
7491
else()
7592
list(APPEND ComponentsTargets Access3::cdeps-dwav)
7693
endif()
94+
list(APPEND CompileDefinitions WAV_PRESENT)
95+
96+
if(CONF MATCHES UM13)
97+
list(APPEND ComponentsTargets PkgConfig::UM PkgConfig::GCOM)
98+
list(APPEND CompileDefinitions ATM_PRESENT)
99+
else()
100+
list(APPEND ComponentsTargets Access3::cdeps-drof Access3::cdeps-datm)
101+
list(APPEND CompileDefinitions ATM_PRESENT ROF_PRESENT)
102+
endif()
77103

78104
# We use the CESM driver from CMEPS
79-
add_fortran_library(OM3_cesm_driver_${CONF} mod/OM3_cesm_driver_${CONF} STATIC
105+
add_fortran_library(cesm_driver_${CONF} mod/cesm_driver_${CONF} STATIC
80106
CMEPS/CMEPS/cesm/driver/esm.F90
81107
CMEPS/CMEPS/cesm/driver/ensemble_driver.F90
82108
CMEPS/CMEPS/cesm/driver/esm_time_mod.F90
83109
)
84-
target_link_libraries(OM3_cesm_driver_${CONF}
110+
111+
target_link_libraries(cesm_driver_${CONF}
85112
PUBLIC ESMF::ESMF
86-
PRIVATE ${ComponentsTargets} Access3::cdeps-drof Access3::cdeps-datm Access3::cmeps Access3::nuopc_cap_share Access3::share Access3::timing
113+
PRIVATE ${ComponentsTargets} Access3::cmeps Access3::nuopc_cap_share Access3::share Access3::timing
87114
)
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>
115+
target_compile_definitions(cesm_driver_${CONF} PRIVATE ${CompileDefinitions}
116+
$<$<CONFIG:Debug>:DEBUG>
95117
)
96118

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)
119+
add_executable(${CONF} CMEPS/CMEPS/cesm/driver/esmApp.F90)
120+
target_link_libraries(${CONF} PRIVATE cesm_driver_${CONF} Access3::share ESMF::ESMF)
121+
122+
if (ENABLE_MOM6)
123+
set(BinName access-om3-${CONF})
124+
else()
125+
set(BinName access3-${CONF})
126+
endif()
99127

100-
set_target_properties(OM3_${CONF} PROPERTIES
128+
set_target_properties(${CONF} PROPERTIES
101129
LINKER_LANGUAGE Fortran
102-
OUTPUT_NAME access-om3-${CONF}
130+
OUTPUT_NAME ${BinName}
103131
)
104132
endforeach()
105133

106134
# Install
107135

108136
foreach(CONF IN LISTS BuildConfigurations)
109137

110-
install(TARGETS OM3_${CONF}
138+
install(TARGETS ${CONF}
111139
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
112140
)
113141
endforeach()

0 commit comments

Comments
 (0)