[LLVMdev] Cross-compiler to arm

Tim Northover t.p.northover at gmail.com
Thu Nov 6 09:46:47 PST 2014


Hi Hanbing,

On 6 November 2014 09:21, Hanbing Li <hanbing.li at inria.fr> wrote:
> clang-3.5: error: no such file or directory: '—mfpu=neon'
> clang-3.5: error: no such file or directory: '—-sysroot=...'

I suspect these are copy/paste errors, with some overzealous tool
converting an ASCII hyphen to some kind of unicode n-dash (U+2013) or
similar. Then LLVM thinks they're files rather than options.

> clang-3.5: error: -emit-llvm cannot be used when linking

As you discovered, "-c" is the solution here (or one solution anyway).
I'm not quite sure why you're trying to do it in so many steps though;
for educational purposes?

Another point is that the triple you're using looks weird. LLVM is
certainly ignoring the "v7l" part (it doesn't know anything about 'l'
as a variant).

Also, the usual Linux triples are "armv7-linux-gnueabi" (which does
softfp automatically) and "armv7-linux-gnueabihf" (which uses the
hard-float ABI). While you could probably create a "linux-eabi"
system, I'm not aware of any (it affects things like the names of
compiler support functions).

> $ ld -e main -o a.out test.o

If you are running on Linux, main is almost certainly not the entry
point. Usually there's a function _start in one of the crt*.o files
that performs necessary setup and tidying. Skipping it could well
account for the segfault.

The compiler normally knows how to tell the linker what to do about
this. So I'd put one on the panda board itself and use that:

$ gcc test.o -o a.out

(or clang, of course!)

> Does anyone know how to cross-compile from MacOS to arm? Or tell me what's
> wrong with my operations!

You'll probably have a bit of an up hill struggle (most cross-Linux
developers use Linux, so that's what the documentation, such as it is,
assumes). Have you considered using a Linux virtual machine on your
Mac for this project?

> Any suggestion or information is appreciated!

I'd probably suggest letting clang do the entire compilation in one step:

$ clang -target armv7-linux-gnueabi test.c -o a.out

You'll need a full target toolchain for this to work (the
gcc-arm-linux-gnueabi someone mentioned to you), so it's initially
harder than just getting a .s out of clang and doing the rest on the
Panda. But you're going to hit those problems anyway as soon as you
want to "#include <stdio.h>": the version that comes with your Mac
will almost certainly make things go horribly wrong in weird ways.

Cheers.

Tim.




More information about the llvm-dev mailing list