jwinarske / clang_toolchain

Build LLVM Toolchain targeting a custom sysroot - Clang, LLD, Binutils (gold), compiler-rt, libc++, libcxxabi, libunwind

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

compiler-rt build failed

ranciere opened this issue · comments

Hi,

The compilation of clang, binutils is successful, but during compilation of compiler-rt it fails. The cmake config:
cmake .. -DBUILD_PLATFORM_RPI=ON -DBUILD_PLATFORM_SYSROOT=OFF -DBUILD_MRAA=ON -DTARGET_HOSTNAME=pi@192.168.100.161 -DSDK_ROOT_DIR=/home/rancier/rpi

The invoked command and the error message:

[ 73%] Linking CXX shared library ../linux/libclang_rt.asan-armhf.so
/home/rancier/rpi/sdk/toolchain/bin/clang++ --target=arm-linux-gnueabihf --sysroot=/home/rancier/rpi/sdk/sysroot -fPIC  -Wall -std=c++11 -Wno-unused-parameter -Os -DNDEBUG  -march=armv7-a -mfloat-abi=hard -nodefaultlibs -Wl,-z,text -Wl,--version-script,/home/rancier/work/clang_toolchain/build/compiler-rt-prefix/src/compiler-rt-build/lib/asan/clang_rt.asan-dynamic-armhf.vers -shared -Wl,-soname,libclang_rt.asan-armhf.so -o ../linux/libclang_rt.asan-armhf.so ../interception/CMakeFiles/RTInterception.armhf.dir/interception_linux.cc.o ../interception/CMakeFiles/RTInterception.armhf.dir/interception_mac.cc.o ../interception/CMakeFiles/RTInterception.armhf.dir/interception_win.cc.o ../interception/CMakeFiles/RTInterception.armhf.dir/interception_type_test.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommon.armhf.dir/sanitizer_allocator.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommon.armhf.dir/sanitizer_common.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommon.armhf.dir/sanitizer_deadlock_detector1.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommon.armhf.dir/sanitizer_deadlock_detector2.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommon.armhf.dir/sanitizer_errno.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommon.armhf.dir/sanitizer_file.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommon.armhf.dir/sanitizer_flags.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommon.armhf.dir/sanitizer_flag_parser.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommon.armhf.dir/sanitizer_fuchsia.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommon.armhf.dir/sanitizer_libc.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommon.armhf.dir/sanitizer_libignore.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommon.armhf.dir/sanitizer_linux.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommon.armhf.dir/sanitizer_linux_s390.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommon.armhf.dir/sanitizer_mac.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommon.armhf.dir/sanitizer_netbsd.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommon.armhf.dir/sanitizer_openbsd.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommon.armhf.dir/sanitizer_persistent_allocator.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommon.armhf.dir/sanitizer_platform_limits_freebsd.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommon.armhf.dir/sanitizer_platform_limits_linux.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommon.armhf.dir/sanitizer_platform_limits_netbsd.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommon.armhf.dir/sanitizer_platform_limits_openbsd.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommon.armhf.dir/sanitizer_platform_limits_posix.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommon.armhf.dir/sanitizer_platform_limits_solaris.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommon.armhf.dir/sanitizer_posix.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommon.armhf.dir/sanitizer_printf.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommon.armhf.dir/sanitizer_procmaps_common.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommon.armhf.dir/sanitizer_procmaps_bsd.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommon.armhf.dir/sanitizer_procmaps_linux.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommon.armhf.dir/sanitizer_procmaps_mac.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommon.armhf.dir/sanitizer_procmaps_solaris.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommon.armhf.dir/sanitizer_rtems.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommon.armhf.dir/sanitizer_solaris.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommon.armhf.dir/sanitizer_stoptheworld_mac.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommon.armhf.dir/sanitizer_suppressions.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommon.armhf.dir/sanitizer_tls_get_addr.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommon.armhf.dir/sanitizer_thread_registry.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommon.armhf.dir/sanitizer_type_traits.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommon.armhf.dir/sanitizer_win.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommon.armhf.dir/sanitizer_termination.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommonLibc.armhf.dir/sanitizer_common_libcdep.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommonLibc.armhf.dir/sanitizer_allocator_checks.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommonLibc.armhf.dir/sanitizer_linux_libcdep.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommonLibc.armhf.dir/sanitizer_mac_libcdep.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommonLibc.armhf.dir/sanitizer_posix_libcdep.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommonLibc.armhf.dir/sanitizer_stoptheworld_linux_libcdep.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommonLibc.armhf.dir/sanitizer_stoptheworld_netbsd_libcdep.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommonCoverage.armhf.dir/sancov_flags.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommonCoverage.armhf.dir/sanitizer_coverage_fuchsia.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommonCoverage.armhf.dir/sanitizer_coverage_libcdep_new.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommonCoverage.armhf.dir/sanitizer_coverage_win_sections.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommonSymbolizer.armhf.dir/sanitizer_allocator_report.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommonSymbolizer.armhf.dir/sanitizer_stackdepot.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommonSymbolizer.armhf.dir/sanitizer_stacktrace.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommonSymbolizer.armhf.dir/sanitizer_stacktrace_libcdep.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommonSymbolizer.armhf.dir/sanitizer_stacktrace_printer.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommonSymbolizer.armhf.dir/sanitizer_stacktrace_sparc.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommonSymbolizer.armhf.dir/sanitizer_symbolizer.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommonSymbolizer.armhf.dir/sanitizer_symbolizer_libbacktrace.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommonSymbolizer.armhf.dir/sanitizer_symbolizer_libcdep.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommonSymbolizer.armhf.dir/sanitizer_symbolizer_mac.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommonSymbolizer.armhf.dir/sanitizer_symbolizer_markup.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommonSymbolizer.armhf.dir/sanitizer_symbolizer_posix_libcdep.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommonSymbolizer.armhf.dir/sanitizer_symbolizer_report.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommonSymbolizer.armhf.dir/sanitizer_symbolizer_win.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommonSymbolizer.armhf.dir/sanitizer_unwind_linux_libcdep.cc.o ../sanitizer_common/CMakeFiles/RTSanitizerCommonSymbolizer.armhf.dir/sanitizer_unwind_win.cc.o ../lsan/CMakeFiles/RTLSanCommon.armhf.dir/lsan_common.cc.o ../lsan/CMakeFiles/RTLSanCommon.armhf.dir/lsan_common_linux.cc.o ../lsan/CMakeFiles/RTLSanCommon.armhf.dir/lsan_common_mac.cc.o ../ubsan/CMakeFiles/RTUbsan.armhf.dir/ubsan_diag.cc.o ../ubsan/CMakeFiles/RTUbsan.armhf.dir/ubsan_init.cc.o ../ubsan/CMakeFiles/RTUbsan.armhf.dir/ubsan_flags.cc.o ../ubsan/CMakeFiles/RTUbsan.armhf.dir/ubsan_handlers.cc.o ../ubsan/CMakeFiles/RTUbsan.armhf.dir/ubsan_monitor.cc.o ../ubsan/CMakeFiles/RTUbsan.armhf.dir/ubsan_value.cc.o CMakeFiles/RTAsan_dynamic.armhf.dir/asan_allocator.cc.o CMakeFiles/RTAsan_dynamic.armhf.dir/asan_activation.cc.o CMakeFiles/RTAsan_dynamic.armhf.dir/asan_debugging.cc.o CMakeFiles/RTAsan_dynamic.armhf.dir/asan_descriptions.cc.o CMakeFiles/RTAsan_dynamic.armhf.dir/asan_errors.cc.o CMakeFiles/RTAsan_dynamic.armhf.dir/asan_fake_stack.cc.o CMakeFiles/RTAsan_dynamic.armhf.dir/asan_flags.cc.o CMakeFiles/RTAsan_dynamic.armhf.dir/asan_fuchsia.cc.o CMakeFiles/RTAsan_dynamic.armhf.dir/asan_globals.cc.o CMakeFiles/RTAsan_dynamic.armhf.dir/asan_globals_win.cc.o CMakeFiles/RTAsan_dynamic.armhf.dir/asan_interceptors.cc.o CMakeFiles/RTAsan_dynamic.armhf.dir/asan_interceptors_memintrinsics.cc.o CMakeFiles/RTAsan_dynamic.armhf.dir/asan_linux.cc.o CMakeFiles/RTAsan_dynamic.armhf.dir/asan_mac.cc.o CMakeFiles/RTAsan_dynamic.armhf.dir/asan_malloc_linux.cc.o CMakeFiles/RTAsan_dynamic.armhf.dir/asan_malloc_mac.cc.o CMakeFiles/RTAsan_dynamic.armhf.dir/asan_malloc_win.cc.o CMakeFiles/RTAsan_dynamic.armhf.dir/asan_memory_profile.cc.o CMakeFiles/RTAsan_dynamic.armhf.dir/asan_poisoning.cc.o CMakeFiles/RTAsan_dynamic.armhf.dir/asan_posix.cc.o CMakeFiles/RTAsan_dynamic.armhf.dir/asan_premap_shadow.cc.o CMakeFiles/RTAsan_dynamic.armhf.dir/asan_report.cc.o CMakeFiles/RTAsan_dynamic.armhf.dir/asan_rtems.cc.o CMakeFiles/RTAsan_dynamic.armhf.dir/asan_rtl.cc.o CMakeFiles/RTAsan_dynamic.armhf.dir/asan_shadow_setup.cc.o CMakeFiles/RTAsan_dynamic.armhf.dir/asan_stack.cc.o CMakeFiles/RTAsan_dynamic.armhf.dir/asan_stats.cc.o CMakeFiles/RTAsan_dynamic.armhf.dir/asan_suppressions.cc.o CMakeFiles/RTAsan_dynamic.armhf.dir/asan_thread.cc.o CMakeFiles/RTAsan_dynamic.armhf.dir/asan_win.cc.o CMakeFiles/RTAsan_dynamic.armhf.dir/asan_interceptors_vfork.S.o CMakeFiles/RTAsan_dynamic.armhf.dir/asan_new_delete.cc.o CMakeFiles/RTAsan_dynamic_version_script_dummy.armhf.dir/dummy.cc.o ../ubsan/CMakeFiles/RTUbsan_cxx.armhf.dir/ubsan_handlers_cxx.cc.o ../ubsan/CMakeFiles/RTUbsan_cxx.armhf.dir/ubsan_type_hash.cc.o ../ubsan/CMakeFiles/RTUbsan_cxx.armhf.dir/ubsan_type_hash_itanium.cc.o ../ubsan/CMakeFiles/RTUbsan_cxx.armhf.dir/ubsan_type_hash_win.cc.o  -lstdc++ -lgcc_s -lc -lm 
/home/rancier/rpi/sdk/toolchain/bin/arm-linux-gnueabihf-ld: cannot find crtbeginS.o: No such file or directory
/home/rancier/rpi/sdk/toolchain/bin/arm-linux-gnueabihf-ld: cannot find -lstdc++
/home/rancier/rpi/sdk/toolchain/bin/arm-linux-gnueabihf-ld: cannot find -lgcc_s
clang-9: error: linker command failed with exit code 1 (use -v to see invocation)

