Skip to content

Commit de6bfa2

Browse files
authored
Merge pull request swiftlang#10162 from swiftlang/jan_svoboda/stable-scanning-service
🍒 [clang][deps] Propagate the entire service Shared state between dependency scanning workers is managed by the dependency scanning service. Right now, the members are individually threaded through the worker, action, and collector. This makes any change to the service and its members a very laborious process. Moreover, this situation causes frequent merge conflicts in our downstream repo where the service does have some extra members that need to be passed around. To ease the maintenance burden, this PR starts passing a reference to the entire service. (cherry picked from commit d2e6662)
2 parents bf0e4d9 + efdae5e commit de6bfa2

File tree

7 files changed

+67
-78
lines changed

7 files changed

+67
-78
lines changed

clang/include/clang/Tooling/DependencyScanning/DependencyScanningService.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ class DependencyScanningService {
133133
std::shared_ptr<llvm::cas::ObjectStore> CAS;
134134
std::shared_ptr<llvm::cas::ActionCache> Cache;
135135
/// Whether to optimize the modules' command-line arguments.
136-
const ScanningOptimizations OptimizeArgs;
136+
ScanningOptimizations OptimizeArgs;
137137
/// Whether to set up command-lines to load PCM files eagerly.
138138
const bool EagerLoadModules;
139139
/// Whether to trace VFS accesses.

clang/include/clang/Tooling/DependencyScanning/DependencyScanningTool.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,9 @@ struct P1689Rule {
9696
class DependencyScanningTool {
9797
public:
9898
/// Construct a dependency scanning tool.
99+
///
100+
/// @param Service The parent service. Must outlive the tool.
101+
/// @param FS The filesystem for the tool to use. Defaults to the physical FS.
99102
DependencyScanningTool(DependencyScanningService &Service,
100103
llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> FS =
101104
llvm::vfs::createPhysicalFileSystem());

clang/include/clang/Tooling/DependencyScanning/DependencyScanningWorker.h

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,10 @@ class DependencyActionController {
116116
/// using the regular processing run.
117117
class DependencyScanningWorker {
118118
public:
119+
/// Construct a dependency scanning worker.
120+
///
121+
/// @param Service The parent service. Must outlive the worker.
122+
/// @param FS The filesystem for the worker to use.
119123
DependencyScanningWorker(DependencyScanningService &Service,
120124
llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> FS);
121125

@@ -177,7 +181,7 @@ class DependencyScanningWorker {
177181
DependencyActionController &Controller, DiagnosticConsumer &DiagsConsumer,
178182
raw_ostream *VerboseOS, bool DiagGenerationAsCompilation);
179183

180-
ScanningOutputFormat getScanningFormat() const { return Format; }
184+
ScanningOutputFormat getScanningFormat() const { return Service.getFormat(); }
181185

182186
CachingOnDiskFileSystemPtr getCASFS() { return CacheFS; }
183187
const CASOptions &getCASOpts() const { return CASOpts; }
@@ -188,11 +192,11 @@ class DependencyScanningWorker {
188192
/// each invocation.
189193
llvm::IntrusiveRefCntPtr<FileManager> getOrCreateFileManager() const;
190194

191-
bool shouldEagerLoadModules() const { return EagerLoadModules; }
192-
193195
llvm::vfs::FileSystem &getVFS() const { return *BaseFS; }
194196

195197
private:
198+
/// The parent dependency scanning service.
199+
DependencyScanningService &Service;
196200
std::shared_ptr<PCHContainerOperations> PCHContainerOps;
197201
/// The file system to be used during the scan.
198202
/// This is either \c FS passed in the constructor (when performing canonical
@@ -202,11 +206,6 @@ class DependencyScanningWorker {
202206
/// dependency-directives-extracting) filesystem overlaid on top of \c FS
203207
/// (passed in the constructor).
204208
llvm::IntrusiveRefCntPtr<DependencyScanningWorkerFilesystem> DepFS;
205-
ScanningOutputFormat Format;
206-
/// Whether to optimize the modules' command-line arguments.
207-
ScanningOptimizations OptimizeArgs;
208-
/// Whether to set up command-lines to load PCM files eagerly.
209-
bool EagerLoadModules;
210209

211210
/// The caching file system.
212211
CachingOnDiskFileSystemPtr CacheFS;

clang/include/clang/Tooling/DependencyScanning/ModuleDepCollector.h

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -237,13 +237,12 @@ class ModuleDepCollectorPP final : public PPCallbacks {
237237
/// \c ModuleDepCollectorPP to the preprocessor.
238238
class ModuleDepCollector final : public DependencyCollector {
239239
public:
240-
ModuleDepCollector(std::unique_ptr<DependencyOutputOptions> Opts,
240+
ModuleDepCollector(DependencyScanningService &Service,
241+
std::unique_ptr<DependencyOutputOptions> Opts,
241242
CompilerInstance &ScanInstance, DependencyConsumer &C,
242243
DependencyActionController &Controller,
243244
CompilerInvocation OriginalCI,
244-
PrebuiltModuleVFSMapT PrebuiltModuleVFSMap,
245-
ScanningOptimizations OptimizeArgs, bool EagerLoadModules,
246-
bool IsStdModuleP1689Format);
245+
PrebuiltModuleVFSMapT PrebuiltModuleVFSMap);
247246

248247
void attachToPreprocessor(Preprocessor &PP) override;
249248
void attachToASTReader(ASTReader &R) override;
@@ -255,6 +254,8 @@ class ModuleDepCollector final : public DependencyCollector {
255254
private:
256255
friend ModuleDepCollectorPP;
257256

257+
/// The parent dependency scanning service.
258+
DependencyScanningService &Service;
258259
/// The compiler instance for scanning the current translation unit.
259260
CompilerInstance &ScanInstance;
260261
/// The consumer of collected dependency information.
@@ -286,13 +287,6 @@ class ModuleDepCollector final : public DependencyCollector {
286287
/// a discovered modular dependency. Note that this still needs to be adjusted
287288
/// for each individual module.
288289
CowCompilerInvocation CommonInvocation;
289-
/// Whether to optimize the modules' command-line arguments.
290-
ScanningOptimizations OptimizeArgs;
291-
/// Whether to set up command-lines to load PCM files eagerly.
292-
bool EagerLoadModules;
293-
/// If we're generating dependency output in P1689 format
294-
/// for standard C++ modules.
295-
bool IsStdModuleP1689Format;
296290

297291
std::optional<P1689ModuleInfo> ProvidedStdCXXModule;
298292
std::vector<P1689ModuleInfo> RequiredStdCXXModules;

clang/lib/Tooling/DependencyScanning/DependencyScanningService.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
//===----------------------------------------------------------------------===//
88

99
#include "clang/Tooling/DependencyScanning/DependencyScanningService.h"
10+
#include "clang/Basic/BitmaskEnum.h"
1011
#include "llvm/CAS/ActionCache.h"
1112
#include "llvm/CAS/CachingOnDiskFileSystem.h"
1213
#include "llvm/CAS/ObjectStore.h"
@@ -28,6 +29,12 @@ DependencyScanningService::DependencyScanningService(
2829
if (!this->SharedFS)
2930
SharedCache.emplace();
3031

32+
// The FullIncludeTree output format completely subsumes header search and
33+
// VFS optimizations due to how it works. Disable these optimizations so
34+
// we're not doing unneeded work.
35+
if (Format == ScanningOutputFormat::FullIncludeTree)
36+
this->OptimizeArgs &= ~ScanningOptimizations::FullIncludeTreeIrrelevant;
37+
3138
// Initialize targets for object file support.
3239
llvm::InitializeAllTargets();
3340
llvm::InitializeAllTargetMCs();

clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp

Lines changed: 21 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -394,30 +394,22 @@ class WrapScanModuleBuildAction : public WrapperFrontendAction {
394394
class DependencyScanningAction : public tooling::ToolAction {
395395
public:
396396
DependencyScanningAction(
397-
StringRef WorkingDirectory, DependencyConsumer &Consumer,
398-
DependencyActionController &Controller,
397+
DependencyScanningService &Service, StringRef WorkingDirectory,
398+
DependencyConsumer &Consumer, DependencyActionController &Controller,
399399
llvm::IntrusiveRefCntPtr<DependencyScanningWorkerFilesystem> DepFS,
400400
llvm::IntrusiveRefCntPtr<DependencyScanningCASFilesystem> DepCASFS,
401401
llvm::IntrusiveRefCntPtr<llvm::cas::CachingOnDiskFileSystem> CacheFS,
402-
ScanningOutputFormat Format, ScanningOptimizations OptimizeArgs,
403-
bool EagerLoadModules, bool DisableFree, bool EmitDependencyFile,
402+
bool DisableFree, bool EmitDependencyFile,
404403
bool DiagGenerationAsCompilation, const CASOptions &CASOpts,
405404
std::optional<StringRef> ModuleName = std::nullopt,
406405
raw_ostream *VerboseOS = nullptr)
407-
: WorkingDirectory(WorkingDirectory), Consumer(Consumer),
406+
: Service(Service), WorkingDirectory(WorkingDirectory), Consumer(Consumer),
408407
Controller(Controller), DepFS(std::move(DepFS)),
409408
DepCASFS(std::move(DepCASFS)), CacheFS(std::move(CacheFS)),
410-
Format(Format), OptimizeArgs(OptimizeArgs),
411-
EagerLoadModules(EagerLoadModules), DisableFree(DisableFree),
409+
DisableFree(DisableFree),
412410
CASOpts(CASOpts), EmitDependencyFile(EmitDependencyFile),
413411
DiagGenerationAsCompilation(DiagGenerationAsCompilation),
414-
ModuleName(ModuleName), VerboseOS(VerboseOS) {
415-
// The FullIncludeTree output format completely subsumes header search and
416-
// VFS optimizations due to how it works. Disable these optimizations so
417-
// we're not doing unneeded work.
418-
if (Format == ScanningOutputFormat::FullIncludeTree)
419-
this->OptimizeArgs &= ~ScanningOptimizations::FullIncludeTreeIrrelevant;
420-
}
412+
ModuleName(ModuleName), VerboseOS(VerboseOS) {}
421413

422414
bool runInvocation(std::shared_ptr<CompilerInvocation> Invocation,
423415
FileManager *DriverFileMgr,
@@ -427,7 +419,7 @@ class DependencyScanningAction : public tooling::ToolAction {
427419
CompilerInvocation OriginalInvocation(*Invocation);
428420
// Restore the value of DisableFree, which may be modified by Tooling.
429421
OriginalInvocation.getFrontendOpts().DisableFree = DisableFree;
430-
if (any(OptimizeArgs & ScanningOptimizations::Macros))
422+
if (any(Service.getOptimizeArgs() & ScanningOptimizations::Macros))
431423
canonicalizeDefines(OriginalInvocation.getPreprocessorOpts());
432424

433425
if (Scanned) {
@@ -478,7 +470,7 @@ class DependencyScanningAction : public tooling::ToolAction {
478470
ScanInstance.getFrontendOpts().ModulesShareFileManager = false;
479471
ScanInstance.getHeaderSearchOpts().ModuleFormat = "raw";
480472
ScanInstance.getHeaderSearchOpts().ModulesIncludeVFSUsage =
481-
any(OptimizeArgs & ScanningOptimizations::VFS);
473+
any(Service.getOptimizeArgs() & ScanningOptimizations::VFS);
482474

483475
// Support for virtual file system overlays.
484476
auto FS = createVFSFromCompilerInvocation(
@@ -535,7 +527,7 @@ class DependencyScanningAction : public tooling::ToolAction {
535527
Opts->Targets = {
536528
deduceDepTarget(ScanInstance.getFrontendOpts().OutputFile,
537529
ScanInstance.getFrontendOpts().Inputs)};
538-
if (Format == ScanningOutputFormat::Make) {
530+
if (Service.getFormat() == ScanningOutputFormat::Make) {
539531
// Only 'Make' scanning needs to force this because that mode depends on
540532
// getting the dependencies directly from \p DependencyFileGenerator.
541533
Opts->IncludeSystemHeaders = true;
@@ -555,7 +547,7 @@ class DependencyScanningAction : public tooling::ToolAction {
555547
// \p DependencyScanningAction, and have the callers pass in a
556548
// “DependencyCollector factory” so the connection of collector<->consumer
557549
// is explicit in each \p DependencyScanningTool function.
558-
switch (Format) {
550+
switch (Service.getFormat()) {
559551
case ScanningOutputFormat::Make:
560552
case ScanningOutputFormat::Tree:
561553
ScanInstance.addDependencyCollector(
@@ -576,9 +568,8 @@ class DependencyScanningAction : public tooling::ToolAction {
576568
}
577569

578570
MDC = std::make_shared<ModuleDepCollector>(
579-
std::move(Opts), ScanInstance, Consumer, Controller,
580-
OriginalInvocation, std::move(PrebuiltModuleVFSMap), OptimizeArgs,
581-
EagerLoadModules, Format == ScanningOutputFormat::P1689);
571+
Service, std::move(Opts), ScanInstance, Consumer, Controller,
572+
OriginalInvocation, std::move(PrebuiltModuleVFSMap));
582573
ScanInstance.addDependencyCollector(MDC);
583574
ScanInstance.setGenModuleActionWrapper(
584575
[&Controller = Controller](const FrontendOptions &Opts,
@@ -680,16 +671,13 @@ class DependencyScanningAction : public tooling::ToolAction {
680671
return nullptr;
681672
}
682673

683-
private:
674+
DependencyScanningService &Service;
684675
StringRef WorkingDirectory;
685676
DependencyConsumer &Consumer;
686677
DependencyActionController &Controller;
687678
llvm::IntrusiveRefCntPtr<DependencyScanningWorkerFilesystem> DepFS;
688679
llvm::IntrusiveRefCntPtr<DependencyScanningCASFilesystem> DepCASFS;
689680
llvm::IntrusiveRefCntPtr<llvm::cas::CachingOnDiskFileSystem> CacheFS;
690-
ScanningOutputFormat Format;
691-
ScanningOptimizations OptimizeArgs;
692-
bool EagerLoadModules;
693681
bool DisableFree;
694682
const CASOptions &CASOpts;
695683
bool EmitDependencyFile = false;
@@ -708,8 +696,7 @@ class DependencyScanningAction : public tooling::ToolAction {
708696
DependencyScanningWorker::DependencyScanningWorker(
709697
DependencyScanningService &Service,
710698
llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> FS)
711-
: Format(Service.getFormat()), OptimizeArgs(Service.getOptimizeArgs()),
712-
EagerLoadModules(Service.shouldEagerLoadModules()),
699+
: Service(Service),
713700
CASOpts(Service.getCASOpts()), CAS(Service.getCAS()) {
714701
PCHContainerOps = std::make_shared<PCHContainerOperations>();
715702
// We need to read object files from PCH built outside the scanner.
@@ -878,9 +865,8 @@ bool DependencyScanningWorker::scanDependencies(
878865
// in-process; preserve the original value, which is
879866
// always true for a driver invocation.
880867
bool DisableFree = true;
881-
DependencyScanningAction Action(WorkingDirectory, Consumer, Controller, DepFS,
868+
DependencyScanningAction Action(Service, WorkingDirectory, Consumer, Controller, DepFS,
882869
DepCASFS, CacheFS,
883-
Format, OptimizeArgs, EagerLoadModules,
884870
DisableFree,
885871
/*EmitDependencyFile=*/false,
886872
/*DiagGenerationAsCompilation=*/false, getCASOpts(),
@@ -1033,13 +1019,12 @@ void DependencyScanningWorker::computeDependenciesFromCompilerInvocation(
10331019

10341020
// FIXME: EmitDependencyFile should only be set when it's for a real
10351021
// compilation.
1036-
DependencyScanningAction Action(
1037-
WorkingDirectory, DepsConsumer, Controller, DepFS, DepCASFS, CacheFS,
1038-
Format,
1039-
ScanningOptimizations::Default, /*DisableFree=*/false, EagerLoadModules,
1040-
/*EmitDependencyFile=*/!DepFile.empty(), DiagGenerationAsCompilation,
1041-
getCASOpts(),
1042-
/*ModuleName=*/std::nullopt, VerboseOS);
1022+
DependencyScanningAction Action(Service, WorkingDirectory, DepsConsumer,
1023+
Controller, DepFS, DepCASFS, CacheFS,
1024+
/*DisableFree=*/false,
1025+
/*EmitDependencyFile=*/!DepFile.empty(),
1026+
DiagGenerationAsCompilation, getCASOpts(),
1027+
/*ModuleName=*/std::nullopt, VerboseOS);
10431028

10441029
// Ignore result; we're just collecting dependencies.
10451030
//

clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,8 @@ ModuleDepCollector::getInvocationAdjustedForModuleBuildWithoutOutputs(
307307
// TODO: Verify this works fine when modulemap for module A is eagerly
308308
// loaded from A.pcm, and module map passed on the command line contains
309309
// definition of a submodule: "explicit module A.Private { ... }".
310-
if (EagerLoadModules && DepModuleMapFiles.contains(*ModuleMapEntry))
310+
if (Service.shouldEagerLoadModules() &&
311+
DepModuleMapFiles.contains(*ModuleMapEntry))
311312
continue;
312313

313314
// Don't report module map file of the current module unless it also
@@ -360,7 +361,7 @@ llvm::DenseSet<const FileEntry *> ModuleDepCollector::collectModuleMapFiles(
360361

361362
void ModuleDepCollector::addModuleMapFiles(
362363
CompilerInvocation &CI, ArrayRef<ModuleID> ClangModuleDeps) const {
363-
if (EagerLoadModules)
364+
if (Service.shouldEagerLoadModules())
364365
return; // Only pcm is needed for eager load.
365366

366367
for (const ModuleID &MID : ClangModuleDeps) {
@@ -382,7 +383,7 @@ void ModuleDepCollector::addModuleFiles(
382383
CI.getFrontendOpts().ModuleCacheKeys.emplace_back(PCMPath,
383384
*MD->ModuleCacheKey);
384385

385-
if (EagerLoadModules)
386+
if (Service.shouldEagerLoadModules())
386387
CI.getFrontendOpts().ModuleFiles.push_back(std::move(PCMPath));
387388
else
388389
CI.getHeaderSearchOpts().PrebuiltModuleFiles.insert(
@@ -402,7 +403,7 @@ void ModuleDepCollector::addModuleFiles(
402403
CI.getMutFrontendOpts().ModuleCacheKeys.emplace_back(PCMPath,
403404
*MD->ModuleCacheKey);
404405

405-
if (EagerLoadModules)
406+
if (Service.shouldEagerLoadModules())
406407
CI.getMutFrontendOpts().ModuleFiles.push_back(std::move(PCMPath));
407408
else
408409
CI.getMutHeaderSearchOpts().PrebuiltModuleFiles.insert(
@@ -622,8 +623,8 @@ static void checkCompileCacheKeyMatch(cas::ObjectStore &CAS,
622623
void ModuleDepCollector::associateWithContextHash(
623624
const CowCompilerInvocation &CI, bool IgnoreCWD, ModuleDeps &Deps) {
624625
Deps.ID.ContextHash =
625-
getModuleContextHash(Deps, CI, EagerLoadModules, IgnoreCWD,
626-
ScanInstance.getVirtualFileSystem());
626+
getModuleContextHash(Deps, CI, Service.shouldEagerLoadModules(),
627+
IgnoreCWD, ScanInstance.getVirtualFileSystem());
627628
bool Inserted = ModuleDepsByID.insert({Deps.ID, &Deps}).second;
628629
(void)Inserted;
629630
assert(Inserted && "duplicate module mapping");
@@ -728,7 +729,7 @@ void ModuleDepCollectorPP::EndOfMainFile() {
728729

729730
MDC.Consumer.handleDependencyOutputOpts(*MDC.Opts);
730731

731-
if (MDC.IsStdModuleP1689Format)
732+
if (MDC.Service.getFormat() == ScanningOutputFormat::P1689)
732733
MDC.Consumer.handleProvidedAndRequiredStdCXXModules(
733734
MDC.ProvidedStdCXXModule, MDC.RequiredStdCXXModules);
734735

@@ -838,21 +839,23 @@ ModuleDepCollectorPP::handleTopLevelModule(const Module *M) {
838839
CowCompilerInvocation CI =
839840
MDC.getInvocationAdjustedForModuleBuildWithoutOutputs(
840841
MD, [&](CowCompilerInvocation &BuildInvocation) {
841-
if (any(MDC.OptimizeArgs & (ScanningOptimizations::HeaderSearch |
842-
ScanningOptimizations::VFS)))
842+
if (any(MDC.Service.getOptimizeArgs() &
843+
(ScanningOptimizations::HeaderSearch |
844+
ScanningOptimizations::VFS)))
843845
optimizeHeaderSearchOpts(BuildInvocation.getMutHeaderSearchOpts(),
844846
*MDC.ScanInstance.getASTReader(), *MF,
845847
MDC.PrebuiltModuleVFSMap,
846-
MDC.OptimizeArgs);
848+
MDC.Service.getOptimizeArgs());
847849

848-
if (any(MDC.OptimizeArgs & ScanningOptimizations::SystemWarnings))
850+
if (any(MDC.Service.getOptimizeArgs() &
851+
ScanningOptimizations::SystemWarnings))
849852
optimizeDiagnosticOpts(
850853
BuildInvocation.getMutDiagnosticOpts(),
851854
BuildInvocation.getFrontendOpts().IsSystemModule);
852855

853-
IgnoreCWD =
854-
any(MDC.OptimizeArgs & ScanningOptimizations::IgnoreCWD) &&
855-
isSafeToIgnoreCWD(BuildInvocation);
856+
IgnoreCWD = any(MDC.Service.getOptimizeArgs() &
857+
ScanningOptimizations::IgnoreCWD) &&
858+
isSafeToIgnoreCWD(BuildInvocation);
856859
if (IgnoreCWD) {
857860
llvm::ErrorOr<std::string> CWD =
858861
MDC.ScanInstance.getVirtualFileSystem()
@@ -977,19 +980,17 @@ void ModuleDepCollectorPP::addAffectingClangModule(
977980
}
978981

979982
ModuleDepCollector::ModuleDepCollector(
983+
DependencyScanningService &Service,
980984
std::unique_ptr<DependencyOutputOptions> Opts,
981985
CompilerInstance &ScanInstance, DependencyConsumer &C,
982986
DependencyActionController &Controller, CompilerInvocation OriginalCI,
983-
PrebuiltModuleVFSMapT PrebuiltModuleVFSMap,
984-
ScanningOptimizations OptimizeArgs, bool EagerLoadModules,
985-
bool IsStdModuleP1689Format)
986-
: ScanInstance(ScanInstance), Consumer(C), Controller(Controller),
987+
PrebuiltModuleVFSMapT PrebuiltModuleVFSMap)
988+
: Service(Service), ScanInstance(ScanInstance), Consumer(C),
989+
Controller(Controller),
987990
PrebuiltModuleVFSMap(std::move(PrebuiltModuleVFSMap)),
988991
Opts(std::move(Opts)),
989992
CommonInvocation(
990-
makeCommonInvocationForModuleBuild(std::move(OriginalCI))),
991-
OptimizeArgs(OptimizeArgs), EagerLoadModules(EagerLoadModules),
992-
IsStdModuleP1689Format(IsStdModuleP1689Format) {}
993+
makeCommonInvocationForModuleBuild(std::move(OriginalCI))) {}
993994

994995
void ModuleDepCollector::attachToPreprocessor(Preprocessor &PP) {
995996
PP.addPPCallbacks(std::make_unique<ModuleDepCollectorPP>(*this));
@@ -1021,7 +1022,7 @@ static StringRef makeAbsoluteAndPreferred(CompilerInstance &CI, StringRef Path,
10211022
}
10221023

10231024
void ModuleDepCollector::addFileDep(StringRef Path) {
1024-
if (IsStdModuleP1689Format) {
1025+
if (Service.getFormat() == ScanningOutputFormat::P1689) {
10251026
// Within P1689 format, we don't want all the paths to be absolute path
10261027
// since it may violate the traditional make style dependencies info.
10271028
FileDeps.emplace_back(Path);

0 commit comments

Comments
 (0)