- /*===----------- llvm-c/LLJIT.h - OrcV2 LLJIT C bindings --------*- 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                    *| 
- |*                                                                            *| 
- |*===----------------------------------------------------------------------===*| 
- |*                                                                            *| 
- |* This header declares the C interface to the LLJIT class in                 *| 
- |* libLLVMOrcJIT.a, which provides a simple MCJIT-like ORC JIT.               *| 
- |*                                                                            *| 
- |* Many exotic languages can interoperate with C code but have a harder time  *| 
- |* with C++ due to name mangling. So in addition to C, this interface enables *| 
- |* tools written in such languages.                                           *| 
- |*                                                                            *| 
- |* Note: This interface is experimental. It is *NOT* stable, and may be       *| 
- |*       changed without warning. Only C API usage documentation is           *| 
- |*       provided. See the C++ documentation for all higher level ORC API     *| 
- |*       details.                                                             *| 
- |*                                                                            *| 
- \*===----------------------------------------------------------------------===*/ 
-   
- #ifndef LLVM_C_LLJIT_H 
- #define LLVM_C_LLJIT_H 
-   
- #include "llvm-c/Error.h" 
- #include "llvm-c/Orc.h" 
- #include "llvm-c/TargetMachine.h" 
- #include "llvm-c/Types.h" 
-   
- LLVM_C_EXTERN_C_BEGIN 
-   
- /** 
-  * @defgroup LLVMCExecutionEngineLLJIT LLJIT 
-  * @ingroup LLVMCExecutionEngine 
-  * 
-  * @{ 
-  */ 
-   
- /** 
-  * A function for constructing an ObjectLinkingLayer instance to be used 
-  * by an LLJIT instance. 
-  * 
-  * Clients can call LLVMOrcLLJITBuilderSetObjectLinkingLayerCreator to 
-  * set the creator function to use when constructing an LLJIT instance. 
-  * This can be used to override the default linking layer implementation 
-  * that would otherwise be chosen by LLJITBuilder. 
-  * 
-  * Object linking layers returned by this function will become owned by the 
-  * LLJIT instance. The client is not responsible for managing their lifetimes 
-  * after the function returns. 
-  */ 
- typedef LLVMOrcObjectLayerRef ( 
-     *LLVMOrcLLJITBuilderObjectLinkingLayerCreatorFunction)( 
-     void *Ctx, LLVMOrcExecutionSessionRef ES, const char *Triple); 
-   
- /** 
-  * A reference to an orc::LLJITBuilder instance. 
-  */ 
- typedef struct LLVMOrcOpaqueLLJITBuilder *LLVMOrcLLJITBuilderRef; 
-   
- /** 
-  * A reference to an orc::LLJIT instance. 
-  */ 
- typedef struct LLVMOrcOpaqueLLJIT *LLVMOrcLLJITRef; 
-   
- /** 
-  * Create an LLVMOrcLLJITBuilder. 
-  * 
-  * The client owns the resulting LLJITBuilder and should dispose of it using 
-  * LLVMOrcDisposeLLJITBuilder once they are done with it. 
-  */ 
- LLVMOrcLLJITBuilderRef LLVMOrcCreateLLJITBuilder(void); 
-   
- /** 
-  * Dispose of an LLVMOrcLLJITBuilderRef. This should only be called if ownership 
-  * has not been passed to LLVMOrcCreateLLJIT (e.g. because some error prevented 
-  * that function from being called). 
-  */ 
- void LLVMOrcDisposeLLJITBuilder(LLVMOrcLLJITBuilderRef Builder); 
-   
- /** 
-  * Set the JITTargetMachineBuilder to be used when constructing the LLJIT 
-  * instance. Calling this function is optional: if it is not called then the 
-  * LLJITBuilder will use JITTargeTMachineBuilder::detectHost to construct a 
-  * JITTargetMachineBuilder. 
-  * 
-  * This function takes ownership of the JTMB argument: clients should not 
-  * dispose of the JITTargetMachineBuilder after calling this function. 
-  */ 
- void LLVMOrcLLJITBuilderSetJITTargetMachineBuilder( 
-     LLVMOrcLLJITBuilderRef Builder, LLVMOrcJITTargetMachineBuilderRef JTMB); 
-   
- /** 
-  * Set an ObjectLinkingLayer creator function for this LLJIT instance. 
-  */ 
- void LLVMOrcLLJITBuilderSetObjectLinkingLayerCreator( 
-     LLVMOrcLLJITBuilderRef Builder, 
-     LLVMOrcLLJITBuilderObjectLinkingLayerCreatorFunction F, void *Ctx); 
-   
- /** 
-  * Create an LLJIT instance from an LLJITBuilder. 
-  * 
-  * This operation takes ownership of the Builder argument: clients should not 
-  * dispose of the builder after calling this function (even if the function 
-  * returns an error). If a null Builder argument is provided then a 
-  * default-constructed LLJITBuilder will be used. 
-  * 
-  * On success the resulting LLJIT instance is uniquely owned by the client and 
-  * automatically manages the memory of all JIT'd code and all modules that are 
-  * transferred to it (e.g. via LLVMOrcLLJITAddLLVMIRModule). Disposing of the 
-  * LLJIT instance will free all memory managed by the JIT, including JIT'd code 
-  * and not-yet compiled modules. 
-  */ 
- LLVMErrorRef LLVMOrcCreateLLJIT(LLVMOrcLLJITRef *Result, 
-                                 LLVMOrcLLJITBuilderRef Builder); 
-   
- /** 
-  * Dispose of an LLJIT instance. 
-  */ 
- LLVMErrorRef LLVMOrcDisposeLLJIT(LLVMOrcLLJITRef J); 
-   
- /** 
-  * Get a reference to the ExecutionSession for this LLJIT instance. 
-  * 
-  * The ExecutionSession is owned by the LLJIT instance. The client is not 
-  * responsible for managing its memory. 
-  */ 
- LLVMOrcExecutionSessionRef LLVMOrcLLJITGetExecutionSession(LLVMOrcLLJITRef J); 
-   
- /** 
-  * Return a reference to the Main JITDylib. 
-  * 
-  * The JITDylib is owned by the LLJIT instance. The client is not responsible 
-  * for managing its memory. 
-  */ 
- LLVMOrcJITDylibRef LLVMOrcLLJITGetMainJITDylib(LLVMOrcLLJITRef J); 
-   
- /** 
-  * Return the target triple for this LLJIT instance. This string is owned by 
-  * the LLJIT instance and should not be freed by the client. 
-  */ 
- const char *LLVMOrcLLJITGetTripleString(LLVMOrcLLJITRef J); 
-   
- /** 
-  * Returns the global prefix character according to the LLJIT's DataLayout. 
-  */ 
- char LLVMOrcLLJITGetGlobalPrefix(LLVMOrcLLJITRef J); 
-   
- /** 
-  * Mangles the given string according to the LLJIT instance's DataLayout, then 
-  * interns the result in the SymbolStringPool and returns a reference to the 
-  * pool entry. Clients should call LLVMOrcReleaseSymbolStringPoolEntry to 
-  * decrement the ref-count on the pool entry once they are finished with this 
-  * value. 
-  */ 
- LLVMOrcSymbolStringPoolEntryRef 
- LLVMOrcLLJITMangleAndIntern(LLVMOrcLLJITRef J, const char *UnmangledName); 
-   
- /** 
-  * Add a buffer representing an object file to the given JITDylib in the given 
-  * LLJIT instance. This operation transfers ownership of the buffer to the 
-  * LLJIT instance. The buffer should not be disposed of or referenced once this 
-  * function returns. 
-  * 
-  * Resources associated with the given object will be tracked by the given 
-  * JITDylib's default resource tracker. 
-  */ 
- LLVMErrorRef LLVMOrcLLJITAddObjectFile(LLVMOrcLLJITRef J, LLVMOrcJITDylibRef JD, 
-                                        LLVMMemoryBufferRef ObjBuffer); 
-   
- /** 
-  * Add a buffer representing an object file to the given ResourceTracker's 
-  * JITDylib in the given LLJIT instance. This operation transfers ownership of 
-  * the buffer to the LLJIT instance. The buffer should not be disposed of or 
-  * referenced once this function returns. 
-  * 
-  * Resources associated with the given object will be tracked by ResourceTracker 
-  * RT. 
-  */ 
- LLVMErrorRef LLVMOrcLLJITAddObjectFileWithRT(LLVMOrcLLJITRef J, 
-                                              LLVMOrcResourceTrackerRef RT, 
-                                              LLVMMemoryBufferRef ObjBuffer); 
-   
- /** 
-  * Add an IR module to the given JITDylib in the given LLJIT instance. This 
-  * operation transfers ownership of the TSM argument to the LLJIT instance. 
-  * The TSM argument should not be disposed of or referenced once this 
-  * function returns. 
-  * 
-  * Resources associated with the given Module will be tracked by the given 
-  * JITDylib's default resource tracker. 
-  */ 
- LLVMErrorRef LLVMOrcLLJITAddLLVMIRModule(LLVMOrcLLJITRef J, 
-                                          LLVMOrcJITDylibRef JD, 
-                                          LLVMOrcThreadSafeModuleRef TSM); 
-   
- /** 
-  * Add an IR module to the given ResourceTracker's JITDylib in the given LLJIT 
-  * instance. This operation transfers ownership of the TSM argument to the LLJIT 
-  * instance. The TSM argument should not be disposed of or referenced once this 
-  * function returns. 
-  * 
-  * Resources associated with the given Module will be tracked by ResourceTracker 
-  * RT. 
-  */ 
- LLVMErrorRef LLVMOrcLLJITAddLLVMIRModuleWithRT(LLVMOrcLLJITRef J, 
-                                                LLVMOrcResourceTrackerRef JD, 
-                                                LLVMOrcThreadSafeModuleRef TSM); 
-   
- /** 
-  * Look up the given symbol in the main JITDylib of the given LLJIT instance. 
-  * 
-  * This operation does not take ownership of the Name argument. 
-  */ 
- LLVMErrorRef LLVMOrcLLJITLookup(LLVMOrcLLJITRef J, 
-                                 LLVMOrcExecutorAddress *Result, 
-                                 const char *Name); 
-   
- /** 
-  * Returns a non-owning reference to the LLJIT instance's object linking layer. 
-  */ 
- LLVMOrcObjectLayerRef LLVMOrcLLJITGetObjLinkingLayer(LLVMOrcLLJITRef J); 
-   
- /** 
-  * Returns a non-owning reference to the LLJIT instance's object linking layer. 
-  */ 
- LLVMOrcObjectTransformLayerRef 
- LLVMOrcLLJITGetObjTransformLayer(LLVMOrcLLJITRef J); 
-   
- /** 
-  * Returns a non-owning reference to the LLJIT instance's IR transform layer. 
-  */ 
- LLVMOrcIRTransformLayerRef LLVMOrcLLJITGetIRTransformLayer(LLVMOrcLLJITRef J); 
-   
- /** 
-  * Get the LLJIT instance's default data layout string. 
-  * 
-  * This string is owned by the LLJIT instance and does not need to be freed 
-  * by the caller. 
-  */ 
- const char *LLVMOrcLLJITGetDataLayoutStr(LLVMOrcLLJITRef J); 
-   
- /** 
-  * @} 
-  */ 
-   
- LLVM_C_EXTERN_C_END 
-   
- #endif /* LLVM_C_LLJIT_H */ 
-