Skip to content
This repository was archived by the owner on Mar 25, 2026. It is now read-only.
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
2 changes: 1 addition & 1 deletion .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,4 @@
[submodule "cmake"]
path = cmake
url = https://github.com/NOAA-EMC/CMakeModules
branch = release/public-v1
branch = develop
108 changes: 41 additions & 67 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -99,17 +99,24 @@ if(BUILD_NETCDF OR BUILD_PNG)
TEST_COMMAND cd ${PROJECT_BINARY_DIR}/zlib/build && make test
INSTALL_COMMAND $(MAKE) install
)

file(APPEND ${CMAKE_CONFIG_FILE} "set(ZLIB_ROOT \"${CMAKE_INSTALL_PREFIX}\")\n")
endif()

if(BUILD_NETCDF)
# This is where the libraries will be
set(NETCDF_INCLUDES ${CMAKE_INSTALL_PREFIX}/include)
set(NETCDF_LIBRARIES_C ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}netcdf${CMAKE_STATIC_LIBRARY_SUFFIX})
set(NETCDF_LIBRARIES_Fortran ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}netcdff${CMAKE_STATIC_LIBRARY_SUFFIX})

set(NETCDF_LIBRARIES "${NETCDF_LIBRARIES_Fortran} ${NETCDF_LIBRARIES_C}")
set(NETCDF_INCLUDE_DIRS ${CMAKE_INSTALL_PREFIX}/include)
set(HDF5_C_LIBRARY ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}hdf5${CMAKE_STATIC_LIBRARY_SUFFIX})
set(HDF5_HL_LIBRARY ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}hdf5_hl${CMAKE_STATIC_LIBRARY_SUFFIX})
set(ZLIB_LIBRARY ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}z${CMAKE_STATIC_LIBRARY_SUFFIX})
set(NETCDF_C_LIBRARY ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}netcdf${CMAKE_STATIC_LIBRARY_SUFFIX})
set(NETCDF_Fortran_LIBRARY ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}netcdff${CMAKE_STATIC_LIBRARY_SUFFIX})
set(NETCDF_LIBRARIES "${NETCDF_Fortran_LIBRARY} ${NETCDF_C_LIBRARY} ${HDF5_HL_LIBRARY} ${HDF5_C_LIBRARY} ${ZLIB_LIBRARY}")

# Used by configure_file for the configure scripts
set(NCDIR ${CMAKE_INSTALL_PREFIX})
set(H5DIR ${CMAKE_INSTALL_PREFIX})
set(ZDIR ${CMAKE_INSTALL_PREFIX})

ExternalProject_Add(hdf5
PREFIX ${PROJECT_BINARY_DIR}/hdf5
Expand All @@ -135,19 +142,9 @@ if(BUILD_NETCDF)
DEPENDS zlib
)

# Used by configure_file for the configure scripts
set(NCDIR ${CMAKE_INSTALL_PREFIX})
set(H5DIR ${CMAKE_INSTALL_PREFIX})
set(ZDIR ${CMAKE_INSTALL_PREFIX})

set(HDF5_C_LIBRARY ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}hdf5${CMAKE_STATIC_LIBRARY_SUFFIX})
set(HDF5_HL_LIBRARY ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}hdf5_hl${CMAKE_STATIC_LIBRARY_SUFFIX})
set(ZLIB_LIBRARY ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}z${CMAKE_STATIC_LIBRARY_SUFFIX})
set(NETCDF_C_LIBRARY ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}netcdf${CMAKE_STATIC_LIBRARY_SUFFIX})

# configure NetCDF configure script with installation locations of HDF, install location, etc
configure_file(${PROJECT_SOURCE_DIR}/config_netcdfc.sh.tmpl ${PROJECT_BINARY_DIR}/config_netcdfc.sh)

