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