scripts/build/libc/uClibc.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Wed May 18 23:00:46 2011 +0200 (2011-05-18)
changeset 2467 200836977ce6
parent 2278 e86826b8621a
child 2578 35afb309f957
permissions -rw-r--r--
config: rename variables that are arrays

Make it explicit that a variable is an array bu the name of the variable.
It will be used later when .config gets munged to allow both multiple
arguments and arguments with spaces at the same time to be passed from the
configuration down to the build scripts.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
yann@850
     1
# This file declares functions to install the uClibc C library
yann@850
     2
# Copyright 2007 Yann E. MORIN
yann@850
     3
# Licensed under the GPL v2. See COPYING in the root of this package
yann@850
     4
yann@2037
     5
# This is a constant because it does not change very often.
yann@2037
     6
# We're in 2010, and are still using data from 7 years ago.
yann@2037
     7
uclibc_locales_version=030818
yann@2081
     8
uclibc_local_tarball="uClibc-locale-${uclibc_locales_version}"
yann@2037
     9
yann@850
    10
# Download uClibc
yann@850
    11
do_libc_get() {
yann@850
    12
    libc_src="http://www.uclibc.org/downloads
yann@850
    13
              http://www.uclibc.org/downloads/snapshots
yann@850
    14
              http://www.uclibc.org/downloads/old-releases"
yann@850
    15
    # For uClibc, we have almost every thing: releases, and snapshots
yann@850
    16
    # for the last month or so. We'll have to deal with svn revisions
yann@850
    17
    # later...
yann@1123
    18
    CT_GetFile "uClibc-${CT_LIBC_VERSION}" ${libc_src}
yann@850
    19
    # uClibc locales
yann@2036
    20
    if [ "${CT_LIBC_UCLIBC_LOCALES_PREGEN_DATA}" = "y" ]; then
yann@2037
    21
        CT_GetFile "${uclibc_local_tarball}" ${libc_src}
yann@1126
    22
    fi
yann@850
    23
yann@850
    24
    return 0
yann@850
    25
}
yann@850
    26
yann@2008
    27
libc_uclibc_src_dir() {
bryanhundven@2238
    28
    if [    -z "${CT_LIBC_UCLIBC_V_snapshot}"      \
bryanhundven@2238
    29
         -a -z "${CT_LIBC_UCLIBC_V_specific_date}" \
yann@2008
    30
       ]; then
yann@2008
    31
        echo "${CT_SRC_DIR}/uClibc-${CT_LIBC_VERSION}"
yann@2008
    32
    else
yann@2008
    33
        echo "${CT_SRC_DIR}/uClibc"
yann@2008
    34
    fi
yann@2008
    35
}
yann@2008
    36
yann@850
    37
# Extract uClibc
yann@850
    38
do_libc_extract() {
yann@1126
    39
    CT_Extract "uClibc-${CT_LIBC_VERSION}"
yann@2008
    40
    # Don't patch snapshots
bryanhundven@2238
    41
    if [    -z "${CT_LIBC_UCLIBC_V_snapshot}"      \
bryanhundven@2238
    42
         -a -z "${CT_LIBC_UCLIBC_V_specific_date}" \
yann@2008
    43
       ]; then
yann@2008
    44
        CT_Patch "uClibc" "${CT_LIBC_VERSION}"
yann@2008
    45
    fi
yann@1126
    46
yann@850
    47
    # uClibc locales
yann@2036
    48
    # Extracting pregen locales ourselves is kinda
yann@2036
    49
    # broken, so just link it in place...
yann@2036
    50
    if [    "${CT_LIBC_UCLIBC_LOCALES_PREGEN_DATA}" = "y"           \
yann@2037
    51
         -a ! -f "${CT_SRC_DIR}/.${uclibc_local_tarball}.extracted" ]; then
yann@2008
    52
        CT_Pushd "$(libc_uclibc_src_dir)/extra/locale"
yann@2037
    53
        CT_DoExecLog ALL ln -s "${CT_TARBALLS_DIR}/${uclibc_local_tarball}.tgz" .
yann@1123
    54
        CT_Popd
yann@2037
    55
        touch "${CT_SRC_DIR}/.${uclibc_local_tarball}.extracted"
yann@1123
    56
    fi
yann@850
    57
yann@850
    58
    return 0
yann@850
    59
}
yann@850
    60
yann@850
    61
# Check that uClibc has been previously configured
yann@850
    62
