1
- function (sourcemeta_target_clang_tidy_attempt_install )
1
+ function (sourcemeta_clang_tidy_attempt_install )
2
2
cmake_parse_arguments (SOURCEMETA_TARGET_CLANG_TIDY_ATTEMPT_INSTALL "" "OUTPUT_DIRECTORY" "" ${ARGN} )
3
3
if (NOT SOURCEMETA_TARGET_CLANG_TIDY_ATTEMPT_INSTALL_OUTPUT_DIRECTORY )
4
4
message (FATAL_ERROR "You must pass the output directory in the OUTPUT_DIRECTORY option" )
@@ -76,9 +76,16 @@ function(sourcemeta_target_clang_tidy_attempt_install)
76
76
message (STATUS "Installed `clang-tidy` pre-built binary to ${CLANG_TIDY_BINARY_OUTPUT} " )
77
77
endfunction ()
78
78
79
- function (sourcemeta_target_clang_tidy )
80
- cmake_parse_arguments (SOURCEMETA_TARGET_CLANG_TIDY "REQUIRED" "" "SOURCES" ${ARGN} )
81
- sourcemeta_target_clang_tidy_attempt_install (OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR} /bin" )
79
+ function (sourcemeta_clang_tidy )
80
+ cmake_parse_arguments (SOURCEMETA_TARGET_CLANG_TIDY "REQUIRED" "" "" ${ARGN} )
81
+ sourcemeta_clang_tidy_attempt_install (OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR} /bin" )
82
+
83
+ if (SOURCEMETA_COMPILER_LLVM )
84
+ message (STATUS "Enabling ClangTidy alongside compilation" )
85
+ else ()
86
+ message (STATUS "Ignoring ClangTidy setup on a compiler other than LLVM" )
87
+ return ()
88
+ endif ()
82
89
83
90
if (SOURCEMETA_TARGET_CLANG_TIDY_REQUIRED )
84
91
find_program (CLANG_TIDY_BIN NAMES clang-tidy NO_DEFAULT_PATH
@@ -94,37 +101,21 @@ function(sourcemeta_target_clang_tidy)
94
101
endif ()
95
102
endif ()
96
103
97
-
98
- # This covers the empty list too
99
- if (NOT SOURCEMETA_TARGET_CLANG_TIDY_SOURCES )
100
- message (FATAL_ERROR "You must pass file globs to analyze in the SOURCES option" )
101
- endif ()
102
- file (GLOB_RECURSE SOURCEMETA_TARGET_CLANG_TIDY_FILES
103
- ${SOURCEMETA_TARGET_CLANG_TIDY_SOURCES} )
104
-
105
104
set (CLANG_TIDY_CONFIG "${CMAKE_CURRENT_FUNCTION_LIST_DIR} /clang-tidy.config" )
106
105
107
- if (CMAKE_SYSTEM_NAME STREQUAL "MSYS" )
108
- # Because `clang-tidy` is typically a Windows `.exe`, transform the path accordingly
109
- execute_process (COMMAND cygpath -w "${CLANG_TIDY_CONFIG} "
110
- OUTPUT_VARIABLE CLANG_TIDY_CONFIG OUTPUT_STRIP_TRAILING_WHITESPACE )
111
- endif ()
112
-
113
- if (CLANG_TIDY_BIN )
114
- add_custom_target (clang_tidy
115
- WORKING_DIRECTORY "${PROJECT_SOURCE_DIR} "
116
- VERBATIM
117
- COMMAND "${CLANG_TIDY_BIN} " -p "${PROJECT_BINARY_DIR} "
118
- --config-file "${CLANG_TIDY_CONFIG} "
119
- ${SOURCEMETA_TARGET_CLANG_TIDY_FILES}
120
- COMMENT "Analyzing sources using ClangTidy" )
106
+ # TODO: Get the -std automatically
107
+ if (APPLE )
108
+ set (CMAKE_CXX_CLANG_TIDY
109
+ "${CLANG_TIDY_BIN} ;--config-file=${CLANG_TIDY_CONFIG} "
110
+ "--extra-arg=-std=c++20"
111
+ "--extra-arg=-isysroot"
112
+ "--extra-arg=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk"
113
+ "--extra-arg=-resource-dir=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/17"
114
+ PARENT_SCOPE )
121
115
else ()
122
- add_custom_target (clang_tidy
123
- WORKING_DIRECTORY "${PROJECT_SOURCE_DIR} "
124
- VERBATIM
125
- COMMAND "${CMAKE_COMMAND} " -E echo "Could not locate ClangTidy"
126
- COMMAND "${CMAKE_COMMAND} " -E false )
116
+ set (CMAKE_CXX_CLANG_TIDY
117
+ "${CLANG_TIDY_BIN} ;--config-file=${CLANG_TIDY_CONFIG} "
118
+ "--extra-arg=-std=c++20"
119
+ PARENT_SCOPE )
127
120
endif ()
128
-
129
- set_target_properties (clang_tidy PROPERTIES FOLDER "Linting" )
130
121
endfunction ()
0 commit comments