lli supports different targets than llc?


Is it normal/expected for llc to support a different set of targets
than lli?
I have a hello.ll on which this works:

$ llc -mtriple=armv7a-linux-gnueabihf hello.ll

OK, generates hello.s

But this doesn’t:

$ lli -mtriple=armv7a-linux-gnueabihf hello.ll

lli: error creating EE: No available targets are compatible with

this triple, see -version for the available targets.

I’m using LLVM from the git mirror:

$ lli -version
LLVM (http://llvm.org/):
LLVM version 3.7.0svn
Optimized build.
Built Jun 19 2015 (17:35:44).
Default target: x86_64-unknown-linux-gnu
Host CPU: broadwell

I thought they would both support the same targets… Why isn’t that the case?



It’s not a simulator, it pretty much only works on the host.


s/pretty much/definitely/

Even then, “works” is too strong a word. Caveat emptor and all that.

But I am running it on the host, as a kind of intermediate step in the cross-compilation, just to check if everything still works after the frontend step. Shouldn’t it work then? I don’t know much about how everything works yet, sorry if it’s a silly question.

What I thought was also weird is that the exact same example works if I use the OpenMP/Clang fork (https://clang-omp.github.io/), which I assumed would support, if anything, less targets, since it’s a little behind (LLVM 3.5).

If the IR was platform independent, and you could run the IR on any
platform, then this could work. But it isn't.

Your best bet is to use llc + ld + qemu user emulation. You'll also
need multiarch support for the libraries, tools, etc.