diff --git a/CMakeLists.txt b/CMakeLists.txt index f8fb0914df..431f844993 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -115,6 +115,11 @@ endif() set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) +macro(set_if_higher VARIABLE VALUE) + if(${VARIABLE} LESS ${VALUE}) + set(${VARIABLE} ${VALUE}) + endif() +endmacro() if (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5) message(WARNING "GCC4 is not fully supported.") endif() @@ -229,7 +234,7 @@ endif() if(USE_CUDA OR USE_CUSOLVER_LCAO) cmake_minimum_required(VERSION 3.18) # required by `CUDA_ARCHITECTURES` below - set(CMAKE_CXX_STANDARD 14) + set_if_higher(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_EXTENSIONS ON) set(CMAKE_CUDA_STANDARD ${CMAKE_CXX_STANDARD}) set(CMAKE_CUDA_STANDARD_REQUIRED ON) @@ -394,11 +399,15 @@ if (ENABLE_FLOAT_FFTW) endif() if(ENABLE_DEEPKS) - set(CMAKE_CXX_STANDARD 14) # Torch uses outdated components to detech CUDA arch, causing failure on latest CUDA kits. # See above for setting CMAKE_CUDA_ARCHITECTURES set(TORCH_CUDA_ARCH_LIST CMAKE_CUDA_ARCHITECTURES) find_package(Torch REQUIRED) + if(NOT Torch_VERSION VERSION_LESS "2.1.0") + set_if_higher(CMAKE_CXX_STANDARD 17) + elseif(NOT Torch_VERSION VERSION_LESS "1.5.0") + set_if_higher(CMAKE_CXX_STANDARD 14) + endif() include_directories(${TORCH_INCLUDE_DIRS}) target_link_libraries(${ABACUS_BIN_NAME} deepks) list(APPEND math_libs ${TORCH_LIBRARIES}) @@ -448,7 +457,7 @@ if(DEFINED LIBRI_DIR) set(ENABLE_LIBRI ON) endif() if(ENABLE_LIBRI) - set(CMAKE_CXX_STANDARD 14) + set_if_higher(CMAKE_CXX_STANDARD 14) if(LIBRI_DIR) include_directories(${LIBRI_DIR}/include) elseif(GIT_SUBMODULE) @@ -558,7 +567,7 @@ if(INFO) endif() IF (BUILD_TESTING) - set(CMAKE_CXX_STANDARD 14) # Required in orbital + set_if_higher(CMAKE_CXX_STANDARD 14) # Required in orbital include(CTest) enable_testing() find_package(GTest HINTS /usr/local/lib/ ${GTEST_DIR})