23
23
#include " clang/Tooling/DependencyScanning/DependencyScanningService.h"
24
24
#include " clang/Tooling/DependencyScanning/DependencyScanningTool.h"
25
25
#include " clang/Tooling/DependencyScanning/DependencyScanningWorker.h"
26
+ #include " llvm/CAS/CASProvidingFileSystem.h"
26
27
#include " llvm/CAS/CachingOnDiskFileSystem.h"
27
28
#include " llvm/Support/Process.h"
28
29
@@ -145,7 +146,7 @@ ScanningOutputFormat DependencyScannerServiceOptions::getFormat() const {
145
146
return ScanningOutputFormat::FullTree;
146
147
147
148
// Note: default caching behaviour is currently cas-fs.
148
- return ConfiguredFormat ;
149
+ return ScanningOutputFormat::FullTree ;
149
150
}
150
151
151
152
CXDependencyScannerService
@@ -155,15 +156,18 @@ clang_experimental_DependencyScannerService_create_v1(
155
156
std::shared_ptr<llvm::cas::ObjectStore> CAS = unwrap (Opts)->CAS ;
156
157
std::shared_ptr<llvm::cas::ActionCache> Cache = unwrap (Opts)->Cache ;
157
158
IntrusiveRefCntPtr<llvm::cas::CachingOnDiskFileSystem> FS;
158
- if (CAS && Cache) {
159
+ ScanningOutputFormat Format = unwrap (Opts)->getFormat ();
160
+ bool IsCASFSOutput = Format == ScanningOutputFormat::Tree ||
161
+ Format == ScanningOutputFormat::FullTree;
162
+ if (CAS && Cache && IsCASFSOutput) {
159
163
assert (unwrap (Opts)->CASOpts .getKind () != CASOptions::UnknownCAS &&
160
164
" CAS and ActionCache must match CASOptions" );
161
165
FS = llvm::cantFail (
162
166
llvm::cas::createCachingOnDiskFileSystem (CAS));
163
167
}
164
168
return wrap (new DependencyScanningService (
165
- ScanningMode::DependencyDirectivesScan, unwrap (Opts)->getFormat () ,
166
- unwrap (Opts)-> CASOpts , std::move (CAS), std::move (Cache), std::move (FS),
169
+ ScanningMode::DependencyDirectivesScan, Format, unwrap (Opts)->CASOpts ,
170
+ std::move (CAS), std::move (Cache), std::move (FS),
167
171
/* ReuseFilemanager=*/ false ));
168
172
}
169
173
@@ -195,8 +199,16 @@ void clang_experimental_FileDependenciesList_dispose(
195
199
196
200
CXDependencyScannerWorker clang_experimental_DependencyScannerWorker_create_v0 (
197
201
CXDependencyScannerService Service) {
198
- return wrap (new DependencyScanningWorker (
199
- *unwrap (Service), llvm::vfs::createPhysicalFileSystem ()));
202
+ ScanningOutputFormat Format = unwrap (Service)->getFormat ();
203
+ bool IsIncludeTreeOutput = Format == ScanningOutputFormat::IncludeTree ||
204
+ Format == ScanningOutputFormat::FullIncludeTree;
205
+ llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> FS =
206
+ llvm::vfs::createPhysicalFileSystem ();
207
+ if (IsIncludeTreeOutput)
208
+ FS = llvm::cas::createCASProvidingFileSystem (unwrap (Service)->getCAS (),
209
+ std::move (FS));
210
+
211
+ return wrap (new DependencyScanningWorker (*unwrap (Service), FS));
200
212
}
201
213
202
214
void clang_experimental_DependencyScannerWorker_dispose_v0 (
0 commit comments