blob: 3911fb6c6c746a8f8ade8677332ca1f399bfc3f9 (
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
|
# This is a no-op for building files in this dir, but is inherited by subdirs.
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
include_directories(${CMAKE_CURRENT_BINARY_DIR})
add_subdirectory(support)
# Configure the Features.inc file.
if (NOT DEFINED CLANGD_BUILD_XPC)
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
set(CLANGD_BUILD_XPC_DEFAULT ON)
else ()
set(CLANGD_BUILD_XPC_DEFAULT OFF)
endif ()
llvm_canonicalize_cmake_booleans(CLANGD_BUILD_XPC_DEFAULT)
set(CLANGD_BUILD_XPC ${CLANGD_BUILD_XPC_DEFAULT} CACHE BOOL "Build XPC Support For Clangd." FORCE)
unset(CLANGD_BUILD_XPC_DEFAULT)
endif ()
# This involves generating and compiling large source files, which can run into toolchain limitations.
option(CLANGD_DECISION_FOREST "Enable decision forest model for ranking code completion items" ON)
option(CLANGD_MALLOC_TRIM "Call malloc_trim(3) periodically in Clangd. (only takes effect when using glibc)" ON)
# -DCLANG_TIDY_CHECKS=Off avoids a dependency on clang-tidy, reducing rebuilds.
option(CLANGD_TIDY_CHECKS "Link all clang-tidy checks into clangd" ON)
llvm_canonicalize_cmake_booleans(
CLANGD_BUILD_XPC
CLANGD_ENABLE_REMOTE
ENABLE_GRPC_REFLECTION
CLANGD_MALLOC_TRIM
CLANGD_TIDY_CHECKS
LLVM_ENABLE_ZLIB
CLANGD_DECISION_FOREST
)
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/Features.inc.in
${CMAKE_CURRENT_BINARY_DIR}/Features.inc
)
set(LLVM_LINK_COMPONENTS
Support
AllTargetsInfos
FrontendOpenMP
Option
TargetParser
)
set(COMPLETIONMODEL_SOURCES)
if(CLANGD_DECISION_FOREST)
include(${CMAKE_CURRENT_SOURCE_DIR}/quality/CompletionModel.cmake)
gen_decision_forest(${CMAKE_CURRENT_SOURCE_DIR}/quality/model CompletionModel clang::clangd::Example)
list(APPEND COMPLETIONMODEL_SOURCES ${CMAKE_CURRENT_BINARY_DIR}/CompletionModel.cpp)
endif()
if(MSVC AND NOT CLANG_CL)
set_source_files_properties(CompileCommands.cpp PROPERTIES COMPILE_FLAGS -wd4130) # disables C4130: logical operation on address of string constant
endif()
include_directories(BEFORE "${CMAKE_CURRENT_BINARY_DIR}/../clang-tidy")
include_directories(BEFORE "${CMAKE_CURRENT_SOURCE_DIR}/../include-cleaner/include")
add_clang_library(clangDaemon
AST.cpp
ASTSignals.cpp
ClangdLSPServer.cpp
ClangdServer.cpp
CodeComplete.cpp
CodeCompletionStrings.cpp
CollectMacros.cpp
CompileCommands.cpp
Compiler.cpp
Config.cpp
ConfigCompile.cpp
ConfigProvider.cpp
ConfigYAML.cpp
DecisionForest.cpp
Diagnostics.cpp
DraftStore.cpp
DumpAST.cpp
ExpectedTypes.cpp
FeatureModule.cpp
Feature.cpp
FindSymbols.cpp
FindTarget.cpp
FileDistance.cpp
Format.cpp
FS.cpp
FuzzyMatch.cpp
GlobalCompilationDatabase.cpp
Headers.cpp
HeaderSourceSwitch.cpp
HeuristicResolver.cpp
Hover.cpp
IncludeCleaner.cpp
IncludeFixer.cpp
InlayHints.cpp
JSONTransport.cpp
PathMapping.cpp
Protocol.cpp
Quality.cpp
ParsedAST.cpp
Preamble.cpp
RIFF.cpp
Selection.cpp
SemanticHighlighting.cpp
SemanticSelection.cpp
SourceCode.cpp
SystemIncludeExtractor.cpp
TidyProvider.cpp
TUScheduler.cpp
URI.cpp
XRefs.cpp
${COMPLETIONMODEL_SOURCES}
index/Background.cpp
index/BackgroundIndexLoader.cpp
index/BackgroundIndexStorage.cpp
index/BackgroundQueue.cpp
index/BackgroundRebuild.cpp
index/CanonicalIncludes.cpp
index/FileIndex.cpp
index/Index.cpp
index/IndexAction.cpp
index/MemIndex.cpp
index/Merge.cpp
index/ProjectAware.cpp
index/Ref.cpp
index/Relation.cpp
index/Serialization.cpp
index/StdLib.cpp
index/Symbol.cpp
index/SymbolCollector.cpp
index/SymbolID.cpp
index/SymbolLocation.cpp
index/SymbolOrigin.cpp
index/YAMLSerialization.cpp
index/dex/Dex.cpp
index/dex/Iterator.cpp
index/dex/PostingList.cpp
index/dex/Trigram.cpp
refactor/InsertionPoint.cpp
refactor/Rename.cpp
refactor/Tweak.cpp
DEPENDS
omp_gen
ClangDriverOptions
)
# Include generated CompletionModel headers.
target_include_directories(clangDaemon PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
)
clang_target_link_libraries(clangDaemon
PRIVATE
clangAST
clangASTMatchers
clangBasic
clangDriver
clangFormat
clangFrontend
clangIndex
clangLex
clangSema
clangSerialization
clangTooling
clangToolingCore
clangToolingInclusions
clangToolingInclusionsStdlib
clangToolingSyntax
)
target_link_libraries(clangDaemon
PRIVATE
${LLVM_PTHREAD_LIB}
clangIncludeCleaner
clangPseudo
clangTidy
clangdSupport
)
if(CLANGD_TIDY_CHECKS)
target_link_libraries(clangDaemon PRIVATE ${ALL_CLANG_TIDY_CHECKS})
endif()
add_subdirectory(refactor/tweaks)
if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
# FIXME: Make fuzzer not use linux-specific APIs, build it everywhere.
add_subdirectory(fuzzer)
endif()
add_subdirectory(tool)
add_subdirectory(indexer)
if (LLVM_INCLUDE_BENCHMARKS)
add_subdirectory(benchmarks)
endif()
if ( CLANGD_BUILD_XPC )
add_subdirectory(xpc)
endif ()
if (CLANGD_ENABLE_REMOTE)
include(AddGRPC)
endif()
if(CLANG_INCLUDE_TESTS)
add_subdirectory(test)
add_subdirectory(unittests)
endif()
# FIXME(kirillbobyrev): Document this in the LLVM docs once remote index is stable.
option(CLANGD_ENABLE_REMOTE "Use gRPC library to enable remote index support for Clangd" OFF)
set(GRPC_INSTALL_PATH "" CACHE PATH "Path to gRPC library manual installation.")
add_subdirectory(index/remote)
add_subdirectory(index/dex/dexp)
|