do_libc_check_config() {
yann@850
    63
    CT_DoStep INFO "Checking C library configuration"
yann@850
    64
yann@850
    65
    CT_TestOrAbort "You did not provide a uClibc config file!" -n "${CT_LIBC_UCLIBC_CONFIG_FILE}" -a -f "${CT_LIBC_UCLIBC_CONFIG_FILE}"
yann@850
    66
yann@1247
    67
    if grep -E '^KERNEL_SOURCE=' "${CT_LIBC_UCLIBC_CONFIG_FILE}" >/dev/null 2>&1; then
yann@850
    68
        CT_DoLog WARN "Your uClibc version refers to the kernel _sources_, which is bad."
yann@850
    69
        CT_DoLog WARN "I can't guarantee that our little hack will work. Please try to upgrade."
yann@850
    70
    fi
yann@850
    71
yann@850
    72
    CT_DoLog EXTRA "Munging uClibc configuration"
yann@1272
    73
    mungeuClibcConfig "${CT_LIBC_UCLIBC_CONFIG_FILE}" "${CT_CONFIG_DIR}/uClibc.config"
yann@850
    74
yann@850
    75
    CT_EndStep
yann@850
    76
}
yann@850
    77
yann@2268
    78
# Build and install headers and start files
yann@2268
    79
do_libc_start_files() {
yann@1326
    80
    local install_rule
yann@2009
    81
    local cross
yann@1326
    82
yann@850
    83
    CT_DoStep INFO "Installing C library headers"
yann@850
    84
yann@1678
    85
    # Simply copy files until uClibc has the ability to build out-of-tree
yann@1678
    86
    CT_DoLog EXTRA "Copying sources to build dir"
yann@2008
    87
    CT_DoExecLog ALL cp -av "$(libc_uclibc_src_dir)"            \
yann@1678
    88
                            "${CT_BUILD_DIR}/build-libc-headers"
yann@850
    89
    cd "${CT_BUILD_DIR}/build-libc-headers"
yann@850
    90
yann@850
    91
    # Retrieve the config file
yann@1678
    92
    CT_DoExecLog ALL cp "${CT_CONFIG_DIR}/uClibc.config" .config
yann@850
    93
yann@850
    94
    # uClibc uses the CROSS environment variable as a prefix to the
yann@850
    95
    # compiler tools to use.  Setting it to the empty string forces
yann@850
    96
    # use of the native build host tools, which we need at this
yann@850
    97
    # stage, as we don't have target tools yet.
yann@2009
    98
    # BUT! With NPTL, we need a cross-compiler (and we have it)
yann@2009
    99
    if [ "${CT_THREADS}" = "nptl" ]; then
yann@2009
   100
        cross="${CT_TARGET}-"
yann@2009
   101
    fi
yann@2009
   102
yann@2037
   103
    # Force the date of the pregen locale data, as the
yann@2037
   104
    # newer ones that are referenced are not available
yann@850
   105
    CT_DoLog EXTRA "Applying configuration"
yann@2038
   106
    CT_DoYes "" |CT_DoExecLog ALL                                   \
yann@2038
   107
                 make CROSS="${cross}"                              \
yann@2038
   108
                 PREFIX="${CT_SYSROOT_DIR}/"                        \
yann@2037
   109
                 LOCALE_DATA_FILENAME="${uclibc_local_tarball}.tgz" \
yann@2009
   110
                 oldconfig
yann@850
   111
yann@850
   112
    CT_DoLog EXTRA "Building headers"
yann@2038
   113
    CT_DoExecLog ALL                                        \
yann@2038
   114
    make ${CT_LIBC_UCLIBC_VERBOSITY}                        \
yann@2038
   115
         CROSS="${cross}"                                   \
yann@2038
   116
         PREFIX="${CT_SYSROOT_DIR}/"                        \
yann@2037
   117
         LOCALE_DATA_FILENAME="${uclibc_local_tarball}.tgz" \
yann@2009
   118
         headers
yann@850
   119
yann@1326
   120
    if [ "${CT_LIBC_UCLIBC_0_9_30_or_later}" = "y" ]; then
yann@1326
   121
        install_rule=install_headers
yann@1326
   122
    else
yann@1326
   123
        install_rule=install_dev
yann@1326
   124
    fi
yann@1326
   125
yann@850
   126
    CT_DoLog EXTRA "Installing headers"
yann@2038
   127
    CT_DoExecLog ALL                                        \
yann@2038
   128
    make ${CT_LIBC_UCLIBC_VERBOSITY}                        \
yann@2038
   129
         CROSS="${cross}"                                   \
yann@2038
   130
         PREFIX="${CT_SYSROOT_DIR}/"                        \
yann@2037
   131
         LOCALE_DATA_FILENAME="${uclibc_local_tarball}.tgz" \
yann@2009
   132
         ${install_rule}
yann@2009
   133
yann@2009
   134
    if [ "${CT_THREADS}" = "nptl" ]; then
yann@2009
   135
        CT_DoLog EXTRA "Building start files"
yann@2038
   136
        CT_DoExecLog ALL                                        \
yann@2275
   137
        make ${CT_LIBC_UCLIBC_PARALLEL:+${JOBSFLAGS}}           \
yann@2038
   138
             CROSS="${cross}"                                   \
yann@2038
   139
             PREFIX="${CT_SYSROOT_DIR}/"                        \
yann@2038
   140
             STRIPTOOL=true                                     \
yann@2038
   141
             ${CT_LIBC_UCLIBC_VERBOSITY}                        \
yann@2037
   142
             LOCALE_DATA_FILENAME="${uclibc_local_tarball}.tgz" \
yann@2009
   143
             lib/crt1.o lib/crti.o lib/crtn.o
yann@2009
   144
yann@2009
   145
        # From:  http://git.openembedded.org/cgit.cgi/openembedded/commit/?id=ad5668a7ac7e0436db92e55caaf3fdf782b6ba3b
yann@2009
   146
        # libm.so is needed for ppc, as libgcc is linked against libm.so
yann@2009
   147
        # No problem to create it for other archs.
yann@2009
   148
        CT_DoLog EXTRA "Building dummy shared libs"
yann@2009
   149
        CT_DoExecLog ALL "${cross}gcc" -nostdlib        \
yann@2009
   150
                                       -nostartfiles    \
yann@2009
   151
                                       -shared          \
yann@2009
   152
                                       -x c /dev/null   \
yann@2009
   153
                                       -o libdummy.so
yann@2009
   154
yann@2009
   155
        CT_DoLog EXTRA "Installing start files"
yann@2009
   156
        CT_DoExecLog ALL install -m 0644 lib/crt1.o lib/crti.o lib/crtn.o   \
yann@2009
   157
                                         "${CT_SYSROOT_DIR}/usr/lib"
yann@2009
   158
yann@2009
   159
        CT_DoLog EXTRA "Installing dummy shared libs"
yann@2009
   160
        CT_DoExecLog ALL install -m 0755 libdummy.so "${CT_SYSROOT_DIR}/usr/lib/libc.so"
yann@2009
   161
        CT_DoExecLog ALL install -m 0755 libdummy.so "${CT_SYSROOT_DIR}/usr/lib/libm.so"
yann@2009
   162
    fi # CT_THREADS == nptl
yann@850
   163
yann@850
   164
    CT_EndStep
yann@850
   165
}
yann@850
   166
