I am new to LLVM and complier development, am more comfortable with logic gates. However, I am part of a research project that intends to develop a co-designed virtual machine reconfigurable computing, the virtual machine controls a reconfigurable fabric in addition to a microprocessor. The microprocessor may be an ARM and the system should employ a JIT to generate code for the processor and the fabric. We are thinking of leveraging the LLVM infrastructure for this project. It has most of the stuff we need, a front-end, an extensible low level IR and a JIT.
I am currently looking at LLVM's JIT and would like to build an lli tool for an ARM simulator such as simple scalar. I would be grateful if someone could point me in the right direction.
To run lli, you can build LLVM as a canadian cross compiler (i.e., such that the built tools run on a different architecture than the build machine). To do so, use the appropriate triples for the --build and --host configure options suited to your environment. Note that this assumes that you'll have an OS running on the simulated target suitable for launching a command line application like lli. If you have an arm-linux port for your target, you should be most of the way there (if not completely). If your environment is different, such as a custom OS of some sort, you'll have a bit more work to do, as you'll need to teach LLVM how to build for your target runtime in order to bootstrap up to having lli, and the LLVM libraries that the JIT uses, available.
I would suggest having a look at the build infrastructure for LLVM and how the libraries are built then linked in to the lli application. That should give you an overview of which pieces you'll need to bring in for whatever custom JIT runtime you have in mind.
I think folks have had success with QEMU. I am not sure if the process if documented somewhere.