//===- CompilerDriver.h - Compiler Driver -----------------------*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file was developed by Reid Spencer and 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 bytecode/assembly
        OPTIMIZATION,  ///< Optimize translation result
        ASSEMBLY,      ///< Convert program to executable
        LINKING,       ///< Link bytecode 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 bytecode
        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) = 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