yann@850
   167
# This function build and install the full uClibc
yann@850
   168
do_libc() {
yann@850
   169
    CT_DoStep INFO "Installing C library"
yann@850
   170
yann@1678
   171
    # Simply copy files until uClibc has the ability to build out-of-tree
yann@1678
   172
    CT_DoLog EXTRA "Copying sources to build dir"
yann@2008
   173
    CT_DoExecLog ALL cp -av "$(libc_uclibc_src_dir)"    \
yann@1678
   174
                            "${CT_BUILD_DIR}/build-libc"
yann@850
   175
    cd "${CT_BUILD_DIR}/build-libc"
yann@850
   176
yann@850
   177
    # Retrieve the config file
yann@1678
   178
    CT_DoExecLog ALL cp "${CT_CONFIG_DIR}/uClibc.config" .config
yann@850
   179
yann@850
   180
    # uClibc uses the CROSS environment variable as a prefix to the compiler
yann@850
   181
    # tools to use.  The newly built tools should be in our path, so we need
yann@850
   182
    # only give the correct name for them.
yann@850
   183
    # Note about CFLAGS: In uClibc, CFLAGS are generated by Rules.mak,
yann@850
   184
    # depending  on the configuration of the library. That is, they are tailored
yann@850
   185
    # to best fit the target. So it is useless and seems to be a bad thing to
yann@850
   186
    # use LIBC_EXTRA_CFLAGS here.
yann@850
   187
    CT_DoLog EXTRA "Applying configuration"
anthony@2154
   188
    CT_DoYes "" |CT_DoExecLog CFG                                   \
yann@2038
   189
                 make CROSS=${CT_TARGET}-                           \
yann@2038
   190
                 PREFIX="${CT_SYSROOT_DIR}/"                        \
yann@2037
   191
                 LOCALE_DATA_FILENAME="${uclibc_local_tarball}.tgz" \
yann@850
   192
                 oldconfig
yann@850
   193
yann@850
   194
    # We do _not_ want to strip anything for now, in case we specifically
yann@850
   195
    # asked for a debug toolchain, thus the STRIPTOOL= assignment
yann@1029
   196
    # /Old/ versions can not build in //
yann@850
   197
    CT_DoLog EXTRA "Building C library"
yann@2038
   198
    CT_DoExecLog ALL                                        \
yann@2038
   199
    make -j1                                                \
yann@2038
   200
         CROSS=${CT_TARGET}-                                \
yann@2038
   201
         PREFIX="${CT_SYSROOT_DIR}/"                        \
yann@2038
   202
         STRIPTOOL=true                                     \
yann@2038
   203
         ${CT_LIBC_UCLIBC_VERBOSITY}                        \
yann@2037
   204
         LOCALE_DATA_FILENAME="${uclibc_local_tarball}.tgz" \
yann@2009
   205
         pregen
yann@2038
   206
    CT_DoExecLog ALL                                        \
yann@2275
   207
    make ${CT_LIBC_UCLIBC_PARALLEL:+${JOBSFLAGS}}           \
yann@2038
   208
         CROSS=${CT_TARGET}-                                \
yann@2038
   209
         PREFIX="${CT_SYSROOT_DIR}/"                        \
yann@2038
   210
         STRIPTOOL=true                                     \
yann@2038
   211
         ${CT_LIBC_UCLIBC_VERBOSITY}                        \
yann@2037
   212
         LOCALE_DATA_FILENAME="${uclibc_local_tarball}.tgz" \
yann@850
   213
         all
yann@850
   214
yann@1326
   215
    # YEM-FIXME:
yann@1326
   216
    # - we want to install 'runtime' files, eg. lib*.{a,so*}, crti.o and
yann@1326
   217
    #   such files, except the headers as they already are installed
yann@1326
   218
    # - "make install_dev" installs the headers, the crti.o... and the
yann@1326
   219
    #   static libs, but not the dynamic libs
yann@1326
   220
    # - "make install_runtime" installs the dynamic libs only
yann@1326
   221
    # - "make install" calls install_runtime and install_dev
yann@1326
   222
    # - so we're left with re-installing the headers... Sigh...
yann@1326
   223
    #
yann@850
   224
    # We do _not_ want to strip anything for now, in case we specifically
yann@1027
   225
    # asked for a debug toolchain, hence the STRIPTOOL= assignment
yann@1326
   226
    #
yann@2275
   227
    # Note: JOBSFLAGS is not usefull for installation.
yann@1326
   228
    #
yann@850
   229
    CT_DoLog EXTRA "Installing C library"
yann@2038
   230
    CT_DoExecLog ALL                                        \
yann@2038
   231
    make CROSS=${CT_TARGET}-                                \
yann@2038
   232
         PREFIX="${CT_SYSROOT_DIR}/"                        \
yann@2038
   233
         STRIPTOOL=true                                     \
yann@2038
   234
         ${CT_LIBC_UCLIBC_VERBOSITY}                        \
yann@2037
   235
         LOCALE_DATA_FILENAME="${uclibc_local_tarball}.tgz" \
yann@850
   236
         install
yann@850
   237
yann@850
   238
    CT_EndStep
yann@850
   239
}
yann@850
   240
