I've been writing up my experience embedding LLVM in a Cocoa app. If anyone would like to see it and give feedback, I'd appreciate it. It's still not finished, but the first part is there:
http://roderickmann.org/stuff/LLVMTut/HowToEmbedLLVMWithXcode.html
This is great. People across the net have been begging for tutorials
of this nature.
Thanks! As was I…
If it's worthy, hopefully it'll end up in the LLVM docs.
The major issue I see is that this tutorial is for a hardcoded version
(3.2) of LLVM. It would have to be reworked to always be on ToT and be
integrated into the build so that it gets updated as APIs change (for
example, the #import "llvm/Module.h" is already broken).
I didn't realize the API was still so much in flux. I guess the only way to deal with that is for automated builds to break and let us know.
The highly
platform (even IDE) specific nature of the tutorial makes this
difficult, but I think it might be workable if we had our Mac
buildbots include the relevant software to build this, and disable
building it on other platforms (that might be annoying for developers
on other platforms though).
I needed two things: one was just, what APIs do I call to embed the LLVM? The other was, how do I build with Xcode? In truth, I'd like to see an LLVM.framework (and a Clang.framework) built; it would make Xcode development much easier, and would remove a big part of the hassle having to do with finding the right libraries to link in. (It would be nice if a namespace level below llvm existed separated by library boundary, so that it would be evident by linker error what library was missing, but I digress.)
Regardless, this definitely needs a permanent home! I think this
tutorial is a great start and would help a lot of people.
Pragmatically, it might be best to make this an externally-hosted
tutorial that we could link to (we already do this for at least two
other tutorials). You may want to put this tutorial standalone on
github with Sphinx and publish it with github-pages. It might be
convenient to copy the setup that
<https://github.com/Jonathan2251/lbd> has, which makes it easy to host
the generated pages on github-pages (see
<http://jonathan2251.github.com/lbd/> for the generated version).
I'll check those out. My personal blog is fairly permanent, but better it be served somewhere that has more than one person tending to it.
However, I think that the part of the tutorial that deals just with
how to coerce Xcode into properly building a project that interfaces
with LLVM would be very good to extract and put into a document; I
think that would help a lot of people get started. I remember that
this last summer I spent a pretty long amount of time fiddling with
all of Xcode's knobs in order to get it to work (I'm mostly a
commandline guy).
Undoubtedly the two (or more) aspects of this how-to can be separated, but sometimes an integrated example like this goes a long way toward fostering understanding. The remaining sections I plan to write are not strictly necessary either, and could be argued orthogonal to this example, but they are helpful and useful in the context of building a Cocoa app that uses LLVM.
Once I get it finished, I'm happy to consider splitting out portions into separate articles. I did amend this one a bit with some "tl;dr" stuff at the top to allow a reader to skip over sections. Perhaps a more thorough effort in this regard might be beneficial.