libc/uClibc: enable NPTL for snapshots
author"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sat Jul 03 01:15:28 2010 +0200 (2010-07-03)
changeset 20097e19c1de65cd
parent 2008 b13d0db6fa95
child 2011 ab0543fc0ef0
libc/uClibc: enable NPTL for snapshots

Recently, NPTL has matured a lot in uClibc, and more and more
people are interested to at least give it a try. So enable it.
config/libc/uClibc.in
config/libc/uClibc.in.2
scripts/build/libc/uClibc.sh
     1.1 --- a/config/libc/uClibc.in	Sat Jul 03 00:17:54 2010 +0200
     1.2 +++ b/config/libc/uClibc.in	Sat Jul 03 01:15:28 2010 +0200
     1.3 @@ -45,15 +45,22 @@
     1.4      prompt "0.9.28.3 (OBSOLETE)"
     1.5      depends on OBSOLETE
     1.6  
     1.7 +# As of today (20100702) we can be pretty sure that every
     1.8 +# snapshots made since a month ago are post -0.9.30.
     1.9 +
    1.10  config LIBC_V_snapshot
    1.11      bool
    1.12      prompt "latest snapshot (EXPERIMENTAL)"
    1.13      depends on EXPERIMENTAL
    1.14 +    select LIBC_SUPPORT_NPTL
    1.15 +    select LIBC_UCLIBC_0_9_30_or_later
    1.16  
    1.17  config LIBC_V_specific_date
    1.18      bool
    1.19      prompt "<specific date> (EXPERIMENTAL)"
    1.20      depends on EXPERIMENTAL
    1.21 +    select LIBC_SUPPORT_NPTL
    1.22 +    select LIBC_UCLIBC_0_9_30_or_later
    1.23  
    1.24  endchoice
    1.25  
     2.1 --- a/config/libc/uClibc.in.2	Sat Jul 03 00:17:54 2010 +0200
     2.2 +++ b/config/libc/uClibc.in.2	Sat Jul 03 01:15:28 2010 +0200
     2.3 @@ -28,9 +28,11 @@
     2.4  
     2.5  endchoice
     2.6  
     2.7 +endif # THREADS_LINUXTHREADS
     2.8 +
     2.9  config LIBC_UCLIBC_LNXTHRD
    2.10      string
    2.11 +    default ""      if THREADS_NONE
    2.12 +    default ""      if THREADS_NPTL
    2.13      default "old"   if LIBC_UCLIBC_LNXTHRD_OLD
    2.14      default "new"   if LIBC_UCLIBC_LNXTHRD_NEW
    2.15 -
    2.16 -endif # THREADS_LINUXTHREADS
     3.1 --- a/scripts/build/libc/uClibc.sh	Sat Jul 03 00:17:54 2010 +0200
     3.2 +++ b/scripts/build/libc/uClibc.sh	Sat Jul 03 01:15:28 2010 +0200
     3.3 @@ -70,6 +70,7 @@
     3.4  # This functions installs uClibc's headers
     3.5  do_libc_headers() {
     3.6      local install_rule
     3.7 +    local cross
     3.8  
     3.9      CT_DoStep INFO "Installing C library headers"
    3.10  
    3.11 @@ -86,11 +87,23 @@
    3.12      # compiler tools to use.  Setting it to the empty string forces
    3.13      # use of the native build host tools, which we need at this
    3.14      # stage, as we don't have target tools yet.
    3.15 +    # BUT! With NPTL, we need a cross-compiler (and we have it)
    3.16 +    if [ "${CT_THREADS}" = "nptl" ]; then
    3.17 +        cross="${CT_TARGET}-"
    3.18 +    fi
    3.19 +
    3.20      CT_DoLog EXTRA "Applying configuration"
    3.21 -    CT_DoYes "" |CT_DoExecLog ALL make CROSS= PREFIX="${CT_SYSROOT_DIR}/" oldconfig
    3.22 +    CT_DoYes "" |CT_DoExecLog ALL               \
    3.23 +                 make CROSS="${cross}"          \
    3.24 +                 PREFIX="${CT_SYSROOT_DIR}/"    \
    3.25 +                 oldconfig
    3.26  
    3.27      CT_DoLog EXTRA "Building headers"
    3.28 -    CT_DoExecLog ALL make ${CT_LIBC_UCLIBC_VERBOSITY} CROSS= PREFIX="${CT_SYSROOT_DIR}/" headers
    3.29 +    CT_DoExecLog ALL                    \
    3.30 +    make ${CT_LIBC_UCLIBC_VERBOSITY}    \
    3.31 +         CROSS="${cross}"               \
    3.32 +         PREFIX="${CT_SYSROOT_DIR}/"    \
    3.33 +         headers
    3.34  
    3.35      if [ "${CT_LIBC_UCLIBC_0_9_30_or_later}" = "y" ]; then
    3.36          install_rule=install_headers
    3.37 @@ -99,7 +112,40 @@
    3.38      fi
    3.39  
    3.40      CT_DoLog EXTRA "Installing headers"
    3.41 -    CT_DoExecLog ALL make ${CT_LIBC_UCLIBC_VERBOSITY} CROSS= PREFIX="${CT_SYSROOT_DIR}/" "${install_rule}"
    3.42 +    CT_DoExecLog ALL                    \
    3.43 +    make ${CT_LIBC_UCLIBC_VERBOSITY}    \
    3.44 +         CROSS="${cross}"               \
    3.45 +         PREFIX="${CT_SYSROOT_DIR}/"    \
    3.46 +         ${install_rule}
    3.47 +
    3.48 +    if [ "${CT_THREADS}" = "nptl" ]; then
    3.49 +        CT_DoLog EXTRA "Building start files"
    3.50 +        CT_DoExecLog ALL                                    \
    3.51 +        make ${CT_LIBC_UCLIBC_PARALLEL:+${PARALLELMFLAGS}}  \
    3.52 +             CROSS="${cross}"                               \
    3.53 +             PREFIX="${CT_SYSROOT_DIR}/"                    \
    3.54 +             STRIPTOOL=true                                 \
    3.55 +             ${CT_LIBC_UCLIBC_VERBOSITY}                    \
    3.56 +             lib/crt1.o lib/crti.o lib/crtn.o
    3.57 +
    3.58 +        # From:  http://git.openembedded.org/cgit.cgi/openembedded/commit/?id=ad5668a7ac7e0436db92e55caaf3fdf782b6ba3b
    3.59 +        # libm.so is needed for ppc, as libgcc is linked against libm.so
    3.60 +        # No problem to create it for other archs.
    3.61 +        CT_DoLog EXTRA "Building dummy shared libs"
    3.62 +        CT_DoExecLog ALL "${cross}gcc" -nostdlib        \
    3.63 +                                       -nostartfiles    \
    3.64 +                                       -shared          \
    3.65 +                                       -x c /dev/null   \
    3.66 +                                       -o libdummy.so
    3.67 +
    3.68 +        CT_DoLog EXTRA "Installing start files"
    3.69 +        CT_DoExecLog ALL install -m 0644 lib/crt1.o lib/crti.o lib/crtn.o   \
    3.70 +                                         "${CT_SYSROOT_DIR}/usr/lib"
    3.71 +
    3.72 +        CT_DoLog EXTRA "Installing dummy shared libs"
    3.73 +        CT_DoExecLog ALL install -m 0755 libdummy.so "${CT_SYSROOT_DIR}/usr/lib/libc.so"
    3.74 +        CT_DoExecLog ALL install -m 0755 libdummy.so "${CT_SYSROOT_DIR}/usr/lib/libm.so"
    3.75 +    fi # CT_THREADS == nptl
    3.76  
    3.77      CT_EndStep
    3.78  }
    3.79 @@ -140,6 +186,13 @@
    3.80      # /Old/ versions can not build in //
    3.81      CT_DoLog EXTRA "Building C library"
    3.82      CT_DoExecLog ALL                                    \
    3.83 +    make -j1                                            \
    3.84 +         CROSS=${CT_TARGET}-                            \
    3.85 +         PREFIX="${CT_SYSROOT_DIR}/"                    \
    3.86 +         STRIPTOOL=true                                 \
    3.87 +         ${CT_LIBC_UCLIBC_VERBOSITY}                    \
    3.88 +         pregen
    3.89 +    CT_DoExecLog ALL                                    \
    3.90      make ${CT_LIBC_UCLIBC_PARALLEL:+${PARALLELMFLAGS}}  \
    3.91           CROSS=${CT_TARGET}-                            \
    3.92           PREFIX="${CT_SYSROOT_DIR}/"                    \
    3.93 @@ -344,13 +397,14 @@
    3.94  
    3.95      # Push the threading model
    3.96      # Note: we take into account all of the .28, .29, .30 and .31
    3.97 -    #       versions, here.
    3.98 +    #       versions, here. Even snapshots with NPTL.
    3.99      case "${CT_THREADS}:${CT_LIBC_UCLIBC_LNXTHRD}" in
   3.100 -        none:*)
   3.101 +        none:)
   3.102              cat <<-ENDSED
   3.103  				s/^UCLIBC_HAS_THREADS=y/# UCLIBC_HAS_THREADS is not set/
   3.104  				s/^LINUXTHREADS_OLD=y/# LINUXTHREADS_OLD is not set/
   3.105  				s/^LINUXTHREADS_NEW=y/# LINUXTHREADS_NEW is not set/
   3.106 +				s/^UCLIBC_HAS_THREADS_NATIVE=y/# UCLIBC_HAS_THREADS_NATIVE is not set/
   3.107  				ENDSED
   3.108              ;;
   3.109          linuxthreads:old)
   3.110 @@ -358,6 +412,7 @@
   3.111  				s/^# UCLIBC_HAS_THREADS is not set/UCLIBC_HAS_THREADS=y/
   3.112  				s/^# LINUXTHREADS_OLD is not set/LINUXTHREADS_OLD=y/
   3.113  				s/^LINUXTHREADS_NEW=y/# LINUXTHREADS_NEW is not set/
   3.114 +				s/^UCLIBC_HAS_THREADS_NATIVE=y/# UCLIBC_HAS_THREADS_NATIVE is not set/
   3.115  				ENDSED
   3.116              ;;
   3.117          linuxthreads:new)
   3.118 @@ -365,8 +420,21 @@
   3.119  				s/^# UCLIBC_HAS_THREADS is not set/UCLIBC_HAS_THREADS=y/
   3.120  				s/^LINUXTHREADS_OLD=y/# LINUXTHREADS_OLD is not set/
   3.121  				s/^# LINUXTHREADS_NEW is not set/LINUXTHREADS_NEW=y/
   3.122 +				s/^UCLIBC_HAS_THREADS_NATIVE=y/# UCLIBC_HAS_THREADS_NATIVE is not set/
   3.123  				ENDSED
   3.124              ;;
   3.125 +        nptl:)
   3.126 +            cat <<-ENDSED
   3.127 +				s/^HAS_NO_THREADS=y/# HAS_NO_THREADS is not set/
   3.128 +				s/^UCLIBC_HAS_THREADS=y/# UCLIBC_HAS_THREADS is not set/
   3.129 +				s/^LINUXTHREADS_OLD=y/# LINUXTHREADS_OLD is not set/
   3.130 +				s/^LINUXTHREADS_NEW=y/# LINUXTHREADS_NEW is not set/
   3.131 +				s/^# UCLIBC_HAS_THREADS_NATIVE is not set/UCLIBC_HAS_THREADS_NATIVE=y/
   3.132 +				ENDSED
   3.133 +            ;;
   3.134 +        *)
   3.135 +            CT_Abort "Incorrect thread settings: CT_THREADS='${CT_THREAD}' CT_LIBC_UCLIBC_LNXTHRD='${CT_LIBC_UCLIBC_LNXTHRD}'"
   3.136 +            ;;
   3.137      esac
   3.138  
   3.139      # Always build the libpthread_db