ExternalProject_Add(netcdf
PREFIX ${PROJECT_BINARY_DIR}/netcdf-c
SOURCE_DIR ${PROJECT_SOURCE_DIR}/netcdf-c
Expand Down Expand Up @@ -186,6 +183,18 @@ if(BUILD_NETCDF)

file(APPEND ${CMAKE_CONFIG_FILE} "set(HDF5_ROOT \"${CMAKE_INSTALL_PREFIX}\")\n")
file(APPEND ${CMAKE_CONFIG_FILE} "set(NETCDF \"${CMAKE_INSTALL_PREFIX}\")\n")
else()
# Find NetCDF
add_custom_target(netcdf-fortran)
find_package(NetCDF COMPONENTS Fortran REQUIRED)
# Reverse list and replace semicolons with spaces as required for ESMF below
list(REVERSE NETCDF_LIBRARIES)
# A rather complicated way to replace ";" with " "
set(NETCDF_LIBRARIES_TMP "")
foreach(itemlib ${NETCDF_LIBRARIES})
set(NETCDF_LIBRARIES_TMP "${NETCDF_LIBRARIES_TMP} ${itemlib}")
endforeach()
string(STRIP "${NETCDF_LIBRARIES_TMP}" NETCDF_LIBRARIES)
endif()

if(BUILD_PNG)
Expand All @@ -202,6 +211,10 @@ if(BUILD_PNG)
DEPENDS zlib
)
file(APPEND ${CMAKE_CONFIG_FILE} "set(PNG_ROOT \"${CMAKE_INSTALL_PREFIX}\")\n")
else()
# Find PNG
add_custom_target(libpng)
find_package(PNG REQUIRED)
endif()

if(BUILD_JASPER)
Expand All @@ -217,9 +230,9 @@ if(BUILD_JASPER)
SOURCE_DIR ${PROJECT_SOURCE_DIR}/libjpeg
INSTALL_DIR ${CMAKE_INSTALL_PREFIX}
)

configure_file(${PROJECT_SOURCE_DIR}/config_jasper.sh.tmpl ${PROJECT_BINARY_DIR}/config_jasper.sh)

