Skip to content

Commit e336667

Browse files
committed
Handle C++17 (and C++11 with MSVC) in CI.
1 parent b996a23 commit e336667

File tree

3 files changed

+77
-17
lines changed

3 files changed

+77
-17
lines changed

.travis.yml

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -28,51 +28,63 @@ env:
2828
matrix:
2929
include:
3030
# gcc
31-
- env: CONF=release ARCH=x86 CXX11=ON
31+
- env: CONF=release ARCH=x86 CXX11=ON CXX17=OFF
3232
compiler: gcc
3333
arch: amd64
34-
- env: CONF=release ARCH=x86_64 CXX11=ON
34+
- env: CONF=release ARCH=x86_64 CXX11=ON CXX17=OFF
3535
compiler: gcc
3636
arch: amd64
37-
- env: CONF=debug ARCH=x86 CXX11=OFF
37+
- env: CONF=debug ARCH=x86 CXX11=OFF CXX17=OFF
3838
compiler: gcc
3939
arch: amd64
40-
- env: CONF=debug ARCH=x86_64 CXX11=OFF
40+
- env: CONF=debug ARCH=x86_64 CXX11=OFF CXX17=OFF
4141
compiler: gcc
4242
arch: amd64
43-
- env: CONF=release ARCH=aarch64 CXX11=ON
43+
- env: CONF=debug ARCH=x86 CXX11=OFF CXX17=ON
44+
compiler: gcc
45+
arch: amd64
46+
- env: CONF=debug ARCH=x86_64 CXX11=OFF CXX17=ON
47+
compiler: gcc
48+
arch: amd64
49+
- env: CONF=release ARCH=aarch64 CXX11=ON CXX17=OFF
4450
compiler: gcc
4551
arch: arm64
46-
- env: CONF=debug ARCH=aarch64 CXX11=OFF
52+
- env: CONF=release ARCH=aarch64 CXX11=OFF CXX17=OFF
53+
compiler: gcc
54+
arch: arm64
55+
- env: CONF=release ARCH=aarch64 CXX11=OFF CXX17=ON
4756
compiler: gcc
4857
arch: arm64
4958
# clang
50-
- env: CONF=debug ARCH=x86 CXX11=ON CCACHE_CPP2=yes
59+
- env: CONF=release ARCH=x86 CXX11=ON CXX17=OFF CCACHE_CPP2=yes
5160
compiler: clang
5261
arch: amd64
53-
- env: CONF=debug ARCH=x86_64 CXX11=ON CCACHE_CPP2=yes
62+
- env: CONF=release ARCH=x86_64 CXX11=ON CXX17=OFF CCACHE_CPP2=yes
5463
compiler: clang
5564
arch: amd64
56-
- env: CONF=debug ARCH=x86 CXX11=OFF CCACHE_CPP2=yes
65+
- env: CONF=debug ARCH=x86 CXX11=OFF CXX17=OFF CCACHE_CPP2=yes
5766
compiler: clang
5867
arch: amd64
59-
- env: CONF=debug ARCH=x86_64 CXX11=OFF CCACHE_CPP2=yes
68+
- env: CONF=debug ARCH=x86_64 CXX11=OFF CXX17=OFF CCACHE_CPP2=yes
6069
compiler: clang
6170
arch: amd64
62-
- env: CONF=release ARCH=x86 CXX11=ON CCACHE_CPP2=yes
71+
- env: CONF=debug ARCH=x86 CXX11=OFF CXX17=ON CCACHE_CPP2=yes
6372
compiler: clang
6473
arch: amd64
65-
- env: CONF=release ARCH=x86_64 CXX11=ON CCACHE_CPP2=yes
74+
- env: CONF=debug ARCH=x86_64 CXX11=OFF CXX17=ON CCACHE_CPP2=yes
6675
compiler: clang
6776
arch: amd64
68-
- env: CONF=debug ARCH=aarch64 CXX11=ON CCACHE_CPP2=yes
77+
- env: CONF=debug ARCH=aarch64 CXX11=ON CXX17=OFF CCACHE_CPP2=yes
78+
compiler: clang
79+
arch: arm64
80+
- env: CONF=debug ARCH=aarch64 CXX11=OFF CXX17=OFF CCACHE_CPP2=yes
6981
compiler: clang
7082
arch: arm64
71-
- env: CONF=debug ARCH=aarch64 CXX11=OFF CCACHE_CPP2=yes
83+
- env: CONF=debug ARCH=aarch64 CXX11=OFF CXX17=ON CCACHE_CPP2=yes
7284
compiler: clang
7385
arch: arm64
7486
# coverage report
75-
- env: CONF=debug ARCH=x86 CXX11=ON GCOV_FLAGS='--coverage'
87+
- env: CONF=debug ARCH=x86 CXX11=ON CXX17=OFF GCOV_FLAGS='--coverage'
7688
compiler: gcc
7789
arch: amd64
7890
cache:
@@ -135,6 +147,7 @@ script:
135147
(cd build && cmake
136148
-DRAPIDJSON_HAS_STDSTRING=ON
137149
-DRAPIDJSON_BUILD_CXX11=$CXX11
150+
-DRAPIDJSON_BUILD_CXX17=$CXX17
138151
-DCMAKE_VERBOSE_MAKEFILE=ON
139152
-DCMAKE_BUILD_TYPE=$CONF
140153
-DCMAKE_CXX_FLAGS="$ARCH_FLAGS $GCOV_FLAGS"

CMakeLists.txt

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ option(RAPIDJSON_BUILD_TESTS "Build rapidjson perftests and unittests." ON)
3535
option(RAPIDJSON_BUILD_THIRDPARTY_GTEST
3636
"Use gtest installation in `thirdparty/gtest` by default if available" OFF)
3737

38-
option(RAPIDJSON_BUILD_CXX11 "Build rapidjson with C++11 (gcc/clang)" ON)
38+
option(RAPIDJSON_BUILD_CXX11 "Build rapidjson with C++11" ON)
39+
option(RAPIDJSON_BUILD_CXX17 "Build rapidjson with C++17" OFF)
3940
if(RAPIDJSON_BUILD_CXX11)
4041
set(CMAKE_CXX_STANDARD 11)
4142
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
@@ -77,6 +78,8 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
7778
else()
7879
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
7980
endif()
81+
elseif (RAPIDJSON_BUILD_CXX17 AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "5.0")
82+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
8083
endif()
8184
if (RAPIDJSON_BUILD_ASAN)
8285
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.8.0")
@@ -105,6 +108,8 @@ elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
105108
set(EXTRA_CXX_FLAGS -Weffc++ -Wswitch-default -Wfloat-equal -Wconversion -Wimplicit-fallthrough)
106109
if (RAPIDJSON_BUILD_CXX11 AND CMAKE_VERSION VERSION_LESS 3.1)
107110
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
111+
elseif (RAPIDJSON_BUILD_CXX17 AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.0")
112+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
108113
endif()
109114
if (RAPIDJSON_BUILD_ASAN)
110115
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
@@ -119,6 +124,18 @@ elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
119124
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
120125
add_definitions(-D_CRT_SECURE_NO_WARNINGS=1)
121126
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc")
127+
# CMake >= 3.10 should handle the above CMAKE_CXX_STANDARD fine, otherwise use /std:c++XX with MSVC >= 19.10
128+
if (RAPIDJSON_BUILD_CXX11 AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "19.10")
129+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c++11")
130+
elseif (RAPIDJSON_BUILD_CXX17 AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "19.14")
131+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c++17")
132+
endif()
133+
# Always compile with /WX
134+
if(CMAKE_CXX_FLAGS MATCHES "/WX-")
135+
string(REGEX REPLACE "/WX-" "/WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
136+
else()
137+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /WX")
138+
endif()
122139
elseif (CMAKE_CXX_COMPILER_ID MATCHES "XL")
123140
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -qarch=auto")
124141
endif()

appveyor.yml

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,37 +13,67 @@ environment:
1313
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
1414
VS_VERSION: 10 2010
1515
VS_PLATFORM: win32
16+
CXX11: OFF
17+
CXX17: OFF
1618
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
1719
VS_VERSION: 10 2010
1820
VS_PLATFORM: x64
21+
CXX11: OFF
22+
CXX17: OFF
1923
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
2024
VS_VERSION: 11 2012
2125
VS_PLATFORM: win32
26+
CXX11: OFF
27+
CXX17: OFF
2228
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
2329
VS_VERSION: 11 2012
2430
VS_PLATFORM: x64
31+
CXX11: OFF
32+
CXX17: OFF
2533
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
2634
VS_VERSION: 12 2013
2735
VS_PLATFORM: win32
36+
CXX11: OFF
37+
CXX17: OFF
2838
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
2939
VS_VERSION: 12 2013
3040
VS_PLATFORM: x64
41+
CXX11: OFF
42+
CXX17: OFF
3143
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
3244
VS_VERSION: 14 2015
3345
VS_PLATFORM: win32
46+
CXX11: OFF
47+
CXX17: OFF
3448
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
3549
VS_VERSION: 14 2015
3650
VS_PLATFORM: x64
51+
CXX11: OFF
52+
CXX17: OFF
3753
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
3854
VS_VERSION: 15 2017
3955
VS_PLATFORM: win32
56+
CXX11: OFF
57+
CXX17: OFF
4058
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
4159
VS_VERSION: 15 2017
4260
VS_PLATFORM: x64
61+
CXX11: OFF
62+
CXX17: OFF
63+
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
64+
VS_VERSION: 15 2017
65+
VS_PLATFORM: x64
66+
CXX11: ON
67+
CXX17: OFF
68+
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
69+
VS_VERSION: 15 2017
70+
VS_PLATFORM: x64
71+
CXX11: OFF
72+
CXX17: ON
4373

4474
before_build:
4575
- git submodule update --init --recursive
46-
- cmake -H. -BBuild/VS -G "Visual Studio %VS_VERSION%" -DCMAKE_GENERATOR_PLATFORM=%VS_PLATFORM% -DCMAKE_VERBOSE_MAKEFILE=ON -DBUILD_SHARED_LIBS=true -Wno-dev
76+
- cmake -H. -BBuild/VS -G "Visual Studio %VS_VERSION%" -DCMAKE_GENERATOR_PLATFORM=%VS_PLATFORM% -DCMAKE_VERBOSE_MAKEFILE=ON -DBUILD_SHARED_LIBS=true -DRAPIDJSON_BUILD_CXX11=%CXX11% -DRAPIDJSON_BUILD_CXX17=%CXX17% -Wno-dev
4777

4878
build:
4979
project: Build\VS\RapidJSON.sln

0 commit comments

Comments
 (0)