yann@850
   241
# This function is used to install those components needing the final C compiler
yann@850
   242
do_libc_finish() {
yann@1209
   243
    :
yann@850
   244
}
yann@850
   245
yann@850
   246
# Initialises the .config file to sensible values
yann@850
   247
# $1: original file
yann@850
   248
# $2: munged file
yann@850
   249
mungeuClibcConfig() {
yann@850
   250
    src_config_file="$1"
yann@850
   251
    dst_config_file="$2"
yann@850
   252
    munge_file="${CT_BUILD_DIR}/munge-uClibc-config.sed"
yann@850
   253
yann@850
   254
    # Start with a fresh file
yann@850
   255
    rm -f "${munge_file}"
yann@850
   256
    touch "${munge_file}"
yann@850
   257
yann@1674
   258
    # Do it all in a sub-shell, it's easier to redirect output
yann@1674
   259
    (
yann@1674
   260
yann@850
   261
    # Hack our target in the config file.
yann@1750
   262
    case "${CT_ARCH}:${CT_ARCH_BITNESS}" in
thomas@1910
   263
        x86:32)      arch=i386;;
thomas@1910
   264
        x86:64)      arch=x86_64;;
thomas@1910
   265
        sh:32)       arch="sh";;
thomas@1910
   266
        sh:64)       arch="sh64";;
thomas@1910
   267
        blackfin:32) arch="bfin";;
thomas@1910
   268
        *)           arch="${CT_ARCH}";;
yann@1750
   269
    esac
yann@850
   270
    # Also remove stripping: its the responsibility of the
yann@850
   271
    # firmware builder to strip or not.
yann@1674
   272
    cat <<-ENDSED
yann@1674
   273
		s/^(TARGET_.*)=y$/# \\1 is not set/
yann@1750
   274
		s/^# TARGET_${arch} is not set/TARGET_${arch}=y/
yann@1750
   275
		s/^TARGET_ARCH=".*"/TARGET_ARCH="${arch}"/
yann@1674
   276
		s/.*(DOSTRIP).*/# \\1 is not set/
yann@1674
   277
		ENDSED
yann@850
   278
yann@850
   279
    # Ah. We may one day need architecture-specific handler here...
yann@2115
   280
    case "${CT_ARCH}" in
yann@2115
   281
        arm)
yann@2115
   282
            # Hack the ARM {E,O}ABI into the config file
yann@2115
   283
            if [ "${CT_ARCH_ARM_EABI}" = "y" ]; then
yann@2115
   284
                cat <<-ENDSED
yann@2115
   285
					s/.*(CONFIG_ARM_OABI).*/# \\1 is not set/
yann@2115
   286
					s/.*(CONFIG_ARM_EABI).*/\\1=y/
yann@2115
   287
					ENDSED
yann@2115
   288
            else
yann@2115
   289
                cat <<-ENDSED