ExternalProject_Add(jasper
PREFIX ${PROJECT_BINARY_DIR}/jasper
SOURCE_DIR ${PROJECT_SOURCE_DIR}/jasper
Expand All @@ -233,6 +246,12 @@ if(BUILD_JASPER)

file(APPEND ${CMAKE_CONFIG_FILE} "set(JPEG_ROOT \"${CMAKE_INSTALL_PREFIX}\")\n")
file(APPEND ${CMAKE_CONFIG_FILE} "set(Jasper_ROOT \"${CMAKE_INSTALL_PREFIX}\")\n")
else()
# Find JPEG and Jasper
add_custom_target(libjpeg)
find_package(JPEG)
add_custom_target(jasper)
find_package(Jasper REQUIRED)
endif()

if(BUILD_WGRIB2)
Expand Down Expand Up @@ -290,69 +309,24 @@ if(BUILD_ESMF)
message(STATUS "Setting ESMF_F90COMPILEOPTS: '${ESMF_F90COMPILEOPTS}'")
endif()

if(NOT BUILD_NETCDF)
# Find NetCDF and convert output to what ESMF expects
add_custom_target(netcdf-fortran)
set(NETCDF_USE_STATIC_LIBRARIES TRUE)

if(NOT DEFINED ENV{NETCDF})
message(FATAL_ERROR "Environment variable NETCDF not set")
else()
list(APPEND CMAKE_PREFIX_PATH $ENV{NETCDF})
endif()
if(DEFINED ENV{NETCDF_FORTRAN})
list(APPEND CMAKE_PREFIX_PATH $ENV{NETCDF_FORTRAN})
endif()
find_package(NetCDF MODULE REQUIRED)
# Process NETCDF_INCLUDES string to what ESMF expects
separate_arguments(NETCDF_INCLUDES)
list(REMOVE_DUPLICATES NETCDF_INCLUDES)
set(NETCDF_INCLUDES_TMP "")
foreach(item ${NETCDF_INCLUDES})
set(NETCDF_INCLUDES_TMP "${NETCDF_INCLUDES_TMP} ${item}")
endforeach()
string(STRIP "${NETCDF_INCLUDES_TMP}" NETCDF_INCLUDES)
# Convert NETCDF_LIBRARIES string to what ESMF expects
string(REPLACE " -L" ";-L" NETCDF_LIBRARIES ${NETCDF_LIBRARIES})
set(NETCDF_LIBRARIES_WITH_DEPS "")
foreach(item ${NETCDF_LIBRARIES})
string(REGEX MATCHALL "-L[^ ]*" itempath "${item}")
string(REGEX REPLACE "^-L" "" itempath ${itempath})
string(REGEX MATCHALL "-l[^ ]*" itemlibs "${item}")
foreach(itemlib ${itemlibs})
string(REGEX REPLACE "^-l" "" itemlib ${itemlib})
set(sharedlib ${itempath}/${CMAKE_SHARED_LIBRARY_PREFIX}${itemlib}${CMAKE_SHARED_LIBRARY_SUFFIX})
set(staticlib ${itempath}/${CMAKE_STATIC_LIBRARY_PREFIX}${itemlib}${CMAKE_STATIC_LIBRARY_SUFFIX})
if(EXISTS ${sharedlib})
set(NETCDF_LIBRARIES_WITH_DEPS "${NETCDF_LIBRARIES_WITH_DEPS} ${sharedlib}")
else()
set(NETCDF_LIBRARIES_WITH_DEPS "${NETCDF_LIBRARIES_WITH_DEPS} ${staticlib}")
endif()
endforeach()
endforeach()
string(STRIP "${NETCDF_LIBRARIES_WITH_DEPS}" NETCDF_LIBRARIES_WITH_DEPS)
else()
set(NETCDF_LIBRARIES_WITH_DEPS "${NETCDF_LIBRARIES} ${HDF5_HL_LIBRARY} ${HDF5_C_LIBRARY} ${ZLIB_LIBRARY}")
endif()

if(NOT BUILD_MPI)
add_custom_target(mpi)
set(ESMF_PATH $ENV{PATH})
else()
set(ESMF_PATH "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}:$ENV{PATH}")
endif()

# When building only the static ESMF libraary, cannot run tests on macOS and certain Linux machines (e.g. Travis)
# When building only the static ESMF library, cannot run tests on macOS and certain Linux machines (e.g. Travis)
ExternalProject_Add(esmf
PREFIX ${PROJECT_BINARY_DIR}/esmf
SOURCE_DIR ${PROJECT_SOURCE_DIR}/esmf
INSTALL_DIR ${CMAKE_INSTALL_PREFIX}
BUILD_IN_SOURCE 1
CONFIGURE_COMMAND ""
BUILD_COMMAND ${CMAKE_COMMAND} -E env PATH=${ESMF_PATH} ESMF_DIR=${PROJECT_SOURCE_DIR}/esmf ESMF_COMM=${MPITYPE} ESMF_COMPILER=${comp} ESMF_NETCDF=1 ESMF_NETCDF_INCLUDE=${NETCDF_INCLUDES} ESMF_NETCDF_LIBS=${NETCDF_LIBRARIES_WITH_DEPS} ESMF_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} ESMF_BOPT=${ESMF_BOPT} ESMF_SHARED_LIB_BUILD=OFF ESMF_OPTLEVEL=${ESMF_OPTLEVEL} ESMF_F90COMPILEOPTS=${ESMF_F90COMPILEOPTS} ESMF_CXXCOMPILEOPTS=${ESMF_CXXCOMPILEOPTS} $(MAKE)
BUILD_COMMAND ${CMAKE_COMMAND} -E env PATH=${ESMF_PATH} ESMF_DIR=${PROJECT_SOURCE_DIR}/esmf ESMF_COMM=${MPITYPE} ESMF_COMPILER=${comp} ESMF_NETCDF=1 ESMF_NETCDF_INCLUDE=${NETCDF_INCLUDE_DIRS} ESMF_NETCDF_LIBS=${NETCDF_LIBRARIES} ESMF_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} ESMF_BOPT=${ESMF_BOPT} ESMF_SHARED_LIB_BUILD=OFF ESMF_OPTLEVEL=${ESMF_OPTLEVEL} ESMF_F90COMPILEOPTS=${ESMF_F90COMPILEOPTS} ESMF_CXXCOMPILEOPTS=${ESMF_CXXCOMPILEOPTS} $(MAKE)
#TEST_COMMAND cd ${PROJECT_SOURCE_DIR}/esmf && make check ESMF_DIR=${PROJECT_SOURCE_DIR}/esmf
#TEST_BEFORE_INSTALL TRUE
INSTALL_COMMAND ${CMAKE_COMMAND} -E env PATH=${ESMF_PATH} ESMF_DIR=${PROJECT_SOURCE_DIR}/esmf ESMF_COMM=${MPITYPE} ESMF_COMPILER=${comp} ESMF_NETCDF=1 ESMF_NETCDF_INCLUDE=${NETCDF_INCLUDES} ESMF_NETCDF_LIBS=${NETCDF_LIBRARIES_WITH_DEPS} ESMF_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} ESMF_INSTALL_HEADERDIR=${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR} ESMF_INSTALL_MODDIR=${CMAKE_INSTALL_PREFIX}/mod ESMF_INSTALL_LIBDIR=${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR} ESMF_INSTALL_BINDIR=${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR} ESMF_BOPT=${ESMF_BOPT} ESMF_OPTLEVEL=${ESMF_OPTLEVEL} ESMF_F90COMPILEOPTS=${ESMF_F90COMPILEOPTS} ESMF_CXXCOMPILEOPTS=${ESMF_CXXCOMPILEOPTS} $(MAKE) install
INSTALL_COMMAND ${CMAKE_COMMAND} -E env PATH=${ESMF_PATH} ESMF_DIR=${PROJECT_SOURCE_DIR}/esmf ESMF_COMM=${MPITYPE} ESMF_COMPILER=${comp} ESMF_NETCDF=1 ESMF_NETCDF_INCLUDE=${NETCDF_INCLUDE_DIRS} ESMF_NETCDF_LIBS=${NETCDF_LIBRARIES} ESMF_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} ESMF_INSTALL_HEADERDIR=${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR} ESMF_INSTALL_MODDIR=${CMAKE_INSTALL_PREFIX}/mod ESMF_INSTALL_LIBDIR=${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR} ESMF_INSTALL_BINDIR=${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR} ESMF_BOPT=${ESMF_BOPT} ESMF_OPTLEVEL=${ESMF_OPTLEVEL} ESMF_F90COMPILEOPTS=${ESMF_F90COMPILEOPTS} ESMF_CXXCOMPILEOPTS=${ESMF_CXXCOMPILEOPTS} $(MAKE) install
DEPENDS mpi netcdf-fortran)

