Skip to content

Commit 95ef54c

Browse files
committed
add missing clang-tidy.cmake
Signed-off-by: Balakrishna Avulapati <ba@bavulapati.com>
1 parent dc40776 commit 95ef54c

File tree

2 files changed

+84
-5
lines changed

2 files changed

+84
-5
lines changed
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
function(sourcemeta_target_clang_tidy_attempt_install)
2+
cmake_parse_arguments(SOURCEMETA_TARGET_CLANG_TIDY_ATTEMPT_INSTALL "" "OUTPUT_DIRECTORY" "" ${ARGN})
3+
if(NOT SOURCEMETA_TARGET_CLANG_TIDY_ATTEMPT_INSTALL_OUTPUT_DIRECTORY)
4+
message(FATAL_ERROR "You must pass the output directory in the OUTPUT_DIRECTORY option")
5+
endif()
6+
7+
# See https://pypi.org/project/clang-tidy/
8+
set(CLANG_TIDY_BINARY_VERSION "20.1.0")
9+
set(CLANG_TIDY_BINARY_Windows_AMD64 "clang_tidy-${CLANG_TIDY_BINARY_VERSION}-py2.py3-none-win_amd64.whl")
10+
set(CLANG_TIDY_BINARY_MSYS_x86_64 "clang_tidy-${CLANG_TIDY_BINARY_VERSION}-py2.py3-none-win_amd64.whl")
11+
set(CLANG_TIDY_BINARY_Darwin_arm64 "clang_tidy-${CLANG_TIDY_BINARY_VERSION}-py2.py3-none-macosx_11_0_arm64.whl")
12+
set(CLANG_TIDY_BINARY_Darwin_x86_64 "clang_tidy-${CLANG_TIDY_BINARY_VERSION}-py2.py3-none-macosx_10_9_x86_64.whl")
13+
set(CLANG_TIDY_BINARY_Linux_aarch64 "clang_tidy-${CLANG_TIDY_BINARY_VERSION}-py2.py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl")
14+
set(CLANG_TIDY_BINARY_Linux_x86_64 "clang_tidy-${CLANG_TIDY_BINARY_VERSION}-py2.py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl")
15+
set(CLANG_TIDY_BINARY_CHECKSUM_Windows_AMD64 "02/f0/dd985d9d9b76f8c39f1995aa475d8d5aabbea0d3e0cf498df44dc7bf1cb0")
16+
set(CLANG_TIDY_BINARY_CHECKSUM_MSYS_x86_64 "02/f0/dd985d9d9b76f8c39f1995aa475d8d5aabbea0d3e0cf498df44dc7bf1cb0")
17+
set(CLANG_TIDY_BINARY_CHECKSUM_Darwin_arm64 "95/02/838baf08764b08327322096bda55e8d1e2344e4a13b9308e5642cfaafd8e")
18+
set(CLANG_TIDY_BINARY_CHECKSUM_Darwin_x86_64 "6d/5b/dcfc84b895d8544e00186738ca85132bbd14db4d11dbe39502630ece5391")
19+
set(CLANG_TIDY_BINARY_CHECKSUM_Linux_aarch64 "be/61/9e1a0797639e81c41d38d7b8b2508a9be4b05b9a23baa9d64e7284d07238")
20+
set(CLANG_TIDY_BINARY_CHECKSUM_Linux_x86_64 "52/76/42c61be1c1fdf8bacdbb265f0cd3e11321fee7362f91fa840717a6a41ad6")
21+
set(CLANG_TIDY_BINARY_NAME_Windows_AMD64 "clang-tidy.exe")
22+
set(CLANG_TIDY_BINARY_NAME_MSYS_x86_64 "clang-tidy.exe")
23+
set(CLANG_TIDY_BINARY_NAME_Darwin_arm64 "clang-tidy")
24+
set(CLANG_TIDY_BINARY_NAME_Darwin_x86_64 "clang-tidy")
25+
set(CLANG_TIDY_BINARY_NAME_Linux_aarch64 "clang-tidy")
26+
set(CLANG_TIDY_BINARY_NAME_Linux_x86_64 "clang-tidy")
27+
28+
# Determine the pre-built binary URL
29+
string(REPLACE "." "_" CLANG_TIDY_BINARY_SYSTEM "${CMAKE_SYSTEM_NAME}")
30+
string(REPLACE "." "_" CLANG_TIDY_BINARY_ARCH "${CMAKE_SYSTEM_PROCESSOR}")
31+
set(CLANG_TIDY_BINARY_URL_VAR "CLANG_TIDY_BINARY_${CLANG_TIDY_BINARY_SYSTEM}_${CLANG_TIDY_BINARY_ARCH}")
32+
set(CLANG_TIDY_BINARY_CHECKSUM_VAR "CLANG_TIDY_BINARY_CHECKSUM_${CLANG_TIDY_BINARY_SYSTEM}_${CLANG_TIDY_BINARY_ARCH}")
33+
set(CLANG_TIDY_BINARY_NAME_VAR "CLANG_TIDY_BINARY_NAME_${CLANG_TIDY_BINARY_SYSTEM}_${CLANG_TIDY_BINARY_ARCH}")
34+
if(NOT DEFINED ${CLANG_TIDY_BINARY_URL_VAR} OR "${${CLANG_TIDY_BINARY_URL_VAR}}" STREQUAL "")
35+
message(WARNING "Skipping `clang-tidy` download. No known pre-build binary URL")
36+
return()
37+
elseif(NOT DEFINED ${CLANG_TIDY_BINARY_CHECKSUM_VAR} OR "${${CLANG_TIDY_BINARY_CHECKSUM_VAR}}" STREQUAL "")
38+
message(FATAL_ERROR "No known `clang-tidy` pre-build binary checksum")
39+
elseif(NOT DEFINED ${CLANG_TIDY_BINARY_NAME_VAR} OR "${${CLANG_TIDY_BINARY_NAME_VAR}}" STREQUAL "")
40+
message(FATAL_ERROR "No known `clang-tidy` pre-build binary name")
41+
endif()
42+
set(CLANG_TIDY_BINARY_URL "https://files.pythonhosted.org/packages/${${CLANG_TIDY_BINARY_CHECKSUM_VAR}}/${${CLANG_TIDY_BINARY_URL_VAR}}")
43+
44+
# Download and extract the pre-built binary ZIP if needed
45+
set(CLANG_TIDY_BINARY_NAME "${${CLANG_TIDY_BINARY_NAME_VAR}}")
46+
set(CLANG_TIDY_BINARY_OUTPUT "${SOURCEMETA_TARGET_CLANG_TIDY_ATTEMPT_INSTALL_OUTPUT_DIRECTORY}/${CLANG_TIDY_BINARY_NAME}")
47+
if(EXISTS "${CLANG_TIDY_BINARY_OUTPUT}")
48+
message(STATUS "Found existing `clang-tidy` pre-built binary at ${CLANG_TIDY_BINARY_OUTPUT}")
49+
return()
50+
endif()
51+
set(CLANG_TIDY_BINARY_DOWNLOAD_DIR "${CMAKE_CURRENT_BINARY_DIR}/clang-tidy")
52+
file(REMOVE_RECURSE "${CLANG_TIDY_BINARY_DOWNLOAD_DIR}")
53+
file(MAKE_DIRECTORY "${CLANG_TIDY_BINARY_DOWNLOAD_DIR}")
54+
set(CLANG_TIDY_BINARY_WHEEL "${CLANG_TIDY_BINARY_DOWNLOAD_DIR}/clang-tidy.whl")
55+
message(STATUS "Downloading `clang-tidy` pre-built binary from ${CLANG_TIDY_BINARY_URL}")
56+
file(DOWNLOAD "${CLANG_TIDY_BINARY_URL}" "${CLANG_TIDY_BINARY_WHEEL}"
57+
STATUS CLANG_TIDY_BINARY_DOWNLOAD_STATUS SHOW_PROGRESS TLS_VERIFY ON
58+
LOG CLANG_TIDY_BINARY_DOWNLOAD_LOG)
59+
list(GET CLANG_TIDY_BINARY_DOWNLOAD_STATUS 0 _code)
60+
if(NOT _code EQUAL 0)
61+
message(WARNING "Failed to download the `clang-tidy` pre-built binary")
62+
message(WARNING "${CLANG_TIDY_BINARY_DOWNLOAD_LOG}")
63+
file(REMOVE_RECURSE "${CLANG_TIDY_BINARY_DOWNLOAD_DIR}")
64+
return()
65+
endif()
66+
set(CLANG_TIDY_BINARY_EXTRACT_DIR "${CLANG_TIDY_BINARY_DOWNLOAD_DIR}/extracted")
67+
file(MAKE_DIRECTORY "${CLANG_TIDY_BINARY_EXTRACT_DIR}")
68+
file(ARCHIVE_EXTRACT INPUT "${CLANG_TIDY_BINARY_WHEEL}" DESTINATION "${CLANG_TIDY_BINARY_EXTRACT_DIR}")
69+
70+
# Install the binary
71+
file(MAKE_DIRECTORY "${SOURCEMETA_TARGET_CLANG_TIDY_ATTEMPT_INSTALL_OUTPUT_DIRECTORY}")
72+
file(COPY "${CLANG_TIDY_BINARY_EXTRACT_DIR}/clang_tidy/data/bin/${CLANG_TIDY_BINARY_NAME}"
73+
DESTINATION "${SOURCEMETA_TARGET_CLANG_TIDY_ATTEMPT_INSTALL_OUTPUT_DIRECTORY}")
74+
file(CHMOD "${CLANG_TIDY_BINARY_OUTPUT}" PERMISSIONS
75+
OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
76+
message(STATUS "Installed `clang-tidy` pre-built binary to ${CLANG_TIDY_BINARY_OUTPUT}")
77+
endfunction()
78+
79+
function(sourcemeta_enable_clang_tidy)
80+
sourcemeta_target_clang_tidy_attempt_install(OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin")
81+
find_program(CLANG_TIDY_BIN NAMES clang-tidy NO_DEFAULT_PATH
82+
PATHS "${CMAKE_CURRENT_BINARY_DIR}/bin")
83+
endfunction()

src/.clang-tidy

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
---
22
# See https://clang.llvm.org/extra/clang-tidy/index.html
3-
Checks: '
4-
concurrency-*,
5-
bugprone-*,
6-
-bugprone-easily-swappable-parameters,
7-
'
3+
Checks: 'concurrency-*'
84
InheritParentConfig: true
95
WarningsAsErrors: '*'
106
FormatStyle: none

0 commit comments

Comments
 (0)