[Buildroot] [PATCH v4 1/1] package/spirv-tools: fix build issue
enki
enki at fsck.pl
Mon Nov 6 21:00:02 UTC 2023
---- On Mon, 06 Nov 2023 14:30:12 +0100 Yann E. MORIN wrote ---
> Maciej, All,
>
>
>
> On 2023-11-06 14:08 +0100, Maciej Grela spake thusly:
>
> > spirv-tools requires a toolchain w/ shared libs, add flag dependency and comment.
>
> >
>
> > Fixes: http://autobuild.buildroot.net/results/a1f615d2410bffb6fdacc8586761c9def05aafa9
>
> > Fixes: http://autobuild.buildroot.net/results/294ade8c9aa3d650fa5ab6cc34701c4176bc197f
>
>
>
> Sorry, but I still don't understansd how those two build failures relate
>
> to static builds.
>
>
>
> Both failed build logs are about a broken C++ compiler:
>
>
>
> -- Detecting CXX compiler ABI info
>
> -- Detecting CXX compiler ABI info - failed
>
> -- Check for working CXX compiler: /usr/bin/clang++
>
> -- Check for working CXX compiler: /usr/bin/clang++ - broken
>
>
>
> And indeed, it is not surprising that the host C++ compiler be broken
>
> when doing cross-compilation, as it is used to tentatively build taget
>
> code:
>
>
>
> /usr/bin/clang++ --sysroot=/home/thomas/autobuild/instance-1/output-1/host/armeb-buildroot-linux-uclibcgnueabi/sysroot -O3 -DNDEBUG -static CMakeFiles/cmTC_faefe.dir/testCXXCompiler.cxx.o -o cmTC_faefe
>
> /usr/bin/ld: /home/thomas/autobuild/instance-1/output-1/host/armeb-buildroot-linux-uclibcgnueabi/sysroot/usr/lib/crt1.o: relocations in generic ELF (EM: 40)
>
> /usr/bin/ld: /home/thomas/autobuild/instance-1/output-1/host/armeb-buildroot-linux-uclibcgnueabi/sysroot/usr/lib/crt1.o: error adding symbols: file in wrong format
>
> clang: error: linker command failed with exit code 1 (use -v to see invocation)
>
>
>
> So, if it really is about a static linking issue, we need more
>
> details...
>
>
If you take (as an example) the config from a1f615d2410bffb6fdacc8586761c9def05aafa9, enable the C++ support and try to build you get the
failure caused by ld trying to do a dynamic link with a static library:
[ 54%] Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dataflow.cpp.o
/home/enki/a1f615d2410bffb6fdacc8586761c9def05aafa9/output/host/lib/gcc/armeb-buildroot-linux-uclibcgnueabi/12.3.0/../../../../armeb-buildroot-linux-uclibcgnueabi/bin/ld: /home/enki/a1f615d2410bffb6fdacc8586761c9def05aafa9/output/host/armeb-buildroot-linux-uclibcgnueabi/sysroot/usr/lib/libc.a(__uClibc_main.os): in function `__uClibc_fini':
__uClibc_main.c:(.text+0x140): undefined reference to `__fini_array_start'
/home/enki/a1f615d2410bffb6fdacc8586761c9def05aafa9/output/host/lib/gcc/armeb-buildroot-linux-uclibcgnueabi/12.3.0/../../../../armeb-buildroot-linux-uclibcgnueabi/bin/ld: __uClibc_main.c:(.text+0x144): undefined reference to `__fini_array_end'
/home/enki/a1f615d2410bffb6fdacc8586761c9def05aafa9/output/host/lib/gcc/armeb-buildroot-linux-uclibcgnueabi/12.3.0/../../../../armeb-buildroot-linux-uclibcgnueabi/bin/ld: __uClibc_main.c:(.text+0x148): undefined reference to `__fini_array_start'
/home/enki/a1f615d2410bffb6fdacc8586761c9def05aafa9/output/host/lib/gcc/armeb-buildroot-linux-uclibcgnueabi/12.3.0/../../../../armeb-buildroot-linux-uclibcgnueabi/bin/ld: /home/enki/a1f615d2410bffb6fdacc8586761c9def05aafa9/output/host/armeb-buildroot-linux-uclibcgnueabi/sysroot/usr/lib/libc.a(__uClibc_main.os): in function `__uClibc_main':
__uClibc_main.c:(.text+0x430): undefined reference to `__preinit_array_start'
/home/enki/a1f615d2410bffb6fdacc8586761c9def05aafa9/output/host/lib/gcc/armeb-buildroot-linux-uclibcgnueabi/12.3.0/../../../../armeb-buildroot-linux-uclibcgnueabi/bin/ld: __uClibc_main.c:(.text+0x434): undefined reference to `__preinit_array_end'
/home/enki/a1f615d2410bffb6fdacc8586761c9def05aafa9/output/host/lib/gcc/armeb-buildroot-linux-uclibcgnueabi/12.3.0/../../../../armeb-buildroot-linux-uclibcgnueabi/bin/ld: __uClibc_main.c:(.text+0x438): undefined reference to `__init_array_start'
/home/enki/a1f615d2410bffb6fdacc8586761c9def05aafa9/output/host/lib/gcc/armeb-buildroot-linux-uclibcgnueabi/12.3.0/../../../../armeb-buildroot-linux-uclibcgnueabi/bin/ld: __uClibc_main.c:(.text+0x43c): undefined reference to `__init_array_end'
/home/enki/a1f615d2410bffb6fdacc8586761c9def05aafa9/output/host/lib/gcc/armeb-buildroot-linux-uclibcgnueabi/12.3.0/../../../../armeb-buildroot-linux-uclibcgnueabi/bin/ld: libSPIRV-Tools-shared.so: hidden symbol `__preinit_array_start' isn't defined
/home/enki/a1f615d2410bffb6fdacc8586761c9def05aafa9/output/host/lib/gcc/armeb-buildroot-linux-uclibcgnueabi/12.3.0/../../../../armeb-buildroot-linux-uclibcgnueabi/bin/ld: final link failed: bad value
collect2: error: ld returned 1 exit status
make[4]: *** [source/CMakeFiles/SPIRV-Tools-shared.dir/build.make:1223: source/libSPIRV-Tools-shared.so] Błąd 1
make[3]: *** [CMakeFiles/Makefile2:1091: source/CMakeFiles/SPIRV-Tools-shared.dir/all] Błąd 2
Enabling the shared libs and rebuilding the toolchain fixes this. In other words those two builds fail *both* because of missing C++ support as well as a static-only toolchain. It's just that the missing C++
makes it fail early.
--
enki
More information about the buildroot
mailing list