On Tue, Aug 11, 2015 at 8:38 PM Richard Smith <rich...@metafoo.co.uk> wrote:
> Those files were parsed as part of building the output, and are legitimate > dependencies of the compilation process; why do you want to suppress them > from the .d file? (I think adding a whole bunch of -fno-*-deps flags is > going in the wrong direction, and would like to understand if there's some > higher-level notion that we should instead be capturing here.) > You're right, that makes sense. We'll just need to adapt our build system to work with that. > > > On Tue, Aug 11, 2015 at 11:27 AM, Manuel Klimek <kli...@google.com> wrote: > >> Ah, so we need a flag -fno-module-map-file-deps, I assume... >> >> On Tue, Aug 11, 2015 at 8:12 PM Richard Smith <rich...@metafoo.co.uk> >> wrote: >> >>> On Tue, Aug 11, 2015 at 4:57 AM, Manuel Klimek <kli...@google.com> >>> wrote: >>> >>>> I believe this breaks -fno-module-file-deps. >>>> >>> >>> I don't think so; this affects which module map files end up in the .d >>> file, not which .pcm files do. >>> >>> >>>> On Sun, Aug 9, 2015 at 6:47 AM Richard Smith via cfe-commits < >>>> cfe-commits@lists.llvm.org> wrote: >>>> >>>>> Author: rsmith >>>>> Date: Sat Aug 8 23:46:57 2015 >>>>> New Revision: 244413 >>>>> >>>>> URL: http://llvm.org/viewvc/llvm-project?rev=244413&view=rev >>>>> Log: >>>>> [modules] When building a dependency file, include module maps parsed >>>>> in the >>>>> current compilation, not just those from imported modules. >>>>> >>>>> Modified: >>>>> cfe/trunk/include/clang/Lex/ModuleMap.h >>>>> cfe/trunk/lib/Frontend/DependencyFile.cpp >>>>> cfe/trunk/lib/Lex/ModuleMap.cpp >>>>> cfe/trunk/test/Modules/dependency-gen-pch.m >>>>> cfe/trunk/test/Modules/dependency-gen.m >>>>> cfe/trunk/test/Modules/dependency-gen.modulemap >>>>> cfe/trunk/test/Modules/relative-dep-gen.cpp >>>>> >>>>> Modified: cfe/trunk/include/clang/Lex/ModuleMap.h >>>>> URL: >>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/ModuleMap.h?rev=244413&r1=244412&r2=244413&view=diff >>>>> >>>>> ============================================================================== >>>>> --- cfe/trunk/include/clang/Lex/ModuleMap.h (original) >>>>> +++ cfe/trunk/include/clang/Lex/ModuleMap.h Sat Aug 8 23:46:57 2015 >>>>> @@ -35,6 +35,22 @@ class DiagnosticConsumer; >>>>> class DiagnosticsEngine; >>>>> class HeaderSearch; >>>>> class ModuleMapParser; >>>>> + >>>>> +/// \brief A mechanism to observe the actions of the module map >>>>> parser as it >>>>> +/// reads module map files. >>>>> +class ModuleMapCallbacks { >>>>> +public: >>>>> + virtual ~ModuleMapCallbacks() {} >>>>> + >>>>> + /// \brief Called when a module map file has been read. >>>>> + /// >>>>> + /// \param FileStart A SourceLocation referring to the start of the >>>>> file's >>>>> + /// contents. >>>>> + /// \param File The file itself. >>>>> + /// \param IsSystem Whether this is a module map from a system >>>>> include path. >>>>> + virtual void moduleMapFileRead(SourceLocation FileStart, >>>>> + const FileEntry &File, bool >>>>> IsSystem) {} >>>>> +}; >>>>> >>>>> class ModuleMap { >>>>> SourceManager &SourceMgr; >>>>> @@ -42,6 +58,8 @@ class ModuleMap { >>>>> const LangOptions &LangOpts; >>>>> const TargetInfo *Target; >>>>> HeaderSearch &HeaderInfo; >>>>> + >>>>> + llvm::SmallVector<std::unique_ptr<ModuleMapCallbacks>, 1> Callbacks; >>>>> >>>>> /// \brief The directory used for Clang-supplied, builtin include >>>>> headers, >>>>> /// such as "stdint.h". >>>>> @@ -263,6 +281,11 @@ public: >>>>> BuiltinIncludeDir = Dir; >>>>> } >>>>> >>>>> + /// \brief Add a module map callback. >>>>> + void addModuleMapCallbacks(std::unique_ptr<ModuleMapCallbacks> >>>>> Callback) { >>>>> + Callbacks.push_back(std::move(Callback)); >>>>> + } >>>>> + >>>>> /// \brief Retrieve the module that owns the given header file, if >>>>> any. >>>>> /// >>>>> /// \param File The header file that is likely to be included. >>>>> >>>>> Modified: cfe/trunk/lib/Frontend/DependencyFile.cpp >>>>> URL: >>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/DependencyFile.cpp?rev=244413&r1=244412&r2=244413&view=diff >>>>> >>>>> ============================================================================== >>>>> --- cfe/trunk/lib/Frontend/DependencyFile.cpp (original) >>>>> +++ cfe/trunk/lib/Frontend/DependencyFile.cpp Sat Aug 8 23:46:57 2015 >>>>> @@ -18,6 +18,7 @@ >>>>> #include "clang/Frontend/FrontendDiagnostic.h" >>>>> #include "clang/Lex/DirectoryLookup.h" >>>>> #include "clang/Lex/LexDiagnostic.h" >>>>> +#include "clang/Lex/ModuleMap.h" >>>>> #include "clang/Lex/PPCallbacks.h" >>>>> #include "clang/Lex/Preprocessor.h" >>>>> #include "clang/Serialization/ASTReader.h" >>>>> @@ -82,6 +83,20 @@ struct DepCollectorPPCallbacks : public >>>>> } >>>>> }; >>>>> >>>>> +struct DepCollectorMMCallbacks : public ModuleMapCallbacks { >>>>> + DependencyCollector &DepCollector; >>>>> + DepCollectorMMCallbacks(DependencyCollector &DC) : DepCollector(DC) >>>>> {} >>>>> + >>>>> + void moduleMapFileRead(SourceLocation Loc, const FileEntry &Entry, >>>>> + bool IsSystem) override { >>>>> + StringRef Filename = Entry.getName(); >>>>> + DepCollector.maybeAddDependency(Filename, /*FromModule*/false, >>>>> + /*IsSystem*/IsSystem, >>>>> + /*IsModuleFile*/false, >>>>> + /*IsMissing*/false); >>>>> + } >>>>> +}; >>>>> + >>>>> struct DepCollectorASTListener : public ASTReaderListener { >>>>> DependencyCollector &DepCollector; >>>>> DepCollectorASTListener(DependencyCollector &L) : DepCollector(L) { >>>>> } >>>>> @@ -132,6 +147,8 @@ DependencyCollector::~DependencyCollecto >>>>> void DependencyCollector::attachToPreprocessor(Preprocessor &PP) { >>>>> PP.addPPCallbacks( >>>>> llvm::make_unique<DepCollectorPPCallbacks>(*this, >>>>> PP.getSourceManager())); >>>>> + PP.getHeaderSearchInfo().getModuleMap().addModuleMapCallbacks( >>>>> + llvm::make_unique<DepCollectorMMCallbacks>(*this)); >>>>> } >>>>> void DependencyCollector::attachToASTReader(ASTReader &R) { >>>>> R.addListener(llvm::make_unique<DepCollectorASTListener>(*this)); >>>>> @@ -185,6 +202,17 @@ public: >>>>> bool includeModuleFiles() const { return IncludeModuleFiles; } >>>>> }; >>>>> >>>>> +class DFGMMCallback : public ModuleMapCallbacks { >>>>> + DFGImpl &Parent; >>>>> +public: >>>>> + DFGMMCallback(DFGImpl &Parent) : Parent(Parent) {} >>>>> + void moduleMapFileRead(SourceLocation Loc, const FileEntry &Entry, >>>>> + bool IsSystem) override { >>>>> + if (!IsSystem || Parent.includeSystemHeaders()) >>>>> + Parent.AddFilename(Entry.getName()); >>>>> + } >>>>> +}; >>>>> + >>>>> class DFGASTReaderListener : public ASTReaderListener { >>>>> DFGImpl &Parent; >>>>> public: >>>>> @@ -217,6 +245,8 @@ DependencyFileGenerator *DependencyFileG >>>>> >>>>> DFGImpl *Callback = new DFGImpl(&PP, Opts); >>>>> PP.addPPCallbacks(std::unique_ptr<PPCallbacks>(Callback)); >>>>> + PP.getHeaderSearchInfo().getModuleMap().addModuleMapCallbacks( >>>>> + llvm::make_unique<DFGMMCallback>(*Callback)); >>>>> return new DependencyFileGenerator(Callback); >>>>> } >>>>> >>>>> >>>>> Modified: cfe/trunk/lib/Lex/ModuleMap.cpp >>>>> URL: >>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/ModuleMap.cpp?rev=244413&r1=244412&r2=244413&view=diff >>>>> >>>>> ============================================================================== >>>>> --- cfe/trunk/lib/Lex/ModuleMap.cpp (original) >>>>> +++ cfe/trunk/lib/Lex/ModuleMap.cpp Sat Aug 8 23:46:57 2015 >>>>> @@ -2335,9 +2335,14 @@ bool ModuleMap::parseModuleMapFile(const >>>>> >>>>> // Parse this module map file. >>>>> Lexer L(ID, SourceMgr.getBuffer(ID), SourceMgr, MMapLangOpts); >>>>> + SourceLocation Start = L.getSourceLocation(); >>>>> ModuleMapParser Parser(L, SourceMgr, Target, Diags, *this, File, >>>>> Dir, >>>>> BuiltinIncludeDir, IsSystem); >>>>> bool Result = Parser.parseModuleMapFile(); >>>>> ParsedModuleMap[File] = Result; >>>>> + >>>>> + // Notify callbacks that we parsed it. >>>>> + for (const auto &Cb : Callbacks) >>>>> + Cb->moduleMapFileRead(Start, *File, IsSystem); >>>>> return Result; >>>>> } >>>>> >>>>> Modified: cfe/trunk/test/Modules/dependency-gen-pch.m >>>>> URL: >>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/dependency-gen-pch.m?rev=244413&r1=244412&r2=244413&view=diff >>>>> >>>>> ============================================================================== >>>>> --- cfe/trunk/test/Modules/dependency-gen-pch.m (original) >>>>> +++ cfe/trunk/test/Modules/dependency-gen-pch.m Sat Aug 8 23:46:57 >>>>> 2015 >>>>> @@ -6,8 +6,8 @@ >>>>> // RUN: FileCheck %s < %t.d >>>>> // CHECK: dependency-gen-pch.m.o >>>>> // CHECK-NEXT: dependency-gen-pch.m >>>>> +// CHECK-NEXT: Inputs{{.}}module.map >>>>> // CHECK-NEXT: diamond_top.pcm >>>>> // CHECK-NEXT: Inputs{{.}}diamond_top.h >>>>> -// CHECK-NEXT: Inputs{{.}}module.map >>>>> >>>>> #import "diamond_top.h" >>>>> >>>>> Modified: cfe/trunk/test/Modules/dependency-gen.m >>>>> URL: >>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/dependency-gen.m?rev=244413&r1=244412&r2=244413&view=diff >>>>> >>>>> ============================================================================== >>>>> --- cfe/trunk/test/Modules/dependency-gen.m (original) >>>>> +++ cfe/trunk/test/Modules/dependency-gen.m Sat Aug 8 23:46:57 2015 >>>>> @@ -4,8 +4,8 @@ >>>>> // RUN: %clang_cc1 -x objective-c -isystem >>>>> %S/Inputs/System/usr/include -dependency-file %t.d.1 -MT %s.o -I %S/Inputs >>>>> -fsyntax-only -fmodules -fimplicit-module-maps -fmodules-cache-path=%t-mcp >>>>> %s >>>>> // RUN: FileCheck %s < %t.d.1 >>>>> // CHECK: dependency-gen.m >>>>> -// CHECK: Inputs{{.}}diamond_top.h >>>>> // CHECK: Inputs{{.}}module.map >>>>> +// CHECK: Inputs{{.}}diamond_top.h >>>>> // CHECK-NOT: usr{{.}}include{{.}}module.map >>>>> // CHECK-NOT: stdint.h >>>>> >>>>> @@ -13,8 +13,8 @@ >>>>> // RUN: %clang_cc1 -x objective-c -isystem >>>>> %S/Inputs/System/usr/include -dependency-file %t.d.2 -MT %s.o -I %S/Inputs >>>>> -sys-header-deps -fsyntax-only -fmodules -fimplicit-module-maps >>>>> -fmodules-cache-path=%t-mcp %s >>>>> // RUN: FileCheck %s -check-prefix=CHECK-SYS < %t.d.2 >>>>> // CHECK-SYS: dependency-gen.m >>>>> -// CHECK-SYS: Inputs{{.}}diamond_top.h >>>>> // CHECK-SYS: Inputs{{.}}module.map >>>>> +// CHECK-SYS: Inputs{{.}}diamond_top.h >>>>> // CHECK-SYS: usr{{.}}include{{.}}module.map >>>>> // CHECK-SYS: stdint.h >>>>> >>>>> >>>>> Modified: cfe/trunk/test/Modules/dependency-gen.modulemap >>>>> URL: >>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/dependency-gen.modulemap?rev=244413&r1=244412&r2=244413&view=diff >>>>> >>>>> ============================================================================== >>>>> --- cfe/trunk/test/Modules/dependency-gen.modulemap (original) >>>>> +++ cfe/trunk/test/Modules/dependency-gen.modulemap Sat Aug 8 >>>>> 23:46:57 2015 >>>>> @@ -15,5 +15,10 @@ module "test" { >>>>> extern module "test-base2" "Inputs/dependency-gen-base2.modulemap" >>>>> extern module "test-base" "Inputs/dependency-gen-base.modulemap" >>>>> >>>>> -// CHECK: {{ |\.[/\\]}}Inputs{{[/\\]}}dependency-gen-included2.h >>>>> -// CHECK: {{ |\.[/\\]}}Inputs{{[/\\]}}dependency-gen-base.modulemap >>>>> +// CHECK-DAG: {{[/\\]}}dependency-gen.modulemap >>>>> +// CHECK-DAG: {{ >>>>> |\.[/\\]}}Inputs{{[/\\]}}dependency-gen-base.modulemap >>>>> +// CHECK-DAG: {{ >>>>> |\.[/\\]}}Inputs{{[/\\]}}dependency-gen-base2.modulemap >>>>> + >>>>> +// CHECK-DAG: {{ |\.[/\\]}}Inputs{{[/\\]}}dependency-gen.h >>>>> +// CHECK-DAG: {{ |\.[/\\]}}Inputs{{[/\\]}}dependency-gen-included.h >>>>> +// CHECK-DAG: {{ |\.[/\\]}}Inputs{{[/\\]}}dependency-gen-included2.h >>>>> >>>>> Modified: cfe/trunk/test/Modules/relative-dep-gen.cpp >>>>> URL: >>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/relative-dep-gen.cpp?rev=244413&r1=244412&r2=244413&view=diff >>>>> >>>>> ============================================================================== >>>>> --- cfe/trunk/test/Modules/relative-dep-gen.cpp (original) >>>>> +++ cfe/trunk/test/Modules/relative-dep-gen.cpp Sat Aug 8 23:46:57 >>>>> 2015 >>>>> @@ -20,5 +20,11 @@ >>>>> >>>>> #include "Inputs/relative-dep-gen-1.h" >>>>> >>>>> -// CHECK-BUILD: mod.pcm: Inputs/relative-dep-gen-1.h >>>>> Inputs/relative-dep-gen-2.h >>>>> -// CHECK-USE: use.o: relative-dep-gen.cpp Inputs/relative-dep-gen-1.h >>>>> +// CHECK-BUILD: mod.pcm: >>>>> +// CHECK-BUILD: Inputs/relative-dep-gen{{(-cwd)?}}.modulemap >>>>> +// CHECK-BUILD: Inputs/relative-dep-gen-1.h >>>>> +// CHECK-BUILD: Inputs/relative-dep-gen-2.h >>>>> +// CHECK-USE: use.o: >>>>> +// CHECK-USE: Inputs/relative-dep-gen{{(-cwd)?}}.modulemap >>>>> +// CHECK-USE: relative-dep-gen.cpp >>>>> +// CHECK-USE: Inputs/relative-dep-gen-1.h >>>>> >>>>> >>>>> _______________________________________________ >>>>> cfe-commits mailing list >>>>> cfe-commits@lists.llvm.org >>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >>>>> >>>> >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits