scripts/build/debug/300-gdb.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Tue May 31 00:20:44 2011 +0200 (2011-05-31)
changeset 2495 98b02f85db29
parent 2476 7690196856ce
child 2503 b5541f296b92
permissions -rw-r--r--
libc/eglibc: use generic SVN functions

eglibc is only available from SVN. The script currently calls svn
in its own tortuous and convoluted way.

Use the egeneric SVN extract functions, and sinplify the eglibc
download function.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
yann@479
     1
# Build script for the gdb debug facility
yann@479
     2
yann@1743
     3
# The version of ncurses to use. Yes, it's hard-coded.
yann@1743
     4
# It's used only internally by crosstool-NG, and is
yann@1743
     5
# not exposed outside, so we don't care about providing
yann@1743
     6
# config options for this.
yann@1743
     7
CT_DEBUG_GDB_NCURSES_VERSION="5.7"
yann@1743
     8
yann@2101
     9
# Ditto for the expat library
yann@2101
    10
CT_DEBUG_GDB_EXPAT_VERSION="2.0.1"
yann@2101
    11
yann@821
    12
do_debug_gdb_parts() {
yann@821
    13
    do_gdb=
yann@821
    14
    do_ncurses=
yann@2101
    15
    do_expat=
yann@821
    16
yann@821
    17
    if [ "${CT_GDB_CROSS}" = y ]; then
yann@1916
    18
        do_gdb=y
yann@821
    19
    fi
yann@821
    20
yann@821
    21
    if [ "${CT_GDB_GDBSERVER}" = "y" ]; then
yann@821
    22
        do_gdb=y
yann@821
    23
    fi
yann@821
    24
yann@821
    25
    if [ "${CT_GDB_NATIVE}" = "y" ]; then
yann@821
    26
        do_gdb=y
linux@2021
    27
        # GDB on Mingw depends on PDcurses, not ncurses
linux@2021
    28
        if [ "${CT_MINGW32}" != "y" ]; then
linux@2021
    29
            do_ncurses=y
linux@2021
    30
        fi
yann@2101
    31
        do_expat=y
yann@821
    32
    fi
yann@821
    33
}
yann@821
    34
yann@479
    35
do_debug_gdb_get() {
yann@2303
    36
    local linaro_version
yann@2303
    37
    local linaro_series
yann@2303
    38
    local linaro_base_url="http://launchpad.net/gdb-linaro"
yann@2303
    39
yann@2303
    40
    # Account for the Linaro versioning
yann@2303
    41
    linaro_version="$( echo "${CT_GDB_VERSION}"      \
yann@2303
    42
                       |sed -r -e 's/^linaro-//;'   \
yann@2303
    43
                     )"
yann@2303
    44
    linaro_series="$( echo "${linaro_version}"      \
yann@2303
    45
                      |sed -r -e 's/-.*//;'         \
yann@2303
    46
                    )"
yann@2303
    47
yann@821
    48
    do_debug_gdb_parts
yann@821
    49
yann@821
    50
    if [ "${do_gdb}" = "y" ]; then
yann@1899
    51
        CT_GetFile "gdb-${CT_GDB_VERSION}"                          \
yann@1899
    52
                   {ftp,http}://ftp.gnu.org/pub/gnu/gdb             \
yann@2303
    53
                   ftp://sources.redhat.com/pub/gdb/{,old-}releases \
yann@2303
    54
                   "${linaro_base_url}/${linaro_series}/${linaro_version}/+download"
yann@821
    55
    fi
yann@821
    56
yann@821
    57
    if [ "${do_ncurses}" = "y" ]; then
yann@1743
    58
        CT_GetFile "ncurses-${CT_DEBUG_GDB_NCURSES_VERSION}" .tar.gz  \
yann@573
    59
                   {ftp,http}://ftp.gnu.org/pub/gnu/ncurses \
yann@573
    60
                   ftp://invisible-island.net/ncurses
yann@573
    61
    fi
yann@2101
    62
yann@2101
    63
    if [ "${do_expat}" = "y" ]; then
