scripts/build/libc/uClibc.sh
changeset 2009 7e19c1de65cd
parent 2008 b13d0db6fa95
child 2033 ffc1121618fa
     1.1 --- a/scripts/build/libc/uClibc.sh	Sat Jul 03 00:17:54 2010 +0200
     1.2 +++ b/scripts/build/libc/uClibc.sh	Sat Jul 03 01:15:28 2010 +0200
     1.3 @@ -70,6 +70,7 @@
     1.4  # This functions installs uClibc's headers
     1.5  do_libc_headers() {
     1.6      local install_rule
     1.7 +    local cross
     1.8  
     1.9      CT_DoStep INFO "Installing C library headers"
    1.10  
    1.11 @@ -86,11 +87,23 @@
    1.12      # compiler tools to use.  Setting it to the empty string forces
    1.13      # use of the native build host tools, which we need at this
    1.14      # stage, as we don't have target tools yet.
    1.15 +    # BUT! With NPTL, we need a cross-compiler (and we have it)
    1.16 +    if [ "${CT_THREADS}" = "nptl" ]; then
    1.17 +        cross="${CT_TARGET}-"
    1.18 +    fi
    1.19 +
    1.20      CT_DoLog EXTRA "Applying configuration"
    1.21 -    CT_DoYes "" |CT_DoExecLog ALL make CROSS= PREFIX="${CT_SYSROOT_DIR}/" oldconfig
    1.22 +    CT_DoYes "" |CT_DoExecLog ALL               \
    1.23 +                 make CROSS="${cross}"          \
    1.24 +                 PREFIX="${CT_SYSROOT_DIR}/"    \
    1.25 +                 oldconfig
    1.26  
    1.27      CT_DoLog EXTRA "Building headers"
    1.28 -    CT_DoExecLog ALL make ${CT_LIBC_UCLIBC_VERBOSITY} CROSS= PREFIX="${CT_SYSROOT_DIR}/" headers
    1.29 +    CT_DoExecLog ALL                    \
    1.30 +    make ${CT_LIBC_UCLIBC_VERBOSITY}    \
    1.31 +         CROSS="${cross}"               \
    1.32 +         PREFIX="${CT_SYSROOT_DIR}/"    \
    1.33 +         headers
    1.34  
    1.35      if [ "${CT_LIBC_UCLIBC_0_9_30_or_later}" = "y" ]; then
    1.36          install_rule=install_headers
    1.37 @@ -99,7 +112,40 @@
    1.38      fi
    1.39  
    1.40      CT_DoLog EXTRA "Installing headers"
    1.41 -    CT_DoExecLog ALL make ${CT_LIBC_UCLIBC_VERBOSITY} CROSS= PREFIX="${CT_SYSROOT_DIR}/" "${install_rule}"
    1.42 +    CT_DoExecLog ALL                    \
    1.43 +    make ${CT_LIBC_UCLIBC_VERBOSITY}    \
    1.44 +         CROSS="${cross}"               \
    1.45 +         PREFIX="${CT_SYSROOT_DIR}/"    \
    1.46 +         ${install_rule}
    1.47 +
    1.48 +    if [ "${CT_THREADS}" = "nptl" ]; then
    1.49 +        CT_DoLog EXTRA "Building start files"
    1.50 +        CT_DoExecLog ALL                                    \
    1.51 +        make ${CT_LIBC_UCLIBC_PARALLEL:+${PARALLELMFLAGS}}  \
    1.52 +             CROSS="${cross}"                               \
    1.53 +             PREFIX="${CT_SYSROOT_DIR}/"                    \
    1.54 +             STRIPTOOL=true                                 \
    1.55 +             ${CT_LIBC_UCLIBC_VERBOSITY}                    \
    1.56 +             lib/crt1.o lib/crti.o lib/crtn.o
    1.57 +
    1.58 +        # From:  http://git.openembedded.org/cgit.cgi/openembedded/commit/?id=ad5668a7ac7e0436db92e55caaf3fdf782b6ba3b
    1.59 +        # libm.so is needed for ppc, as libgcc is linked against libm.so
    1.60 +        # No problem to create it for other archs.
    1.61 +        CT_DoLog EXTRA "Building dummy shared libs"
    1.62 +        CT_DoExecLog ALL "${cross}gcc" -nostdlib        \
    1.63 +                                       -nostartfiles    \
    1.64 +                                       -shared          \
    1.65 +                                       -x c /dev/null   \
    1.66 +                                       -o libdummy.so
    1.67 +
    1.68 +        CT_DoLog EXTRA "Installing start files"
    1.69 +        CT_DoExecLog ALL install -m 0644 lib/crt1.o lib/crti.o lib/crtn.o   \
    1.70 +                                         "${CT_SYSROOT_DIR}/usr/lib"
    1.71 +
    1.72 +        CT_DoLog EXTRA "Installing dummy shared libs"
    1.73 +        CT_DoExecLog ALL install -m 0755 libdummy.so "${CT_SYSROOT_DIR}/usr/lib/libc.so"
    1.74 +        CT_DoExecLog ALL install -m 0755 libdummy.so "${CT_SYSROOT_DIR}/usr/lib/libm.so"
    1.75 +    fi # CT_THREADS == nptl
    1.76  
    1.77      CT_EndStep
    1.78  }
    1.79 @@ -140,6 +186,13 @@
    1.80      # /Old/ versions can not build in //
    1.81      CT_DoLog EXTRA "Building C library"
    1.82      CT_DoExecLog ALL                                    \
    1.83 +    make -j1                                            \
    1.84 +         CROSS=${CT_TARGET}-                            \
    1.85 +         PREFIX="${CT_SYSROOT_DIR}/"                    \
    1.86 +         STRIPTOOL=true                                 \
    1.87 +         ${CT_LIBC_UCLIBC_VERBOSITY}                    \
    1.88 +         pregen
    1.89 +    CT_DoExecLog ALL                                    \
    1.90      make ${CT_LIBC_UCLIBC_PARALLEL:+${PARALLELMFLAGS}}  \
    1.91           CROSS=${CT_TARGET}-                            \
    1.92           PREFIX="${CT_SYSROOT_DIR}/"                    \
    1.93 @@ -344,13 +397,14 @@
    1.94  
    1.95      # Push the threading model
    1.96      # Note: we take into account all of the .28, .29, .30 and .31
    1.97 -    #       versions, here.
    1.98 +    #       versions, here. Even snapshots with NPTL.
    1.99      case "${CT_THREADS}:${CT_LIBC_UCLIBC_LNXTHRD}" in
   1.100 -        none:*)
   1.101 +        none:)
   1.102              cat <<-ENDSED
   1.103  				s/^UCLIBC_HAS_THREADS=y/# UCLIBC_HAS_THREADS is not set/
   1.104  				s/^LINUXTHREADS_OLD=y/# LINUXTHREADS_OLD is not set/
   1.105  				s/^LINUXTHREADS_NEW=y/# LINUXTHREADS_NEW is not set/
   1.106 +				s/^UCLIBC_HAS_THREADS_NATIVE=y/# UCLIBC_HAS_THREADS_NATIVE is not set/
   1.107  				ENDSED
   1.108              ;;
   1.109          linuxthreads:old)
   1.110 @@ -358,6 +412,7 @@
   1.111  				s/^# UCLIBC_HAS_THREADS is not set/UCLIBC_HAS_THREADS=y/
   1.112  				s/^# LINUXTHREADS_OLD is not set/LINUXTHREADS_OLD=y/
   1.113  				s/^LINUXTHREADS_NEW=y/# LINUXTHREADS_NEW is not set/
   1.114 +				s/^UCLIBC_HAS_THREADS_NATIVE=y/# UCLIBC_HAS_THREADS_NATIVE is not set/
   1.115  				ENDSED
   1.116              ;;
   1.117          linuxthreads:new)
   1.118 @@ -365,8 +420,21 @@
   1.119  				s/^# UCLIBC_HAS_THREADS is not set/UCLIBC_HAS_THREADS=y/
   1.120  				s/^LINUXTHREADS_OLD=y/# LINUXTHREADS_OLD is not set/
   1.121  				s/^# LINUXTHREADS_NEW is not set/LINUXTHREADS_NEW=y/
   1.122 +				s/^UCLIBC_HAS_THREADS_NATIVE=y/# UCLIBC_HAS_THREADS_NATIVE is not set/
   1.123  				ENDSED
   1.124              ;;
   1.125 +        nptl:)
   1.126 +            cat <<-ENDSED
   1.127 +				s/^HAS_NO_THREADS=y/# HAS_NO_THREADS is not set/
   1.128 +				s/^UCLIBC_HAS_THREADS=y/# UCLIBC_HAS_THREADS is not set/
   1.129 +				s/^LINUXTHREADS_OLD=y/# LINUXTHREADS_OLD is not set/
   1.130 +				s/^LINUXTHREADS_NEW=y/# LINUXTHREADS_NEW is not set/
   1.131 +				s/^# UCLIBC_HAS_THREADS_NATIVE is not set/UCLIBC_HAS_THREADS_NATIVE=y/
   1.132 +				ENDSED
   1.133 +            ;;
   1.134 +        *)
   1.135 +            CT_Abort "Incorrect thread settings: CT_THREADS='${CT_THREAD}' CT_LIBC_UCLIBC_LNXTHRD='${CT_LIBC_UCLIBC_LNXTHRD}'"
   1.136 +            ;;
   1.137      esac
   1.138  
   1.139      # Always build the libpthread_db