r203885 - [Modules] Emit the module file paths as dependencies of the PCH when we are building one.

Argyrios Kyrtzidis via cfe-commits cfe-commits at lists.llvm.org
Tue Sep 1 17:33:10 PDT 2015


(Apologies for the long delay).

> On Aug 8, 2015, at 6:30 PM, Richard Smith <richard at metafoo.co.uk> wrote:
> 
> On Thu, Mar 13, 2014 at 8:07 PM, Argyrios Kyrtzidis <akyrtzi at gmail.com <mailto:akyrtzi at gmail.com>> wrote:
> Author: akirtzidis
> Date: Thu Mar 13 22:07:38 2014
> New Revision: 203885
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=203885&view=rev <http://llvm.org/viewvc/llvm-project?rev=203885&view=rev>
> Log:
> [Modules] Emit the module file paths as dependencies of the PCH when we are building one.
> 
> This is because the PCH is tied to the module files, if one of the module files changes or gets removed
> the build system should re-build the PCH file.
> 
> Is there any reason this has its own -cc1 flag instead of being tied to -emit-pch?

Offers a bit of flexibility and separation of concerns between dependency file generation and output file generation.
But I don’t have a strong preference, if it simplifies things to not have a separate option I’m fine with removing it.

>  
> rdar://16321245
> 
> Added:
>     cfe/trunk/test/Driver/pch-deps.c
>     cfe/trunk/test/Modules/dependency-gen-pch.m
> Modified:
>     cfe/trunk/include/clang/Driver/CC1Options.td
>     cfe/trunk/include/clang/Frontend/DependencyOutputOptions.h
>     cfe/trunk/include/clang/Serialization/ASTReader.h
>     cfe/trunk/lib/Driver/Tools.cpp
>     cfe/trunk/lib/Frontend/CompilerInvocation.cpp
>     cfe/trunk/lib/Frontend/DependencyFile.cpp
>     cfe/trunk/lib/Serialization/ASTReader.cpp
> 
> Modified: cfe/trunk/include/clang/Driver/CC1Options.td
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/CC1Options.td?rev=203885&r1=203884&r2=203885&view=diff <http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/CC1Options.td?rev=203885&r1=203884&r2=203885&view=diff>
> ==============================================================================
> --- cfe/trunk/include/clang/Driver/CC1Options.td (original)
> +++ cfe/trunk/include/clang/Driver/CC1Options.td Thu Mar 13 22:07:38 2014
> @@ -223,6 +223,8 @@ def dependent_lib : Joined<["--"], "depe
> 
>  def sys_header_deps : Flag<["-"], "sys-header-deps">,
>    HelpText<"Include system headers in dependency output">;
> +def module_file_deps : Flag<["-"], "module-file-deps">,
> +  HelpText<"Include module files in dependency output">;
>  def header_include_file : Separate<["-"], "header-include-file">,
>    HelpText<"Filename (or -) to write header include output to">;
>  def show_includes : Flag<["--"], "show-includes">,
> 
> Modified: cfe/trunk/include/clang/Frontend/DependencyOutputOptions.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/DependencyOutputOptions.h?rev=203885&r1=203884&r2=203885&view=diff <http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/DependencyOutputOptions.h?rev=203885&r1=203884&r2=203885&view=diff>
> ==============================================================================
> --- cfe/trunk/include/clang/Frontend/DependencyOutputOptions.h (original)
> +++ cfe/trunk/include/clang/Frontend/DependencyOutputOptions.h Thu Mar 13 22:07:38 2014
> @@ -26,6 +26,7 @@ public:
>                                       /// problems.
>    unsigned AddMissingHeaderDeps : 1; ///< Add missing headers to dependency list
>    unsigned PrintShowIncludes : 1; ///< Print cl.exe style /showIncludes info.
> +  unsigned IncludeModuleFiles : 1; ///< Include module file dependencies.
> 
>    /// The file to write dependency output to.
>    std::string OutputFile;
> @@ -50,6 +51,7 @@ public:
>      UsePhonyTargets = 0;
>      AddMissingHeaderDeps = 0;
>      PrintShowIncludes = 0;
> +    IncludeModuleFiles = 0;
>    }
>  };
> 
> 
> Modified: cfe/trunk/include/clang/Serialization/ASTReader.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Serialization/ASTReader.h?rev=203885&r1=203884&r2=203885&view=diff <http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Serialization/ASTReader.h?rev=203885&r1=203884&r2=203885&view=diff>
> ==============================================================================
> --- cfe/trunk/include/clang/Serialization/ASTReader.h (original)
> +++ cfe/trunk/include/clang/Serialization/ASTReader.h Thu Mar 13 22:07:38 2014
> @@ -171,6 +171,9 @@ public:
>    virtual void ReadCounter(const serialization::ModuleFile &M,
>                             unsigned Value) {}
> 
> +  /// This is called for each AST file loaded.
> +  virtual void visitModuleFile(StringRef Filename) {}
> +
>    /// \brief Returns true if this \c ASTReaderListener wants to receive the
>    /// input files of the AST file via \c visitInputFile, false otherwise.
>    virtual bool needsInputFileVisitation() { return false; }
> @@ -217,6 +220,7 @@ public:
>    void ReadCounter(const serialization::ModuleFile &M, unsigned Value) override;
>    bool needsInputFileVisitation() override;
>    bool needsSystemInputFileVisitation() override;
> +  void visitModuleFile(StringRef Filename) override;
>    bool visitInputFile(StringRef Filename, bool isSystem,
>                        bool isOverridden) override;
>  };
> 
> Modified: cfe/trunk/lib/Driver/Tools.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=203885&r1=203884&r2=203885&view=diff <http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=203885&r1=203884&r2=203885&view=diff>
> ==============================================================================
> --- cfe/trunk/lib/Driver/Tools.cpp (original)
> +++ cfe/trunk/lib/Driver/Tools.cpp Thu Mar 13 22:07:38 2014
> @@ -295,6 +295,9 @@ void Clang::AddPreprocessingOptions(Comp
>      if (A->getOption().matches(options::OPT_M) ||
>          A->getOption().matches(options::OPT_MD))
>        CmdArgs.push_back("-sys-header-deps");
> +
> +    if (isa<PrecompileJobAction>(JA))
> +      CmdArgs.push_back("-module-file-deps");
>    }
> 
>    if (Args.hasArg(options::OPT_MG)) {
> 
> Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=203885&r1=203884&r2=203885&view=diff <http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=203885&r1=203884&r2=203885&view=diff>
> ==============================================================================
> --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original)
> +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Thu Mar 13 22:07:38 2014
> @@ -528,6 +528,7 @@ static void ParseDependencyOutputArgs(De
>    Opts.OutputFile = Args.getLastArgValue(OPT_dependency_file);
>    Opts.Targets = Args.getAllArgValues(OPT_MT);
>    Opts.IncludeSystemHeaders = Args.hasArg(OPT_sys_header_deps);
> +  Opts.IncludeModuleFiles = Args.hasArg(OPT_module_file_deps);
>    Opts.UsePhonyTargets = Args.hasArg(OPT_MP);
>    Opts.ShowHeaderIncludes = Args.hasArg(OPT_H);
>    Opts.HeaderIncludeOutputFile = Args.getLastArgValue(OPT_header_include_file);
> 
> Modified: cfe/trunk/lib/Frontend/DependencyFile.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/DependencyFile.cpp?rev=203885&r1=203884&r2=203885&view=diff <http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/DependencyFile.cpp?rev=203885&r1=203884&r2=203885&view=diff>
> ==============================================================================
> --- cfe/trunk/lib/Frontend/DependencyFile.cpp (original)
> +++ cfe/trunk/lib/Frontend/DependencyFile.cpp Thu Mar 13 22:07:38 2014
> @@ -40,6 +40,7 @@ class DFGImpl : public PPCallbacks {
>    bool PhonyTarget;
>    bool AddMissingHeaderDeps;
>    bool SeenMissingHeader;
> +  bool IncludeModuleFiles;
>  private:
>    bool FileMatchesDepCriteria(const char *Filename,
>                                SrcMgr::CharacteristicKind FileType);
> @@ -51,7 +52,8 @@ public:
>        IncludeSystemHeaders(Opts.IncludeSystemHeaders),
>        PhonyTarget(Opts.UsePhonyTargets),
>        AddMissingHeaderDeps(Opts.AddMissingHeaderDeps),
> -      SeenMissingHeader(false) {}
> +      SeenMissingHeader(false),
> +      IncludeModuleFiles(Opts.IncludeModuleFiles) {}
> 
>    void FileChanged(SourceLocation Loc, FileChangeReason Reason,
>                     SrcMgr::CharacteristicKind FileType,
> @@ -68,6 +70,7 @@ public:
> 
>    void AddFilename(StringRef Filename);
>    bool includeSystemHeaders() const { return IncludeSystemHeaders; }
> +  bool includeModuleFiles() const { return IncludeModuleFiles; }
>  };
> 
>  class DFGASTReaderListener : public ASTReaderListener {
> @@ -79,6 +82,7 @@ public:
>    bool needsSystemInputFileVisitation() override {
>      return Parent.includeSystemHeaders();
>    }
> +  void visitModuleFile(StringRef Filename) override;
>    bool visitInputFile(StringRef Filename, bool isSystem,
>                        bool isOverridden) override;
>  };
> @@ -268,3 +272,7 @@ bool DFGASTReaderListener::visitInputFil
>    return true;
>  }
> 
> +void DFGASTReaderListener::visitModuleFile(llvm::StringRef Filename) {
> +  if (Parent.includeModuleFiles())
> +    Parent.AddFilename(Filename);
> +}
> 
> Modified: cfe/trunk/lib/Serialization/ASTReader.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReader.cpp?rev=203885&r1=203884&r2=203885&view=diff <http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReader.cpp?rev=203885&r1=203884&r2=203885&view=diff>
> ==============================================================================
> --- cfe/trunk/lib/Serialization/ASTReader.cpp (original)
> +++ cfe/trunk/lib/Serialization/ASTReader.cpp Thu Mar 13 22:07:38 2014
> @@ -118,6 +118,10 @@ bool ChainedASTReaderListener::needsSyst
>    return First->needsSystemInputFileVisitation() ||
>    Second->needsSystemInputFileVisitation();
>  }
> +void ChainedASTReaderListener::visitModuleFile(StringRef Filename) {
> +  First->visitModuleFile(Filename);
> +  Second->visitModuleFile(Filename);
> +}
>  bool ChainedASTReaderListener::visitInputFile(StringRef Filename,
>                                                bool isSystem,
>                                                bool isOverridden) {
> @@ -2118,6 +2122,9 @@ ASTReader::ReadControlBlock(ModuleFile &
>          }
>        }
> 
> +      if (Listener)
> +        Listener->visitModuleFile(F.FileName);
> +
>        if (Listener && Listener->needsInputFileVisitation()) {
>          unsigned N = Listener->needsSystemInputFileVisitation() ? NumInputs
>                                                                  : NumUserInputs;
> 
> Added: cfe/trunk/test/Driver/pch-deps.c
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/pch-deps.c?rev=203885&view=auto <http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/pch-deps.c?rev=203885&view=auto>
> ==============================================================================
> --- cfe/trunk/test/Driver/pch-deps.c (added)
> +++ cfe/trunk/test/Driver/pch-deps.c Thu Mar 13 22:07:38 2014
> @@ -0,0 +1,10 @@
> +// RUN: %clang -x c-header %s -o %t.pch -MMD -MT dependencies -MF %t.d -### 2> %t
> +// RUN: FileCheck %s -input-file=%t
> +// CHECK: -emit-pch
> +// CHECK: -dependency-file
> +// CHECK: -module-file-deps
> +
> +// RUN: %clang -c %s -o %t -MMD -MT dependencies -MF %t.d -### 2> %t
> +// RUN: FileCheck %s -check-prefix=CHECK-NOPCH -input-file=%t
> +// CHECK-NOPCH: -dependency-file
> +// CHECK-NOPCH-NOT: -module-file-deps
> 
> Added: cfe/trunk/test/Modules/dependency-gen-pch.m
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/dependency-gen-pch.m?rev=203885&view=auto <http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/dependency-gen-pch.m?rev=203885&view=auto>
> ==============================================================================
> --- cfe/trunk/test/Modules/dependency-gen-pch.m (added)
> +++ cfe/trunk/test/Modules/dependency-gen-pch.m Thu Mar 13 22:07:38 2014
> @@ -0,0 +1,12 @@
> +// RUN: rm -rf %t-mcp
> +// RUN: mkdir -p %t-mcp
> +
> +// RUN: %clang_cc1 -isysroot %S/Inputs/System -triple x86_64-apple-darwin10 -module-file-deps -dependency-file %t.d -MT %s.o -I %S/Inputs -fmodules -fmodules-cache-path=%t-mcp -emit-pch -o %t.pch %s
> +// RUN: FileCheck %s < %t.d
> +// CHECK: dependency-gen-pch.m.o
> +// CHECK-NEXT: dependency-gen-pch.m
> +// CHECK-NEXT: diamond_top.pcm
> +// CHECK-NEXT: Inputs{{.}}diamond_top.h
> +// CHECK-NEXT: Inputs{{.}}module.map
> +
> +#import "diamond_top.h"
> 
> 
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu <mailto:cfe-commits at cs.uiuc.edu>
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits <http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits>
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150901/19c49856/attachment-0001.html>


More information about the cfe-commits mailing list