Skip to content

Commit 1d0923b

Browse files
committed
Setup CMake
1 parent a25647b commit 1d0923b

16 files changed

+388
-114
lines changed

.clang-format

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
---
2+
Language: Cpp
3+
BasedOnStyle: LLVM
4+
AlwaysBreakTemplateDeclarations: Yes
5+
BreakBeforeBraces: Attach
6+
ColumnLimit: 160
7+
SpaceAfterTemplateKeyword: true
8+
Standard: c++20
9+
TabWidth: 4
10+
IndentWidth: 4
11+
UseTab: Always
12+
AllowShortEnumsOnASingleLine: true
13+
AllowShortCaseLabelsOnASingleLine: true
14+
AllowShortFunctionsOnASingleLine: All
15+
AllowShortLambdasOnASingleLine: All
16+
AllowShortBlocksOnASingleLine: Always
17+
AllowShortIfStatementsOnASingleLine: Always
18+
AllowShortLoopsOnASingleLine: true
19+
IndentRequires: true
20+
IncludeCategories:
21+
# Headers in <> with .h extension.
22+
- Regex: '<([A-Za-z0-9\/-_])+\.h>'
23+
Priority: 10
24+
# Headers in <> with .hpp extension.
25+
- Regex: '<([A-Za-z0-9\/-_])+\.hpp>'
26+
Priority: 20
27+
# Headers in <> without extension.
28+
- Regex: '<([A-Za-z0-9\/-_])+>'
29+
Priority: 30
30+
PointerAlignment: Left
31+
QualifierAlignment: Right

.clang-tidy

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
---
2+
Checks: 'clang-analyzer-*,
3+
concurrency-*,
4+
cppcoreguidelines-*,
5+
-cppcoreguidelines-non-private-member-variables-in-classes,
6+
-cppcoreguidelines-avoid-magic-numbers,
7+
-cppcoreguidelines-avoid-const-or-ref-data-members,
8+
-cppcoreguidelines-avoid-do-while,
9+
misc-*,
10+
-misc-non-private-member-variables-in-classes,
11+
-misc-no-recursion,
12+
modernize-*,
13+
-modernize-use-trailing-return-type,
14+
performance-*,
15+
portability-*,
16+
readability-*,
17+
-readability-identifier-length,
18+
-readability-implicit-bool-conversion,
19+
-readability-magic-numbers,
20+
-readability-redundant-member-init,
21+
-readability-uppercase-literal-suffix'
22+
...

.editorconfig

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
[*]
2+
insert_final_newline = true
3+
charset = utf-8
4+
indent_size = 4
5+
indent_style = tab
6+
# Optional: git will commit as lf, this will only affect local files
7+
end_of_line = lf
8+
9+
[*.{py,md,yml,sh,cmake,json}]
10+
indent_style = space
11+
indent_size = 2
12+
13+
[*.{py,md,yml,sh,cmake,json}.in]
14+
indent_style = space
15+
indent_size = 2
16+
17+
[CMakeLists.txt]
18+
indent_style = space
19+
indent_size = 2

.gitignore

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,13 @@
3636
/Test/out/build/x64-debug
3737
/cppjson/out/build/x64-debug
3838
/out/build/x64-Debug
39+
40+
# clangd
41+
/.cache
42+
compile_commands.json
43+
44+
# CMake presets
45+
CMakeUserPresets.json
46+
47+
# CMake build output
48+
/out

CMakeLists.txt

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,19 @@
1-
cmake_minimum_required (VERSION 3.8)
1+
cmake_minimum_required(VERSION 3.24)
22

3-
add_subdirectory("cppjson")
4-
add_subdirectory("Test")
3+
set(CMAKE_CXX_STANDARD 23)
4+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
5+
set(CMAKE_CXX_EXTENSIONS OFF)
6+
set(CMAKE_DEBUG_POSTFIX "-d")
7+
8+
include(version.cmake)
9+
10+
project(cppjson VERSION ${cppjson_version})
11+
12+
option(CPPJSON_BUILD_TESTS "Build cppjson tests" ${PROJECT_IS_TOP_LEVEL})
13+
14+
add_subdirectory(cppjson)
15+
16+
if(CPPJSON_BUILD_TESTS)
17+
enable_testing()
18+
add_subdirectory(Test)
19+
endif()

CMakePresets.json

