1=========================================================================== 2Building a JIT: Extreme Laziness - Using Compile Callbacks to JIT from ASTs 3=========================================================================== 4 5.. contents:: 6 :local: 7 8**This tutorial is under active development. It is incomplete and details may 9change frequently.** Nonetheless we invite you to try it out as it stands, and 10we welcome any feedback. 11 12Chapter 4 Introduction 13====================== 14 15Welcome to Chapter 4 of the "Building an ORC-based JIT in LLVM" tutorial. This 16chapter introduces the Compile Callbacks and Indirect Stubs APIs and shows how 17they can be used to replace the CompileOnDemand layer from 18`Chapter 3 <BuildingAJIT3.html>`_ with a custom lazy-JITing scheme that JITs 19directly from Kaleidoscope ASTs. 20 21**To be done:** 22 23**(1) Describe the drawbacks of JITing from IR (have to compile to IR first, 24which reduces the benefits of laziness).** 25 26**(2) Describe CompileCallbackManagers and IndirectStubManagers in detail.** 27 28**(3) Run through the implementation of addFunctionAST.** 29 30Full Code Listing 31================= 32 33Here is the complete code listing for our running example that JITs lazily from 34Kaleidoscope ASTS. To build this example, use: 35 36.. code-block:: bash 37 38 # Compile 39 clang++ -g toy.cpp `llvm-config --cxxflags --ldflags --system-libs --libs core orc native` -O3 -o toy 40 # Run 41 ./toy 42 43Here is the code: 44 45.. literalinclude:: ../../examples/Kaleidoscope/BuildingAJIT/Chapter4/KaleidoscopeJIT.h 46 :language: c++ 47 48`Next: Remote-JITing -- Process-isolation and laziness-at-a-distance <BuildingAJIT5.html>`_ 49