<div dir="ltr">It would be best to look at the linker command line (the one that failed) to see what libraries/files were being pulled in. Then you might be able to recompile those for the ABI details that you want to support. If you are planning to run your resulting executable on Android, I again caution you that all of the on-device libraries are soft-float and will probably not work (i.e. you will end up just getting corrupt results when arguments get pulled from the wrong registers/stack at runtime). In that case, you will need to build a device image where libc.so, and other core libraries were constructed with the hard-float ABI. This is unfortunately not something that can be easily achieved with AOSP today, so I stick with my original suggestion to recompile your new components for soft-float.<div>
<br></div><div>Steve</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Oct 9, 2013 at 10:32 AM, Anton Smirnov <span dir="ltr"><<a href="mailto:dev@antonsmirnov.name" target="_blank">dev@antonsmirnov.name</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"> Can i do another way - use hard float files that are compiled soft float now (as it's pretty difficult to compile libxxx.so soft float)?<div>
May be i can just skip using ndk and compile/link it using cmake and native toolchain? What libs should be recompiled hard float, libc?</div>
</div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><br><div class="gmail_quote">2013/10/9 Stephen Hines <span dir="ltr"><<a href="mailto:srhines@google.com" target="_blank">srhines@google.com</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">Right, I think that you can't use hard-float for your compiler ABI. You will need to recompile things with soft-float. The NDK does not supply any hard-float libraries to link against, so by passing -mfloat-abi=hard, you are still picking up the soft-float versions (and hence getting link errors).<div>



<br></div><div>Steve</div></div><div><div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Oct 9, 2013 at 9:11 AM, Anton Smirnov <span dir="ltr"><<a href="mailto:dev@antonsmirnov.name" target="_blank">dev@antonsmirnov.name</a>></span> wrote:<br>


<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Sorry, Stephen*.</div><div><div><div class="gmail_extra"><br><br><div class="gmail_quote">
2013/10/9 Anton Smirnov <span dir="ltr"><<a href="mailto:dev@antonsmirnov.name" target="_blank">dev@antonsmirnov.name</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi, Steven.<div><br></div><div>That's exactly what i'm having now!</div><div><br></div><div>I've tried to solve it by adding LOCAL_EXPORT_CPPFLAGS := -mfpu=vfp -mfloat-abi=hard in Android.mk and APP_ABI := armeabi-v7a in Application.mk but it did not help unfortunately.</div>




<div>I'm using android log (#include <android/log.h>, #include <stdio.h> and #include <string.h>) is this the reason of linking error?</div><div><br></div><div>Do you know how can it be solved?</div>




<div><br></div><div>PS. i've tried ndk-build v=1 to see actual command line and it seems that i can just use linker from arm-linux-gnueabihf toolchains.. How do you think</div><div>will it help?</div></div><div>
<div><div class="gmail_extra">
<br><br><div class="gmail_quote">2013/10/9 Stephen Hines <span dir="ltr"><<a href="mailto:srhines@google.com" target="_blank">srhines@google.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">




<div dir="ltr">If you are using Android's NDK, you should be aware that it targets soft-float for all ARM ABIs. Thus, if you are linking against any of the NDK components, they are not going to match a hard-float piece that you have built from scratch.<div>





<br></div><div>Steve</div></div><div><div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Oct 8, 2013 at 11:41 AM, James Molloy <span dir="ltr"><<a href="mailto:james@jamesmolloy.co.uk" target="_blank">james@jamesmolloy.co.uk</a>></span> wrote:<br>





<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi Anton,<div><br></div><div>Ensure -mfloat-abi=hard is in your CFLAGS and CXXFLAGS. Also ensure you target a recent-ish processor or -march=armv7.</div>





<div><br></div><div>I can't really give support on the android linker, but it does look like your resulting binary is soft-float.</div><span><font color="#888888">
<div><br></div><div>James</div></font></span></div><div><div><div class="gmail_extra"><br><br><div class="gmail_quote">On 8 October 2013 19:29, Anton Smirnov <span dir="ltr"><<a href="mailto:dev@antonsmirnov.name" target="_blank">dev@antonsmirnov.name</a>></span> wrote:<br>






<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi.<div><br></div><div>I've succeed to compile clang for ARM using ubuntu ..gnueabihf.. packages, but libclang.so can't be stripped</div>






