Skip to content

Commit ab3259c

Browse files
committed
[libclang][deps] Create dep scanner service options type
In preparation for adding additional service options, extract an opaque CXDependencyScannerServiceOptions type with a setter for the dependency scanning format. (cherry picked from commit 61c6781)
1 parent c6223d5 commit ab3259c

File tree

4 files changed

+87
-3
lines changed

4 files changed

+87
-3
lines changed

clang/include/clang-c/Dependencies.h

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,12 +174,46 @@ typedef enum {
174174
CXDependencyMode_Full,
175175
} CXDependencyMode;
176176

177+
/**
178+
* Options used to construct a \c CXDependencyScannerService.
179+
*/
180+
typedef struct CXOpaqueDependencyScannerServiceOptions
181+
*CXDependencyScannerServiceOptions;
182+
183+
/**
184+
* Creates a default set of service options.
185+
* Must be disposed with \c
186+
* clang_experimental_DependencyScannerServiceOptions_dispose.
187+
*/
188+
CINDEX_LINKAGE CXDependencyScannerServiceOptions
189+
clang_experimental_DependencyScannerServiceOptions_create();
190+
191+
/**
192+
* Dispose of a \c CXDependencyScannerServiceOptions object.
193+
*/
194+
CINDEX_LINKAGE void clang_experimental_DependencyScannerServiceOptions_dispose(
195+
CXDependencyScannerServiceOptions);
196+
197+
/**
198+
* Specify a \c CXDependencyMode in the given options.
199+
*/
200+
CINDEX_LINKAGE void
201+
clang_experimental_DependencyScannerServiceOptions_setDependencyMode(
202+
CXDependencyScannerServiceOptions Opts, CXDependencyMode Mode);
203+
204+
/**
205+
* See \c clang_experimental_DependencyScannerService_create_v1.
206+
*/
207+
CINDEX_LINKAGE CXDependencyScannerService
208+
clang_experimental_DependencyScannerService_create_v0(CXDependencyMode Format);
209+
177210
/**
178211
* Create a \c CXDependencyScannerService object.
179212
* Must be disposed with \c clang_DependencyScannerService_dispose().
180213
*/
181214
CINDEX_LINKAGE CXDependencyScannerService
182-
clang_experimental_DependencyScannerService_create_v0(CXDependencyMode Format);
215+
clang_experimental_DependencyScannerService_create_v1(
216+
CXDependencyScannerServiceOptions Opts);
183217

184218
/**
185219
* Dispose of a \c CXDependencyScannerService object.

clang/tools/c-index-test/core_main.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -678,9 +678,16 @@ static int scanDeps(ArrayRef<const char *> Args, std::string WorkingDirectory,
678678
bool SerializeDiags, bool DependencyFile,
679679
ArrayRef<std::string> DepTargets, std::string OutputPath,
680680
Optional<std::string> ModuleName = None) {
681+
CXDependencyScannerServiceOptions Opts =
682+
clang_experimental_DependencyScannerServiceOptions_create();
683+
auto CleanupOpts = llvm::make_scope_exit([&] {
684+
clang_experimental_DependencyScannerServiceOptions_dispose(Opts);
685+
});
686+
clang_experimental_DependencyScannerServiceOptions_setDependencyMode(
687+
Opts, CXDependencyMode_Full);
688+
681689
CXDependencyScannerService Service =
682-
clang_experimental_DependencyScannerService_create_v0(
683-
CXDependencyMode_Full);
690+
clang_experimental_DependencyScannerService_create_v1(Opts);
684691
CXDependencyScannerWorker Worker =
685692
clang_experimental_DependencyScannerWorker_create_v0(Service);
686693
auto DisposeWorkerAndService = llvm::make_scope_exit([&]() {

clang/tools/libclang/CDependencies.cpp

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,18 @@
2525
using namespace clang;
2626
using namespace clang::tooling::dependencies;
2727

28+
namespace {
29+
struct DependencyScannerServiceOptions {
30+
ScanningOutputFormat Format = ScanningOutputFormat::Full;
31+
CASOptions CASOpts;
32+
std::shared_ptr<cas::ObjectStore> CAS;
33+
std::shared_ptr<cas::ActionCache> Cache;
34+
};
35+
} // end anonymous namespace
36+
37+
DEFINE_SIMPLE_CONVERSION_FUNCTIONS(DependencyScannerServiceOptions,
38+
CXDependencyScannerServiceOptions)
39+
2840
DEFINE_SIMPLE_CONVERSION_FUNCTIONS(DependencyScanningService,
2941
CXDependencyScannerService)
3042
DEFINE_SIMPLE_CONVERSION_FUNCTIONS(DependencyScanningWorker,
@@ -67,6 +79,21 @@ void clang_experimental_ModuleDependencySet_dispose(
6779
delete MDS;
6880
}
6981

82+
CXDependencyScannerServiceOptions
83+
clang_experimental_DependencyScannerServiceOptions_create() {
84+
return wrap(new DependencyScannerServiceOptions);
85+
}
86+
87+
void clang_experimental_DependencyScannerServiceOptions_dispose(
88+
CXDependencyScannerServiceOptions Opts) {
89+
delete unwrap(Opts);
90+
}
91+
92+
void clang_experimental_DependencyScannerServiceOptions_setDependencyMode(
93+
CXDependencyScannerServiceOptions Opts, CXDependencyMode Mode) {
94+
unwrap(Opts)->Format = unwrap(Mode);
95+
}
96+
7097
CXDependencyScannerService
7198
clang_experimental_DependencyScannerService_create_v0(CXDependencyMode Format) {
7299
// FIXME: Pass default CASOpts and nullptr as CachingOnDiskFileSystem now.
@@ -78,6 +105,18 @@ clang_experimental_DependencyScannerService_create_v0(CXDependencyMode Format) {
78105
/*ReuseFilemanager=*/false));
79106
}
80107

108+
CXDependencyScannerService
109+
clang_experimental_DependencyScannerService_create_v1(
110+
CXDependencyScannerServiceOptions Opts) {
111+
// FIXME: Pass default CASOpts and nullptr as CachingOnDiskFileSystem now.
112+
CASOptions CASOpts;
113+
IntrusiveRefCntPtr<llvm::cas::CachingOnDiskFileSystem> FS;
114+
return wrap(new DependencyScanningService(
115+
ScanningMode::DependencyDirectivesScan, unwrap(Opts)->Format,
116+
CASOpts, /*ActionCache=*/nullptr, std::move(FS),
117+
/*ReuseFilemanager=*/false));
118+
}
119+
81120
void clang_experimental_DependencyScannerService_dispose_v0(
82121
CXDependencyScannerService Service) {
83122
delete unwrap(Service);

clang/tools/libclang/libclang.map

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -472,6 +472,10 @@ LLVM_13 {
472472

473473
LLVM_16 {
474474
global:
475+
clang_experimental_DependencyScannerService_create_v1;
476+
clang_experimental_DependencyScannerServiceOptions_create;
477+
clang_experimental_DependencyScannerServiceOptions_dispose;
478+
clang_experimental_DependencyScannerServiceOptions_setDependencyMode;
475479
clang_experimental_DependencyScannerWorker_getFileDependencies_v5;
476480
};
477481

0 commit comments

Comments
 (0)