yann@2101
    64
        CT_GetFile "expat-${CT_DEBUG_GDB_EXPAT_VERSION}" .tar.gz    \
yann@2101
    65
                   http://mesh.dl.sourceforge.net/sourceforge/expat/expat/${CT_DEBUG_GDB_EXPAT_VERSION}
yann@2101
    66
    fi
yann@479
    67
}
yann@479
    68
yann@479
    69
do_debug_gdb_extract() {
yann@821
    70
    do_debug_gdb_parts
yann@821
    71
yann@821
    72
    if [ "${do_gdb}" = "y" ]; then
yann@1899
    73
        CT_Extract "gdb-${CT_GDB_VERSION}"
yann@1901
    74
        CT_Patch "gdb" "${CT_GDB_VERSION}"
yann@821
    75
    fi
yann@821
    76
yann@821
    77
    if [ "${do_ncurses}" = "y" ]; then
yann@1743
    78
        CT_Extract "ncurses-${CT_DEBUG_GDB_NCURSES_VERSION}"
yann@2326
    79
        CT_DoExecLog ALL chmod -R u+w "${CT_SRC_DIR}/ncurses-${CT_DEBUG_GDB_NCURSES_VERSION}"
yann@1901
    80
        CT_Patch "ncurses" "${CT_DEBUG_GDB_NCURSES_VERSION}"
yann@598
    81
    fi
yann@2101
    82
yann@2101
    83
    if [ "${do_expat}" = "y" ]; then
yann@2101
    84
        CT_Extract "expat-${CT_DEBUG_GDB_EXPAT_VERSION}"
yann@2101
    85
        CT_Patch "expat" "${CT_DEBUG_GDB_EXPAT_VERSION}"
yann@2101
    86
    fi
yann@479
    87
}
yann@479
    88
yann@479
    89
do_debug_gdb_build() {
yann@1481
    90
    local -a extra_config
yann@1481
    91
linux@2021
    92
    do_debug_gdb_parts
linux@2021
    93
yann@1899
    94
    gdb_src_dir="${CT_SRC_DIR}/gdb-${CT_GDB_VERSION}"
yann@479
    95
yann@479
    96
    # Version 6.3 and below behave badly with gdbmi
yann@479
    97
    case "${CT_GDB_VERSION}" in
yann@1481
    98
        6.2*|6.3)   extra_config+=("--disable-gdbmi");;
yann@479
    99
    esac
yann@479
   100
benoit@2490
   101
    if [ "${CT_GDB_HAS_PKGVERSION_BUGURL}" = "y" ]; then
benoit@2490
   102
        [ -n "${CT_TOOLCHAIN_PKGVERSION}" ] && extra_config+=("--with-pkgversion=${CT_TOOLCHAIN_PKGVERSION}")
benoit@2490
   103
        [ -n "${CT_TOOLCHAIN_BUGURL}" ]     && extra_config+=("--with-bugurl=${CT_TOOLCHAIN_BUGURL}")
benoit@2490
   104
    fi
benoit@2490
   105
yann@479
   106
    if [ "${CT_GDB_CROSS}" = "y" ]; then
yann@1481
   107
        local -a cross_extra_config
yann@1481
   108
yann@479
   109
        CT_DoStep INFO "Installing cross-gdb"
yann@479
   110
        CT_DoLog EXTRA "Configuring cross-gdb"
yann@479
   111
yann@479
   112
        mkdir -p "${CT_BUILD_DIR}/build-gdb-cross"
yann@479
   113
        cd "${CT_BUILD_DIR}/build-gdb-cross"
yann@479
   114
yann@1481
   115
        cross_extra_config=("${extra_config[@]}")
yann@583
   116
        case "${CT_THREADS}" in
yann@1481
   117
            none)   cross_extra_config+=("--disable-threads");;
yann@1481
   118
            *)      cross_extra_config+=("--enable-threads");;
yann@583
   119
        esac
yann@583
   120
yann@479
   121
        CC_for_gdb=
