Journeyer J. Joh
2012-Jun-19 07:47 UTC
[LLVMdev] Is cross-compiling for ARM on x86 with llvm/Clang possible?
Hello Gergö, Joerg and people on our list With your kind answer, I tried to build a hello world program for ARM(arm-none-linux-gnueabi) on my x86-64 PC. Thank you we verified the generated bitcode. The only thing remained is linking. Let me brief what I did so far. 1. Built Clang/llvm in a way explained in http://clang.llvm.org/get_started.html on Ubuntu 11.10 x86-64 PC 2. Downloaded gcc-4.0 toolchain binaries for x86-64 from http://www.gnuarm.com/ 3. Wrote a hello.c as shown below. #include <stdio.h> int main(void) { printf("\nHello World!\n\n"); return 0; } 4. Tested as shown below. ./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 5. Received an output and an error message shown below. clang version 3.2 (trunk 158657) Target: arm-none-linux-gnueabi Thread model: posix "/home/hum/Documents/Projects/llvm_clang/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.21.53.20110810 -momit-leaf-frame-pointer -v -resource-dir /home/hum/Documents/Projects/llvm_clang/build/Debug+Asserts/bin/../lib/clang/3.2 -I /home/hum/Documents/Projects/llvm_clang/gnuarm-4.0.2/arm-elf/include -fmodule-cache-path /var/tmp/clang-module-cache -internal-isystem /usr/local/include -internal-isystem /home/hum/Documents/Projects/llvm_clang/build/Debug+Asserts/bin/../lib/clang/3.2/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -fno-dwarf-directory-asm -fdebug-compilation-dir /home/hum/Documents/Projects/llvm_clang/build/Debug+Asserts/bin -ferror-limit 19 -fmessage-length 212 -mstackrealign -fno-signed-char -fgnu-runtime -fobjc-runtime-has-arc -fobjc-runtime-has-weak -fobjc-fragile-abi -fdiagnostics-show-option -fcolor-diagnostics -o /tmp/hello-T8xLAt.o -x c hello.c clang -cc1 version 3.2 based upon LLVM 3.2svn default target x86_64-unknown-linux-gnu ignoring nonexistent directory "/include" #include "..." search starts here: #include <...> search starts here: /home/hum/Documents/Projects/llvm_clang/gnuarm-4.0.2/arm-elf/include /usr/local/include /home/hum/Documents/Projects/llvm_clang/build/Debug+Asserts/bin/../lib/clang/3.2/include /usr/include End of search list. "/usr/bin/ld" -z relro -X --hash-style=gnu --build-id --eh-frame-hdr -m armelf_linux_eabi -dynamic-linker /lib/ld-linux.so.3 -o a.out crt1.o crti.o crtbegin.o -L/home/hum/Documents/Projects/llvm_clang/gnuarm-4.0.2/arm-elf/bin -L/usr/lib/../lib32 -L/lib -L/usr/lib -plugin /home/hum/Documents/Projects/llvm_clang/build/Debug+Asserts/bin/../lib/LLVMgold.so /tmp/hello-T8xLAt.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed crtend.o crtn.o /usr/bin/ld: unrecognised emulation mode: armelf_linux_eabi Supported emulations: elf_x86_64 elf32_x86_64 elf_i386 i386linux elf_l1om elf_k1om clang: error: linker command failed with exit code 1 (use -v to see invocation) 6. The problem occurred when clang starts to link with ld. Clang tried to use the ld in a wrong place - "/usr/bin/ld". So I tried it myself like below. /home/hum/Documents/Projects/llvm_clang/gnuarm-4.0.2/arm-elf/bin/ld -z relro -X --hash-style=gnu --build-id --eh-frame-hdr -m armelf_linux_eabi -o a.out crt1.o crti.o crtbegin.o -L/home/hum/Documents/Projects/llvm_clang/gnuarm-4.0.2/arm-elf/bin -plugin /home/hum/Documents/Projects/llvm_clang/build/Debug+Asserts/bin/../lib/LLVMgold.so /tmp/hello-Fe7D3Y.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed crtend.o crtn.o 7. And received an error message below. /home/hum/Documents/Projects/llvm_clang/gnuarm-4.0.2/arm-elf/bin/ld: unrecognised emulation mode: armelf_linux_eabi Supported emulations: armelf 8. I found a talk about this problem below. http://sourceware.org/bugzilla/show_bug.cgi?id=12643 9. But I don't know where ld/configure.tgt exists. Let me list up things I want to know. A. For the #6 above, how can I make clang use ld in the toolchain not int the system? B. For the #7 above, how can I trouble-shoot this, I couldn't find .tgt file introduced in the #9 above. C. For all the steps above, am I doing all right, I doubt if www.gnuarm.comis trustful. For Joerg, I tried using -isysroot as a clang option, but I couldn't find any difference it brings. Thank you very much. Sincerely Journeyer J. Joh 2012/6/18 Joerg Sonnenberger <joerg at britannica.bec.de>> On Sat, Jun 16, 2012 at 08:20:23PM +0900, Journeyer J. Joh wrote: > > If the cross compiling is supported, is there any documentation on how to > > do it? > > The short version is: assuming you have a cross-binutils installation > using e.g. x86_64--netbsd-as and x86_64--netbsd-ld, you add a symlink > called x86_64--netbsd-clang to clang and just call that with an > appropiate --sysroot to make it find your target include headers and > libraries. Substitute x86_64--netbsd with the triple of your choice. > Alternative, call clang -target x86_64--netbsd ... > > Joerg > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >-- ---------------------------------------- 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/20120619/c663f4d0/attachment.html>
Anton Korobeynikov
2012-Jun-19 08:12 UTC
[LLVMdev] Is cross-compiling for ARM on x86 with llvm/Clang possible?
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.cYou 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: armelf1. 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
2012-Jun-20 07:40 UTC
[LLVMdev] Is cross-compiling for ARM on x86 with llvm/Clang possible?
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>
Reasonably Related Threads
- [LLVMdev] Is cross-compiling for ARM on x86 with llvm/Clang possible?
- [LLVMdev] Is cross-compiling for ARM on x86 with llvm/Clang possible?
- [LLVMdev] Is cross-compiling for ARM on x86 with llvm/Clang possible?
- [LLVMdev] Is cross-compiling for ARM on x86 with llvm/Clang possible?
- [LLVMdev] Is cross-compiling for ARM on x86 with llvm/Clang possible?