| /*===----------- 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 */ |