yann@2115
   290
					s/.*(CONFIG_ARM_OABI).*/\\1=y/
yann@2115
   291
					s/.*(CONFIG_ARM_EABI).*/# \\1 is not set/
yann@2115
   292
					ENDSED
yann@2115
   293
            fi
yann@2115
   294
            ;;
yann@2119
   295
        mips)
yann@2119
   296
            case "${CT_ARCH_mips_ABI}" in
yann@2119
   297
                32)
yann@2119
   298
                    cat <<-ENDSED
yann@2119
   299
						s/.*(CONFIG_MIPS_O32_ABI).*/\\1=y/
yann@2119
   300
						s/.*(CONFIG_MIPS_N32_ABI).*/# \\1 is not set/
yann@2119
   301
						s/.*(CONFIG_MIPS_N64_ABI).*/# \\1 is not set/
yann@2119
   302
						ENDSED
yann@2119
   303
                    ;;
yann@2119
   304
                # For n32 and n64, also force the ISA
yann@2119
   305
                # Not so sure this is pertinent, so it's
yann@2119
   306
                # commented out for now. It would take a
yann@2119
   307
                # (MIPS+uClibc) expert to either remove
yann@2119
   308
                # or re-enable the overrides.
yann@2119
   309
                n32)
yann@2119
   310
                    cat <<-ENDSED
yann@2119
   311
						s/.*(CONFIG_MIPS_O32_ABI).*/# \\1 is not set/
yann@2119
   312
						s/.*(CONFIG_MIPS_N32_ABI).*/\\1=y/
yann@2119
   313
						s/.*(CONFIG_MIPS_N64_ABI).*/# \\1 is not set/
yann@2119
   314
						s/.*(CONFIG_MIPS_ISA_.*).*/# \\1 is not set/
yann@2119
   315
						s/.*(CONFIG_MIPS_ISA_3).*/\\1=y/
yann@2119
   316
						ENDSED
yann@2119
   317
                    ;;
yann@2119
   318
                64)
yann@2119
   319
                    cat <<-ENDSED
yann@2119
   320
						s/.*(CONFIG_MIPS_O32_ABI).*/# \\1 is not set/
yann@2119
   321
						s/.*(CONFIG_MIPS_N32_ABI).*/# \\1 is not set/
yann@2119
   322
						s/.*(CONFIG_MIPS_N64_ABI).*/\\1=y/
yann@2119
   323
						s/.*(CONFIG_MIPS_ISA_.*).*/# \\1 is not set/
yann@2119
   324
						s/.*(CONFIG_MIPS_ISA_MIPS64).*/\\1=y/
yann@2119
   325
						ENDSED
yann@2119
   326
                    ;;
yann@2119
   327
            esac
yann@2119
   328
            ;;
yann@2115
   329
    esac
yann@850
   330
yann@850
   331
    # Accomodate for old and new uClibc versions, where the
yann@850
   332
    # way to select between big/little endian has changed
yann@850
   333
    case "${CT_ARCH_BE},${CT_ARCH_LE}" in
yann@1674
   334
        y,) cat <<-ENDSED
yann@1674
   335
				s/.*(ARCH_LITTLE_ENDIAN).*/# \\1 is not set/
yann@1674
   336
				s/.*(ARCH_BIG_ENDIAN).*/\\1=y/
yann@1674
   337
				s/.*(ARCH_WANTS_LITTLE_ENDIAN).*/# \\1 is not set/
yann@1674
   338
				s/.*(ARCH_WANTS_BIG_ENDIAN).*/\\1=y/
yann@1674
   339
				ENDSED
yann@850
   340
        ;;
yann@1674
   341
        ,y) cat <<-ENDSED
yann@1674
   342
				s/.*(ARCH_LITTLE_ENDIAN).*/\\1=y/
yann@1674
   343
				s/.*(ARCH_BIG_ENDIAN).*/# \\1 is not set/
yann@1674
   344
				s/.*(ARCH_WANTS_LITTLE_ENDIAN).*/\\1=y/
yann@1674
   345
				s/.*(ARCH_WANTS_BIG_ENDIAN).*/# \\1 is not set/
yann@1674
   346
				ENDSED
yann@850
   347
        ;;
yann@850
   348
    esac
yann@850
   349
yann@2410
   350
    # Accomodate for old and new uClibc versions, where the
yann@2410
   351
    # MMU settings has different config knobs
yann@2410
   352
    if [ "${CT_ARCH_USE_MMU}" = "y" ]; then
yann@2410
   353
        cat <<-ENDSED
yann@2410
   354
			s/.*(ARCH_HAS_MMU).*/\\1=y\nARCH_USE_MMU=y/
yann@2410
   355
			ENDSED
yann@2410
   356
    else
yann@2410
   357
        cat <<-ENDSED
yann@2410
   358
			s/.*(ARCH_HAS_MMU).*/# \\1 is not set/
yann@2410
   359
			/.*(ARCH_USE_MMU).*/d