The crtbeginS.o is located on the device (./usr/lib/gcc/arm-linux-gnueabihf/8/crtbeginS.o), but the sysroot.cmake excludes rsyncing of this directory (--exclude=lib/gcc/).

(Host: Ubuntu 18.04, Pi: Raspberry Pi 4 with the newest stable Raspbian Buster 2020-02-13)

Hi again,

If I comment out the exclude line, then compilation of the compiler-rt is successful. Is it okay?
BUT: The next problem is coming: the libunwind. Messages:

[ 31%] Performing configure step for 'libunwind'
cd /home/rancier/work/clang_toolchain/build/libunwind-prefix/src/libunwind-build && /usr/local/bin/cmake -DCMAKE_TOOLCHAIN_FILE=/home/rancier/work/clang_toolchain/build/toolchain.cmake -DCMAKE_INSTALL_PREFIX=/home/rancier/rpi/sdk/toolchain/lib/clang/9.0.0/arm-linux-gnueabihf -DCMAKE_BUILD_TYPE=MinSizeRel -DCMAKE_VERBOSE_MAKEFILE=FALSE -DLLVM_CONFIG_PATH=/home/rancier/rpi/sdk/toolchain/bin/llvm-config -DLIBUNWIND_STANDALONE_BUILD=OFF -DLIBUNWIND_TARGET_TRIPLE=arm-linux-gnueabihf -DLIBUNWIND_SYSROOT=/home/rancier/rpi/sdk/sysroot -DLIBUNWIND_ENABLE_SHARED=ON -ULIBUNWIND_USE_COMPILER_RT=ON "-GUnix Makefiles" /home/rancier/work/clang_toolchain/third_party/libunwind
Re-run cmake no build system arguments
-- Found LLVM_CONFIG_PATH as /home/rancier/rpi/sdk/toolchain/bin/llvm-config
-- Linker detection: GNU ld
CMake Error at /home/rancier/rpi/sdk/toolchain/lib/cmake/llvm/CheckCompilerVersion.cmake:83 (message):
  libstdc++ version must be at least 4.8.
