diff --git a/build/cmake/CMakeLists.txt b/build/cmake/CMakeLists.txt index 91096073b573c0eb80f4949cc4a8ccf3d0d05bee..f02b111102c7b9b03d82b880e760b3c6fb45009a 100644 --- a/build/cmake/CMakeLists.txt +++ b/build/cmake/CMakeLists.txt @@ -2,6 +2,7 @@ cmake_minimum_required(VERSION 3.10 FATAL_ERROR) set(PARENT_DIR ../../) set(EXEC_DIR ${PARENT_DIR}../bin) +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${EXEC_DIR}) # set the output directory for executables set(EXEC_NAME summa_actors) project(summa_actors LANGUAGES CXX Fortran) enable_language(C) @@ -11,7 +12,215 @@ FortranCInterface_VERIFY(CXX) option(SUNDIALS "Use SUNDIALS" ON) +######### SET THE PATHS TO THE SUNDIALS LIBRARIES AND INCLUDE FILES ######### +############################################################################# +set(DIR_SUNDIALS /usr/local/sundials) +############################################################################# + +# Set default build type to Release +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Release) +endif() + +# Add options for build type +set(CMAKE_CONFIGURATION_TYPES Debug Release Cluster Cluster_Debug) + +# Set compiler flags +if(CMAKE_BUILD_TYPE MATCHES Debug OR CMAKE_BUILD_TYPE MATCHES Cluster_Debug) + message("Debug build.") + 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.") + add_definitions(-DNDEBUG) + 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() + + +# Packages that are required by both sundials and non-sundials builds +find_package(CAF REQUIRED) +find_package(netCDF REQUIRED) +find_package(LAPACK REQUIRED) + +# Set include directories +if (CMAKE_BUILD_TYPE MATCHES Cluster OR CMAKE_BUILD_TYPE MATCHES Cluster_Debug) + + execute_process(COMMAND module load gcc/9.3.0) + execute_process(COMMAND module load netcdf-fortran) + execute_process(COMMAND module load openblas) + execute_process(COMMAND module load caf) + + if(SUNDIALS) + set(CMAKE_INSTALL_RPATH "${DIR_SUNDIALS}/lib64") + set(SUMMA_INCLUDES + "$ENV{EBROOTNETCDFMINFORTRAN}/include" + "${DIR_SUNDIALS}/include" + "${DIR_SUNDIALS}/fortran" + ${netCDF_INCLUDES} + ${LAPACK_INCLUDES}) + + set(SUMMA_LIBS + "$ENV{EBROOTNETCDFMINFORTRAN}/lib64" + -lsundials_fnvecmanyvector_mod + -lsundials_fida_mod + -lsundials_fnvecserial_mod + -lsundials_fsunlinsoldense_mod + -lsundials_fsunmatrixdense_mod + ${netCDF_LIBRARIES} + ${LAPACK_LIBRARIES} + 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 + ${CAF_LIBRARIES} + ${netCDF_LIBRARIES} + ${LAPACK_LIBRARIES} + -lcaf_core + -lcaf_io + summa + -lnetcdff + -lsundials_fnvecmanyvector_mod + -lsundials_fida_mod + -lsundials_fnvecserial_mod + -lsundials_fsunlinsoldense_mod + -lsundials_fsunmatrixdense_mod) + + + else() + set(SUMMA_INCLUDES + "$ENV{EBROOTNETCDFMINFORTRAN}/include" + ${netCDF_INCLUDES} + ${LAPACK_INCLUDES}) + + set(SUMMA_LIBS + "$ENV{EBROOTNETCDFMINFORTRAN}/lib64" + ${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() + + +else() + + if(SUNDIALS) + 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() + 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() + + +endif() + if (SUNDIALS) + link_directories(${DIR_SUNDIALS}/lib) + set(ACTORS_DIR ${PARENT_DIR}/build/source/actors) set(DRIVER_DIR ${PARENT_DIR}/build/source/driver) set(DSHARE_DIR ${PARENT_DIR}/build/source/dshare) @@ -27,8 +236,6 @@ if (SUNDIALS) set(SUMMA_ENGINE_DIR ${PARENT_DIR}/build/summa-sundials/build/source/engine) set(SUMMA_NOAHMP_DIR ${PARENT_DIR}/build/summa-sundials/build/source/noah-mp) - set(DIR_SUNDIALS /usr/local/sundials) - set(NRUTIL ${SUMMA_ENGINE_DIR}/nrtype.f90 ${SUMMA_ENGINE_DIR}/f2008funcs.f90 @@ -123,9 +330,6 @@ if (SUNDIALS) ${HRU_ACTOR_DIR}/fortran_code/outputStrucWrite.f90 ${HRU_ACTOR_DIR}/fortran_code/hru_writeOutput.f90) - # set(GRU_INTERFACE - # ${GRU_ACTOR_DIR}/gru_actor.f90) - set(PRELIM ${SUMMA_ENGINE_DIR}/conv_funcs.f90 ${SUMMA_ENGINE_DIR}/sunGeomtry.f90 @@ -218,9 +422,6 @@ if (SUNDIALS) set(HRU_ACTOR ${ACTORS_DIR}/hru_actor/cpp_code/hru_actor.cpp) - # set(GRU_ACTOR - # ${ACTORS_DIR}/gru_actor/gru_actor.cpp) - set(FILE_ACCESS_ACTOR ${ACTORS_DIR}/file_access_actor/cpp_code/file_access_actor.cpp ${ACTORS_DIR}/file_access_actor/cpp_code/forcing_file_info.cpp @@ -233,68 +434,24 @@ if (SUNDIALS) set(MAIN ${ACTORS_DIR}/main.cpp) - find_package(CAF REQUIRED) - find_package(netCDF REQUIRED) - find_package(LAPACK REQUIRED) - find_package(SUNDIALS REQUIRED) - link_directories(${DIR_SUNDIALS}/lib) - add_library(SUMMA_NOAHMP OBJECT ${NOAHMP} ${NRUTIL}) - target_compile_options(SUMMA_NOAHMP PRIVATE - -g -O3 -ffree-form -ffree-line-length-none -fmax-errors=0 -fPIC -Wfatal-errors) + target_compile_options(SUMMA_NOAHMP PRIVATE ${SUMMA_NOAHMP_OPTIONS}) add_library(SUMMA_COMM OBJECT ${COMM_ALL}) - target_compile_options(SUMMA_COMM PRIVATE - -g -O3 -ffree-line-length-none -fmax-errors=0 -fPIC -Wfatal-errors) - target_include_directories(SUMMA_COMM PRIVATE - "/usr/include" - # "$ENV{EBROOTNETCDFMINFORTRAN}/include" - "${DIR_SUNDIALS}/include" - "${DIR_SUNDIALS}/fortran" - ${netCDF_INCLUDES} - ${LAPACK_INCLUDES}) - target_link_libraries(SUMMA_COMM PUBLIC - # "$ENV{EBROOTNETCDFMINFORTRAN}/lib64" - -lsundials_fnvecmanyvector_mod - -lsundials_fida_mod - -lsundials_fnvecserial_mod - -lsundials_fsunlinsoldense_mod - -lsundials_fsunmatrixdense_mod - ${netCDF_LIBRARIES} - ${LAPACK_LIBRARIES} - SUMMA_NOAHMP) - - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${EXEC_DIR}) - - + target_compile_options(SUMMA_COMM PRIVATE ${SUMMA_ALL_OPTIONS}) + target_include_directories(SUMMA_COMM PRIVATE ${SUMMA_INCLUDES}) + target_link_libraries(SUMMA_COMM PUBLIC ${SUMMA_LIBS}) + # Build SUMMA Shared Library add_library(summa SHARED ${SUMMA_ALL}) - target_compile_options(summa PRIVATE - -g -O3 -ffree-line-length-none -fmax-errors=0 -fPIC -Wfatal-errors) - target_include_directories(summa PUBLIC - "/usr/include" - "${DIR_SUNDIALS}/include" - "${DIR_SUNDIALS}/fortran" - # "$ENV{EBROOTNETCDFMINFORTRAN}/include" - ${netCDF_INCLUDES} - ${LAPACK_INCLUDES}) - target_link_libraries(summa PUBLIC - # "$ENV{EBROOTNETCDFMINFORTRAN}/lib64" - -lsundials_fnvecmanyvector_mod - -lsundials_fida_mod - -lsundials_fnvecserial_mod - -lsundials_fsunlinsoldense_mod - -lsundials_fsunmatrixdense_mod - ${netCDF_LIBRARIES} - ${LAPACK_LIBRARIES} - SUMMA_COMM - SUMMA_NOAHMP - -lnetcdff) + target_compile_options(summa PRIVATE ${SUMMA_ALL_OPTIONS}) + target_include_directories(summa PUBLIC ${SUMMA_INCLUDES}) + target_link_libraries(summa PUBLIC ${SUMMA_LIBS} SUMMA_COMM) + - set(CMAKE_CXX_FLAGS "-g -O3 -Wfatal-errors -std=c++17") @@ -310,30 +467,8 @@ if (SUNDIALS) ${SUMMA_SERVER} ${MAIN}) set_property(TARGET ${EXEC_NAME} PROPERTY LINKER_LANGUAGE Fortran) - target_include_directories(${EXEC_NAME} PUBLIC - ${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") - target_link_libraries( ${EXEC_NAME} - ${CAF_LIBRARIES} - ${netCDF_LIBRARIES} - ${LAPACK_LIBRARIES} - -lcaf_core - -lcaf_io - summa - -lnetcdff - -lsundials_fnvecmanyvector_mod - -lsundials_fida_mod - -lsundials_fnvecserial_mod - -lsundials_fsunlinsoldense_mod - -lsundials_fsunmatrixdense_mod) + target_include_directories(${EXEC_NAME} PUBLIC ${SUMMA_ACTORS_INCLUDES}) + target_link_libraries( ${EXEC_NAME} ${SUMMA_ACTORS_LIBS}) else() set(ACTORS_DIR ${PARENT_DIR}/build/source/actors) @@ -541,20 +676,14 @@ else() ${ACTORS_DIR}/main.cpp) - find_package(CAF REQUIRED) - find_package(netCDF REQUIRED) - find_package(LAPACK REQUIRED) - add_library(SUMMA_NOAHMP OBJECT ${NOAHMP} ${NRUTIL}) - target_compile_options(SUMMA_NOAHMP PRIVATE - -g -O0 -ffree-form -ffree-line-length-none -fmax-errors=0 -fPIC -Wfatal-errors) + target_compile_options(SUMMA_NOAHMP PRIVATE ${SUMMA_NOAHMP_OPTIONS}) add_library(SUMMA_COMM OBJECT ${COMM_ALL}) - target_compile_options(SUMMA_COMM PRIVATE - -g -O0 -ffree-line-length-none -fmax-errors=0 -fPIC -Wfatal-errors) + target_compile_options(SUMMA_COMM PRIVATE ${SUMMA_ALL_OPTIONS}}) target_include_directories(SUMMA_COMM PRIVATE "/usr/include" # "$ENV{EBROOTNETCDFMINFORTRAN}/include" @@ -572,8 +701,7 @@ else() add_library(summa SHARED ${SUMMA_ALL}) - target_compile_options(summa PRIVATE - -g -O0 -ffree-line-length-none -fmax-errors=0 -fPIC -Wfatal-errors) + target_compile_options(summa PRIVATE ${SUMMA_ALL_OPTIONS}) target_include_directories(summa PUBLIC "/usr/include" # "$ENV{EBROOTNETCDFMINFORTRAN}/include" @@ -587,10 +715,6 @@ else() SUMMA_NOAHMP -lnetcdff) - set(CMAKE_CXX_FLAGS "-g -O0 -Wfatal-errors -std=c++17") - - - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${EXEC_DIR}) add_executable(${EXEC_NAME}