yann@2410
   360
			ENDSED
yann@2410
   361
    fi
yann@2410
   362
yann@850
   363
    # Accomodate for old and new uClibc version, where the
yann@850
   364
    # way to select between hard/soft float has changed
yann@850
   365
    case "${CT_ARCH_FLOAT_HW},${CT_ARCH_FLOAT_SW}" in
yann@1674
   366
        y,) cat <<-ENDSED
yann@1674
   367
				s/^[^_]*(HAS_FPU).*/\\1=y/
yann@1674
   368
				s/.*(UCLIBC_HAS_FPU).*/\\1=y/
yann@1674
   369
				ENDSED
yann@850
   370
            ;;
yann@1674
   371
        ,y) cat <<-ENDSED
yann@1674
   372
				s/^[^_]*(HAS_FPU).*/\\# \\1 is not set/
yann@1674
   373
				s/.*(UCLIBC_HAS_FPU).*/# \\1 is not set/
yann@1674
   374
				ENDSED
yann@850
   375
            ;;
yann@850
   376
    esac
yann@850
   377
yann@850
   378
    # Change paths to work with crosstool-NG
yann@850
   379
    # From http://www.uclibc.org/cgi-bin/viewcvs.cgi?rev=16846&view=rev
yann@850
   380
    #  " we just want the kernel headers, not the whole kernel source ...
yann@850
   381
    #  " so people may need to update their paths slightly
yann@850
   382
    quoted_kernel_source=$(echo "${CT_HEADERS_DIR}" | sed -r -e 's,/include/?$,,; s,/,\\/,g;')
yann@850
   383
    quoted_headers_dir=$(echo "${CT_HEADERS_DIR}" | sed -r -e 's,/,\\/,g;')
yann@850
   384
    # CROSS_COMPILER_PREFIX is left as is, as the CROSS parameter is forced on the command line
yann@850
   385
    # DEVEL_PREFIX is left as '/usr/' because it is post-pended to $PREFIX, wich is the correct value of ${PREFIX}/${TARGET}
yann@850
   386
    # Some (old) versions of uClibc use KERNEL_SOURCE (which is _wrong_), and
yann@1674
   387
    # newer versions use KERNEL_HEADERS (which is right).
yann@1674
   388
    cat <<-ENDSED
yann@1674
   389
		s/^DEVEL_PREFIX=".*"/DEVEL_PREFIX="\\/usr\\/"/
yann@1674
   390
		s/^RUNTIME_PREFIX=".*"/RUNTIME_PREFIX="\\/"/
yann@1674
   391
		s/^SHARED_LIB_LOADER_PREFIX=.*/SHARED_LIB_LOADER_PREFIX="\\/lib\\/"/
yann@1674
   392
		s/^KERNEL_SOURCE=".*"/KERNEL_SOURCE="${quoted_kernel_source}"/
yann@1674
   393
		s/^KERNEL_HEADERS=".*"/KERNEL_HEADERS="${quoted_headers_dir}"/
yann@1674
   394
		s/^UCLIBC_DOWNLOAD_PREGENERATED_LOCALE=y/\\# UCLIBC_DOWNLOAD_PREGENERATED_LOCALE is not set/
yann@1674
   395
		ENDSED
yann@850
   396
yann@850
   397
    if [ "${CT_USE_PIPES}" = "y" ]; then
yann@850
   398
        if grep UCLIBC_EXTRA_CFLAGS extra/Configs/Config.in >/dev/null 2>&1; then
yann@850
   399
            # Good, there is special provision for such things as -pipe!
yann@1674
   400
            cat <<-ENDSED
yann@1674
   401
				s/^(UCLIBC_EXTRA_CFLAGS=".*)"$/\\1 -pipe"/
yann@1674
   402
				ENDSED
yann@850
   403
        else
yann@850
   404
            # Hack our -pipe into WARNINGS, which will be internally incorporated to
yann@850
   405
            # CFLAGS. This a dirty hack, but yet needed
yann@1674
   406
            cat <<-ENDSED
yann@1674
   407
				s/^(WARNINGS=".*)"$/\\1 -pipe"/
yann@1674
   408
				ENDSED
yann@850
   409
        fi
yann@850
   410
    fi
yann@850
   411
yann@1028
   412
    # Locales support
yann@850
   413
    # Note that the two PREGEN_LOCALE and the XLOCALE lines may be missing
yann@850
   414
    # entirely if LOCALE is not set.  If LOCALE was already set, we'll
yann@850
   415
    # assume the user has already made all the appropriate generation
yann@850
   416
    # arrangements.  Note that having the uClibc Makefile download the
yann@850
   417
    # pregenerated locales is not compatible with crosstool; besides,
yann@850
   418
    # crosstool downloads them as part of getandpatch.sh.
yann@2036
   419
    case "${CT_LIBC_UCLIBC_LOCALES}:${CT_LIBC_UCLIBC_LOCALES_PREGEN_DATA}" in
yann@2036
   420
        :*)
yann@2036
   421
            ;;
yann@2036
   422
        y:)
