From be73ea496657099603cce7e20413b9c6ee993c94 Mon Sep 17 00:00:00 2001 From: Mohammad Akhlaghi Date: Sun, 19 Jan 2020 21:15:37 +0000 Subject: LIBRARY_PATH is set accordingly based on the host Until now, GCC wouldn't build properly on Debian-based operating systems because `ld' needed to link with several necessary C library features like `crti.o' and `crtn.o' (this is an `ld' issue, not GCC). The solution is to add the directory containing them to `LIBRARY_PATH'. In the previous commit, I actually searched for these files, but while testing on another system, I noticed that it can be problematic (other architectures may exist). With this commit, we are actually finding the build architecture of the running GCC (which is the same as the `ld') and using that to fix a fixed directory to `LIBRARY_PATH'. --- reproduce/software/bash/configure.sh | 56 +++++++++++++++++++++++++----------- 1 file changed, 40 insertions(+), 16 deletions(-) (limited to 'reproduce/software/bash/configure.sh') diff --git a/reproduce/software/bash/configure.sh b/reproduce/software/bash/configure.sh index 0bb0917..c0f8025 100755 --- a/reproduce/software/bash/configure.sh +++ b/reproduce/software/bash/configure.sh @@ -848,21 +848,26 @@ fi # and necessary headers in a non-standard place, and we can't build GCC. So # we need to find them first. The `sys/cdefs.h' header is also in a # similarly different location. -if [ x"$$on_mac_os" = xyes ]; then - sys_libc_ldflags=; -else - sys_libc_ldflags=$(find /lib* /usr/lib*/* -name "libc.a" \ - | sed -e's|/libc\.a||g' \ - | tr ' ' '\n' \ - | awk '{printf "-L%s ", $1}' ); - sys_libc_cppflags=$(echo $sys_libc_ldflags \ - | tr ' ' '\n' \ - | sed -e's|-L|-I|' -e's|/lib/|/include/|' \ - | awk '!/\/lib/{printf "%s ", $1}' ); - #echo "sys_libc_ldflags: $sys_libc_ldflags" - #echo "sys_libc_cppflags: $sys_libc_cppflags" - export LDFLAGS="$LDFLAGS $sys_libc_ldflags" - export CPPFLAGS="$CPPFLAGS $sys_libc_cppflags" +sys_cppflags="" +sys_library_path="" +if [ x"$$on_mac_os" != xyes ]; then + + # Get the GCC target name of the compiler, when its given, special + # C libraries and headers are in a sub-directory of the host. + gcctarget=$(gcc -v 2>&1 \ + | tr ' ' '\n' \ + | awk '/\-\-target/' \ + | sed -e's/\-\-target=//') + if [ x"$gcctarget" != x ]; then + if [ -f /usr/lib/$gcctarget/libc.a ]; then + export sys_library_path=/usr/lib/$gcctarget + export sys_cppflags=-I/usr/include/$gcctarget + fi + fi + + # For a check: + #echo "sys_library_path: $sys_library_path" + #echo "sys_cppflags: $sys_cppflags" fi @@ -1149,6 +1154,24 @@ fi +# library_path (ONLY FOR BASIC) +# ----------------------------- +# +# During the basic build, we need to include possibly existing special C +# compiler targets (if they exist). +export CPPFLAGS="$CPPFLAGS $sys_cppflags" +if [ x"$sys_library_path" != x ]; then + if [ x"$LIBRARY_PATH" = x ]; then + export LIBRARY_PATH="$sys_library_path" + else + export LIBRARY_PATH="$LIBRARY_PATH:$sys_library_path" + fi +fi + + + + + # Build basic software # -------------------- # @@ -1160,9 +1183,9 @@ make -f reproduce/software/make/basic.mk \ good_static_libc=$good_static_libc \ rpath_command=$rpath_command \ static_build=$static_build \ + numthreads=$numthreads \ needs_ldl=$needs_ldl \ on_mac_os=$on_mac_os \ - numthreads=$numthreads \ host_cc=$host_cc \ -j$numthreads @@ -1184,6 +1207,7 @@ else fi .local/bin/env -i HOME=$bdir \ .local/bin/make -f reproduce/software/make/high-level.mk \ + sys_library_path=$sys_library_path rpath_command=$rpath_command \ static_build=$static_build \ numthreads=$numthreads \ -- cgit v1.2.1