blob: 36809eccf10bc18478212c9d49c56add0daa0acb (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
# SPDX-License-Identifier: GPL-3.0-or-later
function(rcc_backend_initialize_toolchain)
string(REGEX MATCH "^[0-9]+" RCCBackendClangMajor "${CMAKE_CXX_COMPILER_VERSION}")
find_program(
RCC_BACKEND_CLANG_FORMAT
NAMES "clang-format-${RCCBackendClangMajor}" clang-format
REQUIRED
)
find_program(
RCC_BACKEND_CLANG_TIDY
NAMES "clang-tidy-${RCCBackendClangMajor}" clang-tidy
REQUIRED
)
find_program(
RCC_BACKEND_CLANG_TIDY_DIFF
NAMES clang-tidy-diff.py
HINTS "/usr/lib/llvm-${RCCBackendClangMajor}/share/clang"
REQUIRED
)
find_program(
RCC_BACKEND_RUN_CLANG_TIDY
NAMES "run-clang-tidy-${RCCBackendClangMajor}" run-clang-tidy
REQUIRED
)
find_program(RCC_BACKEND_GIT NAMES git REQUIRED)
foreach(Tool IN ITEMS RCC_BACKEND_CLANG_FORMAT RCC_BACKEND_CLANG_TIDY)
execute_process(
COMMAND "${${Tool}}" --version
OUTPUT_VARIABLE ToolVersionOutput
ERROR_VARIABLE ToolVersionError
RESULT_VARIABLE ToolVersionResult
)
if(NOT ToolVersionResult EQUAL 0)
message(
FATAL_ERROR
"Unable to query ${Tool}: ${ToolVersionOutput}${ToolVersionError}"
)
endif()
string(REGEX MATCH "version[ \t]+([0-9]+)" ToolVersionMatch "${ToolVersionOutput}")
if(NOT CMAKE_MATCH_1 STREQUAL RCCBackendClangMajor)
message(
FATAL_ERROR
"${Tool} must have Clang major version ${RCCBackendClangMajor}: "
"${ToolVersionOutput}"
)
endif()
endforeach()
set(RCC_BACKEND_CLANG_FORMAT "${RCC_BACKEND_CLANG_FORMAT}" PARENT_SCOPE)
set(RCC_BACKEND_CLANG_TIDY "${RCC_BACKEND_CLANG_TIDY}" PARENT_SCOPE)
set(RCC_BACKEND_CLANG_TIDY_DIFF "${RCC_BACKEND_CLANG_TIDY_DIFF}" PARENT_SCOPE)
set(RCC_BACKEND_RUN_CLANG_TIDY "${RCC_BACKEND_RUN_CLANG_TIDY}" PARENT_SCOPE)
set(RCC_BACKEND_GIT "${RCC_BACKEND_GIT}" PARENT_SCOPE)
endfunction()
function(rcc_backend_configure_target Target)
target_compile_features("${Target}" PUBLIC cxx_std_23)
set_target_properties(
"${Target}"
PROPERTIES
CXX_EXTENSIONS OFF
CXX_STANDARD 23
CXX_STANDARD_REQUIRED ON
)
target_compile_options(
"${Target}"
PRIVATE
-Wall
-Wextra
-Wpedantic
-Wconversion
-Wsign-conversion
-Wshadow
-Wnon-virtual-dtor
-Wold-style-cast
-Wcast-align
-Woverloaded-virtual
-Wnull-dereference
-Wdouble-promotion
-Wformat=2
)
if(RCC_BACKEND_ENABLE_EH)
target_compile_options("${Target}" PRIVATE -fexceptions)
else()
target_compile_options("${Target}" PRIVATE -fno-exceptions)
endif()
if(RCC_BACKEND_ENABLE_RTTI)
target_compile_options("${Target}" PRIVATE -frtti)
else()
target_compile_options("${Target}" PRIVATE -fno-rtti)
endif()
if(RCC_BACKEND_WARNINGS_AS_ERRORS)
target_compile_options("${Target}" PRIVATE -Werror)
endif()
if(RCC_BACKEND_ENABLE_CLANG_TIDY)
set_target_properties(
"${Target}"
PROPERTIES
CXX_CLANG_TIDY
"${RCC_BACKEND_CLANG_TIDY};--warnings-as-errors=*"
)
endif()
endfunction()
function(rcc_backend_register_format_files)
set_property(GLOBAL APPEND PROPERTY RCC_BACKEND_FORMAT_FILES ${ARGN})
endfunction()
|