Is there a guide to LLVM's components?

I constructed an LLVM 2.7 VS solution with cmake, but it has 66 projects:

ALL_BUILD, “.\ALL_BUILD.vcproj”

BrainF, “examples\BrainF\BrainF.vcproj”

Fibonacci, “examples\Fibonacci\Fibonacci.vcproj”

FileCheck, “utils\FileCheck\FileCheck.vcproj”

HowToUseJIT, “examples\HowToUseJIT\HowToUseJIT.vcproj”

INSTALL, “.\INSTALL.vcproj”

Kaleidoscope-Ch2, “examples\Kaleidoscope\Chapter2\Kaleidoscope-Ch2.vcproj”

Kaleidoscope-Ch3, “examples\Kaleidoscope\Chapter3\Kaleidoscope-Ch3.vcproj”

Kaleidoscope-Ch4, “examples\Kaleidoscope\Chapter4\Kaleidoscope-Ch4.vcproj”

Kaleidoscope-Ch5, “examples\Kaleidoscope\Chapter5\Kaleidoscope-Ch5.vcproj”

Kaleidoscope-Ch6, “examples\Kaleidoscope\Chapter6\Kaleidoscope-Ch6.vcproj”

Kaleidoscope-Ch7, “examples\Kaleidoscope\Chapter7\Kaleidoscope-Ch7.vcproj”

LLVMAnalysis, “lib\Analysis\LLVMAnalysis.vcproj”

LLVMArchive, “lib\Archive\LLVMArchive.vcproj”

LLVMAsmParser, “lib\AsmParser\LLVMAsmParser.vcproj”

LLVMAsmPrinter, “lib\CodeGen\AsmPrinter\LLVMAsmPrinter.vcproj”

LLVMBitReader, “lib\Bitcode\Reader\LLVMBitReader.vcproj”

LLVMBitWriter, “lib\Bitcode\Writer\LLVMBitWriter.vcproj”

LLVMCodeGen, “lib\CodeGen\LLVMCodeGen.vcproj”

LLVMCore, “lib\VMCore\LLVMCore.vcproj”

LLVMExecutionEngine, “lib\ExecutionEngine\LLVMExecutionEngine.vcproj”

LLVMInstCombine, “lib\Transforms\InstCombine\LLVMInstCombine.vcproj”

LLVMInstrumentation, “lib\Transforms\Instrumentation\LLVMInstrumentation.vcproj”

LLVMInterpreter, “lib\ExecutionEngine\Interpreter\LLVMInterpreter.vcproj”

LLVMJIT, “lib\ExecutionEngine\JIT\LLVMJIT.vcproj”

LLVMLinker, “lib\Linker\LLVMLinker.vcproj”

LLVMMC, “lib\MC\LLVMMC.vcproj”

LLVMMCParser, “lib\MC\MCParser\LLVMMCParser.vcproj”

LLVMScalarOpts, “lib\Transforms\Scalar\LLVMScalarOpts.vcproj”

LLVMSelectionDAG, “lib\CodeGen\SelectionDAG\LLVMSelectionDAG.vcproj”

LLVMSupport, “lib\Support\LLVMSupport.vcproj”

LLVMSystem, “lib\System\LLVMSystem.vcproj”

LLVMTarget, “lib\Target\LLVMTarget.vcproj”

LLVMTransformUtils, “lib\Transforms\Utils\LLVMTransformUtils.vcproj”

LLVMX86AsmParser, “lib\Target\X86\AsmParser\LLVMX86AsmParser.vcproj”

LLVMX86AsmPrinter, “lib\Target\X86\AsmPrinter\LLVMX86AsmPrinter.vcproj”

LLVMX86CodeGen, “lib\Target\X86\LLVMX86CodeGen.vcproj”

LLVMX86Disassembler, “lib\Target\X86\Disassembler\LLVMX86Disassembler.vcproj”

LLVMX86Info, “lib\Target\X86\TargetInfo\LLVMX86Info.vcproj”

LLVMipa, “lib\Analysis\IPA\LLVMipa.vcproj”

LLVMipo, “lib\Transforms\IPO\LLVMipo.vcproj”

ModuleMaker, “examples\ModuleMaker\ModuleMaker.vcproj”

X86CodeGenTable_gen, “lib\Target\X86\X86CodeGenTable_gen.vcproj”

ZERO_CHECK, “.\ZERO_CHECK.vcproj”

bugpoint, “tools\bugpoint\bugpoint.vcproj”

check, “test\check.vcproj”

count, “utils\count\count.vcproj”

intrinsics_gen, “include\llvm\intrinsics_gen.vcproj”

llc, “tools\llc\llc.vcproj”

lli, “tools\lli\lli.vcproj”

llvm-ar, “tools\llvm-ar\llvm-ar.vcproj”

llvm-as, “tools\llvm-as\llvm-as.vcproj”

llvm-bcanalyzer, “tools\llvm-bcanalyzer\llvm-bcanalyzer.vcproj”

llvm-dis, “tools\llvm-dis\llvm-dis.vcproj”

llvm-extract, “tools\llvm-extract\llvm-extract.vcproj”

llvm-ld, “tools\llvm-ld\llvm-ld.vcproj”

llvm-link, “tools\llvm-link\llvm-link.vcproj”

llvm-mc, “tools\llvm-mc\llvm-mc.vcproj”

llvm-nm, “tools\llvm-nm\llvm-nm.vcproj”

llvm-prof, “tools\llvm-prof\llvm-prof.vcproj”

llvm-ranlib, “tools\llvm-ranlib\llvm-ranlib.vcproj”

llvm-stub, “tools\llvm-stub\llvm-stub.vcproj”

llvm_headers_do_not_build, “include\llvm\llvm_headers_do_not_build.vcproj”

not, “utils\not\not.vcproj”

opt, “tools\opt\opt.vcproj”

tblgen, “utils\TableGen\tblgen.vcproj”

Is there a guide that explains the purpose of each? Obviously the ones in an “example” folder are examples, but what about everything else? Is there a guide to the LLVM components or source code?

If there are no such guides, could someone tell me which parts of LLVM are needed for “minimal” JIT compilation? I would like to create small amounts of IR at run-time, compile them in-memory, and run them. Basically I would like to do as described at http://www.codeproject.com/KB/cpp/runtime_compile.aspx, except that (in order to minimize the code size), I would like to omit most/all optimizations.

Thanks,

David

David Piepgrass <dpiepgrass@mentoreng.com> writes:

[snip]

If there are no such guides, could someone tell me which parts of LLVM
are needed for "minimal" JIT compilation? I would like to create small
amounts of IR at run-time, compile them in-memory, and run
them.

This is what I have on my x86 JIT compiler:

set(REQ_LLVM_LIBRARIES
  LLVMX86CodeGen
  LLVMX86Info
  LLVMSelectionDAG
  LLVMAsmPrinter
  LLVMInterpreter
  LLVMJIT
  LLVMExecutionEngine
  LLVMCodeGen
  LLVMipo
  LLVMInstrumentation
  LLVMScalarOpts
  LLVMInstCombine
  LLVMTransformUtils
  LLVMipa
  LLVMAnalysis
  LLVMTarget
  LLVMMC
  LLVMBitWriter
  LLVMCore
  LLVMSupport
  LLVMSystem
  )

You can remove LLVMBitWriter if you don't plan to output LLVM bitcode.

[snip]