Home | History | Annotate | Line # | Download | only in Frontend
      1 //===--- DependencyOutputOptions.h ------------------------------*- C++ -*-===//
      2 //
      3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
      4 // See https://llvm.org/LICENSE.txt for license information.
      5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
      6 //
      7 //===----------------------------------------------------------------------===//
      8 
      9 #ifndef LLVM_CLANG_FRONTEND_DEPENDENCYOUTPUTOPTIONS_H
     10 #define LLVM_CLANG_FRONTEND_DEPENDENCYOUTPUTOPTIONS_H
     11 
     12 #include <string>
     13 #include <vector>
     14 
     15 namespace clang {
     16 
     17 /// ShowIncludesDestination - Destination for /showIncludes output.
     18 enum class ShowIncludesDestination { None, Stdout, Stderr };
     19 
     20 /// DependencyOutputFormat - Format for the compiler dependency file.
     21 enum class DependencyOutputFormat { Make, NMake };
     22 
     23 /// ExtraDepKind - The kind of extra dependency file.
     24 enum ExtraDepKind {
     25   EDK_SanitizeIgnorelist,
     26   EDK_ProfileList,
     27   EDK_ModuleFile,
     28   EDK_DepFileEntry,
     29 };
     30 
     31 /// DependencyOutputOptions - Options for controlling the compiler dependency
     32 /// file generation.
     33 class DependencyOutputOptions {
     34 public:
     35   unsigned IncludeSystemHeaders : 1; ///< Include system header dependencies.
     36   unsigned ShowHeaderIncludes : 1;   ///< Show header inclusions (-H).
     37   unsigned UsePhonyTargets : 1;      ///< Include phony targets for each
     38                                      /// dependency, which can avoid some 'make'
     39                                      /// problems.
     40   unsigned AddMissingHeaderDeps : 1; ///< Add missing headers to dependency list
     41   unsigned IncludeModuleFiles : 1; ///< Include module file dependencies.
     42   unsigned ShowSkippedHeaderIncludes : 1; ///< With ShowHeaderIncludes, show
     43                                           /// also includes that were skipped
     44                                           /// due to the "include guard
     45                                           /// optimization" or #pragma once.
     46 
     47   /// Destination of cl.exe style /showIncludes info.
     48   ShowIncludesDestination ShowIncludesDest = ShowIncludesDestination::None;
     49 
     50   /// The format for the dependency file.
     51   DependencyOutputFormat OutputFormat = DependencyOutputFormat::Make;
     52 
     53   /// The file to write dependency output to.
     54   std::string OutputFile;
     55 
     56   /// The file to write header include output to. This is orthogonal to
     57   /// ShowHeaderIncludes (-H) and will include headers mentioned in the
     58   /// predefines buffer. If the output file is "-", output will be sent to
     59   /// stderr.
     60   std::string HeaderIncludeOutputFile;
     61 
     62   /// A list of names to use as the targets in the dependency file; this list
     63   /// must contain at least one entry.
     64   std::vector<std::string> Targets;
     65 
     66   /// A list of extra dependencies (filename and kind) to be used for every
     67   /// target.
     68   std::vector<std::pair<std::string, ExtraDepKind>> ExtraDeps;
     69 
     70   /// In /showIncludes mode, pretend the main TU is a header with this name.
     71   std::string ShowIncludesPretendHeader;
     72 
     73   /// The file to write GraphViz-formatted header dependencies to.
     74   std::string DOTOutputFile;
     75 
     76   /// The directory to copy module dependencies to when collecting them.
     77   std::string ModuleDependencyOutputDir;
     78 
     79 public:
     80   DependencyOutputOptions()
     81       : IncludeSystemHeaders(0), ShowHeaderIncludes(0), UsePhonyTargets(0),
     82         AddMissingHeaderDeps(0), IncludeModuleFiles(0),
     83         ShowSkippedHeaderIncludes(0) {}
     84 };
     85 
     86 }  // end namespace clang
     87 
     88 #endif
     89