Call Stack (most recent call first):
  /home/rancier/rpi/sdk/toolchain/lib/cmake/llvm/HandleLLVMOptions.cmake:9 (include)
  CMakeLists.txt:80 (include)


-- Configuring incomplete, errors occurred!

Any idea?

Hi @ranciere

What triple and cpu are you targeting?

Hi @jwinarske

CPU: Broadcom BCM2711, Quad core Cortex-A72 (ARM v8) 64-bit SoC @ 1.5GHz (from: https://www.raspberrypi.org/products/raspberry-pi-4-model-b/specifications/)
Triple: arm-linux-gnueabihf

Could be this a 32 vs 64 bit problem?

Hi @ranciere

I've been working on a major update that handles the llvm github migration and some external C-Libs, but I think for your case you just need this:

git clone https://github.com/llvm/llvm-project
cd llvm-project
git checkout llvmorg-10.0.0
mkdir build && cd build
cmake ../llvm -DLLVM_ENABLE_PROJECTS="clang;lld;libunwind;compiler-rt;libcxx;libcxxabi" -DLLVM_TARGETS_TO_BUILD="ARM;AArch64" -DLLVM_DEFAULT_TARGET_TRIPLE=arm-linux-gnueabihf -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON -DLLVM_BUILD_RUNTIME=ON

If you're not building for aarch64, then don't build that target.

Hi @jwinarske,

Thank you, I will give a try at the evening (in local time, so it's night in your time zone). I will definitely notify you.

Hi @jwinarske

BTW the purpose of the compiler is the same as yours: I would like to build a flutter engine for Raspberry Pi.

In the case of the Flutter Engine, I just checked in changes into flutter_embedded master last night that should unblock you. I moved to using the built-in Fuchsia Clang 11.0. There is no longer an external Clang dependency. After running cmake, run make engine. It's building tip of the tree as of yesterday.

Great! I will try it asap! :)

I've tried the vanilla clang build: the build was successful, but my virtual machine broke before I could try it. So reinstall and retry.

Yeah I built it as well. It generates the arm-linux-gnueabihf runtime libs, only when you dump them with readelf, it matches the host machine. I would stick with flutter_embedded until I sort out my changes.

Hi @jwinarske,
Okay!