[LLVMdev] Is cross-compiling for ARM on x86 with llvm/Clang possible?

Journeyer J. Joh oosaprogrammer at gmail.com
Wed Jun 20 00:40:31 PDT 2012


Hello,

Thank you for your kind attention to my issue and your help.

I changed the tool chain and tried again. And there is a little progress
but still have some problem.

Using --sysroot doesn't make clang use linker(ld) in the cross tool.
Most important question is how I can make clang use cross tool linker.

Let me show you my experiment and questions below.
There are two questions.

[Run]
./clang -v --save-temps -emit-llvm -ccc-host-triple arm-none-linux-gnueabi
--sysroot=/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/arm-none-linux-gnueabi/libc
hello.c

[Question]
1. How am I supposed to use --sysroot? Though I used "--sysroot" above,
Clang uses native linker, "/usr/bin/ld" not the one in the tool chain,
"/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/bin/arm-none-linux-gnueabi-ld".

[Output]
clang version 3.2 (trunk 158784)
Target: arm-none-linux-gnueabi
Thread model: posix

"/home/hum/Documents/Projects/clang_llvm/build/Debug+Asserts/bin/clang"
-cc1
-triple armv4t-none-linux-gnueabi
-E
-disable-free
-main-file-name hello.c
-mrelocation-model static
-mdisable-fp-elim
-fmath-errno
-mconstructor-aliases
-target-abi aapcs-linux
-target-cpu arm7tdmi
-mfloat-abi soft
-target-feature +soft-float-abi
-target-linker-version 2.22
-momit-leaf-frame-pointer
-v
-resource-dir
/home/hum/Documents/Projects/clang_llvm/build/Debug+Asserts/bin/../lib/clang/3.2
-isysroot
/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/arm-none-linux-gnueabi/libc
-fmodule-cache-path /var/tmp/clang-module-cache
-internal-isystem
/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/arm-none-linux-gnueabi/libc/usr/local/include
-internal-isystem
/home/hum/Documents/Projects/clang_llvm/build/Debug+Asserts/bin/../lib/clang/3.2/include
-internal-externc-isystem
/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/arm-none-linux-gnueabi/libc/include
-internal-externc-isystem
/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/arm-none-linux-gnueabi/libc/usr/include
-fno-dwarf-directory-asm
-fdebug-compilation-dir
/home/hum/Documents/Projects/clang_llvm/build/Debug+Asserts/bin
-ferror-limit 19
-fmessage-length 205
-mstackrealign
-fno-signed-char
-fgnu-runtime
-fobjc-runtime-has-arc
-fobjc-runtime-has-weak
-fobjc-fragile-abi
-fdiagnostics-show-option
-fcolor-diagnostics
-o hello.i
-x c
hello.c

clang -cc1 version 3.2 based upon LLVM 3.2svn default target
i386-pc-linux-gnu
ignoring nonexistent directory
"/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/arm-none-linux-gnueabi/libc/usr/local/include"
ignoring nonexistent directory
"/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/arm-none-linux-gnueabi/libc/include"
#include "..." search starts here:
#include <...> search starts here:
 /home/hum/Documents/Projects/clang_llvm/build/Debug+Asserts/bin/../lib/clang/3.2/include
 /home/hum/Documents/Projects/arm_toolchain/arm-2010.09/arm-none-linux-gnueabi/libc/usr/include
End of search list.


"/home/hum/Documents/Projects/clang_llvm/build/Debug+Asserts/bin/clang"
-cc1
-triple armv4t-none-linux-gnueabi
-emit-llvm-bc
-disable-free
-main-file-name hello.c
-mrelocation-model static
-mdisable-fp-elim
-fmath-errno
-mconstructor-aliases
-target-abi aapcs-linux
-target-cpu arm7tdmi
-mfloat-abi soft
-target-feature +soft-float-abi
-target-linker-version 2.22
-momit-leaf-frame-pointer
-v
-resource-dir
/home/hum/Documents/Projects/clang_llvm/build/Debug+Asserts/bin/../lib/clang/3.2
-fno-dwarf-directory-asm
-fdebug-compilation
-dir /home/hum/Documents/Projects/clang_llvm/build/Debug+Asserts/bin
-ferror-limit 19
-fmessage-length 205
-mstackrealign
-fno-signed-char
-fgnu-runtime
-fobjc-runtime-has-arc
-fobjc-runtime-has-weak
-fobjc-fragile-abi
-fdiagnostics-show-option
-fcolor-diagnostics
-o hello.o
-x cpp-output
hello.i

clang -cc1 version 3.2 based upon LLVM 3.2svn default target
i386-pc-linux-gnu
#include "..." search starts here:
End of search list.


