[cfe-dev] Build Clang on x86_64 (ubuntu) with arm-linux-gnueabihf failed

Anton Smirnov dev at antonsmirnov.name
Tue Oct 8 11:29:24 PDT 2013


Hi.

I've succeed to compile clang for ARM using ubuntu ..gnueabihf.. packages,
but libclang.so can't be stripped
using tool from ndk because of error:

/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

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

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).

Thanks,
Anton.


2013/10/8 James Molloy <james at jamesmolloy.co.uk>

> Anton,
>
> The compiler I'm using is this one:
> https://launchpad.net/gcc-linaro/+milestone/4.8-2013.08 . 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.
>
> Cheers,
>
> James
>
>
> On 8 October 2013 17:09, Anton Smirnov <dev at antonsmirnov.name> wrote:
>
>> I've noticed you've used linaro toolchain instead of ubuntu's
>> gcc-4.7-arm-linux-gnueabihf (and other packages from
>> http://llvm.org/docs/HowToCrossCompileLLVM.html).
>> Can you write what packages should be downloaded and installed from
>> http://www.linaro.org/downloads/ ?
>>
>> Thanks and regards,
>> Anton.
>>
>>
>> 2013/10/8 Anton Smirnov <dev at antonsmirnov.name>
>>
>>> Thanks, James.
>>>
>>> I will give it a try right now!
>>>
>>>
>>> 2013/10/8 James Molloy <james at jamesmolloy.co.uk>
>>>
>>>> Hi Anton,
>>>>
>>>> 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!)
>>>>
>>>> I managed a build without any problems using:
>>>>
>>>> mkdir build; cd build; cmake ..
>>>> -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc
>>>> -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_SYSTEM_NAME=Linux
>>>>
>>>> As the CMake cross-compilation wiki says, "CMAKE_SYSTEM_NAME" is very
>>>> important as it tells CMake that it's cross compiling.
>>>>
>>>> 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.
>>>>
>>>> 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:
>>>>
>>>> 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'
>>>>
>>>> Where '/work/llvm/build7/../build6/native/bin' is the location of a
>>>> previously-built x86 llvm-tblgen.
>>>>
>>>> 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.
>>>>
>>>> Cheers,
>>>>
>>>> James
>>>>
>>>>
>>>>
>>>> On 8 October 2013 09:07, Anton Smirnov <dev at antonsmirnov.name> wrote:
>>>>
>>>>> I can confirm that after editing there is no -L/lib64 in invocation
>>>>> line,
>>>>> but the problem remains. I think previously compiled files were
>>>>> compiled/linked with -L/lib64 and this
>>>>> corrupts the build.
>>>>>
>>>>> How can it be fixed/walked-around?
>>>>>
>>>>>
>>>>> 2013/10/8 Anton Smirnov <dev at antonsmirnov.name>
>>>>>
>>>>>> As far as i understood, invocation line is saved in
>>>>>> CMakeFiles/llvm-tblgen.dir/link.txt.
>>>>>> I've edited it to remove -L/lib64 and invoked the last command line
>>>>>> manually but the problem remains.
>>>>>>
>>>>>> What can i do in order to avoid adding -L/lib64 ?
>>>>>>
>>>>>> Thanks,
>>>>>> Anton
>>>>>>
>>>>>>
>>>>>> 2013/10/8 Anton Smirnov <dev at antonsmirnov.name>
>>>>>>
>>>>>>> Hello.
>>>>>>>
>>>>>>> Similar question to what i asked few days ago but was not resolved.
>>>>>>>
>>>>>>> I've followed guide (http://llvm.org/docs/HowToCrossCompileLLVM.html)
>>>>>>> step-by-step.
>>>>>>> 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).
>>>>>>>
>>>>>>> First i've compiled for host (to use tblgens), then for ARM.
>>>>>>> When cross-compiling for ARM (tried both ninja and autotools) i'm
>>>>>>> getting linker error:
>>>>>>>
>>>>>>> Linking CXX executable ../../bin/llvm-tblgen
>>>>>>> ../../lib/libLLVMSupport.a: could not read symbols: File format not
>>>>>>> recognized
>>>>>>> clang: error: linker command failed with exit code 1 (use -v to see
>>>>>>> invocation)
>>>>>>> make[2]: *** [bin/llvm-tblgen] Error 1
>>>>>>> make[1]: *** [utils/TableGen/CMakeFiles/llvm-tblgen.dir/all] Error 2
>>>>>>>
>>>>>>> Verbose output (make VERBOSE=1):
>>>>>>>
>>>>>>> cd /home/asmirnov/llvm_arm_cmake_build/utils/TableGen &&
>>>>>>> /usr/bin/cmake -E cmake_link_script CMakeFiles/llvm-tblgen.dir/link.txt
>>>>>>> --verbose=1
>>>>>>> /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
>>>>>>> ../../lib/libLLVMSupport.a: could not read symbols: File format not
>>>>>>> recognized
>>>>>>> clang: error: linker command failed with exit code 1 (use -v to see
>>>>>>> invocation)
>>>>>>> make[2]: *** [bin/llvm-tblgen] Error 1
>>>>>>> make[2]: Leaving directory `/home/asmirnov/llvm_arm_cmake_build'
>>>>>>> make[1]: *** [utils/TableGen/CMakeFiles/llvm-tblgen.dir/all] Error 2
>>>>>>> make[1]: Leaving directory `/home/asmirnov/llvm_arm_cmake_build'
>>>>>>> make: *** [all] Error 2
>>>>>>>
>>>>>>>  Can it be walked-around by invocation without -L/lib64 ?
>>>>>>>
>>>>>>> Anton
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> cfe-dev mailing list
>>>>> cfe-dev at cs.uiuc.edu
>>>>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>>>>>
>>>>>
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20131009/0ff25c8a/attachment.html>


More information about the cfe-dev mailing list