On 1/17/21 4:08 PM, H.J. Lu wrote:
On Sun, Jan 17, 2021 at 1:06 PM Tom Honermann via Gcc <gcc@gcc.gnu.org> wrote:
Hi all.  I've been trying to build a custom gcc (trunk) with a custom
glibc (trunk) with support for C and C++ on x86_64 Linux and have so far
been unsuccessful at identifying a sequence of configure/make
invocations that completes successfully.  I'm not trying to build a
cross compiler.

The scenario I'm trying to satisfy is testing some changes to gcc, and
additional changes to libstdc++ that have new autoconf and header
dependencies on the presence of new functions in existing glibc headers.

The glibc installation I'm trying to use was built with:

     mkdir glibc-build
     cd glibc-build
     ../glibc/configure \
          CC=gcc \
          CXX=g++ \
          --prefix /.../glibc
     make && make install

For gcc, I've tried numerous variants of the following:

     mkdir gcc-build
     cd gcc-build
     ../gcc/configure \
          CC=gcc \
          CXX=g++ \
          --prefix /.../gcc \
          --disable-multilib \
          --enable-languages=c,c++ \
          --enable-checking=release \
          --disable-bootstrap \
          --disable-lto

Things I've tried include setting CFLAGS, CXXFLAGS, and LDFLAGS to
specify additional glibc paths, to specify alternate paths (via
-nostdinc/-nostdinc++), setting LIBRARY_PATH and CPATH, passing
--with-sysroot, passing --with-headers and --with-libs, passing
--with-native-system-header-dir, some of those in conjunction with
removing --disable-bootstrap, and wrapping gcc in a script that attempts
to substitute certain include paths.

The problem I'm having is that, in every attempt, the glibc headers and
libraries from under /usr end up getting used instead of the custom
glibc ones at some point leading to build failures.

Does anyone have a recipe available for doing this?
Try scripts/build-many-glibcs.py in glibc source.

Thank you for the suggestion.  I studied the script and tried using it, but it also encountered errors during the 2nd stage gcc build.  I didn't delve into those errors.

This is what ended up working for me:

   mkdir -p "$BINUTILS_BUILD_DIR"
   cd "$BINUTILS_BUILD_DIR"
   "../$BINUTILS_SOURCE_DIR/configure" \
      CC=gcc \
      CXX=g++ \
      --prefix "$INSTALL_DIR" \
      --with-sysroot="$INSTALL_DIR" \
      --disable-multilib \
   ;
   make -j 4 && make install
   cd -

   cd "$LINUX_SOURCE_DIR"
   make INSTALL_HDR_PATH="$INSTALL_DIR" headers_install
   cd -

   mkdir -p "$GLIBC_BUILD_DIR"
   cd "$GLIBC_BUILD_DIR"
   "../$GLIBC_SOURCE_DIR/configure" \
      CC=gcc \
      CXX=g++ \
      --prefix "$INSTALL_DIR" \
      --disable-multilib \
      --with-headers="$INSTALL_DIR/include" \
   ;
   make -j 4 && make install
   cd -

   # Fixup paths in libc.so and libm.so.  I wasn't able to find a
   combination of
   # 'configure --prefix' and 'make prefix=... DESTIDIR=...' that did
   the right thing.
   cp "$INSTALL_DIR/lib/libc.so" "$INSTALL_DIR/lib/libc.so.orig"
   sed -e "s%$INSTALL_DIR%%g" "$INSTALL_DIR/lib/libc.so.orig" >
   "$INSTALL_DIR/lib/libc.so"
   rm -f "$INSTALL_DIR/lib/libc.so.orig"
   cp "$INSTALL_DIR/lib/libm.so" "$INSTALL_DIR/lib/libm.so.orig"
   sed -e "s%$INSTALL_DIR%%g" "$INSTALL_DIR/lib/libm.so.orig" >
   "$INSTALL_DIR/lib/libm.so"
   rm -f "$INSTALL_DIR/lib/libm.so.orig"

   mkdir -p "$GCC_BUILD_DIR"
   cd "$GCC_BUILD_DIR"
   "../$GCC_SOURCE_DIR/configure" \
      CC=gcc \
      CXX=g++ \
      --prefix "$INSTALL_DIR" \
      --with-sysroot="$INSTALL_DIR" \
      --with-native-system-header-dir="/include" \
      --enable-languages=c,c++ \
      --disable-bootstrap \
      --disable-multilib \
      --enable-checking=release \
      --disable-lto \
   ;
   make -j 4 && make install
   cd -

Tom.

Reply via email to