file(APPEND ${CMAKE_CONFIG_FILE} "set(ESMFMKFILE \"${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/esmf.mk\")\n")
Expand Down
2 changes: 1 addition & 1 deletion cmake
Submodule cmake updated 52 files
+0 −6 Modules/FindG2C.cmake
+0 −7 Modules/FindGEMPAK.cmake
+0 −53 Modules/FindGSICONTROL.cmake
+0 −14 Modules/FindNDATE.cmake
+326 −41 Modules/FindNetCDF.cmake
+7 −1 Modules/FindWGRIB2.cmake
+0 −31 Modules/Findbacio.cmake
+0 −33 Modules/Findbufr.cmake
+0 −26 Modules/Findcrtm.cmake
+0 −33 Modules/Findg2.cmake
+0 −28 Modules/Findg2tmpl.cmake
+0 −31 Modules/Findgfsio.cmake
+0 −36 Modules/Findip.cmake
+0 −35 Modules/Findlandsfcutil.cmake
+0 −27 Modules/Findnemsio.cmake
+0 −27 Modules/Findnemsiogfs.cmake
+0 −20 Modules/Findpost.cmake
+0 −31 Modules/Findsfcio.cmake
+0 −31 Modules/Findsigio.cmake
+0 −32 Modules/Findsp.cmake
+0 −37 Modules/Findw3emc.cmake
+0 −31 Modules/Findw3nco.cmake
+0 −11 Modules/NewCMake/CMakeParseArguments.cmake
+0 −934 Modules/NewCMake/FindHDF5.cmake
+0 −1,514 Modules/NewCMake/FindMPI.cmake
+0 −4 Modules/NewCMake/FindMPI/fortranparam_mpi.f90.in
+0 −19 Modules/NewCMake/FindMPI/libver_mpi.c
+0 −7 Modules/NewCMake/FindMPI/libver_mpi.f90.in
+0 −10 Modules/NewCMake/FindMPI/mpiver.f90.in
+0 −37 Modules/NewCMake/FindMPI/test_mpi.c
+0 −6 Modules/NewCMake/FindMPI/test_mpi.f90.in
+0 −386 Modules/NewCMake/FindPackageHandleStandardArgs.cmake
+0 −47 Modules/NewCMake/FindPackageMessage.cmake
+0 −70 Modules/NewCMake/SelectLibraryConfigurations.cmake
+0 −15 Modules/comp_src.pl
+0 −65 Modules/findHelpers.cmake
+0 −24 Modules/platforms/Cheyenne.cmake
+0 −55 Modules/platforms/Discover.cmake
+0 −14 Modules/platforms/Gaea.cmake
+0 −14 Modules/platforms/Generic.cmake
+0 −25 Modules/platforms/Generic.cmake.orig
+0 −42 Modules/platforms/Hera.cmake
+0 −10 Modules/platforms/Jet.cmake
+0 −10 Modules/platforms/S4.cmake
+0 −60 Modules/platforms/WCOSS-C.cmake
+0 −51 Modules/platforms/WCOSS-D.cmake
+0 −61 Modules/platforms/WCOSS.cmake
+0 −62 Modules/setGNUFlags.cmake
+0 −85 Modules/setHOST.cmake
+0 −87 Modules/setIntelFlags.cmake
+0 −78 Modules/setPGIFlags.cmake
+0 −10 Modules/setPlatformVariables.cmake
15 changes: 8 additions & 7 deletions doc/README_stampede_intel.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@ Setup instructions for TACC Stampede using Intel-18.0.2
module purge
#
module load libfabric/1.7.0
module load git/2.9.0
module load git/2.24.1
module load autotools/1.1
module load xalt/2.7.9
module load xalt/2.8
module load TACC
#
module load python2/2.7.15
module load python3/3.7.0
module load intel/18.0.2
module load cmake/3.16.1
module load impi/18.0.2
Expand All @@ -17,7 +17,8 @@ module load netcdf/4.6.2
module li

> Currently Loaded Modules:
> 1) pnetcdf/1.11.0 2) netcdf/4.6.2 3) libfabric/1.7.0 4) intel/18.0.2 5) impi/18.0.2 6) git/2.9.0 7) autotools/1.1 8) python2/2.7.15 9) cmake/3.16.1 10) xalt/2.7.9 11) TACC
> 1) libfabric/1.7.0 3) autotools/1.1 5) TACC 7) cmake/3.16.1 9) python3/3.7.0 11) netcdf/4.6.2
> 2) git/2.24.1 4) xalt/2.8 6) intel/18.0.2 8) impi/18.0.2 10) pnetcdf/1.11.0

export CC=icc
export FC=ifort
Expand Down Expand Up @@ -62,12 +63,12 @@ the following commands should suffice to build the model.
module purge
#
module load libfabric/1.7.0
module load git/2.9.0
module load git/2.24.1
module load autotools/1.1
module load xalt/2.7.9
module load xalt/2.8
module load TACC
#
module load python2/2.7.15
module load python3/3.7.0
module load intel/18.0.2
module load cmake/3.16.1
module load impi/18.0.2
Expand Down