diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index d7fb090e4ab977cc907d3b624dcbed62ae3fbfeb..a69a72922b2be64b7192cb73ba4918edb0ffcc7d 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -56,6 +56,9 @@ option(BUILD_SHARED_LIBS "Build shared libs" OFF) if(BUILD_SHARED_LIBS) # for all pkg libs, mpi_stubs and linalg set(CMAKE_POSITION_INDEPENDENT_CODE ON) endif() +option(DEVELOPER_MODE "Enable developer mode" OFF) +mark_as_advanced(DEVELOPER_MODE) +option(CMAKE_VERBOSE_MAKEFILE "Generate verbose Makefiles" OFF) include(GNUInstallDirs) set(LAMMPS_LINK_LIBS) @@ -182,7 +185,7 @@ if(PKG_KSPACE) if(NOT FFT STREQUAL "KISSFFT") find_package(${FFT} REQUIRED) if(NOT FFT STREQUAL "FFTW3F") - add_definitions(-DFFT_FFTW) + add_definitions(-DFFT_FFTW) else() add_definitions(-DFFT_${FFT}) endif() @@ -603,6 +606,29 @@ if(PKG_OPT) endif() if(PKG_USER-INTEL) + if(NOT DEVELOPER_MODE) + if(NOT CMAKE_CXX_COMPILER_ID STREQUAL "Intel") + message(FATAL_ERROR "USER-INTEL is only useful together with intel compiler") + endif() + if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 16) + message(FATAL_ERROR "USER-INTEL is needed at least 2016 intel compiler, found ${CMAKE_CXX_COMPILER_VERSION}") + endif() + endif() + option(INJECT_INTEL_FLAG "Inject OMG fast flags for USER-INTEL" ON) + if(INJECT_INTEL_FLAG AND CMAKE_CXX_COMPILER_ID STREQUAL "Intel") + if(CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 17.3 OR CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 17.4) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -xCOMMON-AVX512") + else() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -xHost") + endif() + include(CheckCXXCompilerFlag) + foreach(_FLAG -qopenmp -qno-offload -fno-alias -ansi-alias -restrict -DLMP_INTEL_USELRT -DLMP_USE_MKL_RNG -O2 "-fp-model fast=2" -no-prec-div -qoverride-limits -qopt-zmm-usage=high) + check_cxx_compiler_flag("${__FLAG}" COMPILER_SUPPORTS${_FLAG}) + if(COMPILER_SUPPORTS${_FLAG}) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_FLAG}") + endif() + endforeach() + endif() set(USER-INTEL_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/USER-INTEL) set(USER-INTEL_SOURCES ${USER-INTEL_SOURCES_DIR}/intel_preprocess.h ${USER-INTEL_SOURCES_DIR}/intel_buffers.h @@ -844,5 +870,5 @@ if(ENABLED_GPU) endif() endif() if(PKG_KSPACE) - message(STATUS "Using ${FFT} as FFT") + message(STATUS "Using ${FFT} as FFT") endif()