public
Description: LLVM bindings for Ruby
Homepage: http://llvmruby.org
Clone URL: git://github.com/tombagby/llvmruby.git
 Comment
tombagby (author)
Thu Feb 12 08:47:18 -0800 2009
commit  10b85a2a15d3aadcaceb27f1162ab95ac5bfd1d9
tree    ac277d6ecf2949054b1453262b78ac2229c6a724
parent  e7fea89600ba497415baf61060671f5e981e784f
name age message
file .gitignore Sat Oct 18 16:49:55 -0700 2008 Update README regarding build process + gemific... [tombagby]
file COPYING Wed Aug 20 21:34:50 -0700 2008 First import [Tom Bagby]
file README Wed Dec 24 14:35:41 -0800 2008 merge plessl changes, update to llvm 2.4, fix t... [Tom Bagby]
file Rakefile Sat Oct 18 13:27:23 -0700 2008 merge gemify changes, fix up build and package ... [tombagby]
directory ext/ Wed Dec 24 15:24:16 -0800 2008 remove superfluous special definition of int_to... [Tom Bagby]
directory lib/ Thu Oct 23 19:20:36 -0700 2008 Implement LLVM::Value#type, LLVM::Type#to_s, LL... [macournoyer]
file llvmruby.gemspec Wed Dec 24 14:45:12 -0800 2008 merge changes from miura, global variables and ... [Tom Bagby]
directory test/ Wed Dec 24 14:45:12 -0800 2008 merge changes from miura, global variables and ... [Tom Bagby]
README
* What's LLVMRuby

LLVMRuby is a set of bindings making the LLVM compiler infrastructure 
(http://llvm.org) usable from Ruby.  This extention allows using LLVM
as an abstract assembler and reflects a good chunk of the LLVM class
hierarchy into Ruby.  Included is an example of using this to build
a simple JIT compiler, written entirely in Ruby, which is able to 
interact with the native Ruby 1.8/1.9 data types.

* How to build

Get LLVM 2.4 from http://llvm.org/releases/2.4/llvm-2.4.tar.gz and 
build it separately following their instructions.

Make sure that you configure LLVM with PIC enabled:
  
  $ ./configure --enable-pic

Add the llvm bin directory to your path, extconf needs to be able to find llvm-conf:

  $ export PATH=$PATH:/$LLVMDIR/Release/bin

Run rake

  $ rake

Run the tests (you will need Rake installed)

  $ rake test

Look in test.rb to see examples of use and start messing around.  The
project was recently reorganized in gem format with Ruby files in lib,
and C/CPP and extension in ext.  You will need to either load the 
library as a gem or make sure that both lib and ext dirs are in your
load path.

* Caveats

I primarily develop this on my home machine which is 64bit Fedora.  I 
occasionally test it on a 32bit CentOS machine, and recently tested it 
on a 32bit MacBook.  It built and passed tests with no issues.  My
knowledge of building either Ruby or LLVM on Windows is minimal.  It
should be doable, but I don't believe LLVM currently is usable with
VC++, which is the main compiler for Ruby on Windows, so you may run
into fun times trying to figure out a good way to make that go.

* Things that definitely do not work right now

No attempt has been made to properly free LLVM objects.  This probably
isn't hard, LLVM api has easy to deal with memory management.  Many LLVM
objects end up owned by modules/execution engine and shouldn't be freed
normally anyway.

There needs to be a lot more exception raising when arguments are of wrong
number/type.

Malformed LLVM functions will cause the program to abort, even just 
from calling verify on a module.  This seems like a bug in LLVM.
Verification in theory is slow and should be used only for debugging, but
it would nice if tests did not abort and die because of missing block
terminators or whatever. 

* Copying

See the file COPYING

* Author

For questions or answers, my email is: tomatobagby@gmail.com