<div>using tool from ndk because of error:</div><div><br></div>
<div>/softdev/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: error: /Users/asmirnov/Documents/dev/src/clang_jni/obj/local/armeabi/libclang.so uses VFP register arguments, output does not<br>







</div><div><br></div><div>Not sure what's wrong now since i've passed cpu and float (hard) as parameters. Any suggestions?</div><div>BTW I'm going to use it on android devices which are ARM hard float.</div><div>







<br></div><div>I'm going to try to compile it with linaro toolchain tomorrow on 32bit vm as it does not work on 64bit (or i was not able just to find it for 64bit).</div><div><br></div><div>Thanks,</div><div>Anton.</div>







</div><div><div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/10/8 James Molloy <span dir="ltr"><<a href="mailto:james@jamesmolloy.co.uk" target="_blank">james@jamesmolloy.co.uk</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">Anton,<div><br></div><div>The compiler I'm using is this one: <a href="https://launchpad.net/gcc-linaro/+milestone/4.8-2013.08" target="_blank">https://launchpad.net/gcc-linaro/+milestone/4.8-2013.08</a> . This just happens to be the latest linaro compiler installed on the central package database at ARM. I'd assume the ubuntu one would work just as well.</div>








<div><br></div><div>Cheers,</div><div><br></div><div>James</div></div><div><div><div class="gmail_extra"><br><br><div class="gmail_quote">On 8 October 2013 17:09, Anton Smirnov <span dir="ltr"><<a href="mailto:dev@antonsmirnov.name" target="_blank">dev@antonsmirnov.name</a>></span> wrote:<br>








<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">I've noticed you've used linaro toolchain instead of ubuntu's gcc-4.7-arm-linux-gnueabihf (and other packages from <a href="http://llvm.org/docs/HowToCrossCompileLLVM.html" target="_blank">http://llvm.org/docs/HowToCrossCompileLLVM.html</a>).<div>









Can you write what packages should be downloaded and installed from <a href="http://www.linaro.org/downloads/" target="_blank">http://www.linaro.org/downloads/</a> ?</div><div><br></div><div>Thanks and regards,</div><div>








Anton.</div></div><div><div>
<div class="gmail_extra"><br><br><div class="gmail_quote">2013/10/8 Anton Smirnov <span dir="ltr"><<a href="mailto:dev@antonsmirnov.name" target="_blank">dev@antonsmirnov.name</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">









<div dir="ltr">Thanks, James.<div><br></div><div>I will give it a try right now!</div></div><div><div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/10/8 James Molloy <span dir="ltr"><<a href="mailto:james@jamesmolloy.co.uk" target="_blank">james@jamesmolloy.co.uk</a>></span><br>










<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi Anton,<div><br></div><div>I'm very confused about your setup. The subject of these emails suggests you want to use arm-linux-gnueabihf, but the CMake verbose output you showed shows you've told it to use clang++ (/usr/local/bin/clang++   -target armv7a-linux-gnueabihf). The compiler flags also seem to be a frankenmix of x86 and ARM ( -L/usr/lib/gcc/x86_64-linux-gnu/4.7 is never gonna work!)</div>











<div><br></div><div>I managed a build without any problems using:</div><div><br></div><div>mkdir build; cd build; cmake .. -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_SYSTEM_NAME=Linux</div>











<div><br></div><div>As the CMake cross-compilation wiki says, "CMAKE_SYSTEM_NAME" is very important as it tells CMake that it's cross compiling.</div><div><br></div><div>I also went and looked at the wiki page you quoted, and went and tried it out. That page is written for someone who wants to cross compile *with clang*. You want to cross-compile with gcc, so there are some changes you need to make.</div>











<div><br></div><div>You must remove the "-target" parameter. You must also remove the "-ccc-gcc-name" parameter. You also still need the CMAKE_C_COMPILER and CMAKE_CXX_COMPILER arguments. So the line becomes:</div>











<div><br></div><div>cmake .. -DCMAKE_C_COMPILER=/work/tools/linaro/gnueabi/2013.08-20130816/bin/arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=/work/tools/linaro/gnueabi/2013.08-20130816/bin/arm-linux-gnueabihf-g++ -DCMAKE_CROSSCOMPILING=True -DLLVM_TABLEGEN=/work/llvm/build7/../build6/native/bin/llvm-tblgen -DLLVM_DEFAULT_TARGET_TRIPLE=arm-linux-gnueabihf -DLLVM_TARGET_ARCH=ARM -DLLVM_TARGETS_TO_BUILD=ARM -DCMAKE_CXX_FLAGS=' -mcpu=cortex-a9 -I/usr/arm-linux-gnueabihf/include/c++/4.7.2/arm-linux-gnueabihf/ -I/usr/arm-linux-gnueabihf/include/ -mfloat-abi=hard'<br>











