Skip to content

Commit f8c1367

Browse files
committed
Build using C++17
This raises the minimum GCC version supported to 7 (see https://gcc.gnu.org/projects/cxx-status.html#cxx17). Add -Wno-register to silence warnings about the use of the `register` storage class by older flex versions (as present on macOS). CMake doesn't know about C++ 17 until version 3.8, so we need to hard-code the necessary command-line options.
1 parent d94c1cf commit f8c1367

10 files changed

+16
-28
lines changed

.clang-format

+1-1
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ SpacesInCStyleCastParentheses: 'false'
7171
SpacesInContainerLiterals: 'false'
7272
SpacesInParentheses: 'false'
7373
SpacesInSquareBrackets: 'false'
74-
Standard: c++11
74+
Standard: c++17
7575
TabWidth: '2'
7676
UseTab: Never
7777
---

CMakeLists.txt

+2-7
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,9 @@ if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR
7272
set(CMAKE_CXX_FLAGS_RELEASE "-O2")
7373
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g")
7474
# Enable lots of warnings
75-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wpedantic -Werror -Wno-deprecated-declarations -Wswitch-enum")
75+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -Wall -Wpedantic -Werror -Wno-deprecated-declarations -Wno-register -Wswitch-enum")
7676
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
77-
# This would be the place to enable warnings for Windows builds, although
78-
# config.inc doesn't seem to do that currently
77+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c++17 /W3 /D_CRT_SECURE_NO_WARNINGS /O2 /GF ")
7978

8079
# Include Git Bash Environment (rqeuired for download_project (patch))
8180
find_package(Git)
@@ -181,16 +180,12 @@ if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR
181180
endif()
182181

183182
function(cprover_default_properties)
184-
set(CBMC_CXX_STANDARD 11)
185-
set(CBMC_CXX_STANDARD_REQUIRED true)
186183
set(CBMC_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY
187184
"Developer ID Application: Daniel Kroening")
188185

189186
set_target_properties(
190187
${ARGN}
191188
PROPERTIES
192-
CXX_STANDARD ${CBMC_CXX_STANDARD}
193-
CXX_STANDARD_REQUIRED ${CBMC_CXX_STANDARD_REQUIRED}
194189
XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY ${CBMC_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY})
195190
endfunction()
196191

COMPILING.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# What architecture?
22

3-
CPROVER now needs a C++11 compliant compiler and is known to work in the
3+
CPROVER now needs a C++17 compliant compiler and is known to work in the
44
following environments:
55

66
- Linux
@@ -152,7 +152,7 @@ We assume that you have a Debian/Ubuntu or Red Hat-like distribution.
152152
```
153153
dnf install gcc gcc-c++ flex bison curl patch
154154
```
155-
Note that you need g++ version 5.0 or newer.
155+
Note that you need g++ version 7.0 or newer.
156156
157157
On Amazon Linux and similar distributions, do as root:
158158
```

scripts/bash-autocomplete/extract_switches.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ set -e
66
cd `dirname $0`
77

88
echo "Compiling the helper file to extract the raw list of parameters from cbmc"
9-
g++ -E -dM -std=c++11 -I../../src ../../src/cbmc/cbmc_parse_options.cpp -o macros.c
9+
g++ -E -dM -std=c++17 -I../../src ../../src/cbmc/cbmc_parse_options.cpp -o macros.c
1010
echo CBMC_OPTIONS >> macros.c
1111

1212
echo "Converting the raw parameter list to the format required by autocomplete scripts"

scripts/check_help.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ for t in \
3333
tool_name=$(basename $t)
3434
opt_name=$(echo $tool_name | tr 'a-z-' 'A-Z_')
3535
echo "Extracting the raw list of parameters from $tool_name"
36-
g++ -E -dM -std=c++11 -I../src -I../jbmc/src $t/*_parse_options.cpp -o macros.c
36+
g++ -E -dM -std=c++17 -I../src -I../jbmc/src $t/*_parse_options.cpp -o macros.c
3737
# goto-analyzer partly uses the spelling "analyser" within the code base
3838
echo ${opt_name}_OPTIONS | sed 's/GOTO_ANALYZER/GOTO_ANALYSER/' >> macros.c
3939
rawstring="`gcc -E -P -w macros.c` \"?h(help)\""

scripts/glucose_CMakeLists.txt

-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@ add_library(glucose-condensed
99
set_target_properties(
1010
glucose-condensed
1111
PROPERTIES
12-
CXX_STANDARD 11
13-
CXX_STANDARD_REQUIRED true
1412
XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "Developer ID Application: Daniel Kroening"
1513
)
1614

scripts/minisat2_CMakeLists.txt

-2
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ add_library(minisat2-condensed
1010
set_target_properties(
1111
minisat2-condensed
1212
PROPERTIES
13-
CXX_STANDARD 11
14-
CXX_STANDARD_REQUIRED true
1513
XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "Developer ID Application: Daniel Kroening"
1614
)
1715

src/common

+6-6
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,12 @@ endif
3434
CP_CFLAGS = -MMD -MP
3535
CXXFLAGS ?= -Wall -O2
3636
ifeq ($(filter-out OSX OSX_Universal,$(BUILD_ENV_)),)
37-
CP_CXXFLAGS += -MMD -MP -mmacosx-version-min=10.15 -std=c++11 -stdlib=libc++
37+
CP_CXXFLAGS += -MMD -MP -mmacosx-version-min=10.15 -std=c++17 -stdlib=libc++
3838
CP_CFLAGS += -mmacosx-version-min=10.15
3939
LINKFLAGS += -mmacosx-version-min=10.15 -stdlib=libc++
4040
LINKNATIVE += -mmacosx-version-min=10.15 -stdlib=libc++
4141
else
42-
CP_CXXFLAGS += -MMD -MP -std=c++11
42+
CP_CXXFLAGS += -MMD -MP -std=c++17
4343
endif
4444
ifeq ($(filter -O%,$(CXXFLAGS)),)
4545
CP_CXXFLAGS += -O2
@@ -103,13 +103,13 @@ else ifeq ($(BUILD_ENV_),Cygwin)
103103
CFLAGS ?= -Wall -O2
104104
CXXFLAGS ?= -Wall -O2
105105
CP_CFLAGS = -MMD -MP
106-
CP_CXXFLAGS += -MMD -MP -std=c++11 -U__STRICT_ANSI__
106+
CP_CXXFLAGS += -MMD -MP -std=c++17 -U__STRICT_ANSI__
107107
# Cygwin-g++ has problems with statically linking exception code.
108108
# If linking fails, remove -static.
109-
LINKFLAGS = -static -std=c++11
109+
LINKFLAGS = -static -std=c++17
110110
LINKLIB = ar rcT $@ $^
111111
LINKBIN = $(CXX) $(LINKFLAGS) -o $@ -Wl,--start-group $^ -Wl,--end-group $(LIBS)
112-
LINKNATIVE = $(HOSTCXX) -std=c++11 -o $@ $^ -static
112+
LINKNATIVE = $(HOSTCXX) -std=c++17 -o $@ $^ -static
113113
ifeq ($(origin CC),default)
114114
#CC = gcc
115115
CC = x86_64-w64-mingw32-gcc
@@ -134,7 +134,7 @@ else ifeq ($(BUILD_ENV_),MSVC)
134134
DEPEXT = .dep
135135
EXEEXT = .exe
136136
CFLAGS ?= /W3 /O2 /GF
137-
CXXFLAGS ?= /W3 /D_CRT_SECURE_NO_WARNINGS /O2 /GF
137+
CXXFLAGS ?= /W3 /D_CRT_SECURE_NO_WARNINGS /O2 /GF /std:c++17
138138
CP_CFLAGS =
139139
CP_CXXFLAGS +=
140140
LINKLIB = lib /NOLOGO /OUT:$@ $^

src/config.inc

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ BUILD_ENV = AUTO
55
ifeq ($(BUILD_ENV),MSVC)
66
#CXXFLAGS += /Wall /WX
77
else
8-
CXXFLAGS += -Wall -pedantic -Werror -Wno-deprecated-declarations -Wswitch-enum
8+
CXXFLAGS += -Wall -pedantic -Werror -Wno-deprecated-declarations -Wno-register -Wswitch-enum
99
endif
1010

1111
ifeq ($(CPROVER_WITH_PROFILING),1)

src/solvers/CMakeLists.txt

+2-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
set(CMAKE_CXX_STANDARD 11)
2-
set(CMAKE_CXX_STANDARD_REQUIRED true)
3-
41
# We may use one of several different solver libraries.
52
# The following files wrap the chosen solver library.
63
# We remove them all from the solver-library sources list, and then add the
@@ -109,7 +106,7 @@ elseif("${sat_impl}" STREQUAL "cadical")
109106
download_project(PROJ cadical
110107
URL https://github.com/arminbiere/cadical/archive/rel-1.4.1.tar.gz
111108
PATCH_COMMAND true
112-
COMMAND CXX=${CMAKE_CXX_COMPILER} ./configure -O3 -s CXXFLAGS=-std=c++14
109+
COMMAND CXX=${CMAKE_CXX_COMPILER} ./configure -O3 -s CXXFLAGS=-std=c++17
113110
URL_MD5 b44874501a175106424f4bd5de29aa59
114111
)
115112

@@ -139,7 +136,7 @@ elseif("${sat_impl}" STREQUAL "ipasir-cadical")
139136
download_project(PROJ cadical
140137
URL https://github.com/arminbiere/cadical/archive/rel-1.4.1.tar.gz
141138
PATCH_COMMAND true
142-
COMMAND CXX=${CMAKE_CXX_COMPILER} ./configure -O3 -s CXXFLAGS=-std=c++14
139+
COMMAND CXX=${CMAKE_CXX_COMPILER} ./configure -O3 -s CXXFLAGS=-std=c++17
143140
URL_MD5 b44874501a175106424f4bd5de29aa59
144141
)
145142

0 commit comments

Comments
 (0)