Subject: bug#24841: Status: Cross-building bootstrap binaries fail in current master

From: Chris Marusich <[email-masked]>
Date: Thu, 22 Feb 2018 10:47:16 +0100

Hi,

The core-updates branch has been merged into master.  As of
5ce3f93bc52280c7c2b1b96097e8cd4a62b53bb0 (committed on 2018/02/18),
which is after the merge, the following builds PASS or FAIL when run on
an x86_64-linux GuixSD system:

FAIL:  aarch64-unknown-linux-gnu    bootstrap-tarballs  grafts
FAIL:  aarch64-unknown-linux-gnu    bootstrap-tarballs  no-grafts
PASS:  aarch64-unknown-linux-gnu    guile-static        grafts
PASS:  aarch64-unknown-linux-gnu    guile-static        no-grafts
FAIL:  arm-unknown-linux-gnueabihf  bootstrap-tarballs  grafts
FAIL:  arm-unknown-linux-gnueabihf  bootstrap-tarballs  no-grafts
PASS:  arm-unknown-linux-gnueabihf  guile-static        grafts
PASS:  arm-unknown-linux-gnueabihf  guile-static        no-grafts
FAIL:  i686-unknown-linux-gnu       bootstrap-tarballs  grafts
FAIL:  i686-unknown-linux-gnu       bootstrap-tarballs  no-grafts
PASS:  i686-unknown-linux-gnu       guile-static        grafts
PASS:  i686-unknown-linux-gnu       guile-static        no-grafts
FAIL:  mips64el-unknown-linux-gnu   bootstrap-tarballs  grafts
FAIL:  mips64el-unknown-linux-gnu   bootstrap-tarballs  no-grafts
PASS:  mips64el-unknown-linux-gnu   guile-static        grafts
PASS:  mips64el-unknown-linux-gnu   guile-static        no-grafts
FAIL:  x86_64-unknown-linux-gnu     bootstrap-tarballs  grafts
FAIL:  x86_64-unknown-linux-gnu     bootstrap-tarballs  no-grafts
FAIL:  x86_64-unknown-linux-gnu     guile-static        grafts
FAIL:  x86_64-unknown-linux-gnu     guile-static        no-grafts

Here, PASS means it builds successfully.  FAIL means it did not.  The
second column is the target, the third column is the package, and the
fourth column is whether or not grafts were enabled.  Note that
"guile-static" is short-hand for "-e '(@@ (gnu packages make-bootstrap)
%guile-static)'".  So, for example, the first row means that the
following command failed when I tried it:

    ./pre-inst-env guix build --target=aarch64-unknown-linux-gnu \
        bootstrap-tarballs

The failures can be grouped as follows:

* aarch64, arm, i686: For all of these targets, bootstrap-tarballs fails
  because [email-masked] fails.  [email-masked] fails because of errors like the
  following:

--8<---------------cut here---------------start------------->8---
make[2]: Entering directory '/tmp/guix-build-grep-3.1.drv-0/grep-3.1/src'
  CC       dfasearch.o
  CC       grep.o
  CC       kwsearch.o
  CC       kwset.o
  CC       pcresearch.o
  CC       searchutils.o
  GEN      egrep
  GEN      fgrep
  CCLD     grep
