From 2093309f13a5e56cc99e73ad9abb0d64f539de28 Mon Sep 17 00:00:00 2001 From: Eugeniusz Lewandowski Date: Mon, 27 Jan 2025 18:19:57 +0000 Subject: [PATCH 1/2] Fixed compilation errors --- .gitignore | 3 +++ CMakeLists.txt | 6 ++---- cmake/CPM.cmake | 27 ++++++++------------------- cmake/Hardening.cmake | 6 ++++-- cmake/PackageProject.cmake | 4 +--- cmake/StaticAnalyzers.cmake | 2 ++ fuzz_test/fuzz_tester.cpp | 10 ++++++++-- src/ftxui_sample/main.cpp | 33 ++++++++++++++++++++++++++------- test/constexpr_tests.cpp | 10 +++++----- test/tests.cpp | 10 +++++----- 10 files changed, 64 insertions(+), 47 deletions(-) diff --git a/.gitignore b/.gitignore index 6eff7441..36950bae 100644 --- a/.gitignore +++ b/.gitignore @@ -22,6 +22,9 @@ CMakeUserPresets.json _ReSharper* *.log +# Clangd files +.cache/ + # OS Generated Files .DS_Store .AppleDouble diff --git a/CMakeLists.txt b/CMakeLists.txt index 45e19f03..1ca83fa3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,7 @@ cmake_minimum_required(VERSION 3.21) # manual dependency management # Only set the cxx_standard if it is not set by someone else -if (NOT DEFINED CMAKE_CXX_STANDARD) +if(NOT DEFINED CMAKE_CXX_STANDARD) set(CMAKE_CXX_STANDARD 20) endif() @@ -25,7 +25,6 @@ project( include(cmake/PreventInSourceBuilds.cmake) include(ProjectOptions.cmake) - myproject_setup_options() myproject_global_options() @@ -73,10 +72,9 @@ if(BUILD_TESTING) add_subdirectory(test) endif() - if(myproject_BUILD_FUZZ_TESTS) message(AUTHOR_WARNING "Building Fuzz Tests, using fuzzing sanitizer https://www.llvm.org/docs/LibFuzzer.html") - if (NOT myproject_ENABLE_ADDRESS_SANITIZER AND NOT myproject_ENABLE_THREAD_SANITIZER) + if(NOT myproject_ENABLE_ADDRESS_SANITIZER AND NOT myproject_ENABLE_THREAD_SANITIZER) message(WARNING "You need asan or tsan enabled for meaningful fuzz testing") endif() add_subdirectory(fuzz_test) diff --git a/cmake/CPM.cmake b/cmake/CPM.cmake index a3086b79..226a4f70 100644 --- a/cmake/CPM.cmake +++ b/cmake/CPM.cmake @@ -1,4 +1,9 @@ -set(CPM_DOWNLOAD_VERSION 0.38.1) +# SPDX-License-Identifier: MIT +# +# SPDX-FileCopyrightText: Copyright (c) 2019-2023 Lars Melchior and contributors + +set(CPM_DOWNLOAD_VERSION 0.40.5) +set(CPM_HASH_SUM "c46b876ae3b9f994b4f05a4c15553e0485636862064f1fcc9d8b4f832086bc5d") if(CPM_SOURCE_CACHE) set(CPM_DOWNLOAD_LOCATION "${CPM_SOURCE_CACHE}/cpm/CPM_${CPM_DOWNLOAD_VERSION}.cmake") @@ -11,23 +16,7 @@ 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() +file(DOWNLOAD https://github.com/cpm-cmake/CPM.cmake/releases/download/v${CPM_DOWNLOAD_VERSION}/CPM.cmake + ${CPM_DOWNLOAD_LOCATION} EXPECTED_HASH SHA256=${CPM_HASH_SUM}) include(${CPM_DOWNLOAD_LOCATION}) diff --git a/cmake/Hardening.cmake b/cmake/Hardening.cmake index 5f61d229..88bc4015 100644 --- a/cmake/Hardening.cmake +++ b/cmake/Hardening.cmake @@ -17,8 +17,10 @@ macro( set(NEW_CXX_DEFINITIONS "${NEW_CXX_DEFINITIONS} -D_GLIBCXX_ASSERTIONS") message(STATUS "*** GLIBC++ Assertions (vector[], string[], ...) enabled") - set(NEW_COMPILE_OPTIONS "${NEW_COMPILE_OPTIONS} -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=3") - message(STATUS "*** g++/clang _FORTIFY_SOURCE=3 enabled") + if(CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_CXX_FLAGS MATCHES "-O[123]") + set(NEW_COMPILE_OPTIONS "${NEW_COMPILE_OPTIONS} -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=3") + message(STATUS "*** g++/clang _FORTIFY_SOURCE=3 enabled") + endif() # check_cxx_compiler_flag(-fpie PIE) #if(PIE) diff --git a/cmake/PackageProject.cmake b/cmake/PackageProject.cmake index f8314268..6e429a8b 100644 --- a/cmake/PackageProject.cmake +++ b/cmake/PackageProject.cmake @@ -179,9 +179,7 @@ function(myproject_package_project) # download ycm FetchContent_Declare(_ycm URL https://github.com/robotology/ycm/archive/refs/tags/v0.13.0.zip) FetchContent_GetProperties(_ycm) - if(NOT _ycm_POPULATED) - FetchContent_Populate(_ycm) - endif() + FetchContent_MakeAvailable(_ycm) include("${_ycm_SOURCE_DIR}/modules/InstallBasicPackageFiles.cmake") install_basic_package_files(${_PackageProject_NAME} "${_FARGS_LIST}") diff --git a/cmake/StaticAnalyzers.cmake b/cmake/StaticAnalyzers.cmake index 904aff29..585f6394 100644 --- a/cmake/StaticAnalyzers.cmake +++ b/cmake/StaticAnalyzers.cmake @@ -29,6 +29,8 @@ macro(myproject_enable_cppcheck WARNINGS_AS_ERRORS CPPCHECK_OPTIONS) --suppress=syntaxError --suppress=preprocessorErrorDirective --inconclusive + # Ignores static asserts that are true + --suppress=knownConditionTrueFalse --suppress=${SUPPRESS_DIR}) else() # if the user provides a CPPCHECK_OPTIONS with a template specified, it will override this template diff --git a/fuzz_test/fuzz_tester.cpp b/fuzz_test/fuzz_tester.cpp index ed0fc4ce..343749ae 100644 --- a/fuzz_test/fuzz_tester.cpp +++ b/fuzz_test/fuzz_tester.cpp @@ -1,6 +1,9 @@ -#include +#include +#include +#include //NOLINT #include -#include + +namespace { [[nodiscard]] auto sum_values(const uint8_t *Data, size_t Size) { @@ -12,11 +15,14 @@ } return value; } +}// namespace // Fuzzer that attempts to invoke undefined behavior for signed integer overflow // cppcheck-suppress unusedFunction symbolName=LLVMFuzzerTestOneInput +namespace { extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { fmt::print("Value sum: {}, len{}\n", sum_values(Data, Size), Size); return 0; } +}// namespace diff --git a/src/ftxui_sample/main.cpp b/src/ftxui_sample/main.cpp index aa53beaf..ebe91ae5 100644 --- a/src/ftxui_sample/main.cpp +++ b/src/ftxui_sample/main.cpp @@ -1,15 +1,26 @@ +#include #include -#include -#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include #include -#include -#include // for ftxui +#include //NOLINT #include // for Slider #include // for ScreenInteractive +#include #include +#include +#include #include @@ -90,6 +101,8 @@ template struct GameBoard }; +namespace { + void consequence_game() { auto screen = ftxui::ScreenInteractive::TerminalOutput(); @@ -162,6 +175,7 @@ void consequence_game() screen.Loop(renderer); } +}// namespace struct Color { @@ -177,12 +191,12 @@ struct Bitmap : ftxui::Node : width_(width), height_(height) {} - Color &at(std::size_t cur_x, std::size_t cur_y) { return pixels.at(width_ * cur_y + cur_x); } + Color &at(std::size_t cur_x, std::size_t cur_y) { return pixels.at((width_ * cur_y) + cur_x); } void ComputeRequirement() override { requirement_ = ftxui::Requirement{ - .min_x = static_cast(width_), .min_y = static_cast(height_ / 2), .selected_box{ 0, 0, 0, 0 } + .min_x = static_cast(width_), .min_y = static_cast(height_ / 2), .selected_box{ 0, 0, 0, 0 }// NOLINT }; } @@ -193,7 +207,7 @@ struct Bitmap : ftxui::Node auto &pixel = screen.PixelAt(box_.x_min + static_cast(cur_x), box_.y_min + static_cast(cur_y)); pixel.character = "▄"; const auto &top_color = at(cur_x, cur_y * 2); - const auto &bottom_color = at(cur_x, cur_y * 2 + 1); + const auto &bottom_color = at(cur_x, (cur_y * 2) + 1); pixel.background_color = ftxui::Color{ top_color.R.get(), top_color.G.get(), top_color.B.get() }; pixel.foreground_color = ftxui::Color{ bottom_color.R.get(), bottom_color.G.get(), bottom_color.B.get() }; } @@ -213,6 +227,8 @@ struct Bitmap : ftxui::Node std::vector pixels = std::vector(width_ * height_, Color{}); }; +namespace { + void game_iteration_canvas() { // this should probably have a `bitmap` helper function that does what cur_you expect @@ -257,6 +273,8 @@ void game_iteration_canvas() case 2: small_bm_pixel.B += 11;// NOLINT Magic Number break; + default: + break; } @@ -308,6 +326,7 @@ void game_iteration_canvas() refresh_ui_continue = false; refresh_ui.join(); } +}// namespace // NOLINTNEXTLINE(bugprone-exception-escape) int main(int argc, const char **argv) diff --git a/test/constexpr_tests.cpp b/test/constexpr_tests.cpp index fe36db5e..22a91fa2 100644 --- a/test/constexpr_tests.cpp +++ b/test/constexpr_tests.cpp @@ -4,9 +4,9 @@ TEST_CASE("Factorials are computed with constexpr", "[factorial]") { - STATIC_REQUIRE(factorial_constexpr(0) == 1); - STATIC_REQUIRE(factorial_constexpr(1) == 1); - STATIC_REQUIRE(factorial_constexpr(2) == 2); - STATIC_REQUIRE(factorial_constexpr(3) == 6); - STATIC_REQUIRE(factorial_constexpr(10) == 3628800); + STATIC_REQUIRE((factorial_constexpr(0) == 1)); + STATIC_REQUIRE((factorial_constexpr(1) == 1)); + STATIC_REQUIRE((factorial_constexpr(2) == 2)); + STATIC_REQUIRE((factorial_constexpr(3) == 6)); + STATIC_REQUIRE((factorial_constexpr(10) == 3628800)); } diff --git a/test/tests.cpp b/test/tests.cpp index 5b632e2e..a3e0e70e 100644 --- a/test/tests.cpp +++ b/test/tests.cpp @@ -6,9 +6,9 @@ TEST_CASE("Factorials are computed", "[factorial]") { - REQUIRE(factorial(0) == 1); - REQUIRE(factorial(1) == 1); - REQUIRE(factorial(2) == 2); - REQUIRE(factorial(3) == 6); - REQUIRE(factorial(10) == 3628800); + REQUIRE((factorial(0) == 1)); + REQUIRE((factorial(1) == 1)); + REQUIRE((factorial(2) == 2)); + REQUIRE((factorial(3) == 6)); + REQUIRE((factorial(10) == 3628800)); } From 27d6e0cc215e8957b49887ff9eb66e2ba2fe5821 Mon Sep 17 00:00:00 2001 From: Eugeniusz Lewandowski Date: Mon, 27 Jan 2025 18:24:34 +0000 Subject: [PATCH 2/2] Re-added logging removed by accident --- cmake/CPM.cmake | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/cmake/CPM.cmake b/cmake/CPM.cmake index 226a4f70..a638158d 100644 --- a/cmake/CPM.cmake +++ b/cmake/CPM.cmake @@ -19,4 +19,19 @@ get_filename_component(CPM_DOWNLOAD_LOCATION ${CPM_DOWNLOAD_LOCATION} ABSOLUTE) file(DOWNLOAD https://github.com/cpm-cmake/CPM.cmake/releases/download/v${CPM_DOWNLOAD_VERSION}/CPM.cmake ${CPM_DOWNLOAD_LOCATION} EXPECTED_HASH SHA256=${CPM_HASH_SUM}) +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})