yann@479
   122
        LD_for_gdb=
yann@583
   123
        if [ "${CT_GDB_CROSS_STATIC}" = "y" ]; then
yann@479
   124
            CC_for_gdb="gcc -static"
yann@479
   125
            LD_for_gdb="ld -static"
yann@479
   126
        fi
yann@479
   127
yann@821
   128
        gdb_cross_configure="${gdb_src_dir}/configure"
yann@821
   129
yann@1481
   130
        CT_DoLog DEBUG "Extra config passed: '${cross_extra_config[*]}'"
yann@602
   131
yann@2344
   132
        CT_DoExecLog CFG                                \
yann@479
   133
        CC="${CC_for_gdb}"                              \
yann@583
   134
        LD="${LD_for_gdb}"                              \
yann@821
   135
        "${gdb_cross_configure}"                        \
yann@479
   136
            --build=${CT_BUILD}                         \
yann@479
   137
            --host=${CT_HOST}                           \
yann@479
   138
            --target=${CT_TARGET}                       \
yann@479
   139
            --prefix="${CT_PREFIX_DIR}"                 \
yann@479
   140
            --with-build-sysroot="${CT_SYSROOT_DIR}"    \
benoit@2476
   141
            --with-sysroot="${CT_SYSROOT_DIR}"          \
yann@801
   142
            --disable-werror                            \
yann@1481
   143
            "${cross_extra_config[@]}"
yann@479
   144
yann@479
   145
        CT_DoLog EXTRA "Building cross-gdb"
yann@2275
   146
        CT_DoExecLog ALL make ${JOBSFLAGS}
yann@479
   147
yann@479
   148
        CT_DoLog EXTRA "Installing cross-gdb"
yann@669
   149
        CT_DoExecLog ALL make install
yann@479
   150
yann@479
   151
        CT_EndStep
yann@479
   152
    fi
yann@479
   153
yann@479
   154
    if [ "${CT_GDB_NATIVE}" = "y" ]; then
yann@1481
   155
        local -a native_extra_config
yann@1481
   156
        local -a ncurses_opt
yann@2100
   157
        local -a gdb_native_CFLAGS
yann@1481
   158
yann@573
   159
        CT_DoStep INFO "Installing native gdb"
yann@573
   160
yann@2100
   161
        native_extra_config=("${extra_config[@]}")
yann@2100
   162
linux@2021
   163
        # GDB on Mingw depends on PDcurses, not ncurses
linux@2021
   164
        if [ "${do_ncurses}" = "y" ]; then
linux@2021
   165
            CT_DoLog EXTRA "Building static target ncurses"
yann@1281
   166
linux@2021
   167
            [ "${CT_CC_LANG_CXX}" = "y" ] || ncurses_opts+=("--without-cxx" "--without-cxx-binding")
linux@2021
   168
            [ "${CT_CC_LANG_ADA}" = "y" ] || ncurses_opts+=("--without-ada")
yann@1281
   169
linux@2021
   170
            mkdir -p "${CT_BUILD_DIR}/build-ncurses-build-tic"
linux@2021
   171
            cd "${CT_BUILD_DIR}/build-ncurses-build-tic"
yann@1264
   172
linux@2021
   173
            # Use build = CT_REAL_BUILD so that configure thinks it is
linux@2021
   174
            # cross-compiling, and thus will use the ${CT_BUILD}-*
linux@2021
   175
            # tools instead of searching for the native ones...
anthony@2154
   176
            CT_DoExecLog CFG                                                    \
linux@2021
   177
            "${CT_SRC_DIR}/ncurses-${CT_DEBUG_GDB_NCURSES_VERSION}/configure"   \
linux@2021
   178
                --build=${CT_BUILD}                                             \
linux@2021
   179
                --host=${CT_BUILD}                                              \
linux@2021
   180
                --prefix=/usr                                                   \
linux@2021
   181
                --without-shared                                                \
linux@2021
   182
                --enable-symlinks                                               \
