Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 36 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,9 @@ option(ENABLE_UBSAN "Enable UndefinedBehaviorSanitizer"
option(ENABLE_CLANG_TIDY "Enable static analysis with Clang-Tidy" OFF)
option(ENABLE_CPPCHECK "Enable static analysis with Cppcheck" OFF)
option(ENABLE_PVS_STUDIO "Enable static analysis with PVS-Studio" OFF)
option(ENABLE_IWYU "Enable static analysis with Include What You Use" OFF)
option(ENABLE_LINK_TRACE "Enable linker trace flag (detailed output of the linking process)" OFF)
option(BUILD_UNIT_TESTS "Build the unit tests" OFF)

#-------------------------------------------------------------------------------
# Output Directories
Expand Down Expand Up @@ -155,26 +157,49 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# Enable error reporting for deprecated features
set(CMAKE_ERROR_DEPRECATED ON)

#-------------------------------------------------------------------------------
# Compile Definitions
#-------------------------------------------------------------------------------

add_compile_definitions(
PAWN_CELL_SIZE=32
)

#-------------------------------------------------------------------------------
# CMake Modules and Dependencies
#-------------------------------------------------------------------------------

include("FetchContent")
include("cmake/CMakeUtilities.cmake")
include("cmake/CompileOptions.cmake")
include("cmake/SetupGitHooks.cmake")
include("cmake/ClangTidy.cmake")
include("cmake/Cppcheck.cmake")
include("cmake/PvsStudio.cmake")
include("cmake/IncludeWhatYouUse.cmake")
include("cmake/GoogleTest.cmake")
include("cmake/SetupGitHooks.cmake")

#-------------------------------------------------------------------------------
# Subdirectories
#-------------------------------------------------------------------------------

add_subdirectory("external/zlib")
add_subdirectory("libs/amxxpc32")
add_subdirectory("libs/pawncore")
add_subdirectory("libs/pawnwrap")
add_subdirectory("libs/concepts")
add_subdirectory("libs/compress")
add_subdirectory("libs/binary")
add_subdirectory("libs/amx")
add_subdirectory("libs/amxx")
add_subdirectory("libs/cli")
add_subdirectory("libs/ui")
add_subdirectory("apps/amxxpc")

if(BUILD_UNIT_TESTS)
enable_testing()
add_subdirectory("tests")
endif()

#-------------------------------------------------------------------------------
# Static Analysis Tools
#-------------------------------------------------------------------------------
Expand Down Expand Up @@ -202,3 +227,12 @@ if(ENABLE_PVS_STUDIO)
CXX_FLAGS "-I${CMAKE_CURRENT_BINARY_DIR}/apps/amxxpc"
)
endif()

