commit:     0af56bfa67625683611aee6b65262c0a9743df98
Author:     Benda Xu <heroxbd <AT> gentoo <DOT> org>
AuthorDate: Thu Jul  7 02:09:52 2016 +0000
Commit:     Benda XU <heroxbd <AT> gentoo <DOT> org>
CommitDate: Thu Jul  7 02:40:57 2016 +0000
URL:        https://gitweb.gentoo.org/repo/proj/prefix.git/commit/?id=0af56bfa

scripts/bootstrap-prefix.sh: support sys-libs/glibc.
  - lto of gcc should be disabled. ld points to the host dynamic
    loader and gcc points to the RAP one, ld cannot load the gcc
    lto plugin.

  - stage tools should be used first in stage3.

  - makeinfo, perl are faked.

  - no need to copy libgcc on RAP.
    ld.so of glibc does that.

  - install texinfo for glibc.

  - stage3 linker can only be compiled after compiler.

    otherwise stage2 gcc will mix host glibc headers with those of
    stage3.

 scripts/bootstrap-prefix.sh | 104 ++++++++++++++++++++++++++++++++++----------
 1 file changed, 81 insertions(+), 23 deletions(-)

diff --git a/scripts/bootstrap-prefix.sh b/scripts/bootstrap-prefix.sh
index 45c2552..9e3e4fd 100755
--- a/scripts/bootstrap-prefix.sh
+++ b/scripts/bootstrap-prefix.sh
@@ -1286,9 +1286,11 @@ bootstrap_stage2() {
        emerge_pkgs --nodeps "${pkgs[@]}" || return 1
        
        # Build a linker and compiler that live in ${ROOT}/tmp, but
-       # produce binaries in ${ROOT}.
+       # produce binaries in ${ROOT}. Debian multiarch supported by RAP
+       # needs ld to support sysroot.
        USE="${USE} -cxx" \
        TPREFIX="${ROOT}" \
+       EXTRA_ECONF=$(rapx --with-sysroot=/) \
        emerge_pkgs --nodeps ${linker} || return 1
 
        # gmp has cxx flag enabled by default. When dealing with a host
@@ -1296,6 +1298,7 @@ bootstrap_stage2() {
        # package.use to disable in the temporary prefix.  
        echo "dev-libs/gmp -cxx" >> "${ROOT}"/tmp/etc/portage/package.use
 
+       BOOTSTRAP_RAP_STAGE2=yes \
        EXTRA_ECONF="--disable-bootstrap" \
        GCC_MAKE_TARGET=all \
        TPREFIX="${ROOT}" \
@@ -1322,7 +1325,7 @@ bootstrap_stage2() {
                # multilib.eclass -- can't blame it at this point really)
                # do it ourselves here to make the bootstrap continue
                ( cd "${ROOT}"/tmp/usr/bin && ln -s clang ${CHOST}-clang && ln 
-s clang++ ${CHOST}-clang++ )
-       else
+       elif ! is-rap ; then
                # make sure the EPREFIX gcc shared libraries are there
                mkdir -p "${ROOT}"/usr/${CHOST}/lib/gcc
                cp "${ROOT}"/tmp/usr/${CHOST}/lib/gcc/* 
"${ROOT}"/usr/${CHOST}/lib/gcc
@@ -1363,6 +1366,8 @@ bootstrap_stage3() {
        unset CC CXX
 
        emerge_pkgs() {
+               # stage3 tools should be used first.
+               DEFAULT_PATH="${ROOT}"$(echo /{,tmp/}{,usr/}{s,}bin | sed "s, 
,:${ROOT},g") \
                EPREFIX="${ROOT}" \
                do_emerge_pkgs "$@"
        }
@@ -1370,25 +1375,63 @@ bootstrap_stage3() {
        # GCC sometimes decides that it needs to run makeinfo to update some
        # info pages from .texi files.  Obviously we don't care at this
        # stage and rather have it continue instead of abort the build
-       export MAKEINFO="echo makeinfo GNU texinfo 4.13"
-       
-       # Build a native compiler.
-       pkgs=(
-               $([[ ${CHOST} == *-aix* ]] && echo dev-libs/libiconv ) # bash 
dependency
-               sys-libs/ncurses
-               sys-libs/readline
-               app-shells/bash
-               sys-apps/sed
-               app-arch/xz-utils
-               sys-apps/gentoo-functions
-               sys-apps/baselayout-prefix
-               sys-devel/m4
-               sys-devel/flex
-               sys-devel/binutils-config
-               sys-libs/zlib
-               ${linker}
-       )
-       emerge_pkgs --nodeps "${pkgs[@]}" || return 1
+       [[ -x "${ROOT}"/usr/bin/makeinfo ]] || cat > "${ROOT}"/usr/bin/makeinfo 
<<-EOF
+               #!${ROOT}/bin/bash
+               echo "makeinfo GNU texinfo 4.13"
+               for a in \$@; do
+               case \$a in
+               --*) f=\$(echo "\$a" | sed -r 's,--.*=(.*),\1,') ;;
+               -*) ;;
+               *) f=\$a ;;
+               esac
+               [[ -e \$f ]] || touch \$f
+               done
+               EOF
+       chmod +x "${ROOT}"/usr/bin/makeinfo
+       export INSTALL_INFO="${ROOT}"/usr/bin/makeinfo
+
+       if is-rap ; then
+               # We need ${ROOT}/usr/bin/perl to merge glibc.
+               if [[ ! -x "${ROOT}"/usr/bin/perl ]]; then
+                       # trick "perl -V:apiversion" check of glibc-2.19.
+                       echo -e "#!${ROOT}/bin/sh\necho 'apiversion=9999'" > 
"${ROOT}"/usr/bin/perl
+                       chmod +x "${ROOT}"/usr/bin/perl
+               fi
+               # Tell dynamic loader the path of libgcc_s.so of stage2
+               if [[ ! -f "${ROOT}"/etc/ld.so.conf.d/stage2.conf ]]; then
+                       mkdir -p "${ROOT}"/etc/ld.so.conf.d
+                       dirname $(gcc -print-libgcc-file-name) > 
"${ROOT}"/etc/ld.so.conf.d/stage2.conf
+               fi
+
+               pkgs=(
+                       sys-apps/baselayout
+                       sys-apps/gentoo-functions
+                       sys-kernel/linux-headers
+                       sys-libs/glibc
+                       sys-libs/zlib
+               )
+
+               BOOTSTRAP_RAP=yes \
+               emerge_pkgs --nodeps "${pkgs[@]}" || return 1
+       else
+               pkgs=(
+                       $([[ ${CHOST} == *-aix* ]] && echo dev-libs/libiconv ) 
# bash dependency
+                       sys-libs/ncurses
+                       sys-libs/readline
+                       app-shells/bash
+                       sys-apps/sed
+                       app-arch/xz-utils
+                       sys-apps/gentoo-functions
+                       sys-apps/baselayout-prefix
+                       sys-devel/m4
+                       sys-devel/flex
+                       sys-devel/binutils-config
+                       sys-libs/zlib
+                       ${linker}
+               )
+
+               emerge_pkgs --nodeps "${pkgs[@]}" || return 1
+       fi
 
        # On some hosts, gcc gets confused now when it uses the new linker,
        # see for instance bug #575480.  While we would like to hide that
@@ -1403,11 +1446,23 @@ bootstrap_stage3() {
        ( cd "${ROOT}"/usr/bin && test ! -e python && ln -s 
"${ROOT}"/tmp/usr/bin/python2.7 )
        # in addition, avoid collisions
        rm -Rf "${ROOT}"/tmp/usr/lib/python2.7/site-packages/clang
+
+       RAP_DLINKER=$(echo "${ROOT}"/$(get_libdir)/ld*.so.[0-9])
        # try to get ourself out of the mudd, bug #575324
-       EXTRA_ECONF="--disable-compiler-version-checks" \
+       EXTRA_ECONF="--disable-compiler-version-checks $(rapx --disable-lto)" \
+       LDFLAGS="${LDFLAGS} $(rapx -Wl,--dynamic-linker=${RAP_DLINKER})" \
        emerge_pkgs --nodeps ${compiler} || return 1
-       ( cd "${ROOT}"/usr/bin && test ! -e python && rm -f python2.7 )
+       # undo libgcc_s.so path of stage2
 
+       rm -f "${ROOT}"/etc/ld.so.conf.d/stage2.conf
+       if is-rap ; then
+               "${ROOT}"/usr/sbin/ldconfig
+               # should be linked against stage3 zlib, and can only
+               # be compiled after gcc has the headers of Prefix glibc.
+               emerge_pkgs --nodeps sys-devel/binutils-config ${linker} || 
return 1
+       fi
+
+       ( cd "${ROOT}"/usr/bin && test ! -e python && rm -f python2.7 )
        # Use $ROOT tools where possible from now on.
        rm -f "${ROOT}"/bin/sh
        ln -s bash "${ROOT}"/bin/sh
@@ -1479,6 +1534,9 @@ bootstrap_stage3() {
        CPPFLAGS="-DGNUSTEP_BASE_VERSION" \
        CFLAGS= CXXFLAGS= USE="-git" emerge -u system || return 1
 
+       # TODO, glibc should depend on texinfo
+       is-rap && { emerge sys-apps/texinfo || return 1; }
+
        # remove anything that we don't need (compilers most likely)
        emerge --depclean
 

Reply via email to