@@ -104,7 +104,6 @@ static bool EmitVisibleModules;
104104static llvm::BumpPtrAllocator Alloc;
105105static llvm::StringSaver Saver{Alloc};
106106static std::vector<const char *> CommandLine;
107- static bool EmitCASCompDB;
108107static std::string OnDiskCASPath;
109108static std::string CASPluginPath;
110109static std::vector<std::pair<std::string, std::string>> CASPluginOptions;
@@ -254,7 +253,6 @@ static void ParseArgs(int argc, char **argv) {
254253
255254 EmitVisibleModules = Args.hasArg (OPT_emit_visible_modules);
256255
257- EmitCASCompDB = Args.hasArg (OPT_emit_cas_compdb);
258256 InMemoryCAS = Args.hasArg (OPT_in_memory_cas);
259257
260258 if (const llvm::opt::Arg *A = Args.getLastArg (OPT_cas_path_EQ))
@@ -363,154 +361,6 @@ class ResourceDirectoryCache {
363361
364362} // end anonymous namespace
365363
366- static bool emitCompilationDBWithCASTreeArguments (
367- std::shared_ptr<llvm::cas::ObjectStore> DB,
368- std::vector<tooling::CompileCommand> Inputs,
369- DiagnosticConsumer &DiagsConsumer, DependencyScanningService &Service,
370- llvm::DefaultThreadPool &Pool, llvm::raw_ostream &OS) {
371-
372- // Follow `-cc1depscan` and also ignore diagnostics.
373- // FIXME: Seems not a good idea to do this..
374- auto IgnoringDiagsConsumer = std::make_unique<IgnoringDiagConsumer>();
375-
376- struct PerThreadState {
377- DependencyScanningTool Worker;
378- llvm::BumpPtrAllocator Alloc;
379- llvm::StringSaver Saver;
380- PerThreadState (DependencyScanningService &Service,
381- std::unique_ptr<llvm::vfs::FileSystem> FS)
382- : Worker(Service, std::move(FS)), Saver(Alloc) {}
383- };
384- std::vector<std::unique_ptr<PerThreadState>> PerThreadStates;
385- for (unsigned I = 0 , E = Pool.getMaxConcurrency (); I != E; ++I) {
386- std::unique_ptr<llvm::vfs::FileSystem> FS =
387- llvm::cas::createCASProvidingFileSystem (
388- DB, llvm::vfs::createPhysicalFileSystem ());
389- PerThreadStates.push_back (
390- std::make_unique<PerThreadState>(Service, std::move (FS)));
391- }
392-
393- std::atomic<bool > HadErrors (false );
394- std::mutex Lock;
395- size_t Index = 0 ;
396-
397- struct CompDBEntry {
398- size_t Index;
399- std::string Filename;
400- std::string WorkDir;
401- SmallVector<const char *> Args;
402- };
403- std::vector<CompDBEntry> CompDBEntries;
404-
405- for (unsigned I = 0 , E = Pool.getMaxConcurrency (); I != E; ++I) {
406- Pool.async ([&, I]() {
407- while (true ) {
408- const tooling::CompileCommand *Input;
409- std::string Filename;
410- std::string CWD;
411- size_t LocalIndex;
412- // Take the next input.
413- {
414- std::unique_lock<std::mutex> LockGuard (Lock);
415- if (Index >= Inputs.size ())
416- return ;
417- LocalIndex = Index;
418- Input = &Inputs[Index++];
419- Filename = std::move (Input->Filename );
420- CWD = std::move (Input->Directory );
421- }
422-
423- tooling::dependencies::DependencyScanningTool &WorkerTool =
424- PerThreadStates[I]->Worker ;
425-
426- class ScanForCC1Action : public ToolAction {
427- llvm::cas::ObjectStore &DB;
428- tooling::dependencies::DependencyScanningTool &WorkerTool;
429- DiagnosticConsumer &DiagsConsumer;
430- StringRef CWD;
431- SmallVectorImpl<const char *> &OutputArgs;
432- llvm::StringSaver &Saver;
433-
434- public:
435- ScanForCC1Action (
436- llvm::cas::ObjectStore &DB,
437- tooling::dependencies::DependencyScanningTool &WorkerTool,
438- DiagnosticConsumer &DiagsConsumer, StringRef CWD,
439- SmallVectorImpl<const char *> &OutputArgs,
440- llvm::StringSaver &Saver)
441- : DB(DB), WorkerTool(WorkerTool), DiagsConsumer(DiagsConsumer),
442- CWD (CWD), OutputArgs(OutputArgs), Saver(Saver) {}
443-
444- bool
445- runInvocation (std::shared_ptr<CompilerInvocation> Invocation,
446- FileManager *Files,
447- std::shared_ptr<PCHContainerOperations> PCHContainerOps,
448- DiagnosticConsumer *DiagConsumer) override {
449- Expected<llvm::cas::CASID> Root = scanAndUpdateCC1InlineWithTool (
450- WorkerTool, DiagsConsumer, /* VerboseOS*/ nullptr , *Invocation,
451- CWD, DB);
452- if (!Root) {
453- llvm::consumeError (Root.takeError ());
454- return false ;
455- }
456- OutputArgs.push_back (" -cc1" );
457- Invocation->generateCC1CommandLine (OutputArgs, [&](const Twine &T) {
458- return Saver.save (T).data ();
459- });
460- return true ;
461- }
462- };
463-
464- SmallVector<const char *> OutputArgs;
465- llvm::StringSaver &Saver = PerThreadStates[I]->Saver;
466- OutputArgs.push_back(Saver.save(Input->CommandLine.front()).data());
467- ScanForCC1Action Action (*DB, WorkerTool, *IgnoringDiagsConsumer, CWD,
468- OutputArgs, Saver);
469-
470- llvm::IntrusiveRefCntPtr<FileManager> FileMgr =
471- WorkerTool.getOrCreateFileManager();
472- ToolInvocation Invocation (Input->CommandLine, &Action, FileMgr.get(),
473- std::make_shared<PCHContainerOperations>());
474- if (!Invocation.run()) {
475- HadErrors = true ;
476- continue ;
477- }
478-
479- {
480- std::unique_lock<std::mutex> LockGuard (Lock);
481- CompDBEntries.push_back ({LocalIndex, std::move (Filename),
482- std::move (CWD), std::move (OutputArgs)});
483- }
484- }
485- });
486- }
487- Pool.wait ();
488-
489- std::sort (CompDBEntries.begin (), CompDBEntries.end (),
490- [](const CompDBEntry &LHS, const CompDBEntry &RHS) -> bool {
491- return LHS.Index < RHS.Index ;
492- });
493-
494- llvm::json::OStream J (OS, /* IndentSize*/ 2 );
495- J.arrayBegin ();
496- for (const auto &Entry : CompDBEntries) {
497- J.objectBegin ();
498- J.attribute (" file" , Entry.Filename );
499- J.attribute (" directory" , Entry.WorkDir );
500- J.attributeBegin (" arguments" );
501- J.arrayBegin ();
502- for (const char *Arg : Entry.Args ) {
503- J.value (Arg);
504- }
505- J.arrayEnd ();
506- J.attributeEnd ();
507- J.objectEnd ();
508- }
509- J.arrayEnd ();
510-
511- return HadErrors;
512- }
513-
514364// / Takes the result of a dependency scan and prints error / dependency files
515365// / based on the result.
516366// /
@@ -1167,9 +1017,6 @@ int clang_scan_deps_main(int argc, char **argv, const llvm::ToolContext &) {
11671017 auto ArgsAdjuster =
11681018 [&ResourceDirCache](const tooling::CommandLineArguments &Args,
11691019 StringRef FileName) {
1170- if (EmitCASCompDB)
1171- return Args; // Don't adjust.
1172-
11731020 std::string LastO;
11741021 bool HasResourceDir = false ;
11751022 bool ClangCLMode = false ;
@@ -1285,19 +1132,6 @@ int clang_scan_deps_main(int argc, char **argv, const llvm::ToolContext &) {
12851132 return 1 ;
12861133 }
12871134
1288- if (EmitCASCompDB) {
1289- if (!CAS) {
1290- llvm::errs () << " '-emit-cas-compdb' needs CAS setup\n " ;
1291- return 1 ;
1292- }
1293- DependencyScanningService Service (ScanMode, Format, CASOpts, CAS, Cache,
1294- OptimizeArgs, EagerLoadModules);
1295- llvm::DefaultThreadPool Pool (llvm::hardware_concurrency (NumThreads));
1296- return emitCompilationDBWithCASTreeArguments (
1297- CAS, AdjustingCompilations->getAllCompileCommands (), *DiagsConsumer,
1298- Service, Pool, llvm::outs ());
1299- }
1300-
13011135 std::vector<tooling::CompileCommand> Inputs =
13021136 AdjustingCompilations->getAllCompileCommands ();
13031137
0 commit comments