yann@2036
   423
            cat <<-ENDSED
yann@2036
   424
				s/^# UCLIBC_HAS_LOCALE is not set/UCLIBC_HAS_LOCALE=y\\
yann@2036
   425
				# UCLIBC_PREGENERATED_LOCALE_DATA is not set\\
yann@2036
   426
				# UCLIBC_DOWNLOAD_PREGENERATED_LOCALE_DATA is not set\\
yann@2036
   427
				# UCLIBC_HAS_XLOCALE is not set/
yann@2036
   428
				ENDSED
yann@2036
   429
            ;;
yann@2036
   430
        y:y)
yann@2036
   431
            cat <<-ENDSED
yann@2036
   432
				s/^# UCLIBC_HAS_LOCALE is not set/UCLIBC_HAS_LOCALE=y\\
yann@2036
   433
				UCLIBC_PREGENERATED_LOCALE_DATA=y\\
yann@2036
   434
				# UCLIBC_DOWNLOAD_PREGENERATED_LOCALE_DATA is not set\\
yann@2036
   435
				# UCLIBC_HAS_XLOCALE is not set/
yann@2036
   436
				ENDSED
yann@2036
   437
            ;;
yann@2036
   438
    esac
yann@1028
   439
fpasch@1639
   440
    # WCHAR support
fpasch@1639
   441
    if [ "${CT_LIBC_UCLIBC_WCHAR}" = "y" ] ; then
yann@1674
   442
        cat <<-ENDSED
yann@1674
   443
			s/^.*UCLIBC_HAS_WCHAR.*/UCLIBC_HAS_WCHAR=y/
yann@1674
   444
			ENDSED
fpasch@1639
   445
    else
yann@1674
   446
        cat <<-ENDSED
yann@1674
   447
			s/^.*UCLIBC_HAS_WCHAR.*/UCLIBC_HAS_WCHAR=n/
yann@1674
   448
			ENDSED
fpasch@1639
   449
    fi
fpasch@1639
   450
yann@1028
   451
    # Force on options needed for C++ if we'll be making a C++ compiler.
yann@1028
   452
    # I'm not sure locales are a requirement for doing C++... Are they?
yann@850
   453
    if [ "${CT_CC_LANG_CXX}" = "y" ]; then
yann@1674
   454
        cat <<-ENDSED
yann@1674
   455
			s/^# DO_C99_MATH is not set/DO_C99_MATH=y/
yann@1674
   456
			s/^# UCLIBC_CTOR_DTOR is not set/UCLIBC_CTOR_DTOR=y/
yann@1674
   457
			s/^# UCLIBC_HAS_GNU_GETOPT is not set/UCLIBC_HAS_GNU_GETOPT=y/
yann@1674
   458
			ENDSED
yann@850
   459
    fi
yann@850
   460
yann@1977
   461
    # Push the threading model
yann@1977
   462
    # Note: we take into account all of the .28, .29, .30 and .31
yann@2009
   463
    #       versions, here. Even snapshots with NPTL.
yann@1977
   464
    case "${CT_THREADS}:${CT_LIBC_UCLIBC_LNXTHRD}" in
yann@2009
   465
        none:)
yann@1977
   466
            cat <<-ENDSED
yann@1977
   467
				s/^UCLIBC_HAS_THREADS=y/# UCLIBC_HAS_THREADS is not set/
yann@1977
   468
				s/^LINUXTHREADS_OLD=y/# LINUXTHREADS_OLD is not set/
yann@1977
   469
				s/^LINUXTHREADS_NEW=y/# LINUXTHREADS_NEW is not set/
yann@2009
   470
				s/^UCLIBC_HAS_THREADS_NATIVE=y/# UCLIBC_HAS_THREADS_NATIVE is not set/
yann@1977
   471
				ENDSED
yann@1977
   472
            ;;
yann@2007
   473
        linuxthreads:old)
yann@1977
   474
            cat <<-ENDSED
yann@1977
   475
				s/^# UCLIBC_HAS_THREADS is not set/UCLIBC_HAS_THREADS=y/
yann@2007
   476
				s/^# LINUXTHREADS_OLD is not set/LINUXTHREADS_OLD=y/
yann@1977
   477
				s/^LINUXTHREADS_NEW=y/# LINUXTHREADS_NEW is not set/
yann@2009
   478
				s/^UCLIBC_HAS_THREADS_NATIVE=y/# UCLIBC_HAS_THREADS_NATIVE is not set/
yann@1977
   479
				ENDSED
yann@1977
   480
            ;;
yann@2007
   481
        linuxthreads:new)
yann@1977
   482
            cat <<-ENDSED
yann@1977
   483
				s/^# UCLIBC_HAS_THREADS is not set/UCLIBC_HAS_THREADS=y/
yann@1977
   484
				s/^LINUXTHREADS_OLD=y/# LINUXTHREADS_OLD is not set/
