//===---------------- Layer.h -- Layer interfaces --------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // Layer interfaces. // //===----------------------------------------------------------------------===// #ifndef LLVM_EXECUTIONENGINE_ORC_LAYER_H #define LLVM_EXECUTIONENGINE_ORC_LAYER_H #include "llvm/ExecutionEngine/Orc/Core.h" #include "llvm/ExecutionEngine/Orc/Mangling.h" #include "llvm/ExecutionEngine/Orc/ThreadSafeModule.h" #include "llvm/IR/Module.h" #include "llvm/Support/Casting.h" #include "llvm/Support/ExtensibleRTTI.h" #include "llvm/Support/MemoryBuffer.h" namespace llvm { namespace orc { /// IRMaterializationUnit is a convenient base class for MaterializationUnits /// wrapping LLVM IR. Represents materialization responsibility for all symbols /// in the given module. If symbols are overridden by other definitions, then /// their linkage is changed to available-externally. class IRMaterializationUnit : public MaterializationUnit { … }; /// Interface for layers that accept LLVM IR. class IRLayer { … }; /// MaterializationUnit that materializes modules by calling the 'emit' method /// on the given IRLayer. class BasicIRLayerMaterializationUnit : public IRMaterializationUnit { … }; /// Interface for Layers that accept object files. class ObjectLayer : public RTTIExtends<ObjectLayer, RTTIRoot> { … }; /// Materializes the given object file (represented by a MemoryBuffer /// instance) by calling 'emit' on the given ObjectLayer. class BasicObjectLayerMaterializationUnit : public MaterializationUnit { … }; } // End namespace orc } // End namespace llvm #endif // LLVM_EXECUTIONENGINE_ORC_LAYER_H