Skip to content

Commit

Permalink
Merge pull request ESCOMP#12 from jedwards4b/add_fox_submodule
Browse files Browse the repository at this point in the history
Add fox submodule
  • Loading branch information
jedwards4b authored Aug 6, 2020
2 parents f5fef94 + fac382c commit 13676a2
Show file tree
Hide file tree
Showing 25 changed files with 666 additions and 137 deletions.
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "fox"]
path = fox
url = https://github.com/ESMCI/fox.git
11 changes: 8 additions & 3 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,19 @@ project(NUOPC_DATA_MODELS LANGUAGES Fortran VERSION 0.1)
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
include(ExternalProject)
find_package(ESMF REQUIRED)
if (DEFINED PIO)
set(PIO_PATH ${PIO})
else()
set(PIO_PATH $ENV{PIO})
endif()
find_package(PIO REQUIRED COMPONENT C Fortran PATH ${PIO_PATH})

if (DEFINED CIMEROOT)
message("Using CIME in ${CIMEROOT} with compiler ${COMPILER}")
include(${CASEROOT}/Macros.cmake)
if (${PIO_VERSION} LESS 2)
message( FATAL_ERROR "Version 2 of the PIO library required")
endif()
set(FOX ${LIBROOT})
set(CMAKE_Fortran_FLAGS "${FFLAGS} -I${LIBROOT}/include -I${LIBROOT}/finclude -I${LIBROOT}/nuopc/esmf/${NINST_VALUE}/include")
else ()
set(BLD_STANDALONE TRUE)
Expand All @@ -23,10 +28,10 @@ endif()
if(BLD_STANDALONE)
add_subdirectory(share)
list(APPEND EXTRA_LIBS cdeps_share)
list(APPEND EXTRA_INCLUDES "${PIO_INCDIR}" "${CMAKE_BINARY_DIR}/share" )
list(APPEND EXTRA_INCLUDES "${CMAKE_BINARY_DIR}/share" )
endif()


add_subdirectory(fox)
add_subdirectory(streams)
add_subdirectory(dshr)

Expand Down
2 changes: 2 additions & 0 deletions cime_config/buildlib
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,8 @@ def buildlib(bldroot, libroot, case, compname=None):
cmake_flags += " -DCMAKE_INSTALL_PREFIX={} ".format(libroot)
cmake_flags += " -DLIBROOT={} ".format(libroot) + srcpath
cmake_flags += " -DMPILIB={} ".format(mpilib)
cmake_flags += " -DPIO_C_LIBRARY={path}/lib -DPIO_C_INCLUDE_DIR={path}/include ".format(path=os.path.join(case.get_value("EXEROOT"),sharedpath))
cmake_flags += " -DPIO_Fortran_LIBRARY={path}/lib -DPIO_Fortran_INCLUDE_DIR={path}/include ".format(path=os.path.join(case.get_value("EXEROOT"),sharedpath))

logger.info("cmake_flags {}".format(cmake_flags))
s,o,e = run_cmd("cmake {} ".format(cmake_flags), from_dir=bldroot, verbose=True)
Expand Down
103 changes: 103 additions & 0 deletions cmake/FindPIO.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
# - Try to find PIO
#
# This can be controled by setting PIO_PATH or PIO_<lang>_PATH Cmake variables,
# where <lang> is the COMPONENT language one needs.
#
# Once done, this will define:
#
# PIO_<lang>_FOUND (BOOL) - system has PIO
# PIO_<lang>_IS_SHARED (BOOL) - whether the library is shared/dynamic
# PIO_<lang>_INCLUDE_DIR (PATH) - Location of the header files and modules
# PIO_<lang>_LIBRARY (File) - Path to the <lang> library files
# PIO_<lang>_LIBRARIES (List) - link these to use PIO
#
# Available COMPONENTS are: C Fortran
# If no components are specified only C is assumed
include (LibFind)
include (LibCheck)

# Define PIO C Component
define_package_component(PIO DEFAULT
COMPONENT C
INCLUDE_NAMES pio.h
LIBRARY_NAMES pioc)

# Define PIO Fortran Component
define_package_component(PIO
COMPONENT Fortran
INCLUDE_NAMES pio.mod pio.inc
LIBRARY_NAMES piof)

# Search for list of valid components requested
find_valid_components(PIO)

#==============================================================================
# SEARCH FOR VALIDATED COMPONENTS
foreach (pcomp IN LISTS PIO_FIND_VALID_COMPONENTS)

# If not found already, search...
if (NOT PIO_${pcomp}_FOUND)

# Manually add the MPI include and library dirs to search paths
# and search for the package component
if (MPI_${pcomp}_FOUND)
initialize_paths (PIO_${pcomp}_PATHS
INCLUDE_DIRECTORIES ${MPI_${pcomp}_INCLUDE_PATH}
LIBRARIES ${MPI_${pcomp}_LIBRARIES})
find_package_component(PIO COMPONENT ${pcomp}
PATHS ${PIO_${pcomp}_PATHS})
else ()
find_package_component(PIO COMPONENT ${pcomp} HINT PIO_${pcomp}_PATH=${PIO_PATH})
endif ()

# Continue only if component found
if (PIO_${pcomp}_FOUND)

# Checks
if (pcomp STREQUAL C)

# Check version
check_version (PIO
NAME "pio_meta.h"
HINTS ${PIO_C_INCLUDE_DIRS}
MACRO_REGEX "PIO_VERSION_")

