scripts/build/debug/300-gdb.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Thu Apr 28 00:13:41 2011 +0200 (2011-04-28)
changeset 2412 20edcd78cf67
parent 2326 3d0a8d386afd
child 2476 7690196856ce
permissions -rw-r--r--
scripts/addToolsVersion: versions can be either in the .in or the .in.2

The components have their version selection handled either in the .in
file or the .in.2 file. Handle both cases.

Also, when dumping an existing version, keep the user's grep options
(ie. do override neither options nor colors).

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
yann@479
   101
    if [ "${CT_GDB_CROSS}" = "y" ]; then
yann@1481
   102
        local -a cross_extra_config
yann@1481
   103
yann@479
   104
        CT_DoStep INFO "Installing cross-gdb"
yann@479
   105
        CT_DoLog EXTRA "Configuring cross-gdb"
yann@479
   106
yann@479
   107
        mkdir -p "${CT_BUILD_DIR}/build-gdb-cross"
yann@479
   108
        cd "${CT_BUILD_DIR}/build-gdb-cross"
yann@479
   109
yann@1481
   110
        cross_extra_config=("${extra_config[@]}")
yann@583
   111
        case "${CT_THREADS}" in
yann@1481
   112
            none)   cross_extra_config+=("--disable-threads");;
yann@1481
   113
            *)      cross_extra_config+=("--enable-threads");;
yann@583
   114
        esac
yann@583
   115
yann@479
   116
        CC_for_gdb=
yann@479
   117
        LD_for_gdb=
yann@583
   118
        if [ "${CT_GDB_CROSS_STATIC}" = "y" ]; then
yann@479
   119
            CC_for_gdb="gcc -static"
yann@479
   120
            LD_for_gdb="ld -static"
yann@479
   121
        fi
yann@479
   122
yann@821
   123
        gdb_cross_configure="${gdb_src_dir}/configure"
yann@821
   124
yann@1481
   125
        CT_DoLog DEBUG "Extra config passed: '${cross_extra_config[*]}'"
yann@602
   126
yann@2344
   127
        CT_DoExecLog CFG                                \
yann@479
   128
        CC="${CC_for_gdb}"                              \
yann@583
   129
        LD="${LD_for_gdb}"                              \
yann@821
   130
        "${gdb_cross_configure}"                        \
yann@479
   131
            --build=${CT_BUILD}                         \
yann@479
   132
            --host=${CT_HOST}                           \
yann@479
   133
            --target=${CT_TARGET}                       \
yann@479
   134
            --prefix="${CT_PREFIX_DIR}"                 \
yann@479
   135
            --with-build-sysroot="${CT_SYSROOT_DIR}"    \
yann@801
   136
            --disable-werror                            \
yann@1481
   137
            "${cross_extra_config[@]}"
yann@479
   138
yann@479
   139
        CT_DoLog EXTRA "Building cross-gdb"
yann@2275
   140
        CT_DoExecLog ALL make ${JOBSFLAGS}
yann@479
   141
yann@479
   142
        CT_DoLog EXTRA "Installing cross-gdb"
yann@669
   143
        CT_DoExecLog ALL make install
yann@479
   144
yann@479
   145
        CT_EndStep
yann@479
   146
    fi
yann@479
   147
yann@479
   148
    if [ "${CT_GDB_NATIVE}" = "y" ]; then
yann@1481
   149
        local -a native_extra_config
yann@1481
   150
        local -a ncurses_opt
yann@2100
   151
        local -a gdb_native_CFLAGS
yann@1481
   152
yann@573
   153
        CT_DoStep INFO "Installing native gdb"
yann@573
   154
yann@2100
   155
        native_extra_config=("${extra_config[@]}")
yann@2100
   156
linux@2021
   157
        # GDB on Mingw depends on PDcurses, not ncurses
linux@2021
   158
        if [ "${do_ncurses}" = "y" ]; then
linux@2021
   159
            CT_DoLog EXTRA "Building static target ncurses"
yann@1281
   160
linux@2021
   161
            [ "${CT_CC_LANG_CXX}" = "y" ] || ncurses_opts+=("--without-cxx" "--without-cxx-binding")
linux@2021
   162
            [ "${CT_CC_LANG_ADA}" = "y" ] || ncurses_opts+=("--without-ada")
yann@1281
   163
