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 3 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
6 changes: 4 additions & 2 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,7 @@
url = https://github.com/Kitware/CMake
[submodule "cmake"]
path = cmake
url = https://github.com/NOAA-EMC/CMakeModules
branch = release/public-v1
#url = https://github.com/NOAA-EMC/CMakeModules
#branch = develop
url = https://github.com/climbfuji/CMakeModules
branch = heavy_axe_cleanup
110 changes: 43 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,20 @@ 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)
message(INFO "NETCDF_INCLUDE_DIRS: '${NETCDF_INCLUDE_DIRS}'")
message(INFO "NETCDF_LIBRARIES: '${NETCDF_LIBRARIES}'")
endif()

if(BUILD_PNG)
Expand All @@ -202,6 +213,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 +232,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 +248,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 +311,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