endif ()

# Dependencies
if (pcomp STREQUAL C AND NOT PIO_C_IS_SHARED)

# DEPENDENCY: PnetCDF (if PnetCDF enabled)
check_macro (PIO_HAS_PNETCDF
NAME TryPIO_PNETCDF.c
HINTS ${CMAKE_MODULE_PATH}
DEFINITIONS -I${PIO_C_INCLUDE_DIR}
COMMENT "whether PIO has PnetCDF support")
if (PIO_HAS_PNETCDF)
find_package (PnetCDF COMPONENTS C)
endif ()


elseif (pcomp STREQUAL Fortran AND NOT PIO_Fortran_IS_SHARED)

# DEPENDENCY: PIO
set (orig_comp ${pcomp})
set (orig_comps ${PIO_FIND_VALID_COMPONENTS})
find_package (PIO COMPONENTS C)
set (PIO_FIND_VALID_COMPONENTS ${orig_comps})
set (pcomp ${orig_comp})
if (PIO_C_FOUND)
list (APPEND PIO_Fortran_INCLUDE_DIRS ${PIO_C_INCLUDE_DIRS})
list (APPEND PIO_Fortran_LIBRARIES ${PIO_C_LIBRARIES})
endif ()

endif ()

endif ()

endif ()

endforeach ()
message("PIO_C_FOUND ${PIO_C_FOUND}")
message("PIO_Fortran_FOUND ${PIO_Fortran_FOUND}")
message("PIO_Fortran_INCLUDE_DIR ${PIO_Fortran_INCLUDE_DIR}")
104 changes: 104 additions & 0 deletions cmake/LibCheck.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
include (CMakeParseArguments)
include (CheckFunctionExists)
#==============================================================================
#
# FUNCTIONS TO HELP WITH Check* MODULES
#
#==============================================================================

#______________________________________________________________________________
# - Basic function to check a property of a package using a try_compile step
#
# SYNTAX: check_macro (<return_variable>
# NAME <filename>
# HINTS <path> <path> ...
# DEFINITIONS <definition1> <definition> ...
# COMMENT <string_comment>)
#
function (check_macro VARIABLE)

# Parse the input arguments
set (oneValueArgs COMMENT NAME)
set (multiValueArgs HINTS DEFINITIONS)
cmake_parse_arguments (${VARIABLE} "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})

# If the return variable is defined, already, don't continue
if (NOT DEFINED ${VARIABLE})

message (STATUS "Checking ${${VARIABLE}_COMMENT}")
find_file (${VARIABLE}_TRY_FILE
NAMES ${${VARIABLE}_NAME}
HINTS ${${VARIABLE}_HINTS})
if (${VARIABLE}_TRY_FILE)
try_compile (COMPILE_RESULT
${CMAKE_CURRENT_BINARY_DIR}/try${VARIABLE}
SOURCES ${${VARIABLE}_TRY_FILE}
COMPILE_DEFINITIONS ${${VARIABLE}_DEFINITIONS}
OUTPUT_VARIABLE TryOUT)
if (COMPILE_RESULT)
message (STATUS "Checking ${${VARIABLE}_COMMENT} - yes")
else ()
message (STATUS "Checking ${${VARIABLE}_COMMENT} - no")
endif ()

set (${VARIABLE} ${COMPILE_RESULT}
CACHE BOOL "${${VARIABLE}_COMMENT}")

else ()
message (STATUS "Checking ${${VARIABLE}_COMMENT} - failed")
endif ()

unset (${VARIABLE}_TRY_FILE CACHE)
endif ()

endfunction ()

#______________________________________________________________________________
# - Basic function to check the version of a package using a try_run step
#
# SYNTAX: check_version (<pkg>
# NAME <try_version_file>
# HINTS <path> <path> ...
# DEFINITIONS <definition1> <definition> ...)
#
function (check_version PKG)

# Parse the input arguments
set (oneValueArgs NAME MACRO_REGEX)
set (multiValueArgs HINTS)
cmake_parse_arguments (${PKG} "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})

# If the return variable is defined, already, don't continue
if (NOT DEFINED ${PKG}_VERSION)

message (STATUS "Checking ${PKG} version")
find_file (${PKG}_VERSION_HEADER
NAMES ${${PKG}_NAME}
HINTS ${${PKG}_HINTS})
if (${PKG}_VERSION_HEADER)
set (def)
file (STRINGS ${${PKG}_VERSION_HEADER} deflines
REGEX "^#define[ \\t]+${${PKG}_MACRO_REGEX}")
foreach (defline IN LISTS deflines)
string (REPLACE "\"" "" defline "${defline}")
string (REPLACE "." "" defline "${defline}")
string (REGEX REPLACE "[ \\t]+" ";" deflist "${defline}")
list (GET deflist 2 arg)
list (APPEND def ${arg})
endforeach ()
string (REPLACE ";" "." vers "${def}")
message (STATUS "Checking ${PKG} version - ${vers}")
set (${PKG}_VERSION ${vers}
CACHE STRING "${PKG} version string")
if (${PKG}_VERSION VERSION_LESS ${PKG}_FIND_VERSION})
message (FATAL_ERROR "${PKG} version insufficient")
endif ()
else ()
message (STATUS "Checking ${PKG} version - failed")
endif ()

unset (${PKG}_VERSION_HEADER CACHE)

endif ()

endfunction ()
Loading

0 comments on commit 13676a2

Please sign in to comment.