linux@2021
   164
            mkdir -p "${CT_BUILD_DIR}/build-ncurses-build-tic"
linux@2021
   165
            cd "${CT_BUILD_DIR}/build-ncurses-build-tic"
yann@1264
   166
linux@2021
   167
            # Use build = CT_REAL_BUILD so that configure thinks it is
linux@2021
   168
            # cross-compiling, and thus will use the ${CT_BUILD}-*
linux@2021
   169
            # tools instead of searching for the native ones...
anthony@2154
   170
            CT_DoExecLog CFG                                                    \
linux@2021
   171
            "${CT_SRC_DIR}/ncurses-${CT_DEBUG_GDB_NCURSES_VERSION}/configure"   \
linux@2021
   172
                --build=${CT_BUILD}                                             \
linux@2021
   173
                --host=${CT_BUILD}                                              \
linux@2021
   174
                --prefix=/usr                                                   \
linux@2021
   175
                --without-shared                                                \
linux@2021
   176
                --enable-symlinks                                               \
linux@2021
   177
                --with-build-cc=${CT_REAL_BUILD}-gcc                            \
linux@2021
   178
                --with-build-cpp=${CT_REAL_BUILD}-gcc                           \
linux@2021
   179
                --with-build-cflags="${CT_CFLAGS_FOR_HOST}"                     \
linux@2021
   180
                "${ncurses_opts[@]}"
yann@1264
   181
linux@2021
   182
            # Under some operating systems (eg. Winblows), there is an
linux@2021
   183
            # extension appended to executables. Find that.
linux@2021
   184
            tic_ext=$(grep -E '^x[[:space:]]*=' progs/Makefile |sed -r -e 's/^.*=[[:space:]]*//;')
yann@1267
   185
yann@2275
   186
            CT_DoExecLog ALL make ${JOBSFLAGS} -C include
yann@2275
   187
            CT_DoExecLog ALL make ${JOBSFLAGS} -C progs "tic${tic_ext}"
yann@1264
   188
linux@2021
   189
            CT_DoExecLog ALL install -d -m 0755 "${CT_PREFIX_DIR}/buildtools"
linux@2021
   190
            CT_DoExecLog ALL install -m 0755 "progs/tic${tic_ext}" "${CT_PREFIX_DIR}/buildtools"
yann@1264
   191
linux@2021
   192
            mkdir -p "${CT_BUILD_DIR}/build-ncurses"
linux@2021
   193
            cd "${CT_BUILD_DIR}/build-ncurses"
yann@573
   194
anthony@2154
   195
            CT_DoExecLog CFG                                                    \
linux@2021
   196
            "${CT_SRC_DIR}/ncurses-${CT_DEBUG_GDB_NCURSES_VERSION}/configure"   \
linux@2021
   197
                --build=${CT_BUILD}                                             \
linux@2021
   198
                --host=${CT_TARGET}                                             \
linux@2021
   199
                --with-build-cc=${CT_BUILD}-gcc                                 \
linux@2021
   200
                --with-build-cpp=${CT_BUILD}-gcc                                \
linux@2021
   201
                --with-build-cflags="${CT_CFLAGS_FOR_HOST}"                     \
yann@2100
   202
                --prefix="${CT_BUILD_DIR}/static-target"                        \
linux@2021
   203
                --without-shared                                                \
linux@2021
   204
                --without-sysmouse                                              \
linux@2021
   205
                --without-progs                                                 \
linux@2021
   206
                --enable-termcap                                                \
linux@2021
   207
                "${ncurses_opts[@]}"
yann@573
   208
yann@2275
   209
            CT_DoExecLog ALL make ${JOBSFLAGS}
yann@573
   210
linux@2021
   211
            CT_DoExecLog ALL make install
yann@573
   212
linux@2021
   213
            # We no longer need the temporary tic. Remove it
yann@2022
   214
            CT_DoExecLog DEBUG rm -fv "${CT_PREFIX_DIR}/buildtools/tic${tic_ext}"
yann@2100
   215
yann@2100
   216
            native_extra_config+=("--with-curses")
yann@2100
   217
            # There's no better way to tell gdb where to find -lcurses... :-(
yann@2100
   218
            gdb_native_CFLAGS+=("-I${CT_BUILD_DIR}/static-target/include")
yann@2100
   219
            gdb_native_CFLAGS+=("-L${CT_BUILD_DIR}/static-target/lib")
