//===- subzero/src/IceCompiler.h - Compiler driver --------------*- C++ -*-===//
//
//                        The Subzero Code Generator
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
///
/// \file
/// \brief Declares the driver for translating bitcode to native code.
///
//===----------------------------------------------------------------------===//

#ifndef SUBZERO_SRC_ICECOMPILER_H
#define SUBZERO_SRC_ICECOMPILER_H

#include "IceDefs.h"

namespace llvm {
class DataStreamer;
}

namespace Ice {

class ClFlagsExtra;

/// A compiler driver. It may be called to handle a single compile request.
class Compiler {
  Compiler(const Compiler &) = delete;
  Compiler &operator=(const Compiler &) = delete;

public:
  Compiler() = default;

  /// Run the compiler with the given GlobalContext for compilation state. Upon
  /// error, the Context's error status will be set.
  void run(const ClFlagsExtra &ExtraFlags, GlobalContext &Ctx,
           std::unique_ptr<llvm::DataStreamer> &&InputStream);
};

} // end of namespace Ice

#endif // SUBZERO_SRC_ICECOMPILER_H
