diff --git a/Sofa/framework/Config/CMakeLists.txt b/Sofa/framework/Config/CMakeLists.txt index 97d3f52ebb0..0d3bde489d1 100644 --- a/Sofa/framework/Config/CMakeLists.txt +++ b/Sofa/framework/Config/CMakeLists.txt @@ -310,6 +310,8 @@ target_link_options(${PROJECT_NAME} PUBLIC "$<${is_c_cxx_release}:${SOFACONFIG_L target_link_options(${PROJECT_NAME} PUBLIC "$<${is_c_cxx_debug}:${SOFACONFIG_LINK_OPTIONS_DEBUG}>") target_link_options(${PROJECT_NAME} PUBLIC "$<${is_c_cxx}:${SOFACONFIG_LINK_OPTIONS}>") +sofa_enable_clang_tidy(${PROJECT_NAME}) + set_target_properties(${PROJECT_NAME} PROPERTIES FOLDER Sofa.Framework) # IDE folder # Attach Sofa Version into properties diff --git a/Sofa/framework/Config/cmake/SofaMacrosConfigure.cmake b/Sofa/framework/Config/cmake/SofaMacrosConfigure.cmake index c34d3249cc5..c18347b6cd3 100644 --- a/Sofa/framework/Config/cmake/SofaMacrosConfigure.cmake +++ b/Sofa/framework/Config/cmake/SofaMacrosConfigure.cmake @@ -508,3 +508,29 @@ macro(sofa_set_targets_release_only) endmacro() + +function(sofa_enable_clang_tidy TARGET_NAME) + cmake_parse_arguments(CT "" "CHECKS" "" ${ARGN}) + + if(NOT TARGET "${TARGET_NAME}") + message(FATAL_ERROR "enable_clang_tidy: '${TARGET_NAME}' is not a target") + endif() + + find_program(CLANG_TIDY_EXE NAMES clang-tidy) + if(NOT CLANG_TIDY_EXE) + message(STATUS "clang-tidy not found; skipping for target '${TARGET_NAME}. Install clang-tidy and add it to your PATH environment variable.'") + return() + endif() + + set(cmd "${CLANG_TIDY_EXE}") + if(CT_CHECKS) + list(APPEND cmd "-checks=${CT_CHECKS}") + endif() + + # Enable clang-tidy only for this target + set_target_properties("${TARGET_NAME}" PROPERTIES + C_CLANG_TIDY "${cmd}" + CXX_CLANG_TIDY "${cmd}" + ) +endfunction() + diff --git a/Sofa/framework/Type/CMakeLists.txt b/Sofa/framework/Type/CMakeLists.txt index f1025c58fd8..a698ab0870c 100644 --- a/Sofa/framework/Type/CMakeLists.txt +++ b/Sofa/framework/Type/CMakeLists.txt @@ -107,6 +107,7 @@ if(mimalloc_FOUND) endif() set_target_properties(${PROJECT_NAME} PROPERTIES FOLDER Sofa.Framework) # IDE folder +sofa_enable_clang_tidy(${PROJECT_NAME}) sofa_create_package_with_targets( PACKAGE_NAME ${PROJECT_NAME}