if(ENABLE_IWYU)
enable_include_what_you_use(TARGETS ${PROJECT_TARGETS}
CXX17NS
NO_COMMENTS
QUOTED_INCLUDES_FIRST
TRANSITIVE_INCLUDES_ONLY
)
endif()
213 changes: 213 additions & 0 deletions CMakePresets.json
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,16 @@
},
"hidden": true
},
{
"name": "unittest",
"description": "Enable unit tests",
"cacheVariables": {
"BUILD_UNIT_TESTS": "ON",
"ENABLE_EXCEPTIONS": "ON",
"ENABLE_RTTI": "ON"
},
"hidden": true
},
{
"name": "ninja-gcc-linux",
"inherits": [
Expand All @@ -211,6 +221,22 @@
"linux"
]
},
{
"name": "unittest-ninja-gcc-linux",
"displayName": "Unittest Ninja GCC",
"inherits": [
"unittest",
"ninja-gcc-linux"
]
},
{
"name": "unittest-ninja-clang-linux",
"displayName": "Unittest Ninja Clang",
"inherits": [
"unittest",
"ninja-clang-linux"
]
},
{
"name": "clang-tidy-ninja-clang-linux-reldebinfo",
"inherits": [
Expand Down Expand Up @@ -250,6 +276,19 @@
"ENABLE_PVS_STUDIO": "ON"
}
},
{
"name": "iwyu-ninja-clang-linux-reldebinfo",
"inherits": [
"base",
"ninja",
"clang",
"linux",
"reldebinfo"
],
"cacheVariables": {
"ENABLE_IWYU": "ON"
}
},
{
"name": "ninja-msvc-windows",
"inherits": [
Expand Down Expand Up @@ -290,6 +329,22 @@
"CMAKE_GENERATOR_TOOLSET": "ClangCL"
}
},
{
"name": "unittest-ninja-msvc-windows",
"displayName": "Unittest Ninja MSVC",
"inherits": [
"unittest",
"ninja-msvc-windows"
]
},
{
"name": "unittest-vs2022-msvc-windows",
"displayName": "Unittest VS 2022 MSVC",
"inherits": [
"unittest",
"vs2022-msvc-windows"
]
},
{
"name": "clang-tidy-ninja-clang-windows-reldebinfo",
"inherits": [
Expand Down Expand Up @@ -328,6 +383,19 @@
"cacheVariables": {
"ENABLE_PVS_STUDIO": "ON"
}
},
{
"name": "iwyu-ninja-clang-windows-reldebinfo",
"inherits": [
"base",
"ninja",
"clang",
"windows",
"reldebinfo"
],
"cacheVariables": {
"ENABLE_IWYU": "ON"
}
}
],
"buildPresets": [
Expand Down Expand Up @@ -423,6 +491,34 @@
"linux"
]
},
{
"name": "unittest-ninja-gcc-linux-release",
"displayName": "Unittest Ninja GCC Release",
"description": "Build unit tests using Ninja Multi-Config generator and GCC compiler with Release configuration",
"configurePreset": "unittest-ninja-gcc-linux",
"configuration": "Release",
"inherits": [
"base",
"linux"
],
"targets": [
"amxxpc.test"
]
},
{
"name": "unittest-ninja-clang-linux-release",
"displayName": "Unittest Ninja Clang Release",
"description": "Build unit tests using Ninja Multi-Config generator and Clang compiler with Release configuration",
"configurePreset": "unittest-ninja-clang-linux",
"configuration": "Release",
"inherits": [
"base",
"linux"
],
"targets": [
"amxxpc.test"
]
},
{
"name": "clang-tidy-ninja-clang-linux-reldebinfo",
"displayName": "SA: Clang-Tidy Ninja Clang",
Expand Down Expand Up @@ -456,6 +552,16 @@
"pvs_analysis"
]
},
{
"name": "iwyu-ninja-clang-linux-reldebinfo",
"displayName": "SA: IWYU Ninja Clang",
"description": "Run IWYU using Ninja generator and Clang compiler",
"configurePreset": "iwyu-ninja-clang-linux-reldebinfo",
"inherits": [
"base",
"linux"
]
},
{
"name": "ninja-msvc-windows-debug",
"displayName": "Ninja MSVC Debug",
Expand Down Expand Up @@ -588,6 +694,34 @@
"windows"
]
},
{
"name": "unittest-ninja-msvc-windows-release",
"displayName": "Unittest Ninja MSVC Release",
"description": "Build unit tests using Ninja Multi-Config generator and MSVC compiler with Release configuration",
"configurePreset": "unittest-ninja-msvc-windows",
"configuration": "Release",
"inherits": [
"base",
"windows"
],
"targets": [
"amxxpc.test"
]
},
{
"name": "unittest-vs2022-msvc-windows-release",
"displayName": "Unittest VS 2022 MSVC Release",
"description": "Build unit tests using Visual Studio 17 2022 generator and MSVC compiler with Release configuration",
"configurePreset": "unittest-vs2022-msvc-windows",
"configuration": "Release",
"inherits": [
"base",
"windows"
],
"targets": [
"amxxpc.test"
]
},
{
"name": "clang-tidy-ninja-clang-windows-reldebinfo",
"displayName": "SA: Clang-Tidy Ninja Clang",
Expand Down Expand Up @@ -620,6 +754,85 @@
"targets": [
"pvs_analysis"
]
},
{
"name": "iwyu-ninja-clang-windows-reldebinfo",
"displayName": "SA: IWYU Ninja Clang",
"description": "Run IWYU using Ninja generator and Clang compiler",
"configurePreset": "iwyu-ninja-clang-windows-reldebinfo",
"inherits": [
"base",
"windows"
]
}
],
"testPresets": [
{
"name": "base",
"description": "Base configuration with common settings and options",
"output": {
"verbosity": "default",
"shortProgress": true,
"outputOnFailure": true
},
"execution": {
"noTestsAction": "error",
"stopOnFailure": true,
"timeout": 10
},
"hidden": true
},
{
"name": "linux",
"description": "Configuration for Linux",
"condition": {
"type": "equals",
"lhs": "${hostSystemName}",
"rhs": "Linux"
},
"hidden": true
},
{
"name": "windows",
"description": "Configuration for Windows",
"condition": {
"type": "equals",
"lhs": "${hostSystemName}",
"rhs": "Windows"
},
"hidden": true
},
{
"name": "ninja-gcc-linux",
"configurePreset": "unittest-ninja-gcc-linux",
"inherits": [
"base",
"linux"
]
},
{
"name": "ninja-clang-linux",
"configurePreset": "unittest-ninja-clang-linux",
"inherits": [
"base",
"linux"
]
},
{
"name": "ninja-msvc-windows",
"configurePreset": "unittest-ninja-msvc-windows",
"inherits": [
"base",
"windows"
]
},
{
"name": "vs2022-msvc-windows",
"configurePreset": "unittest-vs2022-msvc-windows",
"inherits": [
"base",
"windows"
]
}
]
}
Loading
Loading