yann@2007
   485
				s/^# LINUXTHREADS_NEW is not set/LINUXTHREADS_NEW=y/
yann@2009
   486
				s/^UCLIBC_HAS_THREADS_NATIVE=y/# UCLIBC_HAS_THREADS_NATIVE is not set/
yann@1977
   487
				ENDSED
yann@1977
   488
            ;;
yann@2009
   489
        nptl:)
yann@2009
   490
            cat <<-ENDSED
yann@2009
   491
				s/^HAS_NO_THREADS=y/# HAS_NO_THREADS is not set/
yann@2009
   492
				s/^UCLIBC_HAS_THREADS=y/# UCLIBC_HAS_THREADS is not set/
yann@2009
   493
				s/^LINUXTHREADS_OLD=y/# LINUXTHREADS_OLD is not set/
yann@2009
   494
				s/^LINUXTHREADS_NEW=y/# LINUXTHREADS_NEW is not set/
yann@2009
   495
				s/^# UCLIBC_HAS_THREADS_NATIVE is not set/UCLIBC_HAS_THREADS_NATIVE=y/
yann@2009
   496
				ENDSED
yann@2009
   497
            ;;
yann@2009
   498
        *)
yann@2009
   499
            CT_Abort "Incorrect thread settings: CT_THREADS='${CT_THREAD}' CT_LIBC_UCLIBC_LNXTHRD='${CT_LIBC_UCLIBC_LNXTHRD}'"
yann@2009
   500
            ;;
yann@1977
   501
    esac
yann@1977
   502
yann@850
   503
    # Always build the libpthread_db
yann@1674
   504
    cat <<-ENDSED
yann@1674
   505
		s/^# PTHREADS_DEBUG_SUPPORT is not set.*/PTHREADS_DEBUG_SUPPORT=y/
yann@1674
   506
		ENDSED
yann@850
   507
yann@850
   508
    # Force on debug options if asked for
yann@850
   509
    case "${CT_LIBC_UCLIBC_DEBUG_LEVEL}" in
yann@850
   510
      0)
yann@1674
   511
        cat <<-ENDSED
yann@1674
   512
			s/^DODEBUG=y/# DODEBUG is not set/
yann@1674
   513
			s/^DODEBUG_PT=y/# DODEBUG_PT is not set/
yann@1674
   514
			s/^DOASSERTS=y/# DOASSERTS is not set/
yann@1674
   515
			s/^SUPPORT_LD_DEBUG=y/# SUPPORT_LD_DEBUG is not set/
yann@1674
   516
			s/^SUPPORT_LD_DEBUG_EARLY=y/# SUPPORT_LD_DEBUG_EARLY is not set/
yann@1674
   517
			s/^UCLIBC_MALLOC_DEBUGGING=y/# UCLIBC_MALLOC_DEBUGGING is not set/
yann@1674
   518
			ENDSED
yann@850
   519
        ;;
yann@850
   520
      1)
yann@1674
   521
        cat <<-ENDSED
yann@1674
   522
			s/^# DODEBUG is not set.*/DODEBUG=y/
yann@1674
   523
			s/^DODEBUG_PT=y/# DODEBUG_PT is not set/
yann@1674
   524
			s/^DOASSERTS=y/# DOASSERTS is not set/
yann@1674
   525
			s/^SUPPORT_LD_DEBUG=y/# SUPPORT_LD_DEBUG is not set/
yann@1674
   526
			s/^SUPPORT_LD_DEBUG_EARLY=y/# SUPPORT_LD_DEBUG_EARLY is not set/
yann@1674
   527
			s/^UCLIBC_MALLOC_DEBUGGING=y/# UCLIBC_MALLOC_DEBUGGING is not set/
yann@1674
   528
			ENDSED
yann@850
   529
        ;;
yann@850
   530
      2)
yann@1674
   531
        cat <<-ENDSED
yann@1674
   532
			s/^# DODEBUG is not set.*/DODEBUG=y/
yann@1674
   533
			s/^# DODEBUG_PT is not set.*/DODEBUG_PT=y/
yann@1674
   534
			s/^# DOASSERTS is not set.*/DOASSERTS=y/
yann@1674
   535
			s/^# SUPPORT_LD_DEBUG is not set.*/SUPPORT_LD_DEBUG=y/
yann@1674
   536
			s/^# SUPPORT_LD_DEBUG_EARLY is not set.*/SUPPORT_LD_DEBUG_EARLY=y/
yann@1674
   537
			s/^# UCLIBC_MALLOC_DEBUGGING is not set/UCLIBC_MALLOC_DEBUGGING=y/
yann@1674
   538
			ENDSED
yann@850
   539
        ;;
yann@850
   540
    esac
yann@1674
   541
yann@1674
   542
    # And now, this is the end
yann@1674
   543
    ) >>"${munge_file}"
yann@1674
   544
yann@850
   545
    sed -r -f "${munge_file}" "${src_config_file}" >"${dst_config_file}"
yann@850
   546
}