216 lines
7.7 KiB
CMake
216 lines
7.7 KiB
CMake
cmake_minimum_required(VERSION 2.8.12.1)
|
|
|
|
##include("/glade/work/negins/UFSCOMP/cime/tools/Macros.cmake")
|
|
|
|
set (CIME_ROOT "/glade/work/negins/UFSCOMP/cime")
|
|
message ("CIME_ROOT: ${CIME_ROOT}")
|
|
|
|
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/CMakeModules")
|
|
message ("CMAKE_MODULE_PATH: ${CMAKE_MODULE_PATH}")
|
|
|
|
|
|
set (CIME_CMAKE_MODULE_DIRECTORY "/glade/work/negins/UFSCOMP/cime/src/CMake/")
|
|
message ("CIME_CMAKE_MODULE_DIRECTORY: ${CIME_CMAKE_MODULE_DIRECTORY}")
|
|
|
|
|
|
list(APPEND CMAKE_MODULE_PATH ${CIME_CMAKE_MODULE_DIRECTORY})
|
|
message ("CMAKE_MODULE_PATH: ${CMAKE_MODULE_PATH}")
|
|
|
|
set (MACRO_ROOT "/glade/work/negins/UFSCOMP/cime/tools/")
|
|
include(${MACRO_ROOT}/Macros.cmake)
|
|
|
|
list(APPEND CMAKE_MODULE_PATH ${MACRO_ROOT})
|
|
message ("CMAKE_MODULE_PATH: ${CMAKE_MODULE_PATH}")
|
|
|
|
|
|
set (CLM_ROOT "/glade/work/negins/UFSCOMP/components/clm")
|
|
|
|
message("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
|
|
|
|
include_directories (${CMAKE_SOURCE_DIR}/cmake/CMakeModules/)
|
|
include (${CMAKE_SOURCE_DIR}/cmake/CMakeModules/genf90_utils.cmake)
|
|
include (${CMAKE_SOURCE_DIR}/cmake/CMakeModules/Sourcelist_utils.cmake)
|
|
include (${CMAKE_SOURCE_DIR}/cmake/CMakeModules/pFUnit_utils.cmake)
|
|
include (${CMAKE_SOURCE_DIR}/cmake/CMakeModules/FindpFUnit.cmake)
|
|
|
|
|
|
#include (Macros.cmake)
|
|
#include(CIME_initial_setup)
|
|
|
|
message("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
|
|
|
|
### -------------------------------------------------------------
|
|
|
|
# project name
|
|
project(LILAC Fortran C)
|
|
enable_language(Fortran)
|
|
|
|
|
|
# This definition is needed to avoid having ESMF depend on mpi
|
|
add_definitions(-DHIDE_MPI)
|
|
|
|
|
|
message("----------------------------------------------------")
|
|
message ("CMAKE_CURRENT_SOURCE_DIR: ${CMAKE_CURRENT_SOURCE_DIR}")
|
|
message ("CMAKE_MODULE_PATH: ${CMAKE_MODULE_PATH}")
|
|
message("----------------------------------------------------")
|
|
|
|
|
|
|
|
message("----------------------------------------------------")
|
|
# Add source directories from other share code (csm_share, etc.). This should be
|
|
# done first, so that in case of name collisions, the CLM versions take
|
|
# precedence (when there are two files with the same name, the one added later
|
|
# wins).
|
|
add_subdirectory(${CIME_ROOT}/../share/src csm_share)
|
|
add_subdirectory(${CIME_ROOT}/../share/unit_test_stubs/util csm_share_stubs)
|
|
add_subdirectory(${CIME_ROOT}/../share/esmf_wrf_timemgr esmf_wrf_timemgr)
|
|
add_subdirectory(${CIME_ROOT}/../components/cpl7/driver drv_share)
|
|
message("----------------------------------------------------")
|
|
|
|
# Extract just the files we need from drv_share
|
|
set (drv_sources_needed_base
|
|
glc_elevclass_mod.F90
|
|
)
|
|
extract_sources("${drv_sources_needed_base}" "${drv_sources}" drv_sources_needed)
|
|
|
|
message("~~~~~~~~~~~~~~~~~~~~~~CLM_ROOT~~~~~~~~~~~~~~~~~~~~~~")
|
|
# Add CLM source directories (these add their own test directories)
|
|
add_subdirectory(${CLM_ROOT}/src/utils clm_utils)
|
|
add_subdirectory(${CLM_ROOT}/src/biogeochem clm_biogeochem)
|
|
add_subdirectory(${CLM_ROOT}/src/soilbiogeochem clm_soilbiogeochem)
|
|
add_subdirectory(${CLM_ROOT}/src/biogeophys clm_biogeophys)
|
|
add_subdirectory(${CLM_ROOT}/src/dyn_subgrid clm_dyn_subgrid)
|
|
add_subdirectory(${CLM_ROOT}/src/main clm_main)
|
|
add_subdirectory(${CLM_ROOT}/src/init_interp clm_init_interp)
|
|
add_subdirectory(${CLM_ROOT}/src/fates/main fates_main)
|
|
|
|
# Add general unit test directories (stubbed out files, etc.)
|
|
add_subdirectory(unit_test_stubs)
|
|
add_subdirectory(unit_test_shr)
|
|
|
|
|
|
# Remove shr_mpi_mod from share_sources.
|
|
# This is needed because we want to use the mock shr_mpi_mod in place of the real one
|
|
#
|
|
# TODO: this should be moved into a general-purpose function in Sourcelist_utils.
|
|
# Then this block of code could be replaced with a single call, like:
|
|
# remove_source_file(${share_sources} "shr_mpi_mod.F90")}
|
|
|
|
foreach (sourcefile ${share_sources})
|
|
string(REGEX MATCH "shr_mpi_mod.F90" match_found ${sourcefile})
|
|
if(match_found)
|
|
list(REMOVE_ITEM share_sources ${sourcefile})
|
|
endif()
|
|
endforeach()
|
|
|
|
|
|
# We rely on pio for cmake utilities like findnetcdf.cmake, so that we don't
|
|
# need to duplicate this cmake code
|
|
message ("CMAKE_MODULE_PATH: ${CMAKE_MODULE_PATH}")
|
|
list (APPEND CMAKE_MODULE_PATH "${CIME_ROOT}/../libraries/parallelio/cmake")
|
|
message ("CMAKE_MODULE_PATH: ${CMAKE_MODULE_PATH}")
|
|
|
|
|
|
add_subdirectory (${CIME_ROOT}/..libraries/parallelio/tests)
|
|
|
|
message("----------------------------------------------------")
|
|
option(ENABLE_PFUNIT "Enable pfUnit testing Framework" ON)
|
|
if (ENABLE_PFUNIT)
|
|
find_package(pfUnit)
|
|
include(pfUnit_utils)
|
|
include_directories("${PFUNIT_INCLUDE_DIRS}")
|
|
endif (ENABLE_PFUNIT)
|
|
message("----------------------------------------------------")
|
|
|
|
|
|
find_package(MPI REQUIRED)
|
|
# TODO: This should be found from the find_package call but its not working
|
|
#set(CMAKE_Fortran_COMPILER "/usr/lib64/mpich/bin/mpif90")
|
|
find_package(ESMF REQUIRED)
|
|
|
|
|
|
message("------------include (CIME_utils)--------------------")
|
|
include(CIME_utils)
|
|
message("----------------------------------------------------")
|
|
|
|
find_package(NetCDF COMPONENTS C Fortran)
|
|
include_directories(${NetCDF_C_INCLUDE_DIRS} ${NetCDF_Fortran_INCLUDE_DIRS})
|
|
message("NetCDF_C_INCLUDE_DIRS: ${NetCDF_C_INCLUDE_DIRS}")
|
|
message("----------------------------------------------------")
|
|
|
|
##=======##
|
|
#set(CESM_ROOT "/glade/work/negins/UFSCOMP/")
|
|
#set(CSM_SHR "/glade/work/negins/UFSCOMP/components/clm/src/unit_test_stubs/csm_share/")
|
|
|
|
#add_subdirectory(${CESM_ROOT}/models/csm_share/shr csm_share)
|
|
#add_subdirectory(${CSM_SHR} )
|
|
|
|
message("----------------------------------------------------")
|
|
|
|
|
|
|
|
# -lclm libclm.a
|
|
SET(NAMES libclm.a)
|
|
|
|
#find_library(LIB_TO_INCLUDE
|
|
# libclm.a
|
|
# PATHS /glade/scratch/negins/baghale6/bld/intel/mpt/nodebug/nothreads/nuopc/nuopc/esmf/lib/)
|
|
#find_library(LIB_TO_INCLUDE /glade/scratch/negins/baghale6/bld/intel/mpt/nodebug/nothreads/nuopc/nuopc/esmf/lib/)
|
|
|
|
#message(STATUS "include_directories for ${NAMES}: ${LIB_TO_INCLUDE}")
|
|
#include_directories(${LIB_TO_INCLUDE})
|
|
#link_directories(${LIB_TO_INCLUDE})
|
|
#message(STATUS "include_directories for ${NAMES}: ${LIB_TO_INCLUDE}")
|
|
#find_library(LIB_TO_INCLUDE /glade/scratch/negins/baghale6/bld/intel/mpt/nodebug/nothreads/nuopc/nuopc/esmf/lib/)
|
|
#message(STATUS "include_directories: ${LIB_TO_INCLUDE}")
|
|
#target_link_libraries (${LIB_TO_INCLUDE})
|
|
|
|
|
|
# Local CMake modules
|
|
|
|
if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU")
|
|
set(dialect "-ffree-form -std=f2008 -fimplicit-none")
|
|
set(bounds "-fbounds-check")
|
|
endif()
|
|
if(CMAKE_Fortran_COMPILER_ID MATCHES "Intel")
|
|
set(dialect "-stand f08 -free -implicitnone")
|
|
set(bounds "-check bounds")
|
|
endif()
|
|
if(CMAKE_Fortran_COMPILER_ID MATCHES "PGI")
|
|
set(dialect "-Mfreeform -Mdclchk -Mstandard -Mallocatable=03")
|
|
set(bounds "-C")
|
|
endif()
|
|
|
|
set(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} ${bounds}")
|
|
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${dialect}")
|
|
|
|
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${ESMF_COMPILER_LINE}")
|
|
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${ESMF_LINK_LINE} -g -cpp")
|
|
|
|
|
|
message(STATUS "==============================================================")
|
|
message(STATUS "Fortran Compiler : ${CMAKE_Fortran_COMPILER}")
|
|
message(STATUS "cmake Fortran Flags : ${CMAKE_Fortran_FLAGS}")
|
|
message(STATUS "==============================================================")
|
|
message(STATUS "==============================================================")
|
|
|
|
|
|
#add_executable("lilac.exe" ../lilac/*.F90)
|
|
|
|
#
|
|
# Compile.
|
|
#
|
|
|
|
file(GLOB_RECURSE SOURCES lilac/*.F90)
|
|
#add_subdirectory(lilac)
|
|
#add_executable(${PROJECT_NAME}.exe ../lilac/demo_driver.F90
|
|
# ../lilac/lilac_mod.F90 ../lilac/atmos_cap.F90 ../lilac/lilac_utils.F90
|
|
# ../lilac/lnd_cap.F90 ../lilac/cpl_mod.F90)
|
|
|
|
add_executable (${PROJECT_NAME}.exe ${SOURCES})
|
|
target_link_libraries(${PROJECT_NAME}.exe ${LIB_TO_INCLUDE})
|
|
|
|
#add_subdirectory(lilac)
|
|
#add_subdirectory(tests)
|