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