</div><div><br></div><div>Where '/work/llvm/build7/../build6/native/bin' is the location of a previously-built x86 llvm-tblgen.</div><div><br></div><div>Hopefully this has helped. My preference would be the first command line I pasted - using -DCMAKE_SYSTEM_NAME=Linux. That seems the simplest way to me, and it gets LLVM to auto-create its own native llvm-tblgen.</div>











<div><br></div><div>Cheers,</div><div><br></div><div>James</div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote"><div><div>On 8 October 2013 09:07, Anton Smirnov <span dir="ltr"><<a href="mailto:dev@antonsmirnov.name" target="_blank">dev@antonsmirnov.name</a>></span> wrote:<br>











</div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div><div dir="ltr">I can confirm that after editing there is no -L/lib64 in invocation line,<div>
but the problem remains. I think previously compiled files were compiled/linked with -L/lib64 and this</div>
<div>corrupts the build.</div>
<div><br></div><div>How can it be fixed/walked-around?</div></div><div><div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/10/8 Anton Smirnov <span dir="ltr"><<a href="mailto:dev@antonsmirnov.name" target="_blank">dev@antonsmirnov.name</a>></span><br>












<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">As far as i understood, invocation line is saved in <span style="font-family:arial,sans-serif;font-size:13px">CMakeFiles/llvm-tblgen.dir/</span><span style="font-family:arial,sans-serif;font-size:13px">link.txt.</span><div>













<span style="font-family:arial,sans-serif;font-size:13px">I've edited it to remove -L/lib64 and invoked the last command line manually but the problem remains.</span></div><div><span style="font-family:arial,sans-serif;font-size:13px"><br>













</span></div><div><span style="font-family:arial,sans-serif;font-size:13px">What can i do in order to avoid adding -L/lib64 ?</span></div><div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div>













<span style="font-family:arial,sans-serif;font-size:13px">Thanks,</span></div><div><span style="font-family:arial,sans-serif;font-size:13px">Anton</span></div></div><div><div><div class="gmail_extra">
<br><br><div class="gmail_quote">
2013/10/8 Anton Smirnov <span dir="ltr"><<a href="mailto:dev@antonsmirnov.name" target="_blank">dev@antonsmirnov.name</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">













<div dir="ltr">Hello.<div><br></div><div>Similar question to what i asked few days ago but was not resolved. </div><div><br></div><div>I've followed guide (<a href="http://llvm.org/docs/HowToCrossCompileLLVM.html" target="_blank">http://llvm.org/docs/HowToCrossCompileLLVM.html</a>) step-by-step.</div>
















<div>The only changes i've done is installed g++ package since i've received "no g++ found" on clear virtual machine (ubuntu 13.04_64).</div><div><br></div><div>First i've compiled for host (to use tblgens), then for ARM.</div>
















<div>When cross-compiling for ARM (tried both ninja and autotools) i'm getting linker error:</div><div><br></div><div>Linking CXX executable ../../bin/llvm-tblgen<br>../../lib/libLLVMSupport.a: could not read symbols: File format not recognized<br>















clang: error: linker command failed with exit code 1 (use -v to see invocation)<br>make[2]: *** [bin/llvm-tblgen] Error 1<br>make[1]: *** [utils/TableGen/CMakeFiles/llvm-tblgen.dir/all] Error 2<br><br></div><div>Verbose output (make VERBOSE=1):<br>















