r244413 - [modules] When building a dependency file, include module maps parsed in the

Richard Smith via cfe-commits cfe-commits at lists.llvm.org
Tue Aug 11 11:38:37 PDT 2015


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.)

On Tue, Aug 11, 2015 at 11:27 AM, Manuel Klimek <klimek at 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 <richard at metafoo.co.uk>
> wrote:
>
>> On Tue, Aug 11, 2015 at 4:57 AM, Manuel Klimek <klimek at 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 at 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 at lists.llvm.org
>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>>>>
>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150811/4647eec1/attachment-0001.html>


More information about the cfe-commits mailing list