Skip to content

Commit 64d3d05

Browse files
committed
Add support for using the SMIOL I/O library when building with cmake.
Support for SMIOL is enabled by adding -DMPAS_USE_SMIOL=ON The default IO library is PIO when running cmake.
1 parent 41e9a3f commit 64d3d05

File tree

4 files changed

+64
-12
lines changed

4 files changed

+64
-12
lines changed

CMakeLists.txt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,14 @@ option(MPAS_DOUBLE_PRECISION "Use double precision 64-bit Floating point." TRUE)
2121
option(MPAS_PROFILE "Enable GPTL profiling" OFF)
2222
option(MPAS_OPENMP "Enable OpenMP" OFF)
2323
option(BUILD_SHARED_LIBS "Build shared libraries" ON)
24+
option(MPAS_USE_SMIOL "Build with smiol I/O library" OFF)
2425

2526
message(STATUS "[OPTION] MPAS_CORES: ${MPAS_CORES}")
2627
message(STATUS "[OPTION] MPAS_DOUBLE_PRECISION: ${MPAS_DOUBLE_PRECISION}")
2728
message(STATUS "[OPTION] MPAS_PROFILE: ${MPAS_PROFILE}")
2829
message(STATUS "[OPTION] MPAS_OPENMP: ${MPAS_OPENMP}")
2930
message(STATUS "[OPTION] BUILD_SHARED_LIBS: ${BUILD_SHARED_LIBS}")
31+
message(STATUS "[OPTION] MPAS_USE_SMIOL: ${MPAS_USE_SMIOL}")
3032

3133
# Build product output locations
3234
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
@@ -59,7 +61,9 @@ find_package(OpenMP COMPONENTS Fortran)
5961
find_package(MPI REQUIRED COMPONENTS Fortran)
6062
find_package(NetCDF REQUIRED COMPONENTS Fortran C)
6163
find_package(PnetCDF REQUIRED COMPONENTS Fortran)
62-
find_package(PIO REQUIRED COMPONENTS Fortran C)
64+
if(NOT MPAS_USE_SMIOL)
65+
find_package(PIO REQUIRED COMPONENTS Fortran C)
66+
endif()
6367
if(MPAS_PROFILE)
6468
find_package(GPTL REQUIRED)
6569
endif()
@@ -88,6 +92,9 @@ set(MPAS_SUBDRIVER_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/driver/mpas_subdriver.F)
8892

8993
## Create targets
9094
add_subdirectory(src/external/ezxml) # Target: MPAS::external::ezxml
95+
if(MPAS_USE_SMIOL)
96+
add_subdirectory(src/external/SMIOL) # Target: MPAS::external::smiol
97+
endif()
9198
if(ESMF_FOUND)
9299
message(STATUS "Configure MPAS for external ESMF")
93100
add_definitions(-DMPAS_EXTERNAL_ESMF_LIB -DMPAS_NO_ESMF_INIT)

cmake/Functions/MPAS_Functions.cmake

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,16 @@ function(mpas_fortran_target target)
8080

8181
# Global Fortran configuration
8282
set_target_properties(${target} PROPERTIES Fortran_FORMAT FREE)
83-
set(MPAS_FORTRAN_TARGET_COMPILE_DEFINITIONS
84-
_MPI=1
85-
USE_PIO2=1
86-
)
83+
if(MPAS_USE_SMIOL)
84+
set(MPAS_FORTRAN_TARGET_COMPILE_DEFINITIONS
85+
MPAS_SMIOL_SUPPORT=1
86+
)
87+
else()
88+
set(MPAS_FORTRAN_TARGET_COMPILE_DEFINITIONS
89+
USE_PIO2=1
90+
)
91+
endif()
92+
list(APPEND MPAS_FORTRAN_TARGET_COMPILE_DEFINITIONS _MPI=1)
8793
# Enable OpenMP support
8894
if(MPAS_OPENMP)
8995
target_link_libraries(${target} PUBLIC OpenMP::OpenMP_Fortran)
@@ -244,4 +250,4 @@ function(set_MPAS_DEBUG_flag target)
244250
if(CMAKE_BUILD_TYPE MATCHES Debug)
245251
target_compile_definitions(${target} PRIVATE MPAS_DEBUG)
246252
endif()
247-
endfunction()
253+
endfunction()

src/external/SMIOL/CMakeLists.txt

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
2+
find_package(MPI REQUIRED COMPONENTS C Fortran)
3+
find_package(NetCDF REQUIRED COMPONENTS Fortran C)
4+
find_package(PnetCDF REQUIRED COMPONENTS Fortran C)
5+
6+
# Specify the library source files
7+
set(SMIOL_C_SOURCES smiol.c smiol_utils.c)
8+
set(SMIOL_F_SOURCES smiolf.F90)
9+
10+
# Create the C library
11+
add_library(smiol ${SMIOL_C_SOURCES})
12+
add_library(${PROJECT_NAME}::external::smiol ALIAS smiol)
13+
target_compile_definitions(smiol PRIVATE SMIOL_PNETCDF SINGLE_PRECISION)
14+
target_include_directories(smiol PRIVATE ${MPI_INCLUDE_PATH})
15+
target_link_libraries( smiol PRIVATE MPI::MPI_C PnetCDF::PnetCDF_C )
16+
17+
# Create the Fortran library
18+
add_library(smiolf ${SMIOL_F_SOURCES})
19+
enable_language(Fortran)
20+
mpas_fortran_target(smiolf)
21+
add_library(${PROJECT_NAME}::external::smiolf ALIAS smiolf)
22+
target_compile_definitions(smiolf PRIVATE SMIOL_PNETCDF )
23+
# fortran lib requires the c lib
24+
target_link_libraries(smiolf PUBLIC smiol)
25+
target_include_directories(smiol PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
26+
27+
install(TARGETS smiol EXPORT ${PROJECT_NAME}ExportsExternal
28+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
29+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
30+
install(TARGETS smiolf EXPORT ${PROJECT_NAME}ExportsExternal
31+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
32+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})

src/framework/CMakeLists.txt

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,18 @@ set(MPAS_FRAMEWORK_SOURCES
3939
add_library(framework ${MPAS_FRAMEWORK_SOURCES})
4040
set_MPAS_DEBUG_flag(framework)
4141
set(FRAMEWORK_COMPILE_DEFINITIONS
42-
USE_PIO2
43-
MPAS_PIO_SUPPORT
44-
mpas=1
45-
MPAS_NATIVE_TIMERS)
42+
mpas=1
43+
MPAS_NATIVE_TIMERS)
44+
if (MPAS_USE_SMIOL)
45+
list(APPEND FRAMEWORK_COMPILE_DEFINITIONS MPAS_SMIOL_SUPPORT)
46+
set(IO_LIBS
47+
${PROJECT_NAME}::external::smiolf)
48+
else()
49+
list(APPEND FRAMEWORK_COMPILE_DEFINITIONS USE_PIO2 MPAS_PIO_SUPPORT)
50+
set(IO_LIBS
51+
PIO::PIO_Fortran
52+
PIO::PIO_C)
53+
endif()
4654
target_compile_definitions(framework PRIVATE ${FRAMEWORK_COMPILE_DEFINITIONS})
4755

4856
mpas_fortran_target(framework)
@@ -53,8 +61,7 @@ set_target_properties(framework PROPERTIES OUTPUT_NAME mpas_framework)
5361
set(FRAMEWORK_LINK_LIBRARIES
5462
${PROJECT_NAME}::external::esmf
5563
${PROJECT_NAME}::external::ezxml
56-
PIO::PIO_Fortran
57-
PIO::PIO_C
64+
${IO_LIBS}
5865
PnetCDF::PnetCDF_Fortran
5966
NetCDF::NetCDF_Fortran
6067
NetCDF::NetCDF_C

0 commit comments

Comments
 (0)