linux@2021
   220
        fi # do_ncurses
yann@1281
   221
yann@2101
   222
        if [ "${do_expat}" = "y" ]; then
yann@2101
   223
            CT_DoLog EXTRA "Building static target expat"
yann@2101
   224
yann@2101
   225
            mkdir -p "${CT_BUILD_DIR}/expat-build"
yann@2101
   226
            cd "${CT_BUILD_DIR}/expat-build"
yann@2101
   227
anthony@2154
   228
            CT_DoExecLog CFG                                                \
yann@2101
   229
            "${CT_SRC_DIR}/expat-${CT_DEBUG_GDB_EXPAT_VERSION}/configure"   \
yann@2101
   230
                --build=${CT_BUILD}                                         \
yann@2101
   231
                --host=${CT_TARGET}                                         \
yann@2101
   232
                --prefix="${CT_BUILD_DIR}/static-target"                    \
yann@2101
   233
                --enable-static                                             \
yann@2101
   234
                --disable-shared
yann@2101
   235
yann@2275
   236
            CT_DoExecLog ALL make ${JOBSFLAGS}
yann@2101
   237
            CT_DoExecLog ALL make install
yann@2101
   238
yann@2101
   239
            native_extra_config+=("--with-expat")
yann@2101
   240
            native_extra_config+=("--with-libexpat-prefix=${CT_BUILD_DIR}/static-target")
yann@2101
   241
        fi # do_expat
yann@2101
   242
yann@479
   243
        CT_DoLog EXTRA "Configuring native gdb"
yann@479
   244
yann@479
   245
        mkdir -p "${CT_BUILD_DIR}/build-gdb-native"
yann@479
   246
        cd "${CT_BUILD_DIR}/build-gdb-native"
yann@479
   247
yann@583
   248
        case "${CT_THREADS}" in
yann@1481
   249
            none)   native_extra_config+=("--disable-threads");;
yann@1481
   250
            *)      native_extra_config+=("--enable-threads");;
yann@583
   251
        esac
yann@583
   252
yann@583
   253
        if [ "${CT_GDB_NATIVE_STATIC}" = "y" ]; then
yann@583
   254
            CC_for_gdb="${CT_TARGET}-gcc -static"
yann@583
   255
            LD_for_gdb="${CT_TARGET}-ld -static"
yann@626
   256
        else
yann@626
   257
            CC_for_gdb="${CT_TARGET}-gcc"
yann@626
   258
            LD_for_gdb="${CT_TARGET}-ld"
yann@583
   259
        fi
yann@583
   260
yann@583
   261
        export ac_cv_func_strncmp_works=yes
yann@583
   262
yann@1481
   263
        CT_DoLog DEBUG "Extra config passed: '${native_extra_config[*]}'"
yann@602
   264
yann@2344
   265
        CT_DoExecLog CFG                                \
yann@583
   266
        CC="${CC_for_gdb}"                              \
yann@583
   267
        LD="${LD_for_gdb}"                              \
yann@2344
   268
        CFLAGS="${gdb_native_CFLAGS[*]}"                \
yann@479
   269
        "${gdb_src_dir}/configure"                      \
yann@479
   270
            --build=${CT_BUILD}                         \
yann@479
   271
            --host=${CT_TARGET}                         \
yann@479
   272
            --target=${CT_TARGET}                       \
yann@479
   273
            --prefix=/usr                               \
yann@479
   274
            --with-build-sysroot="${CT_SYSROOT_DIR}"    \
yann@479
   275
            --without-uiout                             \
yann@479
   276
            --disable-tui                               \
yann@479
   277
            --disable-gdbtk                             \
yann@479
   278
            --without-x                                 \
yann@479
   279
            --disable-sim                               \
yann@583
   280
            --disable-werror                            \
yann@479
   281
            --without-included-gettext                  \
yann@583
   282
            --without-develop                           \
yann@1481
   283
            "${native_extra_config[@]}"
yann@479
   284
yann@479
   285
        CT_DoLog EXTRA "Building native gdb"
yann@2275
   286
        CT_DoExecLog ALL make ${JOBSFLAGS} CC=${CT_TARGET}-${CT_CC}
yann@479
   287
yann@479
   288
        CT_DoLog EXTRA "Installing native gdb"
yann@1219
   289
        CT_DoExecLog ALL make DESTDIR="${CT_DEBUGROOT_DIR}" install