"/usr/bin/ld" <<<<<<<<<< Problem #1 : wrong linker! ld in cross toolchain
is needed!
--sysroot=/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/arm-none-linux-gnueabi/libc
-z relro
-X
--hash-style=gnu
--build-id
--eh-frame-hdr
-m armelf_linux_eabi
-dynamic-linker /lib/ld-linux.so.3 <<<<<<<<<< Problem #2 : All libraries
have to be of the cross toolchain!
-o a.out
/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/arm-none-linux-gnueabi/libc/usr/lib/crt1.o
/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/arm-none-linux-gnueabi/libc/usr/lib/crti.o
crtbegin.o <<<<<<<<<< Problem #3 : All libraries have to be of the cross
toolchain!
(/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/lib/gcc/arm-none-linux-gnueabi/4.5.1/armv4t/crtbegin.o
needs to be used!!!)
-L/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/arm-none-linux-gnueabi/libc/lib
-L/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/arm-none-linux-gnueabi/libc/usr/lib
-plugin
/home/hum/Documents/Projects/clang_llvm/build/Debug+Asserts/bin/../lib/LLVMgold.so
<<<<<<<<<< Problem #4 : There is no LLVMgold.so in llvm/clang bin/
hello.o
-lgcc
--as-needed
-lgcc_s
--no-as-needed
-lc
-lgcc
--as-needed
-lgcc_s
--no-as-needed
crtend.o <<<<<<<<<< Problem #5 : All libraries have to be of the cross
toolchain!
(/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/lib/gcc/arm-none-linux-gnueabi/4.5.1/armv4t/crtend.o
needs to be used!!!)
/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/arm-none-linux-gnueabi/libc/usr/lib/crtn.o

/usr/bin/ld: unrecognised emulation mode: armelf_linux_eabi
Supported emulations: elf_i386 i386linux elf32_x86_64 elf_x86_64 elf_l1om
elf_k1om
clang: error: linker command failed with exit code 1 (use -v to see
invocation)


Problem #1 : wrong linker! ld in cross toolchain is needed!
Problem #2 : All libraries have to be of the cross toolchain!
Problem #3 : All libraries have to be of the cross toolchain!
(/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/lib/gcc/arm-none-linux-gnueabi/4.5.1/armv4t/crtbegin.o
needs to be used!!!)
Problem #4 : There is no LLVMgold.so in llvm/clang bin/
Problem #5 : All libraries have to be of the cross toolchain!
(/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/lib/gcc/arm-none-linux-gnueabi/4.5.1/armv4t/crtend.o
needs to be used!!!)


Workaround #1 : tried to run
/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/arm-none-linux-gnueabi/bin/ld
manually.
Workaround #2 : Ignored this library in this manual run.
Workaround #3 :
/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/lib/gcc/arm-none-linux-gnueabi/4.5.1/armv4t/crtbegin.o
used instead.
Workaround #4 : Ignored this library in this manual run.
Workaround #5 :
/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/lib/gcc/arm-none-linux-gnueabi/4.5.1/armv4t/crtend.o
used instead.



[Workaround - Manual Run]
/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/bin/arm-none-linux-gnueabi-ld
--sysroot=/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/arm-none-linux-gnueabi/libc
-z relro -X --hash-style=gnu --build-id --eh-frame-hdr -m armelf_linux_eabi
-o a.out
/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/arm-none-linux-gnueabi/libc/usr/lib/crt1.o
/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/arm-none-linux-gnueabi/libc/usr/lib/crti.o
/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/lib/gcc/arm-none-linux-gnueabi/4.5.1/armv4t/crtbegin.o
-L/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/arm-none-linux-gnueabi/libc/lib
-L/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/arm-none-linux-gnueabi/libc/usr/lib
hello.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed
-lgcc_s --no-as-needed
/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/lib/gcc/arm-none-linux-gnueabi/4.5.1/armv4t/crtend.o
/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/arm-none-linux-gnueabi/libc/usr/lib/crtn.o

[Output]
hello.o: file not recognized: File format not recognized

[Test]
"file hello.o" prints out :
hello.o: LLVM bitcode

[Question]
2. Am I using a wrong cross toolchain? Doesn't feeding LLVM bitcode to the
ARM cross linker make sense?



Thank you very much.

Sincerely
Journeyer J. Joh




2012/6/19 Anton Korobeynikov <anton at korobeynikov.info>

> Hello
>
> > ./clang -v -emit-llvm -ccc-host-triple arm-none-linux-gnueabi
> > -I/home/hum/Documents/Projects/llvm_clang/gnuarm-4.0.2/arm-elf/include
> > -L/home/hum/Documents/Projects/llvm_clang/gnuarm-4.0.2/arm-elf/bin
> hello.c
> You forgot about sysroot here.
>
> > /home/hum/Documents/Projects/llvm_clang/gnuarm-4.0.2/arm-elf/bin/ld:
> > unrecognised emulation mode: armelf_linux_eabi
> > Supported emulations: armelf
> 1. Your ld is too old
> 2. Your ld was built for arm-elf, not arm-linux-eabi
>
> --
> With best regards, Anton Korobeynikov
> Faculty of Mathematics and Mechanics, Saint Petersburg State University
>



-- 
----------------------------------------
Journeyer J. Joh
o o s a p r o g r a m m e r
a t
g m a i l  d o t  c o m
----------------------------------------
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20120620/431f8201/attachment.html>


More information about the llvm-dev mailing list