scripts/build/libc/newlib.sh
author "Yann E. MORIN" <yann.morin.1998@free.fr>
Mon Feb 13 21:47:25 2012 +0100 (2012-02-13)
changeset 2883 cea814c9932a
parent 2787 85477445af56
child 2895 86ea5204e9ce
permissions -rw-r--r--
libc/glibc: do not consume parameters when parsing them

Currently, there are two constructs used to parse arguments in
glibc backends, one that consumes args as they are parsed, and
one that does not.

Always use the construct that does not eat args as they are parsed.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
     1 # This file adds functions to build the Newlib C library
     2 # Copyright 2009 DoréDevelopment
     3 # Licensed under the GPL v2. See COPYING in the root of this package
     4 #
     5 # Edited by Martin Lund <mgl@doredevelopment.dk>
     6 #
     7 
     8 libc_newlib_version() {
     9     if [ -z "${CT_LIBC_NEWLIB_CVS}" ]; then
    10         echo "${CT_LIBC_VERSION}"
    11     else
    12         echo "cvs${CT_LIBC_VERSION:+-${CT_LIBC_VERSION}}"
    13     fi
    14 }
    15 
    16 do_libc_get() {
    17     local libc_src
    18     local avr32headers_src
    19 
    20     libc_src="ftp://sources.redhat.com/pub/newlib"
    21     avr32headers_src="http://dev.doredevelopment.dk/avr32-toolchain/sources"
    22 
    23     if [ -z "${CT_LIBC_NEWLIB_CVS}" ]; then
    24         CT_GetFile "newlib-${CT_LIBC_VERSION}" ${libc_src}
    25     else
    26         CT_GetCVS "newlib-$(libc_newlib_version)"                   \
    27                   ":pserver:anoncvs@sources.redhat.com:/cvs/src"    \
    28                   "newlib"                                          \
    29                   "${CT_LIBC_VERSION}"                              \
    30                   "newlib-$(libc_newlib_version)=src"
    31     fi
    32 
    33     if [ "${CT_ATMEL_AVR32_HEADERS}" = "y" ]; then
    34         CT_GetFile "avr32headers" ${avr32headers_src}
    35     fi
    36 }
    37 
    38 do_libc_extract() {
    39     CT_Extract "newlib-$(libc_newlib_version)"
    40     CT_Patch "newlib" "$(libc_newlib_version)"
    41 
    42     if [ "${CT_ATMEL_AVR32_HEADERS}" = "y" ]; then
    43         CT_Extract "avr32headers"
    44     fi
    45 }
    46 
    47 do_libc_check_config() {
    48     :
    49 }
    50 
    51 do_libc_start_files() {
    52     local -a newlib_opts
    53 
    54     CT_DoStep INFO "Installing C library"
    55 
    56     mkdir -p "${CT_BUILD_DIR}/build-libc"
    57     cd "${CT_BUILD_DIR}/build-libc"
    58 
    59     CT_DoLog EXTRA "Configuring C library"
    60 
    61     if [ "${CT_LIBC_NEWLIB_IO_C99FMT}" = "y" ]; then
    62         newlib_opts+=( "--enable-newlib-io-c99-formats" )
    63     else
    64         newlib_opts+=( "--disable-newlib-io-c99-formats" )
    65     fi
    66     if [ "${CT_LIBC_NEWLIB_IO_LL}" = "y" ]; then
    67         newlib_opts+=( "--enable-newlib-io-long-long" )
    68     else
    69         newlib_opts+=( "--disable-newlib-io-long-long" )
    70     fi
    71     if [ "${CT_LIBC_NEWLIB_IO_FLOAT}" = "y" ]; then
    72         newlib_opts+=( "--enable-newlib-io-float" )
    73         if [ "${CT_LIBC_NEWLIB_IO_LDBL}" = "y" ]; then
    74             newlib_opts+=( "--enable-newlib-io-long-double" )
    75         else
    76             newlib_opts+=( "--disable-newlib-io-long-double" )
    77         fi
    78     else
    79         newlib_opts+=( "--disable-newlib-io-float" )
    80         newlib_opts+=( "--disable-newlib-io-long-double" )
    81     fi
    82     if [ "${CT_LIBC_NEWLIB_DISABLE_SUPPLIED_SYSCALLS}" = "y" ]; then
    83         newlib_opts+=( "--disable-newlib-supplied-syscalls" )
    84     else
    85         newlib_opts+=( "--enable-newlib-supplied-syscalls" )
    86     fi
    87 
    88     [ "${CT_LIBC_NEWLIB_ENABLE_TARGET_OPTSPACE}" = "y" ] && newlib_opts+=("--enable-target-optspace")
    89 
    90     # Note: newlib handles the build/host/target a little bit differently
    91     # than one would expect:
    92     #   build  : not used
    93     #   host   : the machine building newlib
    94     #   target : the machine newlib runs on
    95     CT_DoExecLog CFG                                    \
    96     CC_FOR_BUILD="${CT_BUILD}-gcc"                      \
    97     CFLAGS_FOR_TARGET="${CT_TARGET_CFLAGS}"             \
    98     AR=${CT_TARGET}-ar                                  \
    99     RANLIB=${CT_TARGET}-ranlib                          \
   100     "${CT_SRC_DIR}/newlib-$(libc_newlib_version)/configure" \
   101         --host=${CT_BUILD}                              \
   102         --target=${CT_TARGET}                           \
   103         --prefix=${CT_PREFIX_DIR}                       \
   104         "${newlib_opts[@]}"                             \
   105         "${CT_LIBC_NEWLIB_EXTRA_CONFIG_ARRAY[@]}"
   106 
   107     CT_DoLog EXTRA "Building C library"
   108     CT_DoExecLog ALL make ${JOBSFLAGS}
   109 
   110     CT_DoLog EXTRA "Installing C library"
   111     CT_DoExecLog ALL make install install_root="${CT_SYSROOT_DIR}"
   112 
   113     if [ "${CT_BUILD_MANUALS}" = "y" ]; then
   114         local -a doc_dir="${CT_BUILD_DIR}/build-libc/${CT_TARGET}"
   115 
   116         CT_DoLog EXTRA "Building and installing the C library manual"
   117         CT_DoExecLog ALL make pdf html
   118 
   119         # NEWLIB install-{pdf.html} fail for some versions
   120         CT_DoExecLog ALL mkdir -p "${CT_PREFIX_DIR}/share/doc/newlib"
   121         CT_DoExecLog ALL cp -av "${doc_dir}/newlib/libc/libc.pdf"   \
   122                                 "${doc_dir}/newlib/libm/libm.pdf"   \
   123                                 "${doc_dir}/newlib/libc/libc.html"  \
   124                                 "${doc_dir}/newlib/libm/libm.html"  \
   125                                 "${CT_PREFIX_DIR}/share/doc/newlib"
   126     fi
   127 
   128     CT_EndStep
   129 }
   130 
   131 do_libc() {
   132     :
   133 }
   134 
   135 do_libc_finish() {
   136     CT_DoStep INFO "Finishing C library"
   137     
   138     if [ "${CT_ATMEL_AVR32_HEADERS}" = "y" ]; then
   139         CT_DoLog EXTRA "Installing Atmel's AVR32 headers"
   140         CT_DoExecLog ALL cp -r ${CT_SRC_DIR}/avr32headers "${CT_PREFIX_DIR}/${CT_TARGET}/include/avr32"
   141     fi
   142 
   143     CT_EndStep
   144 }