<br>cd /home/asmirnov/llvm_arm_cmake_build/utils/TableGen && /usr/bin/cmake -E cmake_link_script CMakeFiles/llvm-tblgen.dir/link.txt --verbose=1<br>/usr/local/bin/clang++   -target armv7a-linux-gnueabihf -mcpu=cortex-a9 -I/usr/arm-linux-gnueabihf/include/c++/4.7.3/arm-linux-gnueabihf/ -I/usr/arm-linux-gnueabihf/include/ -mfloat-abi=hard -ccc-gcc-name arm-linux-gnueabihf-gcc -Wall -W -Wno-unused-parameter -Wwrite-strings -Wmissing-field-initializers -pedantic -Wno-long-long -Wcovered-switch-default -Wnon-virtual-dtor -fno-rtti -O3 -DNDEBUG    CMakeFiles/llvm-tblgen.dir/AsmMatcherEmitter.cpp.o CMakeFiles/llvm-tblgen.dir/AsmWriterEmitter.cpp.o CMakeFiles/llvm-tblgen.dir/AsmWriterInst.cpp.o CMakeFiles/llvm-tblgen.dir/CallingConvEmitter.cpp.o CMakeFiles/llvm-tblgen.dir/CodeEmitterGen.cpp.o CMakeFiles/llvm-tblgen.dir/CodeGenDAGPatterns.cpp.o CMakeFiles/llvm-tblgen.dir/CodeGenInstruction.cpp.o CMakeFiles/llvm-tblgen.dir/CodeGenMapTable.cpp.o CMakeFiles/llvm-tblgen.dir/CodeGenRegisters.cpp.o CMakeFiles/llvm-tblgen.dir/CodeGenSchedule.cpp.o CMakeFiles/llvm-tblgen.dir/CodeGenTarget.cpp.o CMakeFiles/llvm-tblgen.dir/DAGISelEmitter.cpp.o CMakeFiles/llvm-tblgen.dir/DAGISelMatcherEmitter.cpp.o CMakeFiles/llvm-tblgen.dir/DAGISelMatcherGen.cpp.o CMakeFiles/llvm-tblgen.dir/DAGISelMatcherOpt.cpp.o CMakeFiles/llvm-tblgen.dir/DAGISelMatcher.cpp.o CMakeFiles/llvm-tblgen.dir/DFAPacketizerEmitter.cpp.o CMakeFiles/llvm-tblgen.dir/DisassemblerEmitter.cpp.o CMakeFiles/llvm-tblgen.dir/FastISelEmitter.cpp.o CMakeFiles/llvm-tblgen.dir/FixedLenDecoderEmitter.cpp.o CMakeFiles/llvm-tblgen.dir/InstrInfoEmitter.cpp.o CMakeFiles/llvm-tblgen.dir/IntrinsicEmitter.cpp.o CMakeFiles/llvm-tblgen.dir/OptParserEmitter.cpp.o CMakeFiles/llvm-tblgen.dir/PseudoLoweringEmitter.cpp.o CMakeFiles/llvm-tblgen.dir/RegisterInfoEmitter.cpp.o CMakeFiles/llvm-tblgen.dir/SetTheory.cpp.o CMakeFiles/llvm-tblgen.dir/SubtargetEmitter.cpp.o CMakeFiles/llvm-tblgen.dir/TGValueTypes.cpp.o CMakeFiles/llvm-tblgen.dir/TableGen.cpp.o CMakeFiles/llvm-tblgen.dir/X86DisassemblerTables.cpp.o CMakeFiles/llvm-tblgen.dir/X86ModRMFilters.cpp.o CMakeFiles/llvm-tblgen.dir/X86RecognizableInstr.cpp.o CMakeFiles/llvm-tblgen.dir/CTagsEmitter.cpp.o  -o ../../bin/llvm-tblgen  -L/usr/lib/gcc/x86_64-linux-gnu/4.7  -L/lib64  ../../lib/libLLVMTableGen.a ../../lib/libLLVMSupport.a -lrt -ldl -lpthread -lpthread <br>















../../lib/libLLVMSupport.a: could not read symbols: File format not recognized<br>clang: error: linker command failed with exit code 1 (use -v to see invocation)<br>make[2]: *** [bin/llvm-tblgen] Error 1<br>make[2]: Leaving directory `/home/asmirnov/llvm_arm_cmake_build'<br>















make[1]: *** [utils/TableGen/CMakeFiles/llvm-tblgen.dir/all] Error 2<br>make[1]: Leaving directory `/home/asmirnov/llvm_arm_cmake_build'<br>make: *** [all] Error 2<br><br></div><div> Can it be walked-around by invocation without -L/lib64 ?</div>













<span><font color="#888888">
<div><br></div><div>Anton</div><div><br></div></font></span></div>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></div><br></div></div>_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@cs.uiuc.edu" target="_blank">cfe-dev@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
<br></blockquote></div><br></div>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></div><br>_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@cs.uiuc.edu" target="_blank">cfe-dev@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
<br></blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>