One thing that helps me understand complex software is a dependency graph. I
found an LLVM dependency graph at
https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_16/docs/UsingLibraries.html#dependencies
but it's really messy and hard to follow. From that graph I made a cleaner
graph by hand (attached)... sorry about the fax-quality scan. But I have some
questions about it...
- How old is this graph?
- Is anything missing? (e.g. only SPARC stuff is present, I guess x86
et al would have similar dependencies?)
- The web page says "Where a library has both archive and object
forms, only the archive form is shown." Are "archive library" and
"object library" the names Unix uses for dynamic link libraries and
static libraries? What difference does it make to the dependency graph whether a
library is "archive" or "object"?
From: David Piepgrass
Sent: Wednesday, July 21, 2010 4:16 PM
To: 'llvmdev at cs.uiuc.edu'
Subject: 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20100722/9cf5b20a/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: LLVMdependencies.png
Type: image/png
Size: 32867 bytes
Desc: LLVMdependencies.png
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20100722/9cf5b20a/attachment.png>