diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2021-07-29 20:15:26 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2021-07-29 20:15:26 +0000 |
| commit | 344a3780b2e33f6ca763666c380202b18aab72a3 (patch) | |
| tree | f0b203ee6eb71d7fdd792373e3c81eb18d6934dd /clang/lib/Tooling/DependencyScanning/DependencyScanningTool.cpp | |
| parent | b60736ec1405bb0a8dd40989f67ef4c93da068ab (diff) | |
vendor/llvm-project/llvmorg-13-init-16847-g88e66fa60ae5vendor/llvm-project/llvmorg-12.0.1-rc2-0-ge7dac564cd0evendor/llvm-project/llvmorg-12.0.1-0-gfed41342a82f
Diffstat (limited to 'clang/lib/Tooling/DependencyScanning/DependencyScanningTool.cpp')
| -rw-r--r-- | clang/lib/Tooling/DependencyScanning/DependencyScanningTool.cpp | 69 |
1 files changed, 52 insertions, 17 deletions
diff --git a/clang/lib/Tooling/DependencyScanning/DependencyScanningTool.cpp b/clang/lib/Tooling/DependencyScanning/DependencyScanningTool.cpp index 16040c2f4626..2fd12f7e12b1 100644 --- a/clang/lib/Tooling/DependencyScanning/DependencyScanningTool.cpp +++ b/clang/lib/Tooling/DependencyScanning/DependencyScanningTool.cpp @@ -13,17 +13,38 @@ namespace clang{ namespace tooling{ namespace dependencies{ -std::vector<std::string> FullDependencies::getAdditionalCommandLine( - std::function<StringRef(ClangModuleDep)> LookupPCMPath, - std::function<const ModuleDeps &(ClangModuleDep)> LookupModuleDeps) const { - std::vector<std::string> Ret = AdditionalNonPathCommandLine; +std::vector<std::string> FullDependencies::getAdditionalArgs( + std::function<StringRef(ModuleID)> LookupPCMPath, + std::function<const ModuleDeps &(ModuleID)> LookupModuleDeps) const { + std::vector<std::string> Ret = getAdditionalArgsWithoutModulePaths(); - dependencies::detail::appendCommonModuleArguments( - ClangModuleDeps, LookupPCMPath, LookupModuleDeps, Ret); + std::vector<std::string> PCMPaths; + std::vector<std::string> ModMapPaths; + dependencies::detail::collectPCMAndModuleMapPaths( + ClangModuleDeps, LookupPCMPath, LookupModuleDeps, PCMPaths, ModMapPaths); + for (const std::string &PCMPath : PCMPaths) + Ret.push_back("-fmodule-file=" + PCMPath); + for (const std::string &ModMapPath : ModMapPaths) + Ret.push_back("-fmodule-map-file=" + ModMapPath); return Ret; } +std::vector<std::string> +FullDependencies::getAdditionalArgsWithoutModulePaths() const { + std::vector<std::string> Args{ + "-fno-implicit-modules", + "-fno-implicit-module-maps", + }; + + for (const PrebuiltModuleDep &PMD : PrebuiltModuleDeps) { + Args.push_back("-fmodule-file=" + PMD.ModuleName + "=" + PMD.PCMFile); + Args.push_back("-fmodule-map-file=" + PMD.ModuleMapFile); + } + + return Args; +} + DependencyScanningTool::DependencyScanningTool( DependencyScanningService &Service) : Worker(Service) {} @@ -33,13 +54,19 @@ llvm::Expected<std::string> DependencyScanningTool::getDependencyFile( /// Prints out all of the gathered dependencies into a string. class MakeDependencyPrinterConsumer : public DependencyConsumer { public: - void handleFileDependency(const DependencyOutputOptions &Opts, - StringRef File) override { - if (!this->Opts) - this->Opts = std::make_unique<DependencyOutputOptions>(Opts); + void + handleDependencyOutputOpts(const DependencyOutputOptions &Opts) override { + this->Opts = std::make_unique<DependencyOutputOptions>(Opts); + } + + void handleFileDependency(StringRef File) override { Dependencies.push_back(std::string(File)); } + void handlePrebuiltModuleDependency(PrebuiltModuleDep PMD) override { + // Same as `handleModuleDependency`. + } + void handleModuleDependency(ModuleDeps MD) override { // These are ignored for the make format as it can't support the full // set of deps, and handleFileDependency handles enough for implicitly @@ -49,8 +76,7 @@ llvm::Expected<std::string> DependencyScanningTool::getDependencyFile( void handleContextHash(std::string Hash) override {} void printDependencies(std::string &S) { - if (!Opts) - return; + assert(Opts && "Handled dependency output options."); class DependencyPrinter : public DependencyFileGenerator { public: @@ -103,13 +129,19 @@ DependencyScanningTool::getFullDependencies( FullDependencyPrinterConsumer(const llvm::StringSet<> &AlreadySeen) : AlreadySeen(AlreadySeen) {} - void handleFileDependency(const DependencyOutputOptions &Opts, - StringRef File) override { + void + handleDependencyOutputOpts(const DependencyOutputOptions &Opts) override {} + + void handleFileDependency(StringRef File) override { Dependencies.push_back(std::string(File)); } + void handlePrebuiltModuleDependency(PrebuiltModuleDep PMD) override { + PrebuiltModuleDeps.emplace_back(std::move(PMD)); + } + void handleModuleDependency(ModuleDeps MD) override { - ClangModuleDeps[MD.ContextHash + MD.ModuleName] = std::move(MD); + ClangModuleDeps[MD.ID.ContextHash + MD.ID.ModuleName] = std::move(MD); } void handleContextHash(std::string Hash) override { @@ -119,16 +151,18 @@ DependencyScanningTool::getFullDependencies( FullDependenciesResult getFullDependencies() const { FullDependencies FD; - FD.ContextHash = std::move(ContextHash); + FD.ID.ContextHash = std::move(ContextHash); FD.FileDeps.assign(Dependencies.begin(), Dependencies.end()); for (auto &&M : ClangModuleDeps) { auto &MD = M.second; if (MD.ImportedByMainFile) - FD.ClangModuleDeps.push_back({MD.ModuleName, ContextHash}); + FD.ClangModuleDeps.push_back(MD.ID); } + FD.PrebuiltModuleDeps = std::move(PrebuiltModuleDeps); + FullDependenciesResult FDR; for (auto &&M : ClangModuleDeps) { @@ -145,6 +179,7 @@ DependencyScanningTool::getFullDependencies( private: std::vector<std::string> Dependencies; + std::vector<PrebuiltModuleDep> PrebuiltModuleDeps; std::unordered_map<std::string, ModuleDeps> ClangModuleDeps; std::string ContextHash; std::vector<std::string> OutputPaths; |
