diff --git a/build/cmake/CMakeLists.txt b/build/cmake/CMakeLists.txt index ce751334d577e4d996f4bc167f3c1511354d63de..a670f53ae48456df279922fc0011b3f2a155407a 100644 --- a/build/cmake/CMakeLists.txt +++ b/build/cmake/CMakeLists.txt @@ -24,9 +24,16 @@ include(ida.cmake) ######### SET THE PATHS TO THE SUNDIALS LIBRARIES AND INCLUDE FILES ######### ############################################################################# -set(DIR_SUNDIALS "/globalhome/kck540/HPC/Libraries/sundials/instdir") -# set(DIR_SUNDIALS "/home/kklenk/projects/rpp-kshook/CompHydCore/SummaSundials/sundials/sundials/instdir") -# set(DIR_SUNDIALS "/usr/local/sundials-6.3.0") +set(DIR_SUNDIALS "") +foreach(dir IN ITEMS + "/globalhome/kck540/HPC/Libraries/sundials/instdir" + "/home/kklenk/projects/rpp-kshook/CompHydCore/SummaSundials/sundials/sundials/instdir" + "/usr/local/sundials-6.3.0") + if(EXISTS ${dir}) + set(DIR_SUNDIALS ${dir}) + break() + endif() +endforeach() ############################################################################# # Set default build type to Release @@ -35,133 +42,40 @@ if(NOT CMAKE_BUILD_TYPE) endif() # Add options for build type -set(CMAKE_CONFIGURATION_TYPES Debug Release Cluster Cluster_Debug Kinsol Kinsol_Debug Kinsol_Cluster Kinsol_Cluster_Debug IDA IDA_DEBUG) -message("Build type: ${CMAKE_BUILD_TYPE}") -# Set compiler flags -if(CMAKE_BUILD_TYPE STREQUAL Debug OR CMAKE_BUILD_TYPE STREQUAL Cluster_Debug OR CMAKE_BUILD_TYPE STREQUAL Kinsol_Debug OR - CMAKE_BUILD_TYPE STREQUAL Kinsol_Cluster_Debug) - message("Debug build.") +set(CMAKE_CONFIGURATION_TYPES BE BE_Debug BE_Cluster BE_Cluster_Debug + Kinsol Kinsol_Debug Kinsol_Cluster Kinsol_Cluster_Debug + IDA IDA_Debug IDA_Cluster IDA_Cluster_Debug) +message("\nSelected Bulid Type: ${CMAKE_BUILD_TYPE}\n") + + +# Set Compiler Options +if(CMAKE_BUILD_TYPE MATCHES Debug) + message("\nSetting Debug Options\n") add_definitions(-DDEBUG) set(SUMMA_NOAHMP_OPTIONS -g -O0 -ffree-form -ffree-line-length-none -fmax-errors=0 -fPIC -Wfatal-errors) set(SUMMA_ALL_OPTIONS -g -O0 -ffree-line-length-none -fmax-errors=0 -fPIC -Wfatal-errors) set(CMAKE_CXX_FLAGS "-g -O0 -Wfatal-errors -std=c++17") else() - message("Release build.") + message("\nSetting Release Options\n") set(SUMMA_NOAHMP_OPTIONS -O3 -ffree-form -ffree-line-length-none -fmax-errors=0 -fPIC -Wfatal-errors) set(SUMMA_ALL_OPTIONS -O3 -ffree-line-length-none -fmax-errors=0 -fPIC -Wfatal-errors) set(CMAKE_CXX_FLAGS "-O3 -Wfatal-errors -std=c++17") endif() +# Build Correct Summa-Actors Configuration +if(CMAKE_BUILD_TYPE MATCHES BE) + message("\nBuilding BE\n") + compile_with_be(${PARENT_DIR}) -# Packages that are required by both sundials and non-sundials builds - - -# Set include directories -if (CMAKE_BUILD_TYPE STREQUAL Cluster OR CMAKE_BUILD_TYPE STREQUAL Cluster_Debug) - - find_package(CAF REQUIRED) - find_package(netCDF REQUIRED) - find_package(LAPACK REQUIRED) - message("\nBuilding Cluster\n") - - compile_summa_original(PARENT_DIR, ${DIR_SUNDIALS}) - -elseif(CMAKE_BUILD_TYPE STREQUAL IDA OR CMAKE_BUILD_TYPE STREQUAL IDA_DEBUG) - find_package(CAF REQUIRED) - find_package(netCDF REQUIRED) - find_package(LAPACK REQUIRED) +elseif(CMAKE_BUILD_TYPE MATCHES IDA) message("\nBuilding IDA\n") - compile_with_ida(PARENT_DIR, ${DIR_SUNDIALS}) - -elseif(CMAKE_BUILD_TYPE STREQUAL Kinsol OR CMAKE_BUILD_TYPE STREQUAL Kinsol_Debug OR - CMAKE_BUILD_TYPE STREQUAL Kinsol_Cluster OR CMAKE_BUILD_TYPE STREQUAL Kinsol_Cluster_Debug) +elseif(CMAKE_BUILD_TYPE MATCHES Kinsol) message("\nBuilding Kinsol\n") compile_with_kinsol(PARENT_DIR, ${DIR_SUNDIALS}) else() - find_package(CAF REQUIRED) - find_package(netCDF REQUIRED) - find_package(LAPACK REQUIRED) - if(SUNDIALS) - # Building Summa with sundials on local machine - link_directories(${DIR_SUNDIALS}/lib) - set(CMAKE_BUILD_RPATH "${DIR_SUNDIALS}/lib:/usr/local/lib") - set(SUMMA_INCLUDES - "/usr/include" - "${DIR_SUNDIALS}/include" - "${DIR_SUNDIALS}/fortran" - ${netCDF_INCLUDES} - ${LAPACK_INCLUDES}) - - set(SUMMA_LIBS - -lsundials_fnvecmanyvector_mod - -lsundials_fida_mod - -lsundials_fnvecserial_mod - -lsundials_fsunlinsoldense_mod - -lsundials_fsunmatrixdense_mod - -lnetcdff - -lopenblas - SUMMA_NOAHMP) - - set(SUMMA_ACTORS_INCLUDES - ${CAF_INCLUDES} - ${netCDF_INCLUDES} - ${LAPACK_INCLUDES} - "${DIR_SUNDIALS}/include" - "${PARENT_DIR}/build/includes/global" - "${PARENT_DIR}/build/includes/summa_actor" - "${PARENT_DIR}/build/includes/gru_actor" - "${PARENT_DIR}/build/includes/job_actor" - "${PARENT_DIR}/build/includes/file_access_actor" - "${PARENT_DIR}/build/includes/hru_actor") - - set(SUMMA_ACTORS_LIBS - -lopenblas - -lcaf_core - -lcaf_io - summa - -lnetcdff - -lsundials_fnvecmanyvector_mod - -lsundials_fida_mod - -lsundials_fnvecserial_mod - -lsundials_fsunlinsoldense_mod - -lsundials_fsunmatrixdense_mod) - - - else() - # Building Summa-Actors on local machine without sundials - set(CMAKE_BUILD_RPATH "/usr/local/lib") - set(SUMMA_INCLUDES - "/usr/include" - ${netCDF_INCLUDES} - ${LAPACK_INCLUDES}) - - set(SUMMA_LIBS - ${netCDF_LIBRARIES} - ${LAPACK_LIBRARIES} - SUMMA_NOAHMP) - - set(SUMMA_ACTORS_INCLUDES - ${CAF_INCLUDES} - ${netCDF_INCLUDES} - ${LAPACK_INCLUDES} - "${PARENT_DIR}/build/includes/global" - "${PARENT_DIR}/build/includes/summa_actor" - "${PARENT_DIR}/build/includes/gru_actor" - "${PARENT_DIR}/build/includes/job_actor" - "${PARENT_DIR}/build/includes/file_access_actor" - "${PARENT_DIR}/build/includes/hru_actor") - - set(SUMMA_ACTORS_LIBS - ${CAF_LIBRARIES} - ${netCDF_LIBRARIES} - ${LAPACK_LIBRARIES} - -lcaf_core - -lcaf_io - summa - -lnetcdff) - - endif() + message("Valid build types are: ${CMAKE_CONFIGURATION_TYPES}") + message(FATAL_ERROR "Unknown build type: ${CMAKE_BUILD_TYPE}") endif() \ No newline at end of file diff --git a/build/cmake/be.cmake b/build/cmake/be.cmake index af653309f718682326c0fcc3a51345b7cab734b3..aae6541b203b5c54b06d23327137f1f226d49def 100644 --- a/build/cmake/be.cmake +++ b/build/cmake/be.cmake @@ -1,37 +1,67 @@ -function (compile_summa_original PARENT_DIR, DIR_SUNDIALS) +function (compile_with_be PARENT_DIR) + find_package(LAPACK REQUIRED) set(EXEC_NAME summa_be) - set(SUMMA_INCLUDES - "$ENV{EBROOTNETCDFMINFORTRAN}/include" - ${netCDF_INCLUDES} - ${LAPACK_INCLUDES}) - - set(SUMMA_LIBS - -lnetcdff - ${netCDF_LIBRARIES} - ${LAPACK_LIBRARIES} - SUMMA_NOAHMP) - - set(SUMMA_ACTORS_INCLUDES - ${CAF_INCLUDES} - "$ENV{EBROOTNETCDFMINFORTRAN}/include" - ${LAPACK_INCLUDES} - "${PARENT_DIR}/build/includes/global" - "${PARENT_DIR}/build/includes/summa_actor" - "${PARENT_DIR}/build/includes/gru_actor" - "${PARENT_DIR}/build/includes/job_actor" - "${PARENT_DIR}/build/includes/file_access_actor" - "${PARENT_DIR}/build/includes/hru_actor") - - set(SUMMA_ACTORS_LIBS - ${CAF_LIBRARIES} - ${netCDF_LIBRARIES} - ${LAPACK_LIBRARIES} - -lcaf_core - -lcaf_io - summa - -lnetcdff) - + if (CMAKE_BUILD_TYPE MATCHES Cluster) + set(SUMMA_INCLUDES + "$ENV{EBROOTNETCDFMINFORTRAN}/include" + ${netCDF_INCLUDES} + ${LAPACK_INCLUDES}) + + set(SUMMA_LIBS + -lnetcdff + ${netCDF_LIBRARIES} + ${LAPACK_LIBRARIES} + SUMMA_NOAHMP) + + set(SUMMA_ACTORS_INCLUDES + ${CAF_INCLUDES} + "$ENV{EBROOTNETCDFMINFORTRAN}/include" + ${LAPACK_INCLUDES} + "${PARENT_DIR}/build/includes/global" + "${PARENT_DIR}/build/includes/summa_actor" + "${PARENT_DIR}/build/includes/gru_actor" + "${PARENT_DIR}/build/includes/job_actor" + "${PARENT_DIR}/build/includes/file_access_actor" + "${PARENT_DIR}/build/includes/hru_actor") + + set(SUMMA_ACTORS_LIBS + ${CAF_LIBRARIES} + ${netCDF_LIBRARIES} + ${LAPACK_LIBRARIES} + -lcaf_core + -lcaf_io + summa + -lnetcdff) + else() + set(CMAKE_BUILD_RPATH "/usr/local/lib") + set(SUMMA_INCLUDES + "/usr/include" + ${netCDF_INCLUDES} + ${LAPACK_INCLUDES}) + + set(SUMMA_LIBS + -lnetcdff + -lopenblas + SUMMA_NOAHMP) + + set(SUMMA_ACTORS_INCLUDES + ${CAF_INCLUDES} + ${LAPACK_INCLUDES} + "${PARENT_DIR}/build/includes/global" + "${PARENT_DIR}/build/includes/summa_actor" + "${PARENT_DIR}/build/includes/gru_actor" + "${PARENT_DIR}/build/includes/job_actor" + "${PARENT_DIR}/build/includes/file_access_actor" + "${PARENT_DIR}/build/includes/hru_actor") + + set(SUMMA_ACTORS_LIBS + -lopenblas + -lcaf_core + -lcaf_io + summa + -lnetcdff) + endif() set(ACTORS_DIR ${PARENT_DIR}/build/source/actors) set(DRIVER_DIR ${PARENT_DIR}/build/source/driver) @@ -44,9 +74,9 @@ function (compile_summa_original PARENT_DIR, DIR_SUNDIALS) set(JOB_ACTOR_DIR ${ACTORS_DIR}/job_actor) set(HRU_ACTOR_DIR ${ACTORS_DIR}/hru_actor) set(GRU_ACTOR_DIR ${ACTORS_DIR}/gru_actor) - set(SUMMA_DSHARE_DIR ${PARENT_DIR}/build/summa_original/build/source/dshare) - set(SUMMA_ENGINE_DIR ${PARENT_DIR}/build/summa_original/build/source/engine) - set(SUMMA_NOAHMP_DIR ${PARENT_DIR}/build/summa_original/build/source/noah-mp) + set(SUMMA_DSHARE_DIR ${PARENT_DIR}/build/summa/build/source/dshare) + set(SUMMA_ENGINE_DIR ${PARENT_DIR}/build/summa/build/source/engine) + set(SUMMA_NOAHMP_DIR ${PARENT_DIR}/build/summa/build/source/noah-mp) set(NRUTIL ${SUMMA_ENGINE_DIR}/nrtype.f90 diff --git a/build/cmake/kinsol.cmake b/build/cmake/kinsol.cmake index f85d5a23851c8734b2fbea7afc444a59259fedf9..b19cc42d4dcb5a7ee7e4fd66babc8d672c697502 100644 --- a/build/cmake/kinsol.cmake +++ b/build/cmake/kinsol.cmake @@ -5,10 +5,8 @@ function(compile_with_kinsol PARENT_DIR, DIR_SUNDIALS) find_package(LAPACK REQUIRED) set(EXEC_NAME summa_kinsol) - - message("DIR_SUNDIALS: ${DIR_SUNDIALS}") - # Building Summa with sundials on local machine - if (CMAKE_BUILD_TYPE STREQUAL Kinsol_Cluster OR CMAKE_BUILD_TYPE STREQUAL Kinsol_Cluster_Debug) + # Set Includes and Libs for Summa-Actors + if (CMAKE_BUILD_TYPE MATCHES Cluster) link_directories(${DIR_SUNDIALS}/lib64) set(CMAKE_BUILD_RPATH "${DIR_SUNDIALS}/lib64") set(SUMMA_INCLUDES