aboutsummaryrefslogtreecommitdiff
path: root/tools/llvmc/CompilerDriver.h
diff options
context:
space:
mode:
Diffstat (limited to 'tools/llvmc/CompilerDriver.h')
-rw-r--r--tools/llvmc/CompilerDriver.h206
1 files changed, 0 insertions, 206 deletions
diff --git a/tools/llvmc/CompilerDriver.h b/tools/llvmc/CompilerDriver.h
deleted file mode 100644
index 1e58e9bf68..0000000000
--- a/tools/llvmc/CompilerDriver.h
+++ /dev/null
@@ -1,206 +0,0 @@
-//===- CompilerDriver.h - Compiler Driver -----------------------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file declares the CompilerDriver class which implements the bulk of the
-// LLVM Compiler Driver program (llvmc).
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_TOOLS_LLVMC_COMPILERDRIVER_H
-#define LLVM_TOOLS_LLVMC_COMPILERDRIVER_H
-
-#include <string>
-#include <vector>
-#include "llvm/System/Program.h"
-
-namespace llvm {
- /// This class provides the high level interface to the LLVM Compiler Driver.
- /// The driver's purpose is to make it easier for compiler writers and users
- /// of LLVM to utilize the compiler toolkits and LLVM toolset by learning only
- /// the interface of one program (llvmc).
- ///
- /// @see llvmc.cpp
- /// @brief The interface to the LLVM Compiler Driver.
- class CompilerDriver {
- /// @name Types
- /// @{
- public:
- /// @brief A vector of strings, used for argument lists
- typedef std::vector<std::string> StringVector;
-
- /// @brief A vector of sys::Path, used for path lists
- typedef std::vector<sys::Path> PathVector;
-
- /// @brief A table of strings, indexed typically by Phases
- typedef std::vector<StringVector> StringTable;
-
- /// @brief The phases of processing that llvmc understands
- enum Phases {
- PREPROCESSING, ///< Source language combining, filtering, substitution
- TRANSLATION, ///< Translate source -> LLVM bitcode/assembly
- OPTIMIZATION, ///< Optimize translation result
- ASSEMBLY, ///< Convert program to executable
- LINKING, ///< Link bitcode and native code
- NUM_PHASES ///< Always last!
- };
-
- /// @brief The levels of optimization llvmc understands
- enum OptimizationLevels {
- OPT_FAST_COMPILE, ///< Optimize to make >compile< go faster
- OPT_SIMPLE, ///< Standard/simple optimizations
- OPT_AGGRESSIVE, ///< Aggressive optimizations
- OPT_LINK_TIME, ///< Aggressive + LinkTime optimizations
- OPT_AGGRESSIVE_LINK_TIME, ///< Make it go way fast!
- OPT_NONE ///< No optimizations. Keep this at the end!
- };
-
- /// @brief Action specific flags
- enum ConfigurationFlags {
- REQUIRED_FLAG = 0x0001, ///< Should the action always be run?
- PREPROCESSES_FLAG = 0x0002, ///< Does this action preprocess?
- TRANSLATES_FLAG = 0x0004, ///< Does this action translate?
- OUTPUT_IS_ASM_FLAG = 0x0008, ///< Action produces .ll files?
- FLAGS_MASK = 0x000F ///< Union of all flags
- };
-
- /// This type is the input list to the CompilerDriver. It provides
- /// a vector of pathname/filetype pairs. The filetype is used to look up
- /// the configuration of the actions to be taken by the driver.
- /// @brief The Input Data to the execute method
- typedef std::vector<std::pair<sys::Path,std::string> > InputList;
-
- /// This type is read from configuration files or otherwise provided to
- /// the CompilerDriver through a "ConfigDataProvider". It serves as both
- /// the template of what to do and the actual Action to be executed.
- /// @brief A structure to hold the action data for a given source
- /// language.
- struct Action {
- Action() : flags(0) {}
- sys::Path program; ///< The program to execve
- StringVector args; ///< Arguments to the program
- unsigned flags; ///< Action specific flags
- void set(unsigned fl ) { flags |= fl; }
- void clear(unsigned fl) { flags &= (FLAGS_MASK ^ fl); }
- bool isSet(unsigned fl) { return (flags&fl) != 0; }
- };
-
- struct ConfigData {
- ConfigData();
- std::string version; ///< The version number.
- std::string langName; ///< The name of the source language
- StringTable opts; ///< The o10n options for each level
- StringVector libpaths; ///< The library paths
- Action PreProcessor; ///< PreProcessor command line
- Action Translator; ///< Translator command line
- Action Optimizer; ///< Optimizer command line
- Action Assembler; ///< Assembler command line
- Action Linker; ///< Linker command line
- };
-
- /// This pure virtual interface class defines the interface between the
- /// CompilerDriver and other software that provides ConfigData objects to
- /// it. The CompilerDriver must be configured to use an object of this
- /// type so it can obtain the configuration data.
- /// @see setConfigDataProvider
- /// @brief Configuration Data Provider interface
- class ConfigDataProvider {
- public:
- virtual ~ConfigDataProvider();
- virtual ConfigData* ProvideConfigData(const std::string& filetype) = 0;
- virtual void setConfigDir(const sys::Path& dirName) = 0;
- };
-
- /// These flags control various actions of the compiler driver. They are
- /// used by adding the needed flag values together and passing them to the
- /// compiler driver's setDriverFlags method.
- /// @see setDriverFlags
- /// @brief Driver specific flags
- enum DriverFlags {
- DRY_RUN_FLAG = 0x0001, ///< Do everything but execute actions
- VERBOSE_FLAG = 0x0002, ///< Print each action
- DEBUG_FLAG = 0x0004, ///< Print debug information
- TIME_PASSES_FLAG = 0x0008, ///< Time the passes as they execute
- TIME_ACTIONS_FLAG = 0x0010, ///< Time the actions as they execute
- SHOW_STATS_FLAG = 0x0020, ///< Show pass statistics
- EMIT_NATIVE_FLAG = 0x0040, ///< Emit native code instead of bc
- EMIT_RAW_FLAG = 0x0080, ///< Emit raw, unoptimized bitcode
- KEEP_TEMPS_FLAG = 0x0100, ///< Don't delete temporary files
- STRIP_OUTPUT_FLAG = 0x0200, ///< Strip symbols from linked output
- DRIVER_FLAGS_MASK = 0x03FF ///< Union of the above flags
- };
-
- /// @}
- /// @name Constructors
- /// @{
- public:
- /// @brief Static Constructor
- static CompilerDriver* Get(ConfigDataProvider& CDP);
-
- /// @brief Virtual destructor
- virtual ~CompilerDriver();
-
- /// @}
- /// @name Methods
- /// @{
- public:
- /// @brief Execute the actions requested for the given input list.
- virtual int execute(
- const InputList& list, const sys::Path& output, std::string& ErrMsg) =0;
-
- /// @brief Set the final phase at which compilation terminates
- virtual void setFinalPhase(Phases phase) = 0;
-
- /// @brief Set the optimization level for the compilation
- virtual void setOptimization(OptimizationLevels level) = 0;
-
- /// @brief Set the driver flags.
- virtual void setDriverFlags(unsigned flags) = 0;
-
- /// @brief Set the output machine name.
- virtual void setOutputMachine(const std::string& machineName) = 0;
-
- /// @brief Set the options for a given phase.
- virtual void setPhaseArgs(Phases phase, const StringVector& opts) = 0;
-
- /// @brief Set Library Paths
- virtual void setIncludePaths(const StringVector& paths) = 0;
-
- /// @brief Set Library Paths
- virtual void setSymbolDefines(const StringVector& paths) = 0;
-
- /// @brief Set Library Paths
- virtual void setLibraryPaths(const StringVector& paths) = 0;
-
- /// @brief Add a path to the list of library paths
- virtual void addLibraryPath( const sys::Path& libPath ) = 0;
-
- /// @brief Add a path to the list of paths in which to find tools
- virtual void addToolPath( const sys::Path& toolPath) = 0;
-
- /// @brief Set the list of -f options to be passed through
- virtual void setfPassThrough(const StringVector& fOpts) = 0;
-
- /// @brief Set the list of -M options to be passed through
- virtual void setMPassThrough(const StringVector& fOpts) = 0;
-
- /// @brief Set the list of -W options to be passed through
- virtual void setWPassThrough(const StringVector& fOpts) = 0;
-
- /// @brief Determine where a linkage file is located in the file system
- virtual sys::Path GetPathForLinkageItem(
- const std::string& link_item, ///< Item to be sought
- bool native = false ///< Looking for native?
- ) = 0;
-
- /// @}
- };
-}
-
-// vim: sw=2 smartindent smarttab tw=80 autoindent expandtab
-#endif