Lines changed: 250 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,250 @@
1+
{
2+
"version": 5,
3+
"cmakeMinimumRequired": {
4+
"major": 3,
5+
"minor": 24,
6+
"patch": 0
7+
},
8+
"configurePresets": [
9+
{
10+
"name": "default",
11+
"displayName": "Default Config",
12+
"description": "Base configuration using Ninja Multi-config",
13+
"generator": "Ninja Multi-Config",
14+
"binaryDir": "${sourceDir}/out/default",
15+
"cacheVariables": {
16+
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON"
17+
}
18+
},
19+
{
20+
"name": "base-gcc",
21+
"hidden": true,
22+
"inherits": "default",
23+
"cacheVariables": {
24+
"CMAKE_C_COMPILER": "gcc",
25+
"CMAKE_CXX_COMPILER": "g++"
26+
}
27+
},
28+
{
29+
"name": "base-clang",
30+
"hidden": true,
31+
"inherits": "default",
32+
"cacheVariables": {
33+
"CMAKE_C_COMPILER": "clang",
34+
"CMAKE_CXX_COMPILER": "clang++"
35+
}
36+
},
37+
{
38+
"name": "base-msvc",
39+
"hidden": true,
40+
"inherits": "default",
41+
"cacheVariables": {
42+
"CMAKE_C_COMPILER": "cl",
43+
"CMAKE_CXX_COMPILER": "cl"
44+
}
45+
},
46+
{
47+
"name": "ninja-gcc",
48+
"displayName": "Ninja GCC",
49+
"description": "Build configuration using Ninja Multi-config / GCC",
50+
"inherits": "base-gcc",
51+
"binaryDir": "${sourceDir}/out/gcc",
52+
"cacheVariables": {
53+
"CMAKE_CXX_FLAGS_INIT": "-Wall -Wextra -Wpedantic -Wconversion -Werror=return-type",
54+
"CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT": "-Werror",
55+
"CMAKE_CXX_FLAGS_RELEASE_INIT": "-Werror"
56+
}
57+
},
58+
{
59+
"name": "ninja-clang",
60+
"displayName": "Ninja Clang",
61+
"description": "Build configuration using Ninja Multi-config / Clang",
62+
"inherits": "base-clang",
63+
"binaryDir": "${sourceDir}/out/clang",
64+
"cacheVariables": {
65+
"CMAKE_CXX_FLAGS_INIT": "-Wall -Wextra -Wpedantic -Wconversion -Werror=return-type",
66+
"CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT": "-Werror",
67+
"CMAKE_CXX_FLAGS_RELEASE_INIT": "-Werror"
68+
}
69+
},
70+
{
71+
"name": "ninja-msvc",
72+
"displayName": "Ninja MSVC",
73+
"description": "Build configuration using Ninja Multi-config / MSVC",
74+
"inherits": "base-msvc",
75+
"binaryDir": "${sourceDir}/out/msvc",
76+
"cacheVariables": {
77+
"CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT": "/WX",
78+
"CMAKE_CXX_FLAGS_RELEASE_INIT": "/WX"
79+
}
80+
},
81+
{
82+
"name": "ninja-ubsan",
83+
"displayName": "Ninja UBSan",
84+
"description": "UBSan build configuration using Ninja Multi-config",
85+
"inherits": "default",
86+
"binaryDir": "${sourceDir}/out/ubsan",
87+
"cacheVariables": {
88+
"CMAKE_CXX_FLAGS_INIT": "-fsanitize=undefined -Wall -Wextra -Wpedantic -Wconversion -Werror=return-type"
89+
}
90+
},
91+
{
92+
"name": "ninja-asan",
93+
"displayName": "Ninja ASan",
94+
"description": "ASan build configuration using Ninja Multi-config",
95+
"inherits": "default",
96+
"binaryDir": "${sourceDir}/out/asan",
97+
"cacheVariables": {
98+
"CMAKE_CXX_FLAGS_INIT": "-fsanitize=address -Wall -Wextra -Wpedantic -Wconversion -Werror=return-type"
99+
}
100+
},
101+
{
102+
"name": "ninja-msvc-asan",
103+
"displayName": "Ninja MSVC ASan",
104+
"description": "ASan build configuration using Ninja Multi-config",
105+
"inherits": "base-msvc",
106+
"binaryDir": "${sourceDir}/out/asan",
107+
"cacheVariables": {
108+
"CMAKE_CXX_FLAGS_INIT": "-fsanitize=address"
109+
}
110+
},
111+
{
112+
"name": "ninja-tsan",
113+
"displayName": "Ninja TSan",
114+
"description": "TSan build configuration using Ninja Multi-config",
115+
"inherits": "default",
116+
"binaryDir": "${sourceDir}/out/tsan",
117+
"cacheVariables": {
118+
"CMAKE_CXX_FLAGS_INIT": "-fsanitize=thread -Wall -Wextra -Wpedantic -Wconversion -Werror=return-type"
119+
}
120+
},
121+
{
122+
"name": "vs22",
123+
"displayName": "Visual Studio 2022",
124+
"description": "Build configuration using Visual Studio 17 (2022)",
125+
"generator": "Visual Studio 17 2022",
126+
"binaryDir": "${sourceDir}/out/vs",
127+
"cacheVariables": {
128+
"CMAKE_CXX_FLAGS_INIT": "/WX"
129+
},
130+
"architecture": {
131+
"value": "x64",
132+
"strategy": "external"
133+
}
134+
}
135+
],
136+
"buildPresets": [
137+
{
138+
"name": "Debug",
139+
"configurePreset": "default",
140+
"configuration": "Debug"
141+
},
142+
{
143+
"name": "Release",
144+
"configurePreset": "default",
145+
"configuration": "Release"
146+
},
147+
{
148+
"name": "RelWithDebInfo",
149+
"configurePreset": "default",
150+
"configuration": "RelWithDebInfo"
151+
},
152+
{
153+
"name": "GCC Debug",
154+
"configurePreset": "ninja-gcc",
155+
"configuration": "Debug"
156+
},
157+
{
158+
"name": "GCC RelWithDebInfo",
159+
"configurePreset": "ninja-gcc",
160+
"configuration": "RelWithDebInfo"
161+
},
162+
{
163+
"name": "Clang Debug",
164+
"configurePreset": "ninja-clang",
165+
"configuration": "Debug"
166+
},
167+
{
168+
"name": "Clang RelWithDebInfo",
169+
"configurePreset": "ninja-clang",
170+
"configuration": "RelWithDebInfo"
171+
},
172+
{
173+
"name": "MSVC Debug",
174+
"configurePreset": "ninja-msvc",
175+
"configuration": "Debug"
176+
},
177+
{
178+
"name": "MSVC Release",
179+
"configurePreset": "ninja-msvc",
180+
"configuration": "Release"
181+
},
182+
{
183+
"name": "UBSan Debug",
184+
"configurePreset": "ninja-ubsan",
185+
"configuration": "Debug"
186+
}
187+
],
188+
"testPresets": [
189+
{
190+
"name": "Debug",
191+
"configurePreset": "default",
192+
"configuration": "Debug",
193+
"inheritConfigureEnvironment": true
194+
},
195+
{
196+
"name": "Release",
197+
"configurePreset": "default",
198+
"configuration": "Release",
199+
"inheritConfigureEnvironment": true
200+
},
201+
{
202+
"name": "RelWithDebInfo",
203+
"configurePreset": "default",
204+
"configuration": "RelWithDebInfo",
205+
"inheritConfigureEnvironment": true
206+
},
207+
{
208+
"name": "GCC Debug",
209+
"configurePreset": "ninja-gcc",
210+
"configuration": "Debug",
211+
"inheritConfigureEnvironment": true
212+
},
213+
{
214+
"name": "GCC RelWithDebInfo",
215+
"configurePreset": "ninja-gcc",
216+
"configuration": "RelWithDebInfo",
217+
"inheritConfigureEnvironment": true
218+
},
219+
{
220+
"name": "Clang Debug",
221+
"configurePreset": "ninja-clang",
222+
"configuration": "Debug",
223+
"inheritConfigureEnvironment": true
224+
},
225+
{
226+
"name": "Clang RelWithDebInfo",
227+
"configurePreset": "ninja-clang",
228+
"configuration": "RelWithDebInfo",
229+
"inheritConfigureEnvironment": true
230+
},
231+
{
232+
"name": "MSVC Debug",
233+
"configurePreset": "ninja-msvc",
234+
"configuration": "Debug",
235+
"inheritConfigureEnvironment": true
236+
},
237+
{
238+
"name": "MSVC Release",
239+
"configurePreset": "ninja-msvc",
240+
"configuration": "Release",
241+
"inheritConfigureEnvironment": true
242+
},
243+
{
244+
"name": "UBSan Debug",
245+
"configurePreset": "ninja-ubsan",
246+
"configuration": "Debug",
247+
"inheritConfigureEnvironment": true
248+
}
249+
]
250+
}