linux@2021
   183
                --with-build-cc=${CT_REAL_BUILD}-gcc                            \
linux@2021
   184
                --with-build-cpp=${CT_REAL_BUILD}-gcc                           \
linux@2021
   185
                --with-build-cflags="${CT_CFLAGS_FOR_HOST}"                     \
linux@2021
   186
                "${ncurses_opts[@]}"
yann@1264
   187
linux@2021
   188
            # Under some operating systems (eg. Winblows), there is an
linux@2021
   189
            # extension appended to executables. Find that.
linux@2021
   190
            tic_ext=$(grep -E '^x[[:space:]]*=' progs/Makefile |sed -r -e 's/^.*=[[:space:]]*//;')
yann@1267
   191
yann@2275
   192
            CT_DoExecLog ALL make ${JOBSFLAGS} -C include
yann@2275
   193
            CT_DoExecLog ALL make ${JOBSFLAGS} -C progs "tic${tic_ext}"
yann@1264
   194
linux@2021
   195
            CT_DoExecLog ALL install -d -m 0755 "${CT_PREFIX_DIR}/buildtools"
linux@2021
   196
            CT_DoExecLog ALL install -m 0755 "progs/tic${tic_ext}" "${CT_PREFIX_DIR}/buildtools"
yann@1264
   197
linux@2021
   198
            mkdir -p "${CT_BUILD_DIR}/build-ncurses"
linux@2021
   199
            cd "${CT_BUILD_DIR}/build-ncurses"
yann@573
   200
anthony@2154
   201
            CT_DoExecLog CFG                                                    \
linux@2021
   202
            "${CT_SRC_DIR}/ncurses-${CT_DEBUG_GDB_NCURSES_VERSION}/configure"   \
linux@2021
   203
                --build=${CT_BUILD}                                             \
linux@2021
   204
                --host=${CT_TARGET}                                             \
linux@2021
   205
                --with-build-cc=${CT_BUILD}-gcc                                 \
linux@2021
   206
                --with-build-cpp=${CT_BUILD}-gcc                                \
linux@2021
   207
                --with-build-cflags="${CT_CFLAGS_FOR_HOST}"                     \
yann@2100
   208
                --prefix="${CT_BUILD_DIR}/static-target"                        \
linux@2021
   209
                --without-shared                                                \
linux@2021
   210
                --without-sysmouse                                              \
linux@2021
   211
                --without-progs                                                 \
linux@2021
   212
                --enable-termcap                                                \
linux@2021
   213
                "${ncurses_opts[@]}"
yann@573
   214
yann@2275
   215
            CT_DoExecLog ALL make ${JOBSFLAGS}
yann@573
   216
linux@2021
   217
            CT_DoExecLog ALL make install
yann@573
   218
linux@2021
   219
            # We no longer need the temporary tic. Remove it
yann@2022
   220
            CT_DoExecLog DEBUG rm -fv "${CT_PREFIX_DIR}/buildtools/tic${tic_ext}"
yann@2100
   221
yann@2100
   222
            native_extra_config+=("--with-curses")
yann@2100
   223
            # There's no better way to tell gdb where to find -lcurses... :-(
yann@2100
   224
            gdb_native_CFLAGS+=("-I${CT_BUILD_DIR}/static-target/include")
yann@2100
   225
            gdb_native_CFLAGS+=("-L${CT_BUILD_DIR}/static-target/lib")
linux@2021
   226
        fi # do_ncurses
yann@1281
   227
yann@2101
   228
        if [ "${do_expat}" = "y" ]; then
yann@2101
   229
            CT_DoLog EXTRA "Building static target expat"
yann@2101
   230
yann@2101
   231
            mkdir -p "${CT_BUILD_DIR}/expat-build"
yann@2101
   232
            cd "${CT_BUILD_DIR}/expat-build"
yann@2101
   233
anthony@2154
   234
            CT_DoExecLog CFG                                                \
yann@2101
   235
            "${CT_SRC_DIR}/expat-${CT_DEBUG_GDB_EXPAT_VERSION}/configure"   \
