diff options
Diffstat (limited to 'include/clang/Driver/Driver.h')
| -rw-r--r-- | include/clang/Driver/Driver.h | 80 |
1 files changed, 59 insertions, 21 deletions
diff --git a/include/clang/Driver/Driver.h b/include/clang/Driver/Driver.h index a229779e1aa1e..9ecf434a87e27 100644 --- a/include/clang/Driver/Driver.h +++ b/include/clang/Driver/Driver.h @@ -21,6 +21,7 @@ #include "llvm/Support/Path.h" // FIXME: Kill when CompilationInfo lands. #include <list> +#include <map> #include <memory> #include <set> #include <string> @@ -82,6 +83,12 @@ class Driver { SaveTempsObj } SaveTemps; + enum BitcodeEmbedMode { + EmbedNone, + EmbedMarker, + EmbedBitcode + } BitcodeEmbed; + /// LTO mode selected via -f(no-)?lto(=.*)? options. LTOKind LTOMode; @@ -189,7 +196,7 @@ public: private: /// Certain options suppress the 'no input files' warning. - bool SuppressMissingInputWarning : 1; + unsigned SuppressMissingInputWarning : 1; std::list<std::string> TempFiles; std::list<std::string> ResultFiles; @@ -241,7 +248,7 @@ public: void setCheckInputsExist(bool Value) { CheckInputsExist = Value; } const std::string &getTitle() { return DriverTitle; } - void setTitle(std::string Value) { DriverTitle = Value; } + void setTitle(std::string Value) { DriverTitle = std::move(Value); } /// \brief Get the path to the main clang executable. const char *getClangProgramPath() const { @@ -261,10 +268,18 @@ public: bool isSaveTempsEnabled() const { return SaveTemps != SaveTempsNone; } bool isSaveTempsObj() const { return SaveTemps == SaveTempsObj; } + bool embedBitcodeEnabled() const { return BitcodeEmbed == EmbedBitcode; } + bool embedBitcodeMarkerOnly() const { return BitcodeEmbed == EmbedMarker; } + /// @} /// @name Primary Functionality /// @{ + /// CreateOffloadingDeviceToolChains - create all the toolchains required to + /// support offloading devices given the programming models specified in the + /// current compilation. Also, update the host tool chain kind accordingly. + void CreateOffloadingDeviceToolChains(Compilation &C, InputList &Inputs); + /// BuildCompilation - Construct a compilation object for a command /// line argument vector. /// @@ -298,12 +313,10 @@ public: /// given arguments, which are only done for a single architecture. /// /// \param C - The compilation that is being built. - /// \param TC - The default host tool chain. /// \param Args - The input arguments. /// \param Actions - The list to store the resulting actions onto. - void BuildActions(Compilation &C, const ToolChain &TC, - llvm::opt::DerivedArgList &Args, const InputList &Inputs, - ActionList &Actions) const; + void BuildActions(Compilation &C, llvm::opt::DerivedArgList &Args, + const InputList &Inputs, ActionList &Actions) const; /// BuildUniversalActions - Construct the list of actions to perform /// for the given arguments, which may require a universal build. @@ -375,16 +388,19 @@ public: /// ConstructAction - Construct the appropriate action to do for /// \p Phase on the \p Input, taking in to account arguments /// like -fsyntax-only or --analyze. - Action *ConstructPhaseAction(Compilation &C, const ToolChain &TC, - const llvm::opt::ArgList &Args, phases::ID Phase, - Action *Input) const; + Action *ConstructPhaseAction(Compilation &C, const llvm::opt::ArgList &Args, + phases::ID Phase, Action *Input) const; - /// BuildJobsForAction - Construct the jobs to perform for the - /// action \p A and return an InputInfo for the result of running \p A. - InputInfo BuildJobsForAction(Compilation &C, const Action *A, - const ToolChain *TC, const char *BoundArch, - bool AtTopLevel, bool MultipleArchs, - const char *LinkingOutput) const; + /// BuildJobsForAction - Construct the jobs to perform for the action \p A and + /// return an InputInfo for the result of running \p A. Will only construct + /// jobs for a given (Action, ToolChain, BoundArch) tuple once. + InputInfo + BuildJobsForAction(Compilation &C, const Action *A, const ToolChain *TC, + const char *BoundArch, bool AtTopLevel, bool MultipleArchs, + const char *LinkingOutput, + std::map<std::pair<const Action *, std::string>, InputInfo> + &CachedResults, + bool BuildForOffloadDevice) const; /// Returns the default name for linked images (e.g., "a.out"). const char *getDefaultImageName() const; @@ -400,12 +416,11 @@ public: /// \param BoundArch - The bound architecture. /// \param AtTopLevel - Whether this is a "top-level" action. /// \param MultipleArchs - Whether multiple -arch options were supplied. - const char *GetNamedOutputPath(Compilation &C, - const JobAction &JA, - const char *BaseInput, - const char *BoundArch, - bool AtTopLevel, - bool MultipleArchs) const; + /// \param NormalizedTriple - The normalized triple of the relevant target. + const char *GetNamedOutputPath(Compilation &C, const JobAction &JA, + const char *BaseInput, const char *BoundArch, + bool AtTopLevel, bool MultipleArchs, + StringRef NormalizedTriple) const; /// GetTemporaryPath - Return the pathname of a temporary file to use /// as part of compilation; the file will have the given prefix and suffix. @@ -413,6 +428,9 @@ public: /// GCC goes to extra lengths here to be a bit more robust. std::string GetTemporaryPath(StringRef Prefix, const char *Suffix) const; + /// Return the pathname of the pch file in clang-cl mode. + std::string GetClPchPath(Compilation &C, StringRef BaseName) const; + /// ShouldUseClangCompiler - Should the clang compiler be used to /// handle this action. bool ShouldUseClangCompiler(const JobAction &JA) const; @@ -441,6 +459,17 @@ private: /// the driver mode. std::pair<unsigned, unsigned> getIncludeExcludeOptionFlagMasks() const; + /// Helper used in BuildJobsForAction. Doesn't use the cache when building + /// jobs specifically for the given action, but will use the cache when + /// building jobs for the Action's inputs. + InputInfo BuildJobsForActionNoCache( + Compilation &C, const Action *A, const ToolChain *TC, + const char *BoundArch, bool AtTopLevel, bool MultipleArchs, + const char *LinkingOutput, + std::map<std::pair<const Action *, std::string>, InputInfo> + &CachedResults, + bool BuildForOffloadDevice) const; + public: /// GetReleaseVersion - Parse (([0-9]+)(.([0-9]+)(.([0-9]+)?))?)? and /// return the grouped values as integers. Numbers which are not @@ -452,6 +481,15 @@ public: static bool GetReleaseVersion(const char *Str, unsigned &Major, unsigned &Minor, unsigned &Micro, bool &HadExtra); + + /// Parse digits from a string \p Str and fulfill \p Digits with + /// the parsed numbers. This method assumes that the max number of + /// digits to look for is equal to Digits.size(). + /// + /// \return True if the entire string was parsed and there are + /// no extra characters remaining at the end. + static bool GetReleaseVersion(const char *Str, + MutableArrayRef<unsigned> Digits); }; /// \return True if the last defined optimization level is -Ofast. |
