generated from McMassiveNZ/blank-slate
build: modernize repo-lens skeleton and cross-platform configuration
CI / build (debug, map[compiler:appleclang os:macos-latest]) (push) Canceled after 0s
CI / build (debug, map[compiler:clang os:ubuntu-latest]) (push) Canceled after 0s
CI / build (debug, map[compiler:gcc os:ubuntu-latest]) (push) Canceled after 0s
CI / build (debug, map[compiler:msvc os:windows-latest]) (push) Canceled after 0s
CI / build (release, map[compiler:appleclang os:macos-latest]) (push) Canceled after 0s
CI / build (release, map[compiler:clang os:ubuntu-latest]) (push) Canceled after 0s
CI / build (release, map[compiler:gcc os:ubuntu-latest]) (push) Canceled after 0s
CI / build (release, map[compiler:msvc os:windows-latest]) (push) Canceled after 0s
CI / build (sanitizers, map[compiler:appleclang os:macos-latest]) (push) Canceled after 0s
CI / build (sanitizers, map[compiler:clang os:ubuntu-latest]) (push) Canceled after 0s
CI / build (sanitizers, map[compiler:gcc os:ubuntu-latest]) (push) Canceled after 0s
CI / build (sanitizers, map[compiler:msvc os:windows-latest]) (push) Canceled after 0s
CI / build (debug, map[compiler:appleclang os:macos-latest]) (push) Canceled after 0s
CI / build (debug, map[compiler:clang os:ubuntu-latest]) (push) Canceled after 0s
CI / build (debug, map[compiler:gcc os:ubuntu-latest]) (push) Canceled after 0s
CI / build (debug, map[compiler:msvc os:windows-latest]) (push) Canceled after 0s
CI / build (release, map[compiler:appleclang os:macos-latest]) (push) Canceled after 0s
CI / build (release, map[compiler:clang os:ubuntu-latest]) (push) Canceled after 0s
CI / build (release, map[compiler:gcc os:ubuntu-latest]) (push) Canceled after 0s
CI / build (release, map[compiler:msvc os:windows-latest]) (push) Canceled after 0s
CI / build (sanitizers, map[compiler:appleclang os:macos-latest]) (push) Canceled after 0s
CI / build (sanitizers, map[compiler:clang os:ubuntu-latest]) (push) Canceled after 0s
CI / build (sanitizers, map[compiler:gcc os:ubuntu-latest]) (push) Canceled after 0s
CI / build (sanitizers, map[compiler:msvc os:windows-latest]) (push) Canceled after 0s
Replace CPM with FetchContent and update GoogleTest to v1.18.0. Add compiler toolchains and Debug, Release, and sanitizer presets. Require CMake 4.0, use target properties for compiler settings, and enable compilation database export. Fix skeleton compilation errors and adopt trailing return types, nodiscard execute methods, and noexcept signatures. Update CI and project documentation without implementing any TODOs. Validated Windows builds and tests in all three configurations.
This commit is contained in:
1 parent
dd9f0a4c3a
commit
70c43b6a68
25 files changed
+510
-176
No files matched your search
@@ -4,7 +4,7 @@ function( target_enable_warnings _target )
|
||||
if(MSVC)
|
||||
target_compile_options(
|
||||
${_target}
|
||||
PUBLIC
|
||||
PRIVATE
|
||||
/W4 # Baseline reasonable warnings
|
||||
/w14242 # 'identifier': conversion from 'type1' to 'type1', possible loss of data
|
||||
/w14254 # 'operator': conversion from 'type1:field_bits' to 'type2:field_bits', possible loss of data
|
||||
@@ -12,7 +12,7 @@ function( target_enable_warnings _target )
|
||||
/w14265 # 'classname': class has virtual functions, but destructor is not virtual instances of this class may not
|
||||
# be destructed correctly
|
||||
/w14287 # 'operator': unsigned/negative constant mismatch
|
||||
/we4289 # nonstandard extension used: 'variable': loop control variable declared in the for-loop is used outside
|
||||
/w14289 # nonstandard extension used: 'variable': loop control variable declared in the for-loop is used outside
|
||||
# the for-loop scope
|
||||
/w14296 # 'operator': expression is always 'boolean_value'
|
||||
/w14311 # 'variable': pointer truncation from 'type1' to 'type2'
|
||||
@@ -29,10 +29,8 @@ function( target_enable_warnings _target )
|
||||
/w14928 # illegal copy-initialization; more than one user-defined conversion has been implicitly applied
|
||||
/permissive- # standards conformance mode for MSVC compiler.
|
||||
)
|
||||
elseif(CMAKE_CXX_COMPILER_ID MATCHES ".*Clang")
|
||||
target_compile_options(
|
||||
${_target}
|
||||
INTERFACE
|
||||
elseif(CMAKE_CXX_COMPILER_ID MATCHES "^(GNU|Clang|AppleClang)$")
|
||||
set(_warnings
|
||||
-Wall
|
||||
-Wextra # reasonable and standard
|
||||
-Wextra-semi # Warn about semicolon after in-class function definition.
|
||||
@@ -52,55 +50,21 @@ function( target_enable_warnings _target )
|
||||
-Wformat=2 # warn on security issues around functions that format output (ie printf)
|
||||
-Wimplicit-fallthrough # warn on statements that fallthrough without an explicit annotation
|
||||
)
|
||||
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||
target_compile_options(
|
||||
${_target}
|
||||
INTERFACE
|
||||
-Wall
|
||||
-Wextra # reasonable and standard
|
||||
-Wextra-semi # Warn about semicolon after in-class function definition.
|
||||
-Wshadow # warn the user if a variable declaration shadows one from a parent context
|
||||
-Wnon-virtual-dtor # warn the user if a class with virtual functions has a non-virtual destructor. This helps
|
||||
|
||||
# catch hard to track down memory errors
|
||||
-Wold-style-cast # warn for c-style casts
|
||||
-Wcast-align # warn for potential performance problem casts
|
||||
-Wunused # warn on anything being unused
|
||||
-Woverloaded-virtual # warn if you overload (not override) a virtual function
|
||||
-Wpedantic # warn if non-standard C++ is used
|
||||
-Wconversion # warn on type conversions that may lose data
|
||||
-Wsign-conversion # warn on sign conversions
|
||||
-Wnull-dereference # warn if a null dereference is detected
|
||||
-Wdouble-promotion # warn if float is implicit promoted to double
|
||||
-Wformat=2 # warn on security issues around functions that format output (ie printf)
|
||||
-Wimplicit-fallthrough # warn on statements that fallthrough without an explicit annotation
|
||||
-Wmisleading-indentation # warn if indentation implies blocks where blocks do not exist
|
||||
-Wduplicated-cond # warn if if / else chain has duplicated conditions
|
||||
-Wduplicated-branches # warn if if / else branches have duplicated code
|
||||
-Wlogical-op # warn about logical operations being used where bitwise were probably wanted
|
||||
-Wuseless-cast # warn if you perform a cast to the same type
|
||||
)
|
||||
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||
list(APPEND _warnings
|
||||
-Wmisleading-indentation # warn if indentation implies blocks where blocks do not exist
|
||||
-Wduplicated-cond # warn if if / else chain has duplicated conditions
|
||||
-Wduplicated-branches # warn if if / else branches have duplicated code
|
||||
-Wlogical-op # warn about logical operations being used where bitwise were probably wanted
|
||||
-Wuseless-cast # warn if you perform a cast to the same type
|
||||
)
|
||||
endif()
|
||||
target_compile_options(${_target} PRIVATE ${_warnings})
|
||||
else()
|
||||
message(AUTHOR_WARNING "No warning profile for ${CMAKE_CXX_COMPILER_ID}")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
function(target_warnings_as_errors _target)
|
||||
if(MSVC)
|
||||
target_compile_options(
|
||||
${_target}
|
||||
PUBLIC
|
||||
/WX
|
||||
)
|
||||
elseif(CMAKE_CXX_COMPILER_ID MATCHES ".*Clang")
|
||||
target_compile_options(
|
||||
${_target}
|
||||
PUBLIC
|
||||
-Werror
|
||||
)
|
||||
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||
target_compile_options(
|
||||
${_target}
|
||||
PUBLIC
|
||||
-Werror
|
||||
)
|
||||
endif()
|
||||
endfunction()
|
||||
set_property(TARGET ${_target} PROPERTY COMPILE_WARNING_AS_ERROR ON)
|
||||
endfunction()
|
||||
@@ -1,33 +0,0 @@
|
||||
set(CPM_DOWNLOAD_VERSION 0.38.1)
|
||||
|
||||
if(CPM_SOURCE_CACHE)
|
||||
set(CPM_DOWNLOAD_LOCATION "${CPM_SOURCE_CACHE}/cpm/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
|
||||
elseif(DEFINED ENV{CPM_SOURCE_CACHE})
|
||||
set(CPM_DOWNLOAD_LOCATION "$ENV{CPM_SOURCE_CACHE}/cpm/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
|
||||
else()
|
||||
set(CPM_DOWNLOAD_LOCATION "${CMAKE_BINARY_DIR}/cmake/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
|
||||
endif()
|
||||
|
||||
# Expand relative path. This is important if the provided path contains a tilde (~)
|
||||
get_filename_component(CPM_DOWNLOAD_LOCATION ${CPM_DOWNLOAD_LOCATION} ABSOLUTE)
|
||||
|
||||
function(download_cpm)
|
||||
message(STATUS "Downloading CPM.cmake to ${CPM_DOWNLOAD_LOCATION}")
|
||||
file(DOWNLOAD
|
||||
https://github.com/cpm-cmake/CPM.cmake/releases/download/v${CPM_DOWNLOAD_VERSION}/CPM.cmake
|
||||
${CPM_DOWNLOAD_LOCATION}
|
||||
)
|
||||
endfunction()
|
||||
|
||||
if(NOT (EXISTS ${CPM_DOWNLOAD_LOCATION}))
|
||||
download_cpm()
|
||||
else()
|
||||
# resume download if it previously failed
|
||||
file(READ ${CPM_DOWNLOAD_LOCATION} check)
|
||||
if("${check}" STREQUAL "")
|
||||
download_cpm()
|
||||
endif()
|
||||
unset(check)
|
||||
endif()
|
||||
|
||||
include(${CPM_DOWNLOAD_LOCATION})
|
||||
+12
-9
@@ -1,17 +1,20 @@
|
||||
include_guard()
|
||||
|
||||
CPMAddPackage(
|
||||
NAME googletest
|
||||
GITHUB_REPOSITORY google/googletest
|
||||
GIT_TAG v1.13.0
|
||||
VERSION 1.13.0
|
||||
OPTIONS
|
||||
"INSTALL_GTEST OFF"
|
||||
"gtest_force_shared_crt ON"
|
||||
include(FetchContent)
|
||||
|
||||
set(INSTALL_GTEST OFF CACHE BOOL "Install GoogleTest" FORCE)
|
||||
set(gtest_force_shared_crt ON CACHE BOOL "Use the shared MSVC runtime for GoogleTest" FORCE)
|
||||
|
||||
FetchContent_Declare(
|
||||
googletest
|
||||
GIT_REPOSITORY https://github.com/google/googletest.git
|
||||
GIT_TAG v1.18.0
|
||||
GIT_SHALLOW TRUE
|
||||
)
|
||||
FetchContent_MakeAvailable(googletest)
|
||||
set_property(TARGET
|
||||
gtest
|
||||
gtest_main
|
||||
gmock
|
||||
gmock_main
|
||||
PROPERTY FOLDER third_party/GoogleTest)
|
||||
PROPERTY FOLDER third_party/GoogleTest)
|
||||
+29
-15
@@ -1,20 +1,34 @@
|
||||
include_guard()
|
||||
|
||||
function( target_enable_sanitizers _target )
|
||||
if( MSVC )
|
||||
string(FIND "$ENV{PATH}" "$ENV{VSINSTALLDIR}" index_of_vs_install_dir)
|
||||
include(CheckCXXSourceCompiles)
|
||||
include(CMakePushCheckState)
|
||||
|
||||
if("${index_of_vs_install_dir}" STREQUAL "-1")
|
||||
message(
|
||||
SEND_ERROR
|
||||
"Using MSVC sanitizers requires setting the MSVC environment before building the project. Please manually open the MSVC command prompt and rebuild the project."
|
||||
)
|
||||
endif()
|
||||
|
||||
target_compile_options(${_target} PUBLIC /fsanitize=address /Zi /INCREMENTAL:NO)
|
||||
target_link_options(${_target} PUBLIC /INCREMENTAL:NO)
|
||||
function(target_enable_sanitizers _target)
|
||||
if(MSVC)
|
||||
set(_compile_options /fsanitize=address)
|
||||
set(_link_options /INCREMENTAL:NO)
|
||||
# Use the same settings for this target and the capability check.
|
||||
set_property(TARGET ${_target} PROPERTY MSVC_RUNTIME_CHECKS "")
|
||||
set_property(TARGET ${_target} PROPERTY MSVC_DEBUG_INFORMATION_FORMAT ProgramDatabase)
|
||||
set(CMAKE_MSVC_RUNTIME_CHECKS "")
|
||||
set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT ProgramDatabase)
|
||||
elseif(CMAKE_CXX_COMPILER_ID MATCHES "^(GNU|Clang|AppleClang)$")
|
||||
set(_compile_options -fsanitize=address,undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer)
|
||||
set(_link_options -fsanitize=address,undefined)
|
||||
else()
|
||||
target_compile_options(${_target} INTERFACE -fsanitize=address,leak,undefined)
|
||||
target_link_options(${_target} INTERFACE -fsanitize=address,leak,undefined)
|
||||
message(FATAL_ERROR "Sanitizers are not configured for ${CMAKE_CXX_COMPILER_ID}")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
cmake_push_check_state(RESET)
|
||||
string(JOIN " " CMAKE_REQUIRED_FLAGS ${_compile_options})
|
||||
set(CMAKE_REQUIRED_LINK_OPTIONS ${_link_options})
|
||||
set(CMAKE_TRY_COMPILE_TARGET_TYPE EXECUTABLE)
|
||||
check_cxx_source_compiles("int main() { return 0; }" REPO_LENS_SANITIZERS_SUPPORTED)
|
||||
cmake_pop_check_state()
|
||||
if(NOT REPO_LENS_SANITIZERS_SUPPORTED)
|
||||
message(FATAL_ERROR "The requested sanitizer configuration cannot compile and link. Check compiler/runtime installation or configure with ENABLE_SANITIZERS=OFF.")
|
||||
endif()
|
||||
|
||||
target_compile_options(${_target} PRIVATE ${_compile_options})
|
||||
target_link_options(${_target} PRIVATE ${_link_options})
|
||||
endfunction()
|
||||
@@ -0,0 +1,4 @@
|
||||
# Apple's compiler wrappers use the active Xcode/Command Line Tools installation.
|
||||
include_guard(GLOBAL)
|
||||
set(CMAKE_C_COMPILER /usr/bin/clang CACHE FILEPATH "C compiler")
|
||||
set(CMAKE_CXX_COMPILER /usr/bin/clang++ CACHE FILEPATH "C++ compiler")
|
||||
@@ -0,0 +1,4 @@
|
||||
# Native LLVM Clang builds; compiler executables must be on PATH.
|
||||
include_guard(GLOBAL)
|
||||
set(CMAKE_C_COMPILER clang CACHE FILEPATH "C compiler")
|
||||
set(CMAKE_CXX_COMPILER clang++ CACHE FILEPATH "C++ compiler")
|
||||
@@ -0,0 +1,4 @@
|
||||
# Native GCC builds; compiler executables must be on PATH.
|
||||
include_guard(GLOBAL)
|
||||
set(CMAKE_C_COMPILER gcc CACHE FILEPATH "C compiler")
|
||||
set(CMAKE_CXX_COMPILER g++ CACHE FILEPATH "C++ compiler")
|
||||
@@ -0,0 +1,4 @@
|
||||
# Run Ninja builds in a Visual Studio developer environment.
|
||||
include_guard(GLOBAL)
|
||||
set(CMAKE_C_COMPILER cl CACHE FILEPATH "C compiler")
|
||||
set(CMAKE_CXX_COMPILER cl CACHE FILEPATH "C++ compiler")
|
||||
Reference in new issue
Block a user