Test/CMakeLists.txt

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,15 @@
1-
# CMakeList.txt : CMake project for Test, include source and define
2-
# project specific logic here.
3-
#
4-
cmake_minimum_required (VERSION 3.8)
1+
add_executable(cppjson-Test)
52

6-
# Enable Hot Reload for MSVC compilers if supported.
7-
if (POLICY CMP0141)
8-
cmake_policy(SET CMP0141 NEW)
9-
set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$<IF:$<AND:$<C_COMPILER_ID:MSVC>,$<CXX_COMPILER_ID:MSVC>>,$<$<CONFIG:Debug,RelWithDebInfo>:EditAndContinue>,$<$<CONFIG:Debug,RelWithDebInfo>:ProgramDatabase>>")
10-
endif()
3+
target_link_libraries(cppjson-Test PRIVATE
4+
cppjson::cppjson
5+
)
116

12-
project ("Test")
7+
target_sources(cppjson-Test PRIVATE
8+
Test.cpp
9+
)
1310

14-
# Add source to this project's executable.
15-
add_executable (Test "Test.cpp" "Test.h")
16-
17-
if (CMAKE_VERSION VERSION_GREATER 3.12)
18-
set_property(TARGET Test PROPERTY CXX_STANDARD 23)
19-
endif()
20-
21-
# TODO: Add tests and install targets if needed.
11+
add_test(
12+
NAME cppjson-Test
13+
COMMAND cppjson-Test
14+
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
15+
)

0 commit comments

Comments
 (0)