]> CyberLeo.Net >> Repos - FreeBSD/stable/9.git/blob - contrib/llvm/tools/clang/include/clang/Driver/Compilation.h
Copy head to stable/9 as part of 9.0-RELEASE release cycle.
[FreeBSD/stable/9.git] / contrib / llvm / tools / clang / include / clang / Driver / Compilation.h
1 //===--- Compilation.h - Compilation Task Data Structure --------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 #ifndef CLANG_DRIVER_COMPILATION_H_
11 #define CLANG_DRIVER_COMPILATION_H_
12
13 #include "clang/Driver/Job.h"
14 #include "clang/Driver/Util.h"
15
16 #include "llvm/ADT/DenseMap.h"
17
18 namespace llvm {
19   class raw_ostream;
20 }
21
22 namespace clang {
23 namespace driver {
24   class DerivedArgList;
25   class Driver;
26   class InputArgList;
27   class JobList;
28   class ToolChain;
29
30 /// Compilation - A set of tasks to perform for a single driver
31 /// invocation.
32 class Compilation {
33   /// The driver we were created by.
34   const Driver &TheDriver;
35
36   /// The default tool chain.
37   const ToolChain &DefaultToolChain;
38
39   /// The original (untranslated) input argument list.
40   InputArgList *Args;
41
42   /// The driver translated arguments. Note that toolchains may perform their
43   /// own argument translation.
44   DerivedArgList *TranslatedArgs;
45
46   /// The list of actions.
47   ActionList Actions;
48
49   /// The root list of jobs.
50   JobList Jobs;
51
52   /// Cache of translated arguments for a particular tool chain and bound
53   /// architecture.
54   llvm::DenseMap<std::pair<const ToolChain*, const char*>,
55                  DerivedArgList*> TCArgs;
56
57   /// Temporary files which should be removed on exit.
58   ArgStringList TempFiles;
59
60   /// Result files which should be removed on failure.
61   ArgStringList ResultFiles;
62
63 public:
64   Compilation(const Driver &D, const ToolChain &DefaultToolChain,
65               InputArgList *Args, DerivedArgList *TranslatedArgs);
66   ~Compilation();
67
68   const Driver &getDriver() const { return TheDriver; }
69
70   const ToolChain &getDefaultToolChain() const { return DefaultToolChain; }
71
72   const InputArgList &getInputArgs() const { return *Args; }
73
74   const DerivedArgList &getArgs() const { return *TranslatedArgs; }
75
76   ActionList &getActions() { return Actions; }
77   const ActionList &getActions() const { return Actions; }
78
79   JobList &getJobs() { return Jobs; }
80   const JobList &getJobs() const { return Jobs; }
81
82   void addCommand(Command *C) { Jobs.addJob(C); }
83
84   const ArgStringList &getTempFiles() const { return TempFiles; }
85
86   const ArgStringList &getResultFiles() const { return ResultFiles; }
87
88   /// getArgsForToolChain - Return the derived argument list for the
89   /// tool chain \arg TC (or the default tool chain, if TC is not
90   /// specified).
91   ///
92   /// \param BoundArch - The bound architecture name, or 0.
93   const DerivedArgList &getArgsForToolChain(const ToolChain *TC,
94                                             const char *BoundArch);
95
96   /// addTempFile - Add a file to remove on exit, and returns its
97   /// argument.
98   const char *addTempFile(const char *Name) {
99     TempFiles.push_back(Name);
100     return Name;
101   }
102
103   /// addResultFile - Add a file to remove on failure, and returns its
104   /// argument.
105   const char *addResultFile(const char *Name) {
106     ResultFiles.push_back(Name);
107     return Name;
108   }
109
110   /// CleanupFileList - Remove the files in the given list.
111   ///
112   /// \param IssueErrors - Report failures as errors.
113   /// \return Whether all files were removed successfully.
114   bool CleanupFileList(const ArgStringList &Files,
115                        bool IssueErrors=false) const;
116
117   /// PrintJob - Print one job in -### format.
118   ///
119   /// \param OS - The stream to print on.
120   /// \param J - The job to print.
121   /// \param Terminator - A string to print at the end of the line.
122   /// \param Quote - Should separate arguments be quoted.
123   void PrintJob(llvm::raw_ostream &OS, const Job &J,
124                 const char *Terminator, bool Quote) const;
125
126   /// ExecuteCommand - Execute an actual command.
127   ///
128   /// \param FailingCommand - For non-zero results, this will be set to the
129   /// Command which failed, if any.
130   /// \return The result code of the subprocess.
131   int ExecuteCommand(const Command &C, const Command *&FailingCommand) const;
132
133   /// ExecuteJob - Execute a single job.
134   ///
135   /// \param FailingCommand - For non-zero results, this will be set to the
136   /// Command which failed.
137   /// \return The accumulated result code of the job.
138   int ExecuteJob(const Job &J, const Command *&FailingCommand) const;
139 };
140
141 } // end namespace driver
142 } // end namespace clang
143
144 #endif