yann@2101
   236
                --build=${CT_BUILD}                                         \
yann@2101
   237
                --host=${CT_TARGET}                                         \
yann@2101
   238
                --prefix="${CT_BUILD_DIR}/static-target"                    \
yann@2101
   239
                --enable-static                                             \
yann@2101
   240
                --disable-shared
yann@2101
   241
yann@2275
   242
            CT_DoExecLog ALL make ${JOBSFLAGS}
yann@2101
   243
            CT_DoExecLog ALL make install
yann@2101
   244
yann@2101
   245
            native_extra_config+=("--with-expat")
yann@2101
   246
            native_extra_config+=("--with-libexpat-prefix=${CT_BUILD_DIR}/static-target")
yann@2101
   247
        fi # do_expat
yann@2101
   248
yann@479
   249
        CT_DoLog EXTRA "Configuring native gdb"
yann@479
   250
yann@479
   251
        mkdir -p "${CT_BUILD_DIR}/build-gdb-native"
yann@479
   252
        cd "${CT_BUILD_DIR}/build-gdb-native"
yann@479
   253
yann@583
   254
        case "${CT_THREADS}" in
yann@1481
   255
            none)   native_extra_config+=("--disable-threads");;
yann@1481
   256
            *)      native_extra_config+=("--enable-threads");;
yann@583
   257
        esac
yann@583
   258
yann@583
   259
        if [ "${CT_GDB_NATIVE_STATIC}" = "y" ]; then
yann@583
   260
            CC_for_gdb="${CT_TARGET}-gcc -static"
yann@583
   261
            LD_for_gdb="${CT_TARGET}-ld -static"
yann@626
   262
        else
yann@626
   263
            CC_for_gdb="${CT_TARGET}-gcc"
yann@626
   264
            LD_for_gdb="${CT_TARGET}-ld"
yann@583
   265
        fi
yann@583
   266
yann@583
   267
        export ac_cv_func_strncmp_works=yes
yann@583
   268
yann@1481
   269
        CT_DoLog DEBUG "Extra config passed: '${native_extra_config[*]}'"
yann@602
   270
yann@2344
   271
        CT_DoExecLog CFG                                \
yann@583
   272
        CC="${CC_for_gdb}"                              \
yann@583
   273
        LD="${LD_for_gdb}"                              \
yann@2344
   274
        CFLAGS="${gdb_native_CFLAGS[*]}"                \
yann@479
   275
        "${gdb_src_dir}/configure"                      \
yann@479
   276
            --build=${CT_BUILD}                         \
yann@479
   277
            --host=${CT_TARGET}                         \
yann@479
   278
            --target=${CT_TARGET}                       \
yann@479
   279
            --prefix=/usr                               \
yann@479
   280
            --with-build-sysroot="${CT_SYSROOT_DIR}"    \
yann@479
   281
            --without-uiout                             \
yann@479
   282
            --disable-tui                               \
yann@479
   283
            --disable-gdbtk                             \
yann@479
   284
            --without-x                                 \
yann@479
   285
            --disable-sim                               \
yann@583
   286
            --disable-werror                            \
yann@479
   287
            --without-included-gettext                  \
yann@583
   288
            --without-develop                           \
yann@1481
   289
            "${native_extra_config[@]}"
yann@479
   290
yann@479
   291
        CT_DoLog EXTRA "Building native gdb"
yann@2275
   292
        CT_DoExecLog ALL make ${JOBSFLAGS} CC=${CT_TARGET}-${CT_CC}
yann@479
   293
yann@479
   294
        CT_DoLog EXTRA "Installing native gdb"
yann@1219
   295
        CT_DoExecLog ALL make DESTDIR="${CT_DEBUGROOT_DIR}" install
yann@479
   296
yann@583
   297
        # Building a native gdb also builds a gdbserver
yann@1219
   298
        find "${CT_DEBUGROOT_DIR}" -type f -name gdbserver -exec rm -fv {} \; 2>&1 |CT_DoLog ALL
yann@583
   299
