diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 91fb930be2..ed9825a830 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -52,10 +52,17 @@ check_for_autogen_files(${LAMMPS_SOURCE_DIR}) include(CheckCCompilerFlag) include(CheckIncludeFileCXX) -if (${CMAKE_CXX_COMPILER_ID} STREQUAL "Intel") +if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Intel") set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -restrict") endif() +option(DISABLE_CXX11_REQUIREMENT "Disable check that requires C++11 for compiling LAMMPS" OFF) +if(DISABLE_CXX11_REQUIREMENT) + add_definitions(-DLAMMPS_CXX98) +else() + set(CMAKE_CXX_STANDARD 11) +endif() + # GNU compiler features if (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") option(ENABLE_COVERAGE "Enable code coverage" OFF) diff --git a/doc/src/Build_settings.txt b/doc/src/Build_settings.txt index 287cd39ff6..baff537e3b 100644 --- a/doc/src/Build_settings.txt +++ b/doc/src/Build_settings.txt @@ -12,6 +12,7 @@ Optional build settings :h3 LAMMPS can be built with several optional settings. Each sub-section explain how to do this for building both with CMake and make. +"C++11 standard compliance test"_#cxx11 when building all of LAMMPS "FFT library"_#fft for use with the "kspace_style pppm"_kspace_style.html command "Size of LAMMPS data types"_#size "Read or write compressed files"_#gzip @@ -23,6 +24,28 @@ explain how to do this for building both with CMake and make. :line +C++11 standard compliance test :h4(cxx11) + +The LAMMPS developers plan to transition to make the C++11 standard the +minimum requirement for compiling LAMMPS. Currently this only applies to +some packages like KOKKOS while the rest aims to be compatible with the C++98 +standard. Most currently used compilers are compatible with C++11; some need +to set extra flags to switch. To determine the impact of requiring C++11, +we have added a simple compliance test to the source code, that will cause +the compilation to abort, if C++11 compliance is not available or enabled. +To bypass this check, you need to change a setting in the makefile or +when calling CMake. + +[CMake variable]: + +-D DISABLE_CXX11_REQUIREMENT=yes + +[Makefile.machine setting]: + +LMP_INC = -DLAMMPS_CXX98 + +:line + FFT library :h4,link(fft) When the KSPACE package is included in a LAMMPS build, the diff --git a/src/MAKE/Makefile.mpi b/src/MAKE/Makefile.mpi index f30220da3d..3be2e20f95 100644 --- a/src/MAKE/Makefile.mpi +++ b/src/MAKE/Makefile.mpi @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual -LMP_INC = -DLAMMPS_GZIP -DLAMMPS_MEMALIGN=64 +LMP_INC = -DLAMMPS_GZIP -DLAMMPS_MEMALIGN=64 # -DLAMMPS_CXX98 # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts diff --git a/src/MAKE/Makefile.serial b/src/MAKE/Makefile.serial index 5954d97761..86ddd05053 100644 --- a/src/MAKE/Makefile.serial +++ b/src/MAKE/Makefile.serial @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual -LMP_INC = -DLAMMPS_GZIP -DLAMMPS_MEMALIGN=64 +LMP_INC = -DLAMMPS_GZIP -DLAMMPS_MEMALIGN=64 # -DLAMMPS_CXX98 # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts diff --git a/src/lmptype.h b/src/lmptype.h index 65e46535fc..b220538190 100644 --- a/src/lmptype.h +++ b/src/lmptype.h @@ -28,6 +28,13 @@ #ifndef LMP_LMPTYPE_H #define LMP_LMPTYPE_H +// C++11 check +#ifndef LAMMPS_CXX98 +#if __cplusplus <= 199711L + #error LAMMPS is planning to transition to C++11. Do disable this error please use a C++11 compliant compiler, enable C++11 (or later) compliance, or define LAMMPS_CXX98 in your makefile +#endif +#endif + #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS #endif