1 //===--- CodeGen/ModuleBuilder.h - Build LLVM from ASTs ---------*- C++ -*-===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 // This file defines the ModuleBuilder interface.
11 //===----------------------------------------------------------------------===//
13 #ifndef LLVM_CLANG_CODEGEN_MODULEBUILDER_H
14 #define LLVM_CLANG_CODEGEN_MODULEBUILDER_H
16 #include "clang/AST/ASTConsumer.h"
27 class CoverageSourceInfo;
29 class DiagnosticsEngine;
31 class HeaderSearchOptions;
33 class PreprocessorOptions;
40 /// The primary public interface to the Clang code generator.
42 /// This is not really an abstract interface.
43 class CodeGenerator : public ASTConsumer {
44 virtual void anchor();
47 /// Return an opaque reference to the CodeGenModule object, which can
48 /// be used in various secondary APIs. It is valid as long as the
49 /// CodeGenerator exists.
50 CodeGen::CodeGenModule &CGM();
52 /// Return the module that this code generator is building into.
54 /// This may return null after HandleTranslationUnit is called;
55 /// this signifies that there was an error generating code. A
56 /// diagnostic will have been generated in this case, and the module
59 /// It will also return null if the module is released.
60 llvm::Module *GetModule();
62 /// Release ownership of the module to the caller.
64 /// It is illegal to call methods other than GetModule on the
65 /// CodeGenerator after releasing its module.
66 llvm::Module *ReleaseModule();
68 /// Return debug info code generator.
69 CodeGen::CGDebugInfo *getCGDebugInfo();
71 /// Given a mangled name, return a declaration which mangles that way
72 /// which has been added to this code generator via a Handle method.
74 /// This may return null if there was no matching declaration.
75 const Decl *GetDeclForMangledName(llvm::StringRef MangledName);
77 /// Return the LLVM address of the given global entity.
79 /// \param isForDefinition If true, the caller intends to define the
80 /// entity; the object returned will be an llvm::GlobalValue of
81 /// some sort. If false, the caller just intends to use the entity;
82 /// the object returned may be any sort of constant value, and the
83 /// code generator will schedule the entity for emission if a
84 /// definition has been registered with this code generator.
85 llvm::Constant *GetAddrOfGlobal(GlobalDecl decl, bool isForDefinition);
87 /// Create a new \c llvm::Module after calling HandleTranslationUnit. This
88 /// enable codegen in interactive processing environments.
89 llvm::Module* StartModule(llvm::StringRef ModuleName, llvm::LLVMContext &C);
92 /// CreateLLVMCodeGen - Create a CodeGenerator instance.
93 /// It is the responsibility of the caller to call delete on
94 /// the allocated CodeGenerator instance.
95 CodeGenerator *CreateLLVMCodeGen(DiagnosticsEngine &Diags,
96 llvm::StringRef ModuleName,
97 const HeaderSearchOptions &HeaderSearchOpts,
98 const PreprocessorOptions &PreprocessorOpts,
99 const CodeGenOptions &CGO,
100 llvm::LLVMContext& C,
101 CoverageSourceInfo *CoverageInfo = nullptr);
103 } // end namespace clang