diff --git a/.clang-tidy b/.clang-tidy new file mode 100644 index 00000000..2b6077ca --- /dev/null +++ b/.clang-tidy @@ -0,0 +1,11 @@ +Checks: '-*,bugprone-*,cert-dcl21-cpp,cert-dcl50-cpp,cert-env33-c,cert-err52-cpp,cert-err60-cpp,cert-flp30-c,cert-msc50-cpp,cert-msc51-cpp,cppcoreguidelines-*,-cppcoreguidelines-macro-usage,-cppcoreguidelines-pro-type-reinterpret-cast,-cppcoreguidelines-pro-type-union-access,-cppcoreguidelines-pro-bounds-pointer-arithmetic,-cppcoreguidelines-pro-type-vararg,google-build-using-namespace,google-explicit-constructor,google-global-names-in-headers,google-readability-casting,google-runtime-int,google-runtime-operator,hicpp-*,-hicpp-vararg,misc-*,modernize-*,performance-*,readability-*,-readability-named-parameter,-modernize-use-trailing-return-type,-cppcoreguidelines-avoid-magic-numbers,-readability-magic-numbers,-hicpp-signed-bitwise,-hicpp-uppercase-literal-suffix,-cppcoreguidelines-pro-bounds-array-to-pointer-decay,-hicpp-named-parameter,-cppcoreguidelines-avoid-goto,-cppcoreguidelines-avoid-non-const-global-variables,-hicpp-avoid-goto,-cppcoreguidelines-owning-memory,-readability-uppercase-literal-suffix,-readability-implicit-bool-conversion,-hicpp-no-array-decay,-hicpp-no-malloc,-readability-use-anyofallof,-cppcoreguidelines-prefer-member-initializer,-performance-no-int-to-ptr,-cppcoreguidelines-pro-type-const-cast,-cppcoreguidelines-special-member-functions,-hicpp-special-member-functions,-bugprone-reserved-identifier,-bugprone-easily-swappable-parameters, -bugprone-implicit-widening-of-multiplication-result,-google-explicit-constructor,-bugprone-exception-escape,-hicpp-exception-baseclass,-cppcoreguidelines-prefer-member-initializer,-bugprone-macro-parentheses,-bugprone-suspicious-missing-comma,-bugprone-sizeof-expression,-bugprone-throw-keyword-missing,-cppcoreguidelines-no-malloc,-bugprone-branch-clone,-cppcoreguidelines-pro-bounds-constant-array-index,-hicpp-explicit-conversions,-cppcoreguidelines-pro-type-member-init,-hicpp-member-init,-bugprone-lambda-function-name,-readability-function-cognitive-complexity,-misc-no-recursion,-misc-throw-by-value-catch-by-reference,-readability-simplify-boolean-expr,-readability-identifier-length,-readability-container-data-pointer,-cppcoreguidelines-virtual-class-destructor,-misc-non-private-member-variables-in-classes,-modernize-use-default-member-init,-google-readability-casting,-bugprone-suspicious-memory-comparison,-modernize-use-nodiscard,-modernize-concat-nested-namespaces,-cppcoreguidelines-avoid-do-while,-modernize-macro-to-enum,-misc-const-correctness,-cppcoreguidelines-avoid-const-or-ref-data-members,-misc-use-anonymous-namespace,-misc-misplaced-const,-readability-redundant-member-init,-cppcoreguidelines-macro-to-enum,-misc-include-cleaner,-performance-enum-size,-bugprone-empty-catch,-readability-duplicate-include,-readability-avoid-unconditional-preprocessor-if,-cppcoreguidelines-rvalue-reference-param-not-moved,-cppcoreguidelines-missing-std-forward,-bugprone-casting-through-void,-cppcoreguidelines-non-private-member-variables-in-classes' +CheckOptions: + - key: bugprone-argument-comment.StrictMode + value: 1 + - key: bugprone-exception-escape.FunctionsThatShouldNotThrow + value: WinMain,SDL_main + - key: misc-non-private-member-variables-in-classes.IgnoreClassesWithAllMemberVariablesBeingPublic + value: 1 +FormatStyle: 'file' +WarningsAsErrors: '*' +HeaderFilterRegex: '.*src.*\.hpp$' diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b886ae55..bf8b383a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -24,6 +24,35 @@ on: # cancel-in-progress: true jobs: + clang-tidy: + name: Run Clang Tidy + runs-on: ubuntu-24.04 + steps: + - name: Checkout Source + uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Install Ninja + uses: seanmiddleditch/gha-setup-ninja@v6 + + - name: Install Clang + run: | + wget https://apt.llvm.org/llvm.sh + chmod +x llvm.sh + sudo ./llvm.sh 20 + sudo apt install -y clang-tidy-20 + + - name: CMake Build + run: cmake --preset=${{matrix.preset}} -DCMAKE_TOOLCHAIN_FILE=${{ github.workspace }}/cmake/toolchain/android-ndk.cmake && cmake --build --preset=${{matrix.preset}} + if: ${{ startsWith(matrix.platform, 'Android') }} + env: + ANDROID_NDK_ROOT: ${{ steps.setup-ndk.outputs.ndk-path }} + ANDROID_ABI: ${{matrix.abi}} + + - name: CMake Build + run: cmake --preset=release -DMOMO_ENABLE_CLANG_TIDY=On && cmake --build --preset=release + verify-formatting: name: Verify Formatting runs-on: ubuntu-24.04 @@ -349,7 +378,7 @@ jobs: summary: name: Pipeline Summary runs-on: ubuntu-24.04 - needs: [build-apiset-dumper, smoke-test-android, create-emulation-root, build, test, verify-formatting] + needs: [clang-tidy, build-apiset-dumper, smoke-test-android, create-emulation-root, build, test, verify-formatting] if: always() steps: - uses: geekyeggo/delete-artifact@v5 diff --git a/.github/workflows/review.yml b/.github/workflows/review.yml deleted file mode 100644 index be3779af..00000000 --- a/.github/workflows/review.yml +++ /dev/null @@ -1,25 +0,0 @@ -name: Review -on: [pull_request] - -jobs: - build: - runs-on: ubuntu-latest - - steps: - - name: Checkout Source - uses: actions/checkout@v4 - with: - submodules: recursive - - - name: Clang Tidy Review - uses: ZedThree/clang-tidy-review@v0.20.1 - id: review - with: - cmake_command: cmake . -DCMAKE_EXPORT_COMPILE_COMMANDS=on - - - name: Upload Review - uses: ZedThree/clang-tidy-review/upload@v0.20.1 - id: upload-review - - - if: steps.review.outputs.total_comments > 0 - run: exit 1 diff --git a/CMakeLists.txt b/CMakeLists.txt index 1c0b8964..cf72e772 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,6 +3,7 @@ cmake_minimum_required(VERSION 3.26.4) ########################################## option(MOMO_ENABLE_SANITIZER "Enable sanitizer" OFF) +option(MOMO_ENABLE_CLANG_TIDY "Enable clang-tidy checks" OFF) option(MOMO_BUILD_AS_LIBRARY "Configure and Build the emulator as a shared library (without the samples and tests)" OFF) set(MOMO_REFLECTION_LEVEL "0" CACHE STRING "Reflection level for the build") @@ -62,3 +63,4 @@ momo_targets_disable_warnings(${EXTERNAL_TARGETS}) momo_targets_expose_includes(${OWN_TARGETS}) momo_targets_set_warnings_as_errors(${OWN_TARGETS}) +momo_targets_enable_clang_tidy(${OWN_TARGETS}) diff --git a/cmake/utils.cmake b/cmake/utils.cmake index 9c67459f..c1939de7 100644 --- a/cmake/utils.cmake +++ b/cmake/utils.cmake @@ -346,3 +346,22 @@ endfunction() macro(momo_assign_source_group) source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${ARGN}) endmacro() + +########################################## + +function(momo_target_enable_clang_tidy target) + if(MOMO_ENABLE_CLANG_TIDY) + set(CLANG_TIDY_COMMAND "clang-tidy;--use-color;--config-file=${CMAKE_CURRENT_SOURCE_DIR}/.clang-tidy") + + set_target_properties(${target} PROPERTIES C_CLANG_TIDY "${CLANG_TIDY_COMMAND}") + set_target_properties(${target} PROPERTIES CXX_CLANG_TIDY "${CLANG_TIDY_COMMAND}") + endif() +endfunction() + +########################################## + +function(momo_targets_enable_clang_tidy) + foreach(target ${ARGV}) + momo_target_enable_clang_tidy(${target}) + endforeach() +endfunction()