diff --git a/.clang-tidy b/.clang-tidy new file mode 100644 index 0000000..d28ed7a --- /dev/null +++ b/.clang-tidy @@ -0,0 +1,22 @@ +# .clang-tidy +--- +Checks: > + -*, + bugprone-*, + clang-analyzer-*, + cppcoreguidelines-*, + modernize-*, + performance-*, + readability-*, + portability-*, + + -modernize-use-trailing-return-type, + -readability-avoid-const-params-in-decls, + -cppcoreguidelines-macro-usage, + -cppcoreguidelines-avoid-do-while + +ExcludeHeaderFilterRegex: '_generated.*' + +CheckOptions: + - key: readability-implicit-bool-conversion.AllowPointerConditions + value: true \ No newline at end of file diff --git a/.gitea/workflows/sonarqube.yml b/.gitea/workflows/sonarqube.yml new file mode 100644 index 0000000..6e8c798 --- /dev/null +++ b/.gitea/workflows/sonarqube.yml @@ -0,0 +1,47 @@ +name: Bigfoot + +on: + push: + branches: + - main + - Development + +jobs: + build-and-test: + runs-on: ubuntu-latest + timeout-minutes: 120 + container: + image: git.romainboullard.com/bigfootdev/linuxbigfootbuilder:main + name: "Sonarqube" + steps: + - name: Install Node.js + run: apt-get update && apt-get install -y nodejs + + - name: Checkout repository + uses: actions/checkout@v6 + with: + fetch-depth: 0 + submodules: recursive + + - name: Generate + run: | + conan install . --deployer=full_deploy --deployer-folder=build --remote=bigfootpackages -pr:h=clang_coverage -pr:b=clang_coverage --build=missing -s build_type=Debug -o bigfoot/*:build_tests=True -o bigfoot/*:tracy=False -o bigfoot/*:build_tools=True -o bigfoot/*:vulkan=True -o bigfoot/*:build_benchmarks=True + cmake -S . -B ./build/Debug --toolchain ./build/Debug/generators/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Debug -G "Ninja" + cmake --build build/Debug --parallel $(nproc) + + - name: Clang-Tidy + run: run-clang-tidy -p ./build/Debug/ >> tidy_result.txt + + - name: Infer + run: infer run --compilation-database build/Debug/compile_commands.json + + - name: SonarQube Scan + if: github.head_ref == 'main' || github.ref_name == 'main' + uses: SonarSource/sonarqube-scan-action@v7.0.0 + with: + args: > + -Dsonar.cxx.jsonCompilationDatabase=./build/Debug/compile_commands.json + -Dsonar.verbose=true + env: + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + SONAR_HOST_URL: ${{ secrets.SONAR_HOST }} \ No newline at end of file diff --git a/.inferconfig b/.inferconfig new file mode 100644 index 0000000..0e0dcd2 --- /dev/null +++ b/.inferconfig @@ -0,0 +1,3 @@ +{ + +} \ No newline at end of file diff --git a/Bigfoot/Sources/Utils/Include/Utils/Singleton.hpp b/Bigfoot/Sources/Utils/Include/Utils/Singleton.hpp index b954882..2f8a36a 100644 --- a/Bigfoot/Sources/Utils/Include/Utils/Singleton.hpp +++ b/Bigfoot/Sources/Utils/Include/Utils/Singleton.hpp @@ -9,6 +9,7 @@ #include #include +#include #include #include @@ -32,7 +33,7 @@ class Singleton */ static constexpr TYPE& Instance() { - return *eastl::bit_cast(ms_instance.data()); + return ms_instance.value(); } /** @@ -88,9 +89,7 @@ class Singleton template static void Initialize(ARGS&&... p_args) { - new (ms_instance.data()) TYPE(eastl::forward(p_args)...); - - ms_initialized = true; + ms_instance.emplace(eastl::forward(p_args)...); } /** @@ -99,20 +98,13 @@ class Singleton */ static void Finalize() { - eastl::bit_cast(ms_instance.data())->~TYPE(); - - ms_initialized = false; + ms_instance.reset(); } /** * The singleton. */ - alignas(alignof(TYPE)) inline static eastl::array ms_instance; - - /** - * Is the singleton initialized? - */ - inline static bool ms_initialized = false; + inline static eastl::optional ms_instance; }; } // namespace Bigfoot #endif diff --git a/Bigfoot/Sources/Utils/Include/Utils/Version.hpp b/Bigfoot/Sources/Utils/Include/Utils/Version.hpp index 2751ec9..68e0bfa 100644 --- a/Bigfoot/Sources/Utils/Include/Utils/Version.hpp +++ b/Bigfoot/Sources/Utils/Include/Utils/Version.hpp @@ -92,7 +92,7 @@ class Version return m_combined; } - [[nodiscard]] operator std::string() const; + operator std::string() const; constexpr Version& operator=(const Version& p_version) = default; diff --git a/CMake/Package.cmake b/CMake/Package.cmake index 8f46ecd..ed86db9 100644 --- a/CMake/Package.cmake +++ b/CMake/Package.cmake @@ -22,6 +22,8 @@ function(bigfoot_create_package_lib PackagePublicDependencies PackagePrivateDepe ${_BF_SOURCES} ) + target_compile_options(${PROJECT_NAME} PRIVATE ${BIGFOOT_CXX_FLAGS}) + target_link_libraries(${PROJECT_NAME} PUBLIC unordered_dense::unordered_dense EASTL::EASTL flatbuffers::flatbuffers rapidhash::rapidhash) target_link_libraries(${PROJECT_NAME} PRIVATE ${CMAKE_DL_LIBS}) @@ -55,6 +57,9 @@ function(bigfoot_create_package_tests ParentFolder BigfootDependencies) ${_BF_TEST_SOURCES} ) + target_compile_options(${PROJECT_NAME} PRIVATE ${BIGFOOT_CXX_FLAGS}) + target_link_options(${PROJECT_NAME} PRIVATE ${BIGFOOT_EXE_LINK_FLAGS}) + target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/Include) target_link_libraries(${PROJECT_NAME} PRIVATE $) @@ -89,5 +94,4 @@ function(bigfoot_create_package_tests ParentFolder BigfootDependencies) add_dependencies(${PROJECT_NAME} ${PROJECT_NAME}Fixture) set_target_properties(${PROJECT_NAME}Fixture PROPERTIES FOLDER UtilityTargets/Tests/Bigfoot/${ParentFolder}) - endfunction() \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 0fd09f0..665a2ff 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,6 @@ cmake_minimum_required(VERSION 3.24) +# CMake sets this flag by default, we don't use exception in bigfoot, we can remove it string(REPLACE "/EHsc" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") project(Bigfoot VERSION 0.1.0 diff --git a/README.md b/README.md index ec83174..5a66607 100644 --- a/README.md +++ b/README.md @@ -11,11 +11,9 @@ The goal is to build a multiplatform, API agnostic, 3D engine. Since this is a l ### Requirements 1. [ConanV2](https://conan.io/) -2. [SQLite3 tools](https://www.sqlite.org/download.html) available from the command line 3. [Vulkan SDK](https://www.lunarg.com/vulkan-sdk/) (If you target Vulkan) 4. [CMake](https://cmake.org/) 5. [Git](https://git-scm.com/) -6. [RenderDoc](https://renderdoc.org/) (If you want to use the integrated RenderDoc API) 7. [Python3](https://www.python.org/) #### Additional requirements for Linux @@ -50,16 +48,14 @@ You can customize these scripts to opt-out of some Bigfoot features 'Just' modify these lines to disable them (I promise to one day modify the script to do it from the command line) ``` -bigfoot/*:unity_build=True -o bigfoot/*:build_tests=True -o bigfoot/*:tracy=True -o bigfoot/*:build_tools=True -o bigfoot/*:vulkan=True -o bigfoot/*:build_benchmarks=True -o bigfoot/*:render_doc=True +-o bigfoot/*:build_tests=True -o bigfoot/*:tracy=True -o bigfoot/*:build_tools=True -o bigfoot/*:vulkan=True -o bigfoot/*:build_benchmarks=True ``` -1. unity_build: Enable/Disable [unity builds](https://cmake.org/cmake/help/latest/variable/CMAKE_UNITY_BUILD.html) feature (will slow down compilation times) -2. build_tests: Enable/Disable the tests -3. tracy: Enable/Disable profiling using [Tracy](https://github.com/wolfpld/tracy) -4. build_tools: Enable/Disable the tools (I'd absolutely recommand not disabling this if you are building benchamrks or tests) -5. vulkan: Enable/Disable Vulkan renderer (No point disabling it, since for now only Vulkan is available in Bigfoot) -6. build_benchmarks: Enable/Disable the benchmarks -7. render_doc: Enable/Disable the possitbility to use [RenderDoc](https://renderdoc.org/) API to capture from code +1. build_tests: Enable/Disable the tests +2. tracy: Enable/Disable profiling using [Tracy](https://github.com/wolfpld/tracy) +3. build_tools: Enable/Disable the tools (I'd absolutely recommand not disabling this) +4. vulkan: Enable/Disable Vulkan renderer (No point disabling it, since for now only Vulkan is available in Bigfoot) +5. build_benchmarks: Enable/Disable the benchmarks ### Generating Bigfoot diff --git a/conanfile.py b/conanfile.py index 5e7c205..ffad6ab 100644 --- a/conanfile.py +++ b/conanfile.py @@ -65,7 +65,7 @@ class Bigfoot(ConanFile): self.requires("eastl/3.27.01@bigfootdev/main", transitive_headers=True) self.requires("unordered_dense/4.8.1@bigfootdev/main", transitive_headers=True) self.requires("mimalloc/3.1.5@bigfootdev/main", transitive_headers=True) - self.requires("stduuid/1.2.3", transitive_headers=True) + self.requires("stduuid/1.2.3@bigfootdev/main", transitive_headers=True) self.requires("sqlite3/3.51.0@bigfootdev/main", transitive_headers=True) self.requires("cli11/2.6.0") self.requires("rapidhash/3.0@bigfootdev/main", transitive_headers=True) diff --git a/sonar-project.properties b/sonar-project.properties new file mode 100644 index 0000000..6ff664b --- /dev/null +++ b/sonar-project.properties @@ -0,0 +1,14 @@ +sonar.projectKey=Bigfoot + +sonar.projectVersion=0.1.0 + +sonar.sourceEncoding=UTF-8 + +sonar.sources=Bigfoot/Sources +sonar.tests=Bigfoot/Tests + +sonar.cxx.file.suffixes=.hpp,.cpp,.h +sonar.cxx.clangtidy.reportPaths=tidy_result.txt +sonar.cxx.infer.reportPaths=infer-out/report.json + +sonar.cxx.jsonCompilationDatabase.analyzeOnlyContainedFiles=True