You've already forked linux-packaging-mono
107 lines
3.7 KiB
C++
107 lines
3.7 KiB
C++
//===--- CodeGen/ModuleBuilder.h - Build LLVM from ASTs ---------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file defines the ModuleBuilder interface.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_CLANG_CODEGEN_MODULEBUILDER_H
|
|
#define LLVM_CLANG_CODEGEN_MODULEBUILDER_H
|
|
|
|
#include "clang/AST/ASTConsumer.h"
|
|
|
|
namespace llvm {
|
|
class Constant;
|
|
class LLVMContext;
|
|
class Module;
|
|
class StringRef;
|
|
}
|
|
|
|
namespace clang {
|
|
class CodeGenOptions;
|
|
class CoverageSourceInfo;
|
|
class Decl;
|
|
class DiagnosticsEngine;
|
|
class GlobalDecl;
|
|
class HeaderSearchOptions;
|
|
class LangOptions;
|
|
class PreprocessorOptions;
|
|
|
|
namespace CodeGen {
|
|
class CodeGenModule;
|
|
class CGDebugInfo;
|
|
}
|
|
|
|
/// The primary public interface to the Clang code generator.
|
|
///
|
|
/// This is not really an abstract interface.
|
|
class CodeGenerator : public ASTConsumer {
|
|
virtual void anchor();
|
|
|
|
public:
|
|
/// Return an opaque reference to the CodeGenModule object, which can
|
|
/// be used in various secondary APIs. It is valid as long as the
|
|
/// CodeGenerator exists.
|
|
CodeGen::CodeGenModule &CGM();
|
|
|
|
/// Return the module that this code generator is building into.
|
|
///
|
|
/// This may return null after HandleTranslationUnit is called;
|
|
/// this signifies that there was an error generating code. A
|
|
/// diagnostic will have been generated in this case, and the module
|
|
/// will be deleted.
|
|
///
|
|
/// It will also return null if the module is released.
|
|
llvm::Module *GetModule();
|
|
|
|
/// Release ownership of the module to the caller.
|
|
///
|
|
/// It is illegal to call methods other than GetModule on the
|
|
/// CodeGenerator after releasing its module.
|
|
llvm::Module *ReleaseModule();
|
|
|
|
/// Return debug info code generator.
|
|
CodeGen::CGDebugInfo *getCGDebugInfo();
|
|
|
|
/// Given a mangled name, return a declaration which mangles that way
|
|
/// which has been added to this code generator via a Handle method.
|
|
///
|
|
/// This may return null if there was no matching declaration.
|
|
const Decl *GetDeclForMangledName(llvm::StringRef MangledName);
|
|
|
|
/// Return the LLVM address of the given global entity.
|
|
///
|
|
/// \param isForDefinition If true, the caller intends to define the
|
|
/// entity; the object returned will be an llvm::GlobalValue of
|
|
/// some sort. If false, the caller just intends to use the entity;
|
|
/// the object returned may be any sort of constant value, and the
|
|
/// code generator will schedule the entity for emission if a
|
|
/// definition has been registered with this code generator.
|
|
llvm::Constant *GetAddrOfGlobal(GlobalDecl decl, bool isForDefinition);
|
|
|
|
/// Create a new \c llvm::Module after calling HandleTranslationUnit. This
|
|
/// enable codegen in interactive processing environments.
|
|
llvm::Module* StartModule(llvm::StringRef ModuleName, llvm::LLVMContext &C);
|
|
};
|
|
|
|
/// CreateLLVMCodeGen - Create a CodeGenerator instance.
|
|
/// It is the responsibility of the caller to call delete on
|
|
/// the allocated CodeGenerator instance.
|
|
CodeGenerator *CreateLLVMCodeGen(DiagnosticsEngine &Diags,
|
|
llvm::StringRef ModuleName,
|
|
const HeaderSearchOptions &HeaderSearchOpts,
|
|
const PreprocessorOptions &PreprocessorOpts,
|
|
const CodeGenOptions &CGO,
|
|
llvm::LLVMContext& C,
|
|
CoverageSourceInfo *CoverageInfo = nullptr);
|
|
|
|
} // end namespace clang
|
|
|
|
#endif
|