Driver.h revision 4ad4b3ebbe5769143389dccfcfadb666a4ba5940
13ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar//===--- Driver.h - Clang GCC Compatible Driver -----------------*- C++ -*-===// 23ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar// 33ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar// The LLVM Compiler Infrastructure 43ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar// 53ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar// This file is distributed under the University of Illinois Open Source 63ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar// License. See LICENSE.TXT for details. 73ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar// 83ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar//===----------------------------------------------------------------------===// 93ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar 103ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar#ifndef CLANG_DRIVER_DRIVER_H_ 113ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar#define CLANG_DRIVER_DRIVER_H_ 123ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar 134ad4b3ebbe5769143389dccfcfadb666a4ba5940Daniel Dunbar#include "clang/Basic/Diagnostic.h" 144ad4b3ebbe5769143389dccfcfadb666a4ba5940Daniel Dunbar 15365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar#include <list> 16365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar#include <set> 17365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar#include <string> 18365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar 1953ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbarnamespace llvm { 2053ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar template<typename T, unsigned N> class SmallVector; 2153ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar class raw_ostream; 2253ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar} 2353ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar 243ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbarnamespace clang { 251b3bb6efc59a21f794b534078f9ae7e95393f510Daniel Dunbarnamespace driver { 2653ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar class Action; 270648262df75d97b464c2be0ed867da3615659785Daniel Dunbar class ArgList; 283ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar class Compilation; 29365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar class HostInfo; 301b3bb6efc59a21f794b534078f9ae7e95393f510Daniel Dunbar class OptTable; 313ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar 323ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar/// Driver - Encapsulate logic for constructing compilation processes 333ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar/// from a set of gcc-driver-like command line arguments. 343ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbarclass Driver { 351b3bb6efc59a21f794b534078f9ae7e95393f510Daniel Dunbar OptTable *Opts; 361b3bb6efc59a21f794b534078f9ae7e95393f510Daniel Dunbar 374ad4b3ebbe5769143389dccfcfadb666a4ba5940Daniel Dunbar Diagnostic &Diags; 384ad4b3ebbe5769143389dccfcfadb666a4ba5940Daniel Dunbar 390648262df75d97b464c2be0ed867da3615659785Daniel Dunbar /// ParseArgStrings - Parse the given list of strings into an 400648262df75d97b464c2be0ed867da3615659785Daniel Dunbar /// ArgList. 410648262df75d97b464c2be0ed867da3615659785Daniel Dunbar ArgList *ParseArgStrings(const char **ArgBegin, const char **ArgEnd); 420648262df75d97b464c2be0ed867da3615659785Daniel Dunbar 434ad4b3ebbe5769143389dccfcfadb666a4ba5940Daniel Dunbar // Diag - Forwarding function for diagnostics. 444ad4b3ebbe5769143389dccfcfadb666a4ba5940Daniel Dunbar DiagnosticBuilder Diag(unsigned DiagID) { 454ad4b3ebbe5769143389dccfcfadb666a4ba5940Daniel Dunbar return Diags.Report(FullSourceLoc(), DiagID); 464ad4b3ebbe5769143389dccfcfadb666a4ba5940Daniel Dunbar } 474ad4b3ebbe5769143389dccfcfadb666a4ba5940Daniel Dunbar 48365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar // FIXME: Privatize once interface is stable. 49365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbarpublic: 50365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar /// The name the driver was invoked as. 51365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar std::string Name; 52365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar 53365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar /// The path the driver executable was in, as invoked from the 54365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar /// command line. 55365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar std::string Dir; 56dd98e2cad165ca73c769e4f105a4e47c2216387aDaniel Dunbar 57dd98e2cad165ca73c769e4f105a4e47c2216387aDaniel Dunbar /// Default host triple. 58dd98e2cad165ca73c769e4f105a4e47c2216387aDaniel Dunbar std::string DefaultHostTriple; 59365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar 60365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar /// Host information for the platform the driver is running as. This 61365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar /// will generally be the actual host platform, but not always. 62365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar HostInfo *Host; 63365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar 64365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar /// Information about the host which can be overriden by the user. 65365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar std::string HostBits, HostMachine, HostSystem, HostRelease; 66365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar 67365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar /// Whether the driver should follow g++ like behavior. 68365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar bool CCCIsCXX : 1; 69365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar 70365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar /// Echo commands while executing (in -v style). 71365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar bool CCCEcho : 1; 72365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar 73365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar /// Don't use clang for any tasks. 74365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar bool CCCNoClang : 1; 75365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar 76365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar /// Don't use clang for handling C++ and Objective-C++ inputs. 77365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar bool CCCNoClangCXX : 1; 78365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar 79365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar /// Don't use clang as a preprocessor (clang's preprocessor will 80365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar /// still be used where an integrated CPP would). 81365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar bool CCCNoClangCPP : 1; 82365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar 83365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar /// Only use clang for the given architectures. Only used when 84365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar /// non-empty. 85365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar std::set<std::string> CCCClangArchs; 86365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar 87365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar /// Certain options suppress the 'no input files' warning. 88365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar bool SuppressMissingInputWarning : 1; 89365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar 90365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar std::list<std::string> TempFiles; 91365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar std::list<std::string> ResultFiles; 92365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar 933ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbarpublic: 94dd98e2cad165ca73c769e4f105a4e47c2216387aDaniel Dunbar Driver(const char *_Name, const char *_Dir, 954ad4b3ebbe5769143389dccfcfadb666a4ba5940Daniel Dunbar const char *_DefaultHostTriple, 964ad4b3ebbe5769143389dccfcfadb666a4ba5940Daniel Dunbar Diagnostic &_Diags); 973ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar ~Driver(); 983ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar 991b3bb6efc59a21f794b534078f9ae7e95393f510Daniel Dunbar const OptTable &getOpts() const { return *Opts; } 1001b3bb6efc59a21f794b534078f9ae7e95393f510Daniel Dunbar 1013ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar /// BuildCompilation - Construct a compilation object for a command 1023ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar /// line argument vector. 1033ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar Compilation *BuildCompilation(int argc, const char **argv); 104365c02f65be026f90e67a8e00e7b827cee60e228Daniel Dunbar 10553ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar /// PrintOptions - Print the list of arguments. 10653ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar void PrintOptions(const ArgList &Args); 10753ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar 10853ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar /// PrintActions - Print the list of actions. 10953ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar void PrintActions(const llvm::SmallVector<Action*, 2> &Actions); 110dd98e2cad165ca73c769e4f105a4e47c2216387aDaniel Dunbar 111dd98e2cad165ca73c769e4f105a4e47c2216387aDaniel Dunbar /// GetHostInfo - Construct a new host info object for the given 112dd98e2cad165ca73c769e4f105a4e47c2216387aDaniel Dunbar /// host triple. 113dd98e2cad165ca73c769e4f105a4e47c2216387aDaniel Dunbar static HostInfo *GetHostInfo(const char *HostTriple); 11453ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar 11553ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar /// BuildUniversalActions - Construct the list of actions to perform 11653ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar /// for the given arguments, which may require a universal build. 11753ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar /// 11853ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar /// \param Args - The input arguments. 11953ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar /// \param Actions - The list to store the resulting actions onto. 12053ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar void BuildUniversalActions(const ArgList &Args, 12153ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar llvm::SmallVector<Action*, 2> &Actions); 12253ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar 12353ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar /// BuildActions - Construct the list of actions to perform for the 12453ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar /// given arguments, which are only done for a single architecture. 12553ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar /// 12653ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar /// \param Args - The input arguments. 12753ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar /// \param Actions - The list to store the resulting actions onto. 12853ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar void BuildActions(const ArgList &Args, 12953ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar llvm::SmallVector<Action*, 2> &Actions); 1303ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar}; 1313ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar 1321b3bb6efc59a21f794b534078f9ae7e95393f510Daniel Dunbar} // end namespace driver 1333ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar} // end namespace clang 1343ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar 1353ede8d0a7d1813f678ccc6011a99a0834b1b6116Daniel Dunbar#endif 136