/gnu/store/p2b76bgsx5pkpc59fvxmkfz47502awg5-pcre-8.41/lib/libpcre.a(libpcre_la-pcre_jit_compile.o): In function `sljit_free_exec':
(.text+0x64d): undefined reference to `pthread_mutex_lock'
/gnu/store/p2b76bgsx5pkpc59fvxmkfz47502awg5-pcre-8.41/lib/libpcre.a(libpcre_la-pcre_jit_compile.o): In function `sljit_free_exec':
(.text+0x6ac): undefined reference to `pthread_mutex_unlock'
/gnu/store/p2b76bgsx5pkpc59fvxmkfz47502awg5-pcre-8.41/lib/libpcre.a(libpcre_la-pcre_jit_compile.o): In function `sljit_generate_code':
(.text+0x73e4): undefined reference to `pthread_mutex_lock'
/gnu/store/p2b76bgsx5pkpc59fvxmkfz47502awg5-pcre-8.41/lib/libpcre.a(libpcre_la-pcre_jit_compile.o): In function `sljit_generate_code':
(.text+0x74b0): undefined reference to `pthread_mutex_unlock'
/gnu/store/p2b76bgsx5pkpc59fvxmkfz47502awg5-pcre-8.41/lib/libpcre.a(libpcre_la-pcre_jit_compile.o): In function `sljit_generate_code':
(.text+0x7847): undefined reference to `pthread_mutex_unlock'
/gnu/store/p2b76bgsx5pkpc59fvxmkfz47502awg5-pcre-8.41/lib/libpcre.a(libpcre_la-pcre_jit_compile.o): In function `pcre_jit_free_unused_memory':
(.text+0x2462a): undefined reference to `pthread_mutex_lock'
/gnu/store/p2b76bgsx5pkpc59fvxmkfz47502awg5-pcre-8.41/lib/libpcre.a(libpcre_la-pcre_jit_compile.o): In function `pcre_jit_free_unused_memory':
(.text+0x24692): undefined reference to `pthread_mutex_unlock'
/gnu/store/spfsrm8cqxh7qs8j76ml6x989z2hy49y-gcc-cross-i686-unknown-linux-gnu-5.5.0/lib/gcc/i686-unknown-linux-gnu/5.5.0/libgcc_eh.a(unwind-dw2-fde-dip.o): In function `__gthread_mutex_lock':
/tmp/guix-build-gcc-cross-i686-unknown-linux-gnu-5.5.0.drv-0/build/i686-unknown-linux-gnu/libgcc/./gthr-default.h:748: undefined reference to `pthread_mutex_lock'
/gnu/store/spfsrm8cqxh7qs8j76ml6x989z2hy49y-gcc-cross-i686-unknown-linux-gnu-5.5.0/lib/gcc/i686-unknown-linux-gnu/5.5.0/libgcc_eh.a(unwind-dw2-fde-dip.o): In function `__gthread_mutex_unlock':
/tmp/guix-build-gcc-cross-i686-unknown-linux-gnu-5.5.0.drv-0/build/i686-unknown-linux-gnu/libgcc/./gthr-default.h:778: undefined reference to `pthread_mutex_unlock'
/gnu/store/spfsrm8cqxh7qs8j76ml6x989z2hy49y-gcc-cross-i686-unknown-linux-gnu-5.5.0/lib/gcc/i686-unknown-linux-gnu/5.5.0/libgcc_eh.a(unwind-dw2-fde-dip.o): In function `__gthread_mutex_lock':
/tmp/guix-build-gcc-cross-i686-unknown-linux-gnu-5.5.0.drv-0/build/i686-unknown-linux-gnu/libgcc/./gthr-default.h:748: undefined reference to `pthread_mutex_lock'
/gnu/store/spfsrm8cqxh7qs8j76ml6x989z2hy49y-gcc-cross-i686-unknown-linux-gnu-5.5.0/lib/gcc/i686-unknown-linux-gnu/5.5.0/libgcc_eh.a(unwind-dw2-fde-dip.o): In function `__gthread_mutex_unlock':
/tmp/guix-build-gcc-cross-i686-unknown-linux-gnu-5.5.0.drv-0/build/i686-unknown-linux-gnu/libgcc/./gthr-default.h:778: undefined reference to `pthread_mutex_unlock'
/gnu/store/spfsrm8cqxh7qs8j76ml6x989z2hy49y-gcc-cross-i686-unknown-linux-gnu-5.5.0/lib/gcc/i686-unknown-linux-gnu/5.5.0/libgcc_eh.a(unwind-dw2-fde-dip.o): In function `__gthread_mutex_lock':
/tmp/guix-build-gcc-cross-i686-unknown-linux-gnu-5.5.0.drv-0/build/i686-unknown-linux-gnu/libgcc/./gthr-default.h:748: undefined reference to `pthread_mutex_lock'
/gnu/store/spfsrm8cqxh7qs8j76ml6x989z2hy49y-gcc-cross-i686-unknown-linux-gnu-5.5.0/lib/gcc/i686-unknown-linux-gnu/5.5.0/libgcc_eh.a(unwind-dw2-fde-dip.o): In function `__gthread_mutex_unlock':
/tmp/guix-build-gcc-cross-i686-unknown-linux-gnu-5.5.0.drv-0/build/i686-unknown-linux-gnu/libgcc/./gthr-default.h:778: undefined reference to `pthread_mutex_unlock'
/gnu/store/spfsrm8cqxh7qs8j76ml6x989z2hy49y-gcc-cross-i686-unknown-linux-gnu-5.5.0/lib/gcc/i686-unknown-linux-gnu/5.5.0/libgcc_eh.a(unwind-dw2-fde-dip.o): In function `__gthread_mutex_lock':
/tmp/guix-build-gcc-cross-i686-unknown-linux-gnu-5.5.0.drv-0/build/i686-unknown-linux-gnu/libgcc/./gthr-default.h:748: undefined reference to `pthread_mutex_lock'
/gnu/store/spfsrm8cqxh7qs8j76ml6x989z2hy49y-gcc-cross-i686-unknown-linux-gnu-5.5.0/lib/gcc/i686-unknown-linux-gnu/5.5.0/libgcc_eh.a(unwind-dw2-fde-dip.o): In function `__gthread_mutex_unlock':
/tmp/guix-build-gcc-cross-i686-unknown-linux-gnu-5.5.0.drv-0/build/i686-unknown-linux-gnu/libgcc/./gthr-default.h:778: undefined reference to `pthread_mutex_unlock'
/gnu/store/spfsrm8cqxh7qs8j76ml6x989z2hy49y-gcc-cross-i686-unknown-linux-gnu-5.5.0/lib/gcc/i686-unknown-linux-gnu/5.5.0/libgcc_eh.a(unwind-dw2-fde-dip.o): In function `__gthread_mutex_lock':
/tmp/guix-build-gcc-cross-i686-unknown-linux-gnu-5.5.0.drv-0/build/i686-unknown-linux-gnu/libgcc/./gthr-default.h:748: undefined reference to `pthread_mutex_lock'
/gnu/store/spfsrm8cqxh7qs8j76ml6x989z2hy49y-gcc-cross-i686-unknown-linux-gnu-5.5.0/lib/gcc/i686-unknown-linux-gnu/5.5.0/libgcc_eh.a(unwind-dw2-fde-dip.o): In function `__gthread_mutex_unlock':
/tmp/guix-build-gcc-cross-i686-unknown-linux-gnu-5.5.0.drv-0/build/i686-unknown-linux-gnu/libgcc/./gthr-default.h:778: undefined reference to `pthread_mutex_unlock'
/tmp/guix-build-gcc-cross-i686-unknown-linux-gnu-5.5.0.drv-0/build/i686-unknown-linux-gnu/libgcc/./gthr-default.h:778: undefined reference to `pthread_mutex_unlock'
collect2: error: ld returned 1 exit status
make[2]: *** [Makefile:1317: grep] Error 1
make[2]: Leaving directory '/tmp/guix-build-grep-3.1.drv-0/grep-3.1/src'
make[1]: *** [Makefile:1301: all-recursive] Error 1
make[1]: Leaving directory '/tmp/guix-build-grep-3.1.drv-0/grep-3.1'
make: *** [Makefile:1242: all] Error 2
phase `build' failed after 14.3 seconds
builder for `/gnu/store/db1xy331abifx0r2jbi6q9zcbcmhf1b1-grep-3.1.drv' failed with exit code 1
--8<---------------cut here---------------end--------------->8---

* mips64el: bootstrap-tarballs fails because [email-masked] fails.  [email-masked]
  fails because of the following error:

--8<---------------cut here---------------start------------->8---
make[1]: Entering directory '/tmp/guix-build-pcre-8.41.drv-0/pcre-8.41'
  CC       libpcre_la-pcre_compile.lo
  CC       libpcre_la-pcre_byte_order.lo
  CC       libpcre_la-pcre_config.lo
  CC       libpcre_la-pcre_dfa_exec.lo
  CC       libpcre_la-pcre_exec.lo
  CC       libpcre_la-pcre_fullinfo.lo
  CC       libpcre_la-pcre_get.lo
  CC       libpcre_la-pcre_globals.lo
  CC       libpcre_la-pcre_jit_compile.lo
In file included from sljit/sljitLir.c:1747:0,
                 from pcre_jit_compile.c:62:
sljit/sljitNativeMIPS_common.c: In function ?sljit_has_cpu_feature?:
sljit/sljitNativeMIPS_common.c:506:3: error: a label can only be part of a statement and a declaration is not a statement
   sljit_sw fir;
   ^
make[1]: *** [Makefile:1730: libpcre_la-pcre_jit_compile.lo] Error 1
make[1]: *** Waiting for unfinished jobs....
make[1]: Leaving directory '/tmp/guix-build-pcre-8.41.drv-0/pcre-8.41'
make: *** [Makefile:1322: all] Error 2
phase `build' failed after 29.4 seconds
builder for `/gnu/store/16sgy03d1f21qkn8895nq8ddpa7a14vz-pcre-8.41.drv' failed with exit code 1
--8<---------------cut here---------------end--------------->8---

* x86_64: I'm not sure if it makes sense to cross-compile for x86_64 on
  an x86_64 system, but I tried it anyway, and bootstrap-tarballs and
  guile-static both fail because of an error like the following:

--8<---------------cut here---------------start------------->8---
g++   -g -O2 -DIN_GCC    -fno-exceptions -fno-rtti -fasynchronous-unwind-tables -W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual -Wno-format -Wmissing-format-attribute -Woverloaded-virtual -pedantic -Wno-long-long -Wno-variadic-macros -Wno-overlength-strings -fno-common  -DHAVE_CONFIG_H -static-libstdc++ -static-libgcc  -o cc1 c/c-lang.o c-family/stub-objc.o attribs.o c/c-errors.o c/c-decl.o c/c-typeck.o c/c-convert.o c/c-aux-info.o c/c-objc-common.o c/c-parser.o c/c-array-notation.o c-family/c-common.o c-family/c-cppbuiltin.o c-family/c-dump.o c-family/c-format.o c-family/c-gimplify.o c-family/c-lex.o c-family/c-omp.o c-family/c-opts.o c-family/c-pch.o c-family/c-ppoutput.o c-family/c-pragma.o c-family/c-pretty-print.o c-family/c-semantics.o c-family/c-ada-spec.o c-family/c-cilkplus.o c-family/array-notation-common.o c-family/cilk.o c-family/c-ubsan.o i386-c.o glibc-c.o \
  cc1-checksum.o libbackend.a main.o tree-browser.o libcommon-target.a libcommon.a ../libcpp/libcpp.a ../libdecnumber/libdecnumber.a libcommon.a ../libcpp/libcpp.a   ../libbacktrace/.libs/libbacktrace.a ../libiberty/libiberty.a ../libdecnumber/libdecnumber.a  -lisl -lmpc -lmpfr -lgmp -rdynamic -ldl  -lz
g++   -g -O2 -DIN_GCC    -fno-exceptions -fno-rtti -fasynchronous-unwind-tables -W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual -Wno-format -Wmissing-format-attribute -Woverloaded-virtual -pedantic -Wno-long-long -Wno-variadic-macros -Wno-overlength-strings -fno-common  -DHAVE_CONFIG_H -static-libstdc++ -static-libgcc  -o cc1plus \
      cp/cp-lang.o c-family/stub-objc.o cp/call.o cp/decl.o cp/expr.o cp/pt.o cp/typeck2.o cp/class.o cp/decl2.o cp/error.o cp/lex.o cp/parser.o cp/ptree.o cp/rtti.o cp/typeck.o cp/cvt.o cp/except.o cp/friend.o 
cp/init.o cp/method.o cp/search.o cp/semantics.o cp/tree.o cp/repo.o cp/dump.o cp/optimize.o cp/mangle.o cp/cp-objcp-common.o cp/name-lookup.o cp/cxx-pretty-print.o cp/cp-cilkplus.o cp/cp-gimplify.o cp/cp-array-notation.o cp/lambda.o cp/vtable-class-hierarchy.o cp/constexpr.o cp/cp-ubsan.o attribs.o incpath.o c-family/c-common.o c-family/c-cppbuiltin.o c-family/c-dump.o c-family/c-format.o c-family/c-gimplify.o c-family/c-lex.o c-family/c-omp.o c-family/c-opts.o c-family/c-pch.o c-family/c-ppoutput.o c-family/c-pragma.o c-family/c-pretty-print.o c-family/c-semantics.o c-family/c-ada-spec.o c-family/c-cilkplus.o c-family/array-notation-common.o c-family/cilk.o c-family/c-ubsan.o i386-c.o glibc-c.o cc1plus-checksum.o libbackend.a main.o tree-browser.o libcommon-target.a libcommon.a ../libcpp/libcpp.a ../libdecnumber/libdecnumber.a libcommon.a ../libcpp/libcpp.a   ../libbacktrace/.libs/libbacktrace.a ../libiberty/libiberty.a ../libdecnumber/libdecnumber.a  -lisl -lmpc -lmpfr -lgmp -rdynamic -ldl  -lz
echo | /tmp/guix-build-gcc-cross-sans-libc-x86_64-unknown-linux-gnu-5.5.0.drv-0/build/./gcc/xgcc -B/tmp/guix-build-gcc-cross-sans-libc-x86_64-unknown-linux-gnu-5.5.0.drv-0/build/./gcc/ -E -dM - | \
  sed -n -e 's/^#define \([^_][a-zA-Z0-9_]*\).*/\1/p' \
         -e 's/^#define \(_[^_A-Z][a-zA-Z0-9_]*\).*/\1/p' | \
  sort -u > tmp-macro_list
/tmp/guix-build-gcc-cross-sans-libc-x86_64-unknown-linux-gnu-5.5.0.drv-0/build/./gcc/cc1: error while loading shared libraries: libisl.so.15: cannot open shared object file: No such file or directory
/gnu/store/icz3hd36aqpjz5slyp4hhr8wsfbgiml1-bash-minimal-4.4.12/bin/bash ../../gcc-5.5.0/gcc/../move-if-change tmp-macro_list macro_list
echo timestamp > s-macro_list
rm -rf include-fixed; mkdir include-fixed
chmod a+rx include-fixed
if [ -d ../prev-gcc ]; then \
  cd ../prev-gcc && \
  make real-install-headers-tar DESTDIR=`pwd`/../gcc/ \
    libsubdir=. ; \
else \
  set -e; for ml in `cat fixinc_list`; do \
    sysroot_headers_suffix=`echo ${ml} | sed -e 's/;.*$//'`; \
    multi_dir=`echo ${ml} | sed -e 's/^[^;]*;//'`; \
    fix_dir=include-fixed${multi_dir}; \
    if ! false && test ! -d `echo /usr/include | sed -e :a -e 's,[^/]*/\.\.\/,,' -e ta`; then \
      echo The directory that should contain system headers does not exist: >&2 ; \
      echo "  `echo /usr/include | sed -e :a -e 's,[^/]*/\.\.\/,,' -e ta`" >&2 ; \
      tooldir_sysinc=`echo "/gnu/store/7yk3imgyc20dxbq8zn4d61m95d6pyzhr-gcc-cross-sans-libc-x86_64-unknown-linux-gnu-5.5.0/lib/gcc/x86_64-unknown-linux-gnu/5.5.0/../../../../x86_64-unknown-linux-gnu/sys-include" | sed -e :a -e "s,[^/]*/\.\.\/,," -e ta`; \
      if test "x`echo /usr/include | sed -e :a -e 's,[^/]*/\.\.\/,,' -e ta`" = "x${tooldir_sysinc}"; \
      then sleep 1; else exit 1; fi; \
    fi; \
    /gnu/store/icz3hd36aqpjz5slyp4hhr8wsfbgiml1-bash-minimal-4.4.12/bin/bash ../../gcc-5.5.0/gcc/../mkinstalldirs ${fix_dir}; \
    chmod a+rx ${fix_dir} || true; \
    (TARGET_MACHINE='x86_64-unknown-linux-gnu'; srcdir=`cd ../../gcc-5.5.0/gcc; ${PWDCMD-pwd}`; \
      SHELL='/gnu/store/icz3hd36aqpjz5slyp4hhr8wsfbgiml1-bash-minimal-4.4.12/bin/bash'; MACRO_LIST=`${PWDCMD-pwd}`/macro_list ; \
      gcc_dir=`${PWDCMD-pwd}` ; \
      export TARGET_MACHINE srcdir SHELL MACRO_LIST && \
      cd ../build-x86_64-unknown-linux-gnu/fixincludes && \
      /gnu/store/icz3hd36aqpjz5slyp4hhr8wsfbgiml1-bash-minimal-4.4.12/bin/bash ./fixinc.sh "${gcc_dir}/${fix_dir}" \
        `echo /usr/include | sed -e :a -e 's,[^/]*/\.\.\/,,' -e ta`  ); \
    rm -f ${fix_dir}/syslimits.h; \
    if [ -f ${fix_dir}/limits.h ]; then \
      mv ${fix_dir}/limits.h ${fix_dir}/syslimits.h; \
    else \   
      cp ../../gcc-5.5.0/gcc/gsyslimits.h ${fix_dir}/syslimits.h; \
    fi; \
    chmod a+r ${fix_dir}/syslimits.h; \
  done; \
fi
The directory that should contain system headers does not exist:
  /usr/include
make[3]: *** [Makefile:2831: stmp-fixinc] Error 1
make[3]: *** Waiting for unfinished jobs....
make[3]: Leaving directory '/tmp/guix-build-gcc-cross-sans-libc-x86_64-unknown-linux-gnu-5.5.0.drv-0/build/gcc'
make[2]: *** [Makefile:4322: all-stage1-gcc] Error 2
make[2]: Leaving directory '/tmp/guix-build-gcc-cross-sans-libc-x86_64-unknown-linux-gnu-5.5.0.drv-0/build'
make[1]: *** [Makefile:15652: stage1-bubble] Error 2
make[1]: Leaving directory '/tmp/guix-build-gcc-cross-sans-libc-x86_64-unknown-linux-gnu-5.5.0.drv-0/build'
make: *** [Makefile:855: all] Error 2
phase `build' failed after 1398.8 seconds
builder for `/gnu/store/g5h8ch1lk9rgljdgrkykr4mhxibwwkj5-gcc-cross-sans-libc-x86_64-unknown-linux-gnu-5.5.0.drv' failed with exit code 1
@ build-failed /gnu/store/g5h8ch1lk9rgljdgrkykr4mhxibwwkj5-gcc-cross-sans-libc-x86_64-unknown-linux-gnu-5.5.0.drv - 1 builder for `/gnu/store/g5h8ch1lk9rgljdgrkykr4mhxibwwkj5-gcc-cross-sans-libc-x86_64-unknown-linux-gnu-5.5.0.drv' failed with exit code 1
--8<---------------cut here---------------end--------------->8---

Earlier in this bug report, on 2017/11/27, I reported that a command
like the following failed ("ERROR: In procedure load-thunk-from-memory:
No such file or directory"), even though using --no-grafts had been
suggested as a work-around:

    /pre-inst-env guix build --no-grafts --target=mips64el-linux-gnu \
        bootstrap-tarballs

By using git bisect, I was able to determine that the commit which
introduced that specific issue was
2acfe022a740f79b593348cc6362cc4ee8f33bb4, which updated
guile-static-stripped to 2.2.

In sum, the original errors are no longer occurring, which is great.
Now we need to fix the remaining problems listed above.

-- 
Chris