0

I have clang 3.4 installed in my host machine(Ubuntu 12.04 LTS) and trying to cross compile a simple C++11 program to execute in a mips32r1(little endian) + uclibc environment.

While trying to cross compile, I'm getting below error,(attached a verbose output)

arunprasadr@cheetah:~/works/myex/llvm$ clang++ test.cc --sysroot=/home/arunprasadr/toolchains/stbgcc-4.5.4-2.5/mipsel-unknown-linux-uclibc -v -target mipsel-unknown-linux-uclibc -I /home/arunprasadr/toolchains/stbgcc-4.5.4-2.5/mipsel-unknown-linux-uclibc/include/c++/4.5.4 -I /home/arunprasadr/toolchains/stbgcc-4.5.4-2.5/mipsel-unknown-linux-uclibc/include/c++/4.5.4/mipsel-linux-uclibc
Ubuntu clang version 3.4-1ubuntu3~precise1 (tags/RELEASE_34/final) (based on LLVM 3.4)
Target: mipsel-unknown-linux-uclibc
Thread model: posix
Selected GCC installation:
 "/usr/bin/clang" -cc1 -triple mipsel-unknown-linux-uclibc -S -disable-free -disable-llvm-verifier -main-file-name test.cc -mrelocation-model static -mdisable-fp-elim -fmath-errno -mconstructor-aliases -target-cpu mips32 -target-abi o32 -mfloat-abi hard -target-linker-version 2.22 -v -resource-dir /usr/bin/../lib/clang/3.4 -I /home/arunprasadr/toolchains/stbgcc-4.5.4-2.5/mipsel-unknown-linux-uclibc/include/c++/4.5.4 -I /home/arunprasadr/toolchains/stbgcc-4.5.4-2.5/mipsel-unknown-linux-uclibc/include/c++/4.5.4/mipsel-linux-uclibc -isysroot /home/arunprasadr/toolchains/stbgcc-4.5.4-2.5/mipsel-unknown-linux-uclibc -internal-isystem /home/arunprasadr/toolchains/stbgcc-4.5.4-2.5/mipsel-unknown-linux-uclibc/usr/local/include -internal-isystem /usr/bin/../lib/clang/3.4/include -internal-externc-isystem /home/arunprasadr/toolchains/stbgcc-4.5.4-2.5/mipsel-unknown-linux-uclibc/include -internal-externc-isystem /home/arunprasadr/toolchains/stbgcc-4.5.4-2.5/mipsel-unknown-linux-uclibc/usr/include -fdeprecated-macro -fno-dwarf-directory-asm -fdebug-compilation-dir /home/arunprasadr/works/myex/llvm -ferror-limit 19 -fmessage-length 197 -mstackrealign -fobjc-runtime=gcc -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -vectorize-slp -o /tmp/test-508ee4.s -x c++ test.cc
clang -cc1 version 3.4 based upon LLVM 3.4 default target x86_64-pc-linux-gnu
ignoring nonexistent directory "/home/arunprasadr/toolchains/stbgcc-4.5.4-2.5/mipsel-unknown-linux-uclibc/usr/local/include"
#include "..." search starts here:
#include <...> search starts here:
 /home/arunprasadr/toolchains/stbgcc-4.5.4-2.5/mipsel-unknown-linux-uclibc/include/c++/4.5.4
 /home/arunprasadr/toolchains/stbgcc-4.5.4-2.5/mipsel-unknown-linux-uclibc/include/c++/4.5.4/mipsel-linux-uclibc
 /usr/bin/../lib/clang/3.4/include
 /home/arunprasadr/toolchains/stbgcc-4.5.4-2.5/mipsel-unknown-linux-uclibc/include
 /home/arunprasadr/toolchains/stbgcc-4.5.4-2.5/mipsel-unknown-linux-uclibc/usr/include
End of search list.
test.cc:8:7: warning: 'auto' type specifier is a C++11 extension [-Wc++11-extensions]
  for(auto aa : str) {
      ^
test.cc:8:15: warning: range-based for loop is a C++11 extension [-Wc++11-extensions]
  for(auto aa : str) {
              ^
2 warnings generated.
 "/usr/bin/as" -march mips32 -mabi 32 -EL -o /tmp/test-3b520a.o /tmp/test-508ee4.s
Assembler messages:
Fatal error: invalid -march= option: `mips32'
clang: error: assembler command failed with exit code 1 (use -v to see invocation)

It seems clang is trying to invoke the system assembler instead of cross toolchain's assembler. Is there anyway to set the assembler to clang?

EDIT(1) - Adding reference link

Reference: http://clang.llvm.org/docs/CrossCompilation.html

Arunprasad Rajkumar
  • 1,374
  • 1
  • 15
  • 31
  • You forgot -std=c++11 option. And I'd recommend using an integrated assembler instead of your unknown default one. – SK-logic Aug 26 '14 at 21:12
  • 1
    @SK-logic actually missing a std=c++11 is just a warning and i purposely did it. The main problem is it uses assembler present in /usr/bin/as which doesnt supports assembling mips assembly code. I cant use integrated assembler for cross compilation. Can i? – Arunprasad Rajkumar Aug 27 '14 at 02:29
  • I did a strace to see what is really going on. It showed that clang is trying to open assembler from /usr/bin/mipsel-linux-uclibc-as. After adding a soft link to real mipsel-linux-uclibc-as it worked. But still facing issues with crt. Debugging :) – Arunprasad Rajkumar Aug 27 '14 at 12:15
  • 1
    Try '-fintegrated-as' option, it should work for cross-compilation (although I'm not sure it is available for MIPS). – SK-logic Aug 27 '14 at 12:47
  • @SK-logic Great! It worked for me. But with -integrated-as. Still facing issues with linker and crt files. I managed to link, but it is not running in the mips machine. I tried linking using mipsel-linux-uclibc-g++, it works, but using mipsel-linux-uclibc-ld is a problem here. Still debugging.!! – Arunprasad Rajkumar Aug 27 '14 at 14:32
  • 1
    As for crt and all that, take a look at https://www.embtoolkit.org/ - they're using a trick to build without any gcc installation at all. – SK-logic Aug 27 '14 at 17:08
  • @SK-logic, alternatively I can able to use -B switch to clang to specify the assembler and linker path. -B/my/path/to/mipsel-linux-uclibc/bin – Arunprasad Rajkumar Aug 28 '14 at 18:59

0 Answers0