This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. Closed by commit rG7f6af607464e: [clang][deps] Generate '-fmodule-file=' only for direct dependencies (authored by jansvoboda11).
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D118915/new/ https://reviews.llvm.org/D118915 Files: clang/include/clang/Tooling/DependencyScanning/DependencyScanningTool.h clang/include/clang/Tooling/DependencyScanning/ModuleDepCollector.h clang/lib/Tooling/DependencyScanning/DependencyScanningTool.cpp clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp clang/test/ClangScanDeps/modules-full.cpp clang/test/ClangScanDeps/modules-pch.c clang/tools/clang-scan-deps/ClangScanDeps.cpp
Index: clang/tools/clang-scan-deps/ClangScanDeps.cpp =================================================================== --- clang/tools/clang-scan-deps/ClangScanDeps.cpp +++ clang/tools/clang-scan-deps/ClangScanDeps.cpp @@ -298,10 +298,7 @@ ID.CommandLine = GenerateModulesPathArgs ? FD.getCommandLine( - [&](ModuleID MID) { return lookupPCMPath(MID); }, - [&](ModuleID MID) -> const ModuleDeps & { - return lookupModuleDeps(MID); - }) + [&](ModuleID MID) { return lookupPCMPath(MID); }) : FD.getCommandLineWithoutModulePaths(); Inputs.push_back(std::move(ID)); @@ -336,10 +333,7 @@ {"command-line", GenerateModulesPathArgs ? MD.getCanonicalCommandLine( - [&](ModuleID MID) { return lookupPCMPath(MID); }, - [&](ModuleID MID) -> const ModuleDeps & { - return lookupModuleDeps(MID); - }) + [&](ModuleID MID) { return lookupPCMPath(MID); }) : MD.getCanonicalCommandLineWithoutModulePaths()}, }; OutModules.push_back(std::move(O)); @@ -369,12 +363,16 @@ StringRef lookupPCMPath(ModuleID MID) { auto PCMPath = PCMPaths.insert({MID, ""}); if (PCMPath.second) - PCMPath.first->second = constructPCMPath(lookupModuleDeps(MID)); + PCMPath.first->second = constructPCMPath(MID); return PCMPath.first->second; } /// Construct a path for the explicitly built PCM. - std::string constructPCMPath(const ModuleDeps &MD) const { + std::string constructPCMPath(ModuleID MID) const { + auto MDIt = Modules.find(IndexedModuleID{MID, 0}); + assert(MDIt != Modules.end()); + const ModuleDeps &MD = MDIt->second; + StringRef Filename = llvm::sys::path::filename(MD.ImplicitModulePCMPath); SmallString<256> ExplicitPCMPath( @@ -385,12 +383,6 @@ return std::string(ExplicitPCMPath); } - const ModuleDeps &lookupModuleDeps(ModuleID MID) { - auto I = Modules.find(IndexedModuleID{MID, 0}); - assert(I != Modules.end()); - return I->second; - }; - struct IndexedModuleID { ModuleID ID; mutable size_t InputIndex; Index: clang/test/ClangScanDeps/modules-pch.c =================================================================== --- clang/test/ClangScanDeps/modules-pch.c +++ clang/test/ClangScanDeps/modules-pch.c @@ -97,7 +97,6 @@ // CHECK-PCH: "-fno-implicit-modules", // CHECK-PCH-NEXT: "-fno-implicit-module-maps", // CHECK-PCH-NEXT: "-fmodule-file=[[PREFIX]]/build/[[HASH_MOD_COMMON_1]]/ModCommon1-{{.*}}.pcm", -// CHECK-PCH-NEXT: "-fmodule-file=[[PREFIX]]/build/[[HASH_MOD_COMMON_2]]/ModCommon2-{{.*}}.pcm", // CHECK-PCH-NEXT: "-fmodule-file=[[PREFIX]]/build/[[HASH_MOD_PCH]]/ModPCH-{{.*}}.pcm" // CHECK-PCH-NEXT: ], // CHECK-PCH-NEXT: "file-deps": [ Index: clang/test/ClangScanDeps/modules-full.cpp =================================================================== --- clang/test/ClangScanDeps/modules-full.cpp +++ clang/test/ClangScanDeps/modules-full.cpp @@ -169,9 +169,7 @@ // CHECK: "-fno-implicit-modules" // CHECK-NEXT: "-fno-implicit-module-maps" // CHECK-NO-ABS-NOT: "-fmodule-file={{.*}}" -// CHECK-ABS-NEXT: "-fmodule-file=[[PREFIX]]/module-cache{{(_clangcl)?}}/[[HASH_H2_DINCLUDE]]/header2-{{[A-Z0-9]+}}.pcm" // CHECK-ABS-NEXT: "-fmodule-file=[[PREFIX]]/module-cache{{(_clangcl)?}}/[[HASH_H1_DINCLUDE]]/header1-{{[A-Z0-9]+}}.pcm" -// CHECK-CUSTOM-NEXT: "-fmodule-file=[[PREFIX]]/custom/[[HASH_H2_DINCLUDE]]/header2-{{[A-Z0-9]+}}.pcm" // CHECK-CUSTOM-NEXT: "-fmodule-file=[[PREFIX]]/custom/[[HASH_H1_DINCLUDE]]/header1-{{[A-Z0-9]+}}.pcm" // CHECK-NEXT: ], // CHECK-NEXT: "file-deps": [ Index: clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp =================================================================== --- clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp +++ clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp @@ -87,8 +87,7 @@ } std::vector<std::string> ModuleDeps::getCanonicalCommandLine( - std::function<StringRef(ModuleID)> LookupPCMPath, - std::function<const ModuleDeps &(ModuleID)> LookupModuleDeps) const { + std::function<StringRef(ModuleID)> LookupPCMPath) const { CompilerInvocation CI(BuildInvocation); FrontendOptions &FrontendOpts = CI.getFrontendOpts(); @@ -97,9 +96,8 @@ FrontendOpts.Inputs.emplace_back(ClangModuleMapFile, ModuleMapInputKind); FrontendOpts.OutputFile = std::string(LookupPCMPath(ID)); - dependencies::detail::collectPCMPaths(ClangModuleDeps, LookupPCMPath, - LookupModuleDeps, - FrontendOpts.ModuleFiles); + for (ModuleID MID : ClangModuleDeps) + FrontendOpts.ModuleFiles.emplace_back(LookupPCMPath(MID)); return serializeCompilerInvocation(CI); } @@ -109,28 +107,6 @@ return serializeCompilerInvocation(BuildInvocation); } -void dependencies::detail::collectPCMPaths( - llvm::ArrayRef<ModuleID> Modules, - std::function<StringRef(ModuleID)> LookupPCMPath, - std::function<const ModuleDeps &(ModuleID)> LookupModuleDeps, - std::vector<std::string> &PCMPaths) { - llvm::StringSet<> AlreadyAdded; - - std::function<void(llvm::ArrayRef<ModuleID>)> AddArgs = - [&](llvm::ArrayRef<ModuleID> Modules) { - for (const ModuleID &MID : Modules) { - if (!AlreadyAdded.insert(MID.ModuleName + MID.ContextHash).second) - continue; - const ModuleDeps &M = LookupModuleDeps(MID); - // Depth first traversal. - AddArgs(M.ClangModuleDeps); - PCMPaths.push_back(LookupPCMPath(MID).str()); - } - }; - - AddArgs(Modules); -} - void ModuleDepCollectorPP::FileChanged(SourceLocation Loc, FileChangeReason Reason, SrcMgr::CharacteristicKind FileType, Index: clang/lib/Tooling/DependencyScanning/DependencyScanningTool.cpp =================================================================== --- clang/lib/Tooling/DependencyScanning/DependencyScanningTool.cpp +++ clang/lib/Tooling/DependencyScanning/DependencyScanningTool.cpp @@ -14,15 +14,11 @@ namespace dependencies { std::vector<std::string> FullDependencies::getCommandLine( - std::function<StringRef(ModuleID)> LookupPCMPath, - std::function<const ModuleDeps &(ModuleID)> LookupModuleDeps) const { + std::function<StringRef(ModuleID)> LookupPCMPath) const { std::vector<std::string> Ret = getCommandLineWithoutModulePaths(); - std::vector<std::string> PCMPaths; - dependencies::detail::collectPCMPaths(ClangModuleDeps, LookupPCMPath, - LookupModuleDeps, PCMPaths); - for (const std::string &PCMPath : PCMPaths) - Ret.push_back("-fmodule-file=" + PCMPath); + for (ModuleID MID : ClangModuleDeps) + Ret.push_back(("-fmodule-file=" + LookupPCMPath(MID)).str()); return Ret; } Index: clang/include/clang/Tooling/DependencyScanning/ModuleDepCollector.h =================================================================== --- clang/include/clang/Tooling/DependencyScanning/ModuleDepCollector.h +++ clang/include/clang/Tooling/DependencyScanning/ModuleDepCollector.h @@ -113,27 +113,14 @@ /// arguments and the "-o" argument. It needs to return /// a path for where the PCM for the given module is to /// be located. - /// \param LookupModuleDeps This function is called to collect the full - /// transitive set of dependencies for this - /// compilation. std::vector<std::string> getCanonicalCommandLine( - std::function<StringRef(ModuleID)> LookupPCMPath, - std::function<const ModuleDeps &(ModuleID)> LookupModuleDeps) const; + std::function<StringRef(ModuleID)> LookupPCMPath) const; /// Gets the canonical command line suitable for passing to clang, excluding /// "-fmodule-file=" and "-o" arguments. std::vector<std::string> getCanonicalCommandLineWithoutModulePaths() const; }; -namespace detail { -/// Collect the paths of PCM for the modules in \c Modules transitively. -void collectPCMPaths( - llvm::ArrayRef<ModuleID> Modules, - std::function<StringRef(ModuleID)> LookupPCMPath, - std::function<const ModuleDeps &(ModuleID)> LookupModuleDeps, - std::vector<std::string> &PCMPaths); -} // namespace detail - class ModuleDepCollector; /// Callback that records textual includes and direct modular includes/imports Index: clang/include/clang/Tooling/DependencyScanning/DependencyScanningTool.h =================================================================== --- clang/include/clang/Tooling/DependencyScanning/DependencyScanningTool.h +++ clang/include/clang/Tooling/DependencyScanning/DependencyScanningTool.h @@ -51,12 +51,8 @@ /// arguments and the "-o" argument. It needs to return /// a path for where the PCM for the given module is to /// be located. - /// \param LookupModuleDeps This function is called to collect the full - /// transitive set of dependencies for this - /// compilation. - std::vector<std::string> getCommandLine( - std::function<StringRef(ModuleID)> LookupPCMPath, - std::function<const ModuleDeps &(ModuleID)> LookupModuleDeps) const; + std::vector<std::string> + getCommandLine(std::function<StringRef(ModuleID)> LookupPCMPath) const; /// Get the full command line, excluding -fmodule-file=" arguments. std::vector<std::string> getCommandLineWithoutModulePaths() const;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits