Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 26 additions & 25 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,15 @@
cmake_minimum_required(VERSION 3.16)

# Require out-of-source builds
file(TO_CMAKE_PATH "${CMAKE_BINARY_DIR}/CMakeLists.txt" LOC_PATH)
if(EXISTS "${LOC_PATH}")
message(
FATAL_ERROR
"You cannot build in a source directory (or any directory with a CMakeLists.txt file). "
"Please make a build subdirectory.")
endif()

include(CMakeDependentOption)
if(POLICY CMP0135) # https://cmake.org/cmake/help/git-stage/policy/CMP0135.html
cmake_policy(SET CMP0135 NEW)
# Otherwise this policy generates a warning on CMake 3.24
Expand All @@ -16,8 +27,6 @@ project(
option(ENABLE_MPI "Enable MPI" ON)
option(ENABLE_OPENMP "Enable OpenMP" ON)
option(USE_CUDA "Enable CUDA" OFF)
option(USE_CUDA_MPI "Enable CUDA-aware MPI" OFF)
option(USE_CUDA_ON_DCU "Enable CUDA on DCU" OFF)
option(USE_ROCM "Enable ROCm" OFF)
option(USE_DSP "Enable DSP" OFF)
option(USE_KML "Enable Kunpeng Math Library" OFF)
Expand All @@ -27,13 +36,7 @@ option(ENABLE_ABACUS_LIBM "Build libmath from source to speed up" OFF)
option(ENABLE_LIBXC "Enable using the LibXC package" OFF)
option(ENABLE_FLOAT_FFTW "Enable using single-precision FFTW library." OFF)

option(ENABLE_MLALGO "Enable the machine learning algorithms" OFF)

option(ENABLE_LCAO "Enable LCAO algorithm" ON)
option(ENABLE_ELPA "Enable ELPA for LCAO" ON)
option(ENABLE_LIBRI "Enable LibRI for hybrid functional" OFF)
option(EXX_DEV "Enable LibRI developing features" OFF)
option(ENABLE_PEXSI "Enable PEXSI for LCAO" OFF)
option(ENABLE_DFTD4 "Enable DFT-D4 dispersion correction" OFF)

option(BUILD_TESTING "Build unittests" OFF)
Expand All @@ -52,8 +55,21 @@ option(ENABLE_FFT_TWO_CENTER "Enable FFT-based two-center integral method" ON)
option(ENABLE_GOOGLEBENCH "Enable GOOGLE-benchmark usage" OFF)
option(ENABLE_RAPIDJSON "Enable rapid-json usage" OFF)
option(ENABLE_CNPY "Enable cnpy usage" OFF)
option(ENABLE_CUSOLVERMP "Enable cusolvermp" OFF)
option(ENABLE_NCCL_PARALLEL_DEVICE "Enable NCCL-backed collectives in parallel_device" OFF)

cmake_dependent_option(ENABLE_ELPA "Enable ELPA for LCAO" ON "ENABLE_LCAO;ENABLE_MPI" OFF)
cmake_dependent_option(ENABLE_LIBRI "Enable LibRI for hybrid functional" OFF "ENABLE_LCAO;ENABLE_MPI" OFF)
cmake_dependent_option(EXX_DEV "Enable LibRI developing features" OFF "ENABLE_LIBRI" OFF)
cmake_dependent_option(ENABLE_PEXSI "Enable PEXSI for LCAO" OFF "ENABLE_LCAO;ENABLE_MPI" OFF)
cmake_dependent_option(ENABLE_MLALGO "Enable the machine learning algorithms"
OFF "ENABLE_LCAO;ENABLE_MPI" OFF)

cmake_dependent_option(USE_CUDA_MPI "Enable CUDA-aware MPI" OFF "USE_CUDA" OFF)
cmake_dependent_option(USE_CUDA_ON_DCU "Enable CUDA on DCU" OFF "USE_CUDA" OFF)
cmake_dependent_option(ENABLE_CUSOLVERMP "Enable cusolvermp" OFF "USE_CUDA" OFF)
cmake_dependent_option(ENABLE_CUBLASMP "Enable cublasmp" OFF "ENABLE_CUSOLVERMP" OFF)
cmake_dependent_option(ENABLE_NCCL_PARALLEL_DEVICE
"Enable NCCL-backed collectives in parallel_device"
OFF "USE_CUDA;ENABLE_MPI" OFF)

# ==============================================================================
# Deprecated options (TODO: Remove this section in the future release)
Expand Down Expand Up @@ -170,12 +186,6 @@ You can install Git first and reinstall abacus.")
endif()
endif()

# Serial version of ABACUS will not use ELPA
if(NOT ENABLE_MPI)
set(ENABLE_ELPA OFF)
set(ENABLE_MLALGO OFF)
endif()

# Different exe files of ABACUS
unset(ABACUS_BIN_NAME CACHE)

Expand Down Expand Up @@ -349,11 +359,9 @@ if(ENABLE_LCAO)
find_package(ELPA REQUIRED)
abacus_add_feature_definitions(__ELPA)
endif()

if(ENABLE_FFT_TWO_CENTER)
abacus_add_feature_definitions(USE_NEW_TWO_CENTER)
endif()

if(ENABLE_PEXSI)
find_package(PEXSI REQUIRED CONFIG)
if(PEXSI_VERSION VERSION_LESS "2.0.0")
Expand All @@ -362,9 +370,6 @@ if(ENABLE_LCAO)
abacus_add_feature_definitions(__PEXSI)
set(CMAKE_CXX_STANDARD 14)
endif()
else()
set(ENABLE_MLALGO OFF)
set(ENABLE_LIBRI OFF)
endif()

if(DEBUG_INFO)
Expand Down Expand Up @@ -520,10 +525,6 @@ if(USE_CUDA)
set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -Xcompiler=${OpenMP_CXX_FLAGS}" CACHE STRING "CUDA flags" FORCE)
endif()
if (ENABLE_NCCL_PARALLEL_DEVICE)
if (NOT ENABLE_MPI)
message(FATAL_ERROR
"ENABLE_NCCL_PARALLEL_DEVICE requires ENABLE_MPI=ON.")
endif()
abacus_add_feature_definitions(__NCCL_PARALLEL_DEVICE)
include(cmake/modules/SetupNccl.cmake)
abacus_setup_nccl()
Expand Down
78 changes: 38 additions & 40 deletions cmake/CollectBuildInfoVars.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -66,52 +66,16 @@ set(ABACUS_MPI_IMPLEMENTATION "no")
set(ABACUS_MPI_VERSION "no")
set(ABACUS_CUDA_AWARE_MPI "no")
if(ENABLE_MPI)
execute_process(COMMAND ${MPI_CXX_COMPILER} --version OUTPUT_VARIABLE MPI_VERSION_OUTPUT OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET)
if(MPI_VERSION_OUTPUT MATCHES "Intel")
if("${MPI_CXX_LIBRARY_VERSION_STRING}" MATCHES "Intel")
set(ABACUS_MPI_IMPLEMENTATION "Intel MPI")
string(REGEX MATCH "Intel\\(R\\) oneAPI DPC\\+\\+/C\\+\\+ Compiler ([0-9]+\\.[0-9]+\\.[0-9]+)" _ "${MPI_VERSION_OUTPUT}")
if(CMAKE_MATCH_1)
set(MPI_DETECTED_VERSION "${CMAKE_MATCH_1}")
else()
string(REGEX MATCH "icpc \\(ICC\\) ([0-9]+\\.[0-9]+\\.[0-9]+)" _ "${MPI_VERSION_OUTPUT}")
if(CMAKE_MATCH_1)
set(MPI_DETECTED_VERSION "${CMAKE_MATCH_1}")
endif()
endif()
elseif(MPI_VERSION_OUTPUT MATCHES "Open MPI")
elseif("${MPI_CXX_LIBRARY_VERSION_STRING}" MATCHES "Open MPI")
set(ABACUS_MPI_IMPLEMENTATION "OpenMPI")
elseif(MPI_VERSION_OUTPUT MATCHES "MPICH")
elseif("${MPI_CXX_LIBRARY_VERSION_STRING}" MATCHES "MPICH")
set(ABACUS_MPI_IMPLEMENTATION "MPICH")
else()
set(ABACUS_MPI_IMPLEMENTATION "Unknown")
endif()
# Fallback: try mpirun/mpiexec
if(NOT MPI_DETECTED_VERSION)
find_program(MPIRUN_EXECUTABLE mpirun)
if(MPIRUN_EXECUTABLE)
execute_process(COMMAND ${MPIRUN_EXECUTABLE} --version OUTPUT_VARIABLE MPIRUN_VERSION_OUTPUT OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET)
if(MPIRUN_VERSION_OUTPUT MATCHES "Open MPI")
set(ABACUS_MPI_IMPLEMENTATION "OpenMPI")
string(REGEX MATCH "Open MPI ([0-9]+\\.[0-9]+\\.[0-9]+)" _ "${MPIRUN_VERSION_OUTPUT}")
if(CMAKE_MATCH_1)
set(MPI_DETECTED_VERSION "${CMAKE_MATCH_1}")
endif()
elseif(MPIRUN_VERSION_OUTPUT MATCHES "MPICH")
set(ABACUS_MPI_IMPLEMENTATION "MPICH")
string(REGEX MATCH "MPICH Version: ([0-9]+\\.[0-9]+\\.[0-9]+)" _ "${MPIRUN_VERSION_OUTPUT}")
if(CMAKE_MATCH_1)
set(MPI_DETECTED_VERSION "${CMAKE_MATCH_1}")
endif()
endif()
endif()
endif()
if(MPI_DETECTED_VERSION)
set(ABACUS_MPI_VERSION "yes (v${MPI_DETECTED_VERSION})")
elseif(MPI_VERSION)
set(ABACUS_MPI_VERSION "yes (v${MPI_VERSION})")
else()
set(ABACUS_MPI_VERSION "yes (version unknown)")
endif()
set(ABACUS_MPI_VERSION "(MPI standard: ${MPI_CXX_VERSION})")
if(USE_CUDA)
# OpenMPI hint
find_program(OMPI_INFO_EXECUTABLE ompi_info)
Expand Down Expand Up @@ -144,6 +108,12 @@ else()
set(ABACUS_OPENMP_VERSION "no")
endif()

if(ENABLE_LCAO)
set(ABACUS_LCAO_ENABLED "True")
else()
set(ABACUS_LCAO_ENABLED "False")
endif()

# Core Math Libraries
if(ENABLE_LCAO AND ENABLE_ELPA)
set(ABACUS_ELPA_VERSION "yes (version unknown)")
Expand Down Expand Up @@ -410,3 +380,31 @@ list(APPEND CMAKE_FIND_PACKAGES_LIST " LibRI Found=${LIBRI_FOUND}")
foreach(package_line ${CMAKE_FIND_PACKAGES_LIST})
set(ABACUS_CMAKE_FIND_PACKAGES "${ABACUS_CMAKE_FIND_PACKAGES}${package_line}")
endforeach()

# ==============================================================================
# Print Build Summary
# ==============================================================================
message(" ===================================================================")
message(" ABACUS Build Summary ")
message(" ===================================================================")
message(" Build Type : ${ABACUS_BUILD_TYPE}")
message(" Platform : ${ABACUS_PLATFORM_NAME}")
message(" Compiler : ${ABACUS_CXX_COMPILER_ID} ${ABACUS_CXX_COMPILER_VERSION}")
message(" -------------------------------------------------------------------")
message(" MPI Support : ${ABACUS_MPI_IMPLEMENTATION} ${ABACUS_MPI_VERSION}")
message(" CUDA-Aware MPI : ${ABACUS_CUDA_AWARE_MPI}")
message(" OpenMP Support : ${ABACUS_OPENMP_VERSION}")
message(" -------------------------------------------------------------------")
message(" LCAO Enabled : ${ABACUS_LCAO_ENABLED}")
message(" -------------------------------------------------------------------")
message(" Math Libraries : MKL = ${ABACUS_MKL_SUPPORT}")
message(" FFTW = ${ABACUS_FFTW_VERSION}")
message(" ELPA = ${ABACUS_ELPA_VERSION}")
message(" Accelerators : CUDA = ${ABACUS_CUDA_VERSION}")
message(" ROCm = ${ABACUS_ROCM_VERSION}")
message(" Machine Learning : Torch = ${ABACUS_LIBTORCH_VERSION}")
message(" DeePMD = ${ABACUS_DEEPMD_VERSION}")
message(" NEP = ${ABACUS_NEP_VERSION}")
message(" Features : Libxc = ${ABACUS_LIBXC_VERSION}")
message(" LibRI = ${ABACUS_LIBRI_VERSION}")
message(" ===================================================================")
Loading