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

Anton Smirnov dev at antonsmirnov.name
Tue Oct 8 09:09:57 PDT 2013


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/20131008/88c6f21c/attachment.html>


More information about the cfe-dev mailing list