clm5/lilac/CMakeLists.txt
2024-05-09 15:14:01 +08:00

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)