This is the mail archive of the crossgcc@sourceware.org mailing list for the crossgcc project.

See the CrossGCC FAQ for lots more information.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] glibc: Refactor startfiles/headers into do_libc


# HG changeset patch
# User Bryan Hundven <bryanhundven@gmail.com>
# Date 1308555696 25200
# Node ID b25856d9153785d0f711206383480f0190aec363
# Parent  2377be750e83defa6d764bcb8cf6dbaf098a19f6
glibc: Refactor startfiles/headers into do_libc

The 'do_libc_start_files()' function was configuring libc differently then
'do_libc()'. This might be fine for arm(eb) or powerpc(64), but not for
mips(64).

Move the building of the libc start files and headers into do_libc, much like
how gcc handles stage1, stage2, and final toolchains.

diff -r 2377be750e83 -r b25856d91537 scripts/build/libc/glibc-eglibc.sh-common
--- a/scripts/build/libc/glibc-eglibc.sh-common	Mon Jun 13 22:54:29 2011 +0400
+++ b/scripts/build/libc/glibc-eglibc.sh-common	Mon Jun 20 00:41:36 2011 -0700
@@ -51,128 +51,30 @@
 
 # Build and install headers and start files
 do_libc_start_files() {
-    local src_dir="${CT_SRC_DIR}/${CT_LIBC}-${CT_LIBC_VERSION}"
-
-    CT_DoStep INFO "Installing C library headers & start files"
-
-    mkdir -p "${CT_BUILD_DIR}/build-libc-startfiles"
-    cd "${CT_BUILD_DIR}/build-libc-startfiles"
-
-    CT_DoLog EXTRA "Configuring C library"
-
-    case "${CT_LIBC}" in
-        eglibc)
-            if [ "${CT_EGLIBC_CUSTOM_CONFIG}" = "y" ]; then
-                CT_DoExecLog ALL cp "${CT_CONFIG_DIR}/eglibc.config" option-groups.config
-            fi
-            ;;
-    esac
-
-    cross_cc=$(CT_Which "${CT_TARGET}-gcc")
-    cross_cxx=$(CT_Which "${CT_TARGET}-g++")
-    cross_ar=$(CT_Which "${CT_TARGET}-ar")
-    cross_ranlib=$(CT_Which "${CT_TARGET}-ranlib")
-
-    CT_DoLog DEBUG "Using gcc for target: '${cross_cc}'"
-    CT_DoLog DEBUG "Using g++ for target: '${cross_cxx}'"
-    CT_DoLog DEBUG "Using ar for target: '${cross_ar}'"
-    CT_DoLog DEBUG "Using ranlib for target: '${cross_ranlib}'"
-
-    touch config.cache
-    if [ "${CT_LIBC_GLIBC_FORCE_UNWIND}" = "y" ]; then
-        echo "libc_cv_forced_unwind=yes" >>config.cache
-        echo "libc_cv_c_cleanup=yes" >>config.cache
-    fi
-
-    # Pre-seed the configparms file with values from the config option
-    printf "${CT_LIBC_GLIBC_CONFIGPARMS}\n" > configparms
-
-    CT_DoExecLog CFG                                    \
-    BUILD_CC="${CT_BUILD}-gcc"                          \
-    CC=${cross_cc}                                      \
-    CXX=${cross_cxx}                                    \
-    AR=${cross_ar}                                      \
-    RANLIB=${cross_ranlib}                              \
-    "${src_dir}/configure"                              \
-        --prefix=/usr                                   \
-        --with-headers="${CT_HEADERS_DIR}"              \
-        --build="${CT_BUILD}"                           \
-        --host="${CT_TARGET}"                           \
-        --cache-file="$(pwd)/config.cache"              \
-        --disable-profile                               \
-        --without-gd                                    \
-        --without-cvs                                   \
-        --enable-add-ons
-
-    CT_DoLog EXTRA "Installing C library headers"
-
-    # use the 'install-headers' makefile target to install the
-    # headers
-    CT_DoExecLog ALL make ${JOBSFLAGS}              \
-                     install_root=${CT_SYSROOT_DIR} \
-                     install-bootstrap-headers=yes  \
-                     install-headers
-
-    # For glibc, a few headers need to be manually installed
-    if [ "${CT_LIBC}" = "glibc" ]; then
-        # Two headers -- stubs.h and features.h -- aren't installed by install-headers,
-        # so do them by hand.  We can tolerate an empty stubs.h for the moment.
-        # See e.g. http://gcc.gnu.org/ml/gcc/2002-01/msg00900.html
-        mkdir -p "${CT_HEADERS_DIR}/gnu"
-        CT_DoExecLog ALL touch "${CT_HEADERS_DIR}/gnu/stubs.h"
-        CT_DoExecLog ALL cp -v "${CT_SRC_DIR}/glibc-${CT_LIBC_VERSION}/include/features.h"  \
-                               "${CT_HEADERS_DIR}/features.h"
-
-        # Building the bootstrap gcc requires either setting inhibit_libc, or
-        # having a copy of stdio_lim.h... see
-        # http://sources.redhat.com/ml/libc-alpha/2003-11/msg00045.html
-        CT_DoExecLog ALL cp -v bits/stdio_lim.h "${CT_HEADERS_DIR}/bits/stdio_lim.h"
-
-        # Following error building gcc-4.0.0's gcj:
-        #  error: bits/syscall.h: No such file or directory
-        # solved by following copy; see http://sourceware.org/ml/crossgcc/2005-05/msg00168.html
-        # but it breaks arm, see http://sourceware.org/ml/crossgcc/2006-01/msg00091.html
-        case "${CT_ARCH}" in
-            arm)    ;;
-            *)  CT_DoExecLog ALL cp -v "misc/syscall-list.h"            \
-                                       "${CT_HEADERS_DIR}/bits/syscall.h"
-                ;;
-        esac
-    fi
-
-    if [ "${CT_THREADS}" = "nptl" ]; then
-        CT_DoLog EXTRA "Installing C library start files"
-
-        # there are a few object files needed to link shared libraries,
-        # which we build and install by hand
-        CT_DoExecLog ALL mkdir -p "${CT_SYSROOT_DIR}/usr/lib"
-        CT_DoExecLog ALL make ${JOBSFLAGS} csu/subdir_lib
-        CT_DoExecLog ALL cp csu/crt1.o csu/crti.o csu/crtn.o \
-                            "${CT_SYSROOT_DIR}/usr/lib"
-
-        # Finally, 'libgcc_s.so' requires a 'libc.so' to link against.
-        # However, since we will never actually execute its code,
-        # it doesn't matter what it contains.  So, treating '/dev/null'
-        # as a C source file, we produce a dummy 'libc.so' in one step
-        CT_DoExecLog ALL "${cross_cc}" -nostdlib        \
-                                       -nostartfiles    \
-                                       -shared          \
-                                       -x c /dev/null   \
-                                       -o "${CT_SYSROOT_DIR}/usr/lib/libc.so"
-    fi # threads == nptl
-
-    CT_EndStep
+    # Start files and Headers should be configured the same way as the
+    # final libc, but built and installed differently.
+    do_libc startfile_mode=yes
 }
 
 # This function builds and install the full C library
 do_libc() {
     local src_dir="${CT_SRC_DIR}/${CT_LIBC}-${CT_LIBC_VERSION}"
+    local startfile_mode=no
     local extra_cc_args
     local -a extra_config
     local -a extra_make_args
     local glibc_cflags
 
-    CT_DoStep INFO "Installing C library"
+    while [ $# -ne 0 ]; do
+        eval "${1}"
+        shift
+    done
+
+    if [ "${startfile_mode}" = "yes" ]; then
+        CT_DoStep INFO "Installing C library headers & start files"
+    else
+        CT_DoStep INFO "Installing C library"
+    fi
 
     mkdir -p "${CT_BUILD_DIR}/build-libc"
     cd "${CT_BUILD_DIR}/build-libc"
@@ -316,16 +218,75 @@
             ;;
     esac
 
-    CT_DoLog EXTRA "Building C library"
-    CT_DoExecLog ALL make ${JOBSFLAGS}                      \
-                          "${extra_make_args[@]}"           \
-                          all
+    if [ "${startfile_mode}" = "yes" ]; then
+        CT_DoLog EXTRA "Installing C library headers"
 
-    CT_DoLog EXTRA "Installing C library"
-    CT_DoExecLog ALL make ${JOBSFLAGS}                      \
-                          "${extra_make_args[@]}"           \
-                          install_root="${CT_SYSROOT_DIR}"  \
-                          install
+        # use the 'install-headers' makefile target to install the
+        # headers
+        CT_DoExecLog ALL make ${JOBSFLAGS}              \
+                         install_root=${CT_SYSROOT_DIR} \
+                         install-bootstrap-headers=yes  \
+                         install-headers
+
+        # For glibc, a few headers need to be manually installed
+        if [ "${CT_LIBC}" = "glibc" ]; then
+            # Two headers -- stubs.h and features.h -- aren't installed by install-headers,
+            # so do them by hand.  We can tolerate an empty stubs.h for the moment.
+            # See e.g. http://gcc.gnu.org/ml/gcc/2002-01/msg00900.html
+            mkdir -p "${CT_HEADERS_DIR}/gnu"
+            CT_DoExecLog ALL touch "${CT_HEADERS_DIR}/gnu/stubs.h"
+            CT_DoExecLog ALL cp -v "${CT_SRC_DIR}/glibc-${CT_LIBC_VERSION}/include/features.h"  \
+                                   "${CT_HEADERS_DIR}/features.h"
+
+            # Building the bootstrap gcc requires either setting inhibit_libc, or
+            # having a copy of stdio_lim.h... see
+            # http://sources.redhat.com/ml/libc-alpha/2003-11/msg00045.html
+            CT_DoExecLog ALL cp -v bits/stdio_lim.h "${CT_HEADERS_DIR}/bits/stdio_lim.h"
+
+            # Following error building gcc-4.0.0's gcj:
+            #  error: bits/syscall.h: No such file or directory
+            # solved by following copy; see http://sourceware.org/ml/crossgcc/2005-05/msg00168.html
+            # but it breaks arm, see http://sourceware.org/ml/crossgcc/2006-01/msg00091.html
+            case "${CT_ARCH}" in
+                arm)    ;;
+                *)  CT_DoExecLog ALL cp -v "misc/syscall-list.h"            \
+                                           "${CT_HEADERS_DIR}/bits/syscall.h"
+                    ;;
+            esac
+        fi
+
+        if [ "${CT_THREADS}" = "nptl" ]; then
+            CT_DoLog EXTRA "Installing C library start files"
+
+            # there are a few object files needed to link shared libraries,
+            # which we build and install by hand
+            CT_DoExecLog ALL mkdir -p "${CT_SYSROOT_DIR}/usr/lib"
+            CT_DoExecLog ALL make ${JOBSFLAGS} csu/subdir_lib
+            CT_DoExecLog ALL cp csu/crt1.o csu/crti.o csu/crtn.o \
+                                "${CT_SYSROOT_DIR}/usr/lib"
+
+            # Finally, 'libgcc_s.so' requires a 'libc.so' to link against.
+            # However, since we will never actually execute its code,
+            # it doesn't matter what it contains.  So, treating '/dev/null'
+            # as a C source file, we produce a dummy 'libc.so' in one step
+            CT_DoExecLog ALL "${cross_cc}" -nostdlib        \
+                                           -nostartfiles    \
+                                           -shared          \
+                                           -x c /dev/null   \
+                                           -o "${CT_SYSROOT_DIR}/usr/lib/libc.so"
+        fi # threads == nptl
+    else # startfile_mode = no
+        CT_DoLog EXTRA "Building C library"
+        CT_DoExecLog ALL make ${JOBSFLAGS}                      \
+                              "${extra_make_args[@]}"           \
+                              all
+
+        CT_DoLog EXTRA "Installing C library"
+        CT_DoExecLog ALL make ${JOBSFLAGS}                      \
+                              "${extra_make_args[@]}"           \
+                              install_root="${CT_SYSROOT_DIR}"  \
+                              install
+    fi
 
     CT_EndStep
 }
@@ -384,3 +345,5 @@
             ;;
     esac
 }
+
+# vim: ts=4 sw=4 et ai syn=sh

--
For unsubscribe information see http://sourceware.org/lists.html#faq


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]