yann@583
   300
        unset ac_cv_func_strncmp_works
yann@583
   301
linux@2021
   302
        # GDB on Mingw depends on PDcurses, not ncurses
linux@2021
   303
        if [ "${CT_MINGW32}" != "y" ]; then
linux@2021
   304
            CT_DoLog EXTRA "Cleaning up ncurses"
linux@2021
   305
            cd "${CT_BUILD_DIR}/build-ncurses"
linux@2021
   306
            CT_DoExecLog ALL make DESTDIR="${CT_SYSROOT_DIR}" uninstall
yann@1555
   307
linux@2021
   308
            CT_DoExecLog DEBUG rm -rf "${CT_BUILD_DIR}/ncurses"
linux@2021
   309
        fi
yann@1733
   310
yann@1281
   311
        CT_EndStep # native gdb build
yann@583
   312
    fi
yann@583
   313
yann@583
   314
    if [ "${CT_GDB_GDBSERVER}" = "y" ]; then
yann@1481
   315
        local -a gdbserver_extra_config
yann@1481
   316
yann@583
   317
        CT_DoStep INFO "Installing gdbserver"
yann@583
   318
        CT_DoLog EXTRA "Configuring gdbserver"
yann@583
   319
yann@583
   320
        mkdir -p "${CT_BUILD_DIR}/build-gdb-gdbserver"
yann@583
   321
        cd "${CT_BUILD_DIR}/build-gdb-gdbserver"
yann@583
   322
yann@583
   323
        # Workaround for bad versions, where the configure
yann@583
   324
        # script for gdbserver is not executable...
yann@583
   325
        # Bah, GNU folks strike again... :-(
yann@583
   326
        chmod +x "${gdb_src_dir}/gdb/gdbserver/configure"
yann@583
   327
yann@583
   328
        gdbserver_LDFLAGS=
yann@583
   329
        if [ "${CT_GDB_GDBSERVER_STATIC}" = "y" ]; then
yann@583
   330
            gdbserver_LDFLAGS=-static
yann@583
   331
        fi
yann@583
   332
yann@1481
   333
        gdbserver_extra_config=("${extra_config[@]}")
yann@602
   334
yann@2344
   335
        CT_DoExecLog CFG                                \
yann@583
   336
        LDFLAGS="${gdbserver_LDFLAGS}"                  \
yann@583
   337
        "${gdb_src_dir}/gdb/gdbserver/configure"        \
yann@583
   338
            --build=${CT_BUILD}                         \
yann@583
   339
            --host=${CT_TARGET}                         \
yann@583
   340
            --target=${CT_TARGET}                       \
yann@583
   341
            --prefix=/usr                               \
yann@583
   342
            --sysconfdir=/etc                           \
yann@583
   343
            --localstatedir=/var                        \
yann@583
   344
            --includedir="${CT_HEADERS_DIR}"            \
yann@583
   345
            --with-build-sysroot="${CT_SYSROOT_DIR}"    \
yann@583
   346
            --program-prefix=                           \
yann@583
   347
            --without-uiout                             \
yann@583
   348
            --disable-tui                               \
yann@583
   349
            --disable-gdbtk                             \
yann@583
   350
            --without-x                                 \
yann@583
   351
            --without-included-gettext                  \
yann@583
   352
            --without-develop                           \
yann@801
   353
            --disable-werror                            \
yann@1481
   354
            "${gdbserver_extra_config[@]}"
yann@583
   355
yann@583
   356
        CT_DoLog EXTRA "Building gdbserver"
yann@2275
   357
        CT_DoExecLog ALL make ${JOBSFLAGS} CC=${CT_TARGET}-${CT_CC}
yann@583
   358
yann@583
   359
        CT_DoLog EXTRA "Installing gdbserver"
yann@1219
   360
        CT_DoExecLog ALL make DESTDIR="${CT_DEBUGROOT_DIR}" install
yann@583
   361
yann@479
   362
        CT_EndStep
yann@479
   363
    fi
yann@479
   364
}