aboutsummaryrefslogtreecommitdiff
path: root/content/posts/2007-10-15-llvm-is-a-baby-killer.html
diff options
context:
space:
mode:
authorPaul Duncan <pabs@pablotron.org>2021-10-14 12:47:50 -0400
committerPaul Duncan <pabs@pablotron.org>2021-10-14 12:47:50 -0400
commit4b6c0e31385f5f27a151088c0a2b614495c4e589 (patch)
tree12243cdcd00704bc1a9d94ac9cc128459417370c /content/posts/2007-10-15-llvm-is-a-baby-killer.html
downloadpablotron.org-4b6c0e31385f5f27a151088c0a2b614495c4e589.tar.bz2
pablotron.org-4b6c0e31385f5f27a151088c0a2b614495c4e589.zip
initial commit, including theme
Diffstat (limited to 'content/posts/2007-10-15-llvm-is-a-baby-killer.html')
-rw-r--r--content/posts/2007-10-15-llvm-is-a-baby-killer.html57
1 files changed, 57 insertions, 0 deletions
diff --git a/content/posts/2007-10-15-llvm-is-a-baby-killer.html b/content/posts/2007-10-15-llvm-is-a-baby-killer.html
new file mode 100644
index 0000000..0bd1623
--- /dev/null
+++ b/content/posts/2007-10-15-llvm-is-a-baby-killer.html
@@ -0,0 +1,57 @@
+---
+date: "2007-10-15T05:38:29Z"
+title: LLVM is a Baby Killer
+---
+
+<img src='http://pablotron.org/gallery/misc/baby_kill-small.png'
+ width='200' height='199' align='right'/>
+<p>
+I've spent some time sifting through the documentation for <a href="http://llvm.org/">LLVM</a>, and
+I'm both impressed and horrified. I'm not sure I've ever seen so much
+documentation about something that looks really cool that I'm not
+interested in. I've been reading the <a href="http://en.wikipedia.org/wiki/Compilers:_Principles%2C_Techniques%2C_and_Tools">dragon book</a> and <a href='http://www.amazon.com/Advanced-Compiler-Design-Implementation-Muchnick/dp/1558603204'>Advanced Compiler Design and Implementation</a>, and I <em>wanted</em> to use LLVM to generate a simple
+runtime <acronym title='Just in Time (compiler)'>JIT</acronym> compiler, but I can't seem to find the necessary
+documentation. </p>
+
+<p>I see plenty of documentation on the IR, the various command-line tools,
+and just about everything else LLVM-related except for a straightforward
+tutorial that explains how to </p>
+
+<ol>
+<li>blast either opcodes or IR at the LLVM <acronym title='Application Programming Interface'>API</acronym>, and </li>
+<li>have LLVM either emit an ELF/blob/whatever or execute the result. </li>
+</ol>
+
+<p>I did manage to find a couple of examples that give me half of what I
+want. The source code ships with a sample <a href="http://en.wikipedia.org/wiki/Brainfuck">Brainfuck</a> compiler which
+reads an input bf file and emits LLVM IR. There are a couple more
+examples that show how to construct a basic JIT, then create some
+functions that do frustratingly simple things like calculate Fibonacci
+numbers or add two integers together, but nothing that's too much more
+detailed than that.</p>
+
+<p>Oh, did I mention that the online API documentation is broken?</p>
+
+<p>A bit of googling turned up libjit, which is almost exactly what I want.
+It's got a simple C API (instead of the nightmarishly bloated C++
+monstrosity that is the LLVM API), a simple build and link system, and
+<a href="http://maybe.dotgnu.info:8000/~krokas/books/libJIT/libjit_toc.html">simple, straightforward and complete documentation</a>. In
+short, it's everything that I want. </p>
+
+<p>It's also GPL-licensed, which makes it almost completely unusable. I
+found <a href="http://lists.cs.uiuc.edu/pipermail/llvmdev/2006-April/005581.html">this 2006 email exchange</a> comparing libgit and LLVM. The
+author, who apparently works on libgcj, mentions all of my problems with
+LLVM (sans the anti-C++ bias). </p>
+
+<p>My other crazy idea was to generate C as an IR and blast it at
+<a href="http://fabrice.bellard.free.fr/tcc/">libtcc</a>, but with my limited fiddling I couldn't get to do anything
+other than segfault on me. Incidentally, the documentation for libtcc
+is a single file and it's still better than what's available for LLVM.</p>
+
+<p>So here's my question: Is there a decent book or tutorial that walks
+through the LLVM API? I've Googled to the end of the earth and back,
+I've seen the <a href="http://llvm.org/docs/Stacker.html">Stacker</a> documentation, and I've read through
+<em>everything</em> in the LLVM documentation section, and none of it was
+what I'm looking for. I'm open to suggestions...</p>
+
+