yann@479
   290
yann@583
   291
        # Building a native gdb also builds a gdbserver
yann@1219
   292
        find "${CT_DEBUGROOT_DIR}" -type f -name gdbserver -exec rm -fv {} \; 2>&1 |CT_DoLog ALL
yann@583
   293
yann@583
   294
        unset ac_cv_func_strncmp_works
yann@583
   295
linux@2021
   296
        # GDB on Mingw depends on PDcurses, not ncurses
linux@2021
   297
        if [ "${CT_MINGW32}" != "y" ]; then
linux@2021
   298
            CT_DoLog EXTRA "Cleaning up ncurses"
linux@2021
   299
            cd "${CT_BUILD_DIR}/build-ncurses"
linux@2021
   300
            CT_DoExecLog ALL make DESTDIR="${CT_SYSROOT_DIR}" uninstall
yann@1555
   301
linux@2021
   302
            CT_DoExecLog DEBUG rm -rf "${CT_BUILD_DIR}/ncurses"
linux@2021
   303
        fi
yann@1733
   304
yann@1281
   305
        CT_EndStep # native gdb build
yann@583
   306
    fi
yann@583
   307
yann@583
   308
    if [ "${CT_GDB_GDBSERVER}" = "y" ]; then
yann@1481
   309
        local -a gdbserver_extra_config
yann@1481
   310
yann@583
   311
        CT_DoStep INFO "Installing gdbserver"
yann@583
   312
        CT_DoLog EXTRA "Configuring gdbserver"
yann@583
   313
yann@583
   314
        mkdir -p "${CT_BUILD_DIR}/build-gdb-gdbserver"
yann@583
   315
        cd "${CT_BUILD_DIR}/build-gdb-gdbserver"
yann@583
   316
yann@583
   317
        # Workaround for bad versions, where the configure
yann@583
   318
        # script for gdbserver is not executable...
yann@583
   319
        # Bah, GNU folks strike again... :-(
yann@583
   320
        chmod +x "${gdb_src_dir}/gdb/gdbserver/configure"
yann@583
   321
yann@583
   322
        gdbserver_LDFLAGS=
yann@583
   323
        if [ "${CT_GDB_GDBSERVER_STATIC}" = "y" ]; then
yann@583
   324
            gdbserver_LDFLAGS=-static
yann@583
   325
        fi
yann@583
   326
yann@1481
   327
        gdbserver_extra_config=("${extra_config[@]}")
yann@602
   328
yann@2344
   329
        CT_DoExecLog CFG                                \
yann@583
   330
        LDFLAGS="${gdbserver_LDFLAGS}"                  \
yann@583
   331
        "${gdb_src_dir}/gdb/gdbserver/configure"        \
yann@583
   332
            --build=${CT_BUILD}                         \
yann@583
   333
            --host=${CT_TARGET}                         \
yann@583
   334
            --target=${CT_TARGET}                       \
yann@583
   335
            --prefix=/usr                               \
yann@583
   336
            --sysconfdir=/etc                           \
yann@583
   337
            --localstatedir=/var                        \
yann@583
   338
            --includedir="${CT_HEADERS_DIR}"            \
yann@583
   339
            --with-build-sysroot="${CT_SYSROOT_DIR}"    \
yann@583
   340
            --program-prefix=                           \
yann@583
   341
            --without-uiout                             \
yann@583
   342
            --disable-tui                               \
yann@583
   343
            --disable-gdbtk                             \
yann@583
   344
            --without-x                                 \
yann@583
   345
            --without-included-gettext                  \
yann@583
   346
            --without-develop                           \
yann@801
   347
            --disable-werror                            \
yann@1481
   348
            "${gdbserver_extra_config[@]}"
yann@583
   349
yann@583
   350
        CT_DoLog EXTRA "Building gdbserver"
yann@2275
   351
        CT_DoExecLog ALL make ${JOBSFLAGS} CC=${CT_TARGET}-${CT_CC}
yann@583
   352
yann@583
   353
        CT_DoLog EXTRA "Installing gdbserver"
yann@1219
   354
        CT_DoExecLog ALL make DESTDIR="${CT_DEBUGROOT_DIR}" install
yann@583
   355
yann@479
   356
        CT_EndStep
yann@479
   357
    fi
yann@479
   358
}