Implement CMake upgrade and C++ standard deprecation as we did with C++11
This commit is contained in:
@ -2,7 +2,7 @@
|
||||
########################################
|
||||
# CMake build system
|
||||
# This file is part of LAMMPS
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
cmake_minimum_required(VERSION 3.20)
|
||||
########################################
|
||||
# set policy to silence warnings about ignoring <PackageName>_ROOT but use it
|
||||
if(POLICY CMP0074)
|
||||
@ -144,16 +144,28 @@ if((PKG_KOKKOS) AND (Kokkos_ENABLE_CUDA) AND NOT (CMAKE_CXX_COMPILER_ID STREQUAL
|
||||
set(CMAKE_TUNE_DEFAULT "${CMAKE_TUNE_DEFAULT} -Xcudafe --diag_suppress=unrecognized_pragma")
|
||||
endif()
|
||||
|
||||
# we require C++11 without extensions. Kokkos requires at least C++17 (currently)
|
||||
# we *require* C++11 without extensions but prefer C++17.
|
||||
# Kokkos requires at least C++17 (currently)
|
||||
if(NOT CMAKE_CXX_STANDARD)
|
||||
set(CMAKE_CXX_STANDARD 11)
|
||||
if(cxx_std_17 IN_LIST CMAKE_CXX_COMPILE_FEATURES)
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
else()
|
||||
set(CMAKE_CXX_STANDARD 11)
|
||||
endif()
|
||||
endif()
|
||||
if(CMAKE_CXX_STANDARD LESS 11)
|
||||
message(FATAL_ERROR "C++ standard must be set to at least 11")
|
||||
endif()
|
||||
if(CMAKE_CXX_STANDARD LESS 17)
|
||||
message(WARNING "Selecting C++17 standard is preferred over C++${CMAKE_CXX_STANDARD}")
|
||||
endif()
|
||||
if(PKG_KOKKOS AND (CMAKE_CXX_STANDARD LESS 17))
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
endif()
|
||||
# turn off C++17 check in lmptype.h
|
||||
if(LAMMPS_CXX11)
|
||||
add_compile_definitions(LAMMPS_CXX11)
|
||||
endif()
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
set(CMAKE_CXX_EXTENSIONS OFF CACHE BOOL "Use compiler extensions")
|
||||
# ugly hacks for MSVC which by default always reports an old C++ standard in the __cplusplus macro
|
||||
|
||||
@ -7,12 +7,12 @@ SHELL = /bin/sh
|
||||
# specify flags and libraries needed for your compiler
|
||||
|
||||
CC = mpicxx
|
||||
CCFLAGS = -g -O3 -std=c++11
|
||||
CCFLAGS = -g -O3 # -std=c++17
|
||||
SHFLAGS = -fPIC
|
||||
DEPFLAGS = -M
|
||||
|
||||
LINK = mpicxx
|
||||
LINKFLAGS = -g -O3 -std=c++11
|
||||
LINKFLAGS = -g -O3 # -std=c++17
|
||||
LIB =
|
||||
SIZE = size
|
||||
|
||||
@ -28,7 +28,7 @@ SHLIBFLAGS = -shared -rdynamic
|
||||
# LAMMPS ifdef settings
|
||||
# see possible settings in Section 3.5 of the manual
|
||||
|
||||
LMP_INC = -DLAMMPS_GZIP -DLAMMPS_MEMALIGN=64 # -DLAMMPS_CXX98
|
||||
LMP_INC = -DLAMMPS_GZIP -DLAMMPS_MEMALIGN=64 # -DLAMMPS_CXX11
|
||||
|
||||
# MPI library
|
||||
# see discussion in Section 3.4 of the manual
|
||||
|
||||
@ -7,12 +7,12 @@ SHELL = /bin/sh
|
||||
# specify flags and libraries needed for your compiler
|
||||
|
||||
CC = g++
|
||||
CCFLAGS = -g -O3 -std=c++11
|
||||
CCFLAGS = -g -O3 # -std=c++17
|
||||
SHFLAGS = -fPIC
|
||||
DEPFLAGS = -M
|
||||
|
||||
LINK = g++
|
||||
LINKFLAGS = -g -O -std=c++11
|
||||
LINKFLAGS = -g -O # -std=c++17
|
||||
LIB =
|
||||
SIZE = size
|
||||
|
||||
@ -28,7 +28,7 @@ SHLIBFLAGS = -shared -rdynamic
|
||||
# LAMMPS ifdef settings
|
||||
# see possible settings in Section 3.5 of the manual
|
||||
|
||||
LMP_INC = -DLAMMPS_GZIP -DLAMMPS_MEMALIGN=64 # -DLAMMPS_CXX98
|
||||
LMP_INC = -DLAMMPS_GZIP -DLAMMPS_MEMALIGN=64 # -DLAMMPS_CXX11
|
||||
|
||||
# MPI library
|
||||
# see discussion in Section 3.4 of the manual
|
||||
|
||||
@ -34,6 +34,13 @@
|
||||
#error LAMMPS requires a C++11 (or later) compliant compiler. Enable C++11 compatibility or upgrade the compiler.
|
||||
#endif
|
||||
|
||||
// C++17 check
|
||||
#ifndef LAMMPS_CXX11
|
||||
#if __cplusplus < 201703L
|
||||
#error LAMMPS is planning to transition to C++17. To disable this error please use a C++17 compliant compiler, enable C++17 support, or define -DLAMMPS_CXX11 in your makefile or when running cmake
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef __STDC_LIMIT_MACROS
|
||||
#define __STDC_LIMIT_MACROS
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user