implement test for C++11 and document it
This commit is contained in:
@ -52,10 +52,17 @@ check_for_autogen_files(${LAMMPS_SOURCE_DIR})
|
|||||||
include(CheckCCompilerFlag)
|
include(CheckCCompilerFlag)
|
||||||
include(CheckIncludeFileCXX)
|
include(CheckIncludeFileCXX)
|
||||||
|
|
||||||
if (${CMAKE_CXX_COMPILER_ID} STREQUAL "Intel")
|
if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Intel")
|
||||||
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -restrict")
|
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -restrict")
|
||||||
endif()
|
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
|
# GNU compiler features
|
||||||
if (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
|
if (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
|
||||||
option(ENABLE_COVERAGE "Enable code coverage" OFF)
|
option(ENABLE_COVERAGE "Enable code coverage" OFF)
|
||||||
|
|||||||
@ -12,6 +12,7 @@ Optional build settings :h3
|
|||||||
LAMMPS can be built with several optional settings. Each sub-section
|
LAMMPS can be built with several optional settings. Each sub-section
|
||||||
explain how to do this for building both with CMake and make.
|
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
|
"FFT library"_#fft for use with the "kspace_style pppm"_kspace_style.html command
|
||||||
"Size of LAMMPS data types"_#size
|
"Size of LAMMPS data types"_#size
|
||||||
"Read or write compressed files"_#gzip
|
"Read or write compressed files"_#gzip
|
||||||
@ -23,6 +24,28 @@ explain how to do this for building both with CMake and make.
|
|||||||
|
|
||||||
:line
|
: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)
|
FFT library :h4,link(fft)
|
||||||
|
|
||||||
When the KSPACE package is included in a LAMMPS build, the
|
When the KSPACE package is included in a LAMMPS build, the
|
||||||
|
|||||||
@ -26,12 +26,12 @@ SHLIBFLAGS = -shared
|
|||||||
# if you change any -D setting, do full re-compile after "make clean"
|
# if you change any -D setting, do full re-compile after "make clean"
|
||||||
|
|
||||||
# LAMMPS ifdef settings
|
# 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
|
# 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
|
# MPI wrapper compiler/linker can provide this info
|
||||||
# can point to dummy MPI library in src/STUBS as in Makefile.serial
|
# 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
|
# use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts
|
||||||
|
|||||||
@ -26,12 +26,12 @@ SHLIBFLAGS = -shared
|
|||||||
# if you change any -D setting, do full re-compile after "make clean"
|
# if you change any -D setting, do full re-compile after "make clean"
|
||||||
|
|
||||||
# LAMMPS ifdef settings
|
# 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
|
# 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
|
# MPI wrapper compiler/linker can provide this info
|
||||||
# can point to dummy MPI library in src/STUBS as in Makefile.serial
|
# 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
|
# use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts
|
||||||
|
|||||||
@ -28,6 +28,13 @@
|
|||||||
#ifndef LMP_LMPTYPE_H
|
#ifndef LMP_LMPTYPE_H
|
||||||
#define 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
|
#ifndef __STDC_LIMIT_MACROS
|
||||||
#define __STDC_LIMIT_MACROS
|
#define __STDC_LIMIT_MACROS
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user