scripts/build/debug/300-gdb.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Wed Jan 13 20:46:01 2010 +0100 (2010-01-13)
changeset 1732 6b2ae7804c6f
parent 1670 08b0982e4da9
child 1733 02db017f4fe1
permissions -rw-r--r--
debug/gdb: staticaly link to ncurses for the native gdb

Staticaly link the native gdb (the one that runs on the target,
not the cross one that runs on the host) to ncurses.
yann@479
     1
# Build script for the gdb debug facility
yann@479
     2
yann@479
     3
do_debug_gdb_suffix() {
yann@479
     4
    case "${CT_GDB_VERSION}" in
yann@479
     5
        snapshot)   ;;
yann@479
     6
        *)          echo "-${CT_GDB_VERSION}";;
yann@479
     7
    esac
yann@479
     8
}
yann@479
     9
yann@821
    10
do_debug_gdb_parts() {
yann@821
    11
    do_gdb=
yann@821
    12
    do_insight=
yann@821
    13
    do_ncurses=
yann@821
    14
yann@821
    15
    if [ "${CT_GDB_CROSS}" = y ]; then
yann@821
    16
        if [ "${CT_GDB_CROSS_INSIGHT}" = "y" ]; then
yann@821
    17
            do_insight=y
yann@821
    18
        else
yann@821
    19
            do_gdb=y
yann@821
    20
        fi
yann@821
    21
    fi
yann@821
    22
yann@821
    23
    if [ "${CT_GDB_GDBSERVER}" = "y" ]; then
yann@821
    24
        do_gdb=y
yann@821
    25
    fi
yann@821
    26
yann@821
    27
    if [ "${CT_GDB_NATIVE}" = "y" ]; then
yann@821
    28
        do_gdb=y
yann@821
    29
        do_ncurses=y
yann@821
    30
    fi
yann@821
    31
}
yann@821
    32
yann@479
    33
do_debug_gdb_get() {
yann@821
    34
    do_debug_gdb_parts
yann@821
    35
yann@821
    36
    if [ "${do_gdb}" = "y" ]; then
yann@821
    37
        CT_GetFile "gdb$(do_debug_gdb_suffix)"              \
yann@821
    38
                   {ftp,http}://ftp.gnu.org/pub/gnu/gdb     \
yann@821
    39
                   ftp://sources.redhat.com/pub/gdb/{{,old-}releases,snapshots/current}
yann@821
    40
    fi
yann@821
    41
yann@821
    42
    if [ "${do_insight}" = "y" ]; then
yann@821
    43
        CT_GetFile "insight-${CT_GDB_VERSION}"                                              \
yann@821
    44
                   ftp://sourceware.org/pub/insight/releases                                \
yann@821
    45
                   {ftp,http}://ftp.twaren.net/Unix/Sourceware/insight/releases             \
yann@821
    46
                   {ftp,http}://ftp.gwdg.de/pub/linux/sources.redhat.com/insight/releases
yann@821
    47
    fi
yann@821
    48
yann@821
    49
    if [ "${do_ncurses}" = "y" ]; then
yann@1670
    50
        CT_GetFile "ncurses-${CT_NCURSES_VERSION}" .tar.gz  \
yann@573
    51
                   {ftp,http}://ftp.gnu.org/pub/gnu/ncurses \
yann@573
    52
                   ftp://invisible-island.net/ncurses
yann@573
    53
    fi
yann@479
    54
}
yann@479
    55
yann@479
    56
do_debug_gdb_extract() {
yann@821
    57
    do_debug_gdb_parts
yann@821
    58
yann@821
    59
    if [ "${do_gdb}" = "y" ]; then
yann@1126
    60
        CT_Extract "gdb$(do_debug_gdb_suffix)"
yann@1126
    61
        CT_Patch "gdb$(do_debug_gdb_suffix)"
yann@821
    62
    fi
yann@821
    63
yann@821
    64
    if [ "${do_insight}" = "y" ]; then
yann@1126
    65
        CT_Extract "insight-${CT_GDB_VERSION}"
yann@1126
    66
        CT_Patch "insight-${CT_GDB_VERSION}"
yann@821
    67
    fi
yann@821
    68
yann@821
    69
    if [ "${do_ncurses}" = "y" ]; then
yann@1126
    70
        CT_Extract "ncurses-${CT_NCURSES_VERSION}"
yann@1126
    71
        CT_Patch "ncurses-${CT_NCURSES_VERSION}"
yann@598
    72
    fi
yann@479
    73
}
yann@479
    74
yann@479
    75
do_debug_gdb_build() {
yann@1481
    76
    local -a extra_config
yann@1481
    77
yann@523
    78
    gdb_src_dir="${CT_SRC_DIR}/gdb$(do_debug_gdb_suffix)"
yann@821
    79
    insight_src_dir="${CT_SRC_DIR}/insight-${CT_GDB_VERSION}"
yann@479
    80
yann@479
    81
    # Version 6.3 and below behave badly with gdbmi
yann@479
    82
    case "${CT_GDB_VERSION}" in
yann@1481
    83
        6.2*|6.3)   extra_config+=("--disable-gdbmi");;
yann@479
    84
    esac
yann@479
    85
yann@479
    86
    if [ "${CT_GDB_CROSS}" = "y" ]; then
yann@1481
    87
        local -a cross_extra_config
yann@1481
    88
yann@479
    89
        CT_DoStep INFO "Installing cross-gdb"
yann@479
    90
        CT_DoLog EXTRA "Configuring cross-gdb"
yann@479
    91
yann@479
    92
        mkdir -p "${CT_BUILD_DIR}/build-gdb-cross"
yann@479
    93
        cd "${CT_BUILD_DIR}/build-gdb-cross"
yann@479
    94
yann@1481
    95
        cross_extra_config=("${extra_config[@]}")
yann@645
    96
        if [ "${CT_GMP_MPFR}" = "y" ]; then
yann@1481
    97
            cross_extra_config+=("--with-gmp=${CT_PREFIX_DIR}" "--with-mpfr=${CT_PREFIX_DIR}")
yann@583
    98
        fi
yann@583
    99
        case "${CT_THREADS}" in
yann@1481
   100
            none)   cross_extra_config+=("--disable-threads");;
yann@1481
   101
            *)      cross_extra_config+=("--enable-threads");;
yann@583
   102
        esac
yann@583
   103
yann@479
   104
        CC_for_gdb=
yann@479
   105
        LD_for_gdb=
yann@583
   106
        if [ "${CT_GDB_CROSS_STATIC}" = "y" ]; then
yann@479
   107
            CC_for_gdb="gcc -static"
yann@479
   108
            LD_for_gdb="ld -static"
yann@479
   109
        fi
yann@479
   110
yann@821
   111
        gdb_cross_configure="${gdb_src_dir}/configure"
yann@821
   112
        [ "${CT_GDB_CROSS_INSIGHT}" = "y" ] && gdb_cross_configure="${insight_src_dir}/configure"
yann@821
   113
yann@1481
   114
        CT_DoLog DEBUG "Extra config passed: '${cross_extra_config[*]}'"
yann@602
   115
yann@479
   116
        CC="${CC_for_gdb}"                              \
yann@583
   117
        LD="${LD_for_gdb}"                              \
yann@669
   118
        CT_DoExecLog ALL                                \
yann@821
   119
        "${gdb_cross_configure}"                        \
yann@479
   120
            --build=${CT_BUILD}                         \
yann@479
   121
            --host=${CT_HOST}                           \
yann@479
   122
            --target=${CT_TARGET}                       \
yann@479
   123
            --prefix="${CT_PREFIX_DIR}"                 \
yann@479
   124
            --with-build-sysroot="${CT_SYSROOT_DIR}"    \
yann@801
   125
            --disable-werror                            \
yann@1481
   126
            "${cross_extra_config[@]}"
yann@479
   127
yann@479
   128
        CT_DoLog EXTRA "Building cross-gdb"
yann@669
   129
        CT_DoExecLog ALL make ${PARALLELMFLAGS}
yann@479
   130
yann@479
   131
        CT_DoLog EXTRA "Installing cross-gdb"
yann@669
   132
        CT_DoExecLog ALL make install
yann@479
   133
yann@479
   134
        CT_EndStep
yann@479
   135
    fi
yann@479
   136
yann@479
   137
    if [ "${CT_GDB_NATIVE}" = "y" ]; then
yann@1481
   138
        local -a native_extra_config
yann@1481
   139
        local -a ncurses_opt
yann@1481
   140
yann@573
   141
        CT_DoStep INFO "Installing native gdb"
yann@573
   142
yann@1281
   143
        CT_DoStep INFO "Installing ncurses library"
yann@1281
   144
yann@1481
   145
        [ "${CT_CC_LANG_CXX}" = "y" ] || ncurses_opts+=("--without-cxx" "--without-cxx-binding")
yann@1481
   146
        [ "${CT_CC_LANG_ADA}" = "y" ] || ncurses_opts+=("--without-ada")
yann@1281
   147
yann@1264
   148
        CT_DoStep INFO "Installing native ncurses tic"
yann@1264
   149
        CT_DoLog EXTRA "Configuring ncurses tic"
yann@1264
   150
        mkdir -p "${CT_BUILD_DIR}/build-ncurses-build-tic"
yann@1264
   151
        cd "${CT_BUILD_DIR}/build-ncurses-build-tic"
yann@1264
   152
yann@1265
   153
        # Use build = CT_REAL_BUILD so that configure thinks it is
yann@1265
   154
        # cross-compiling, and thus will use the ${CT_BUILD}-*
yann@1265
   155
        # tools instead of searching for the native ones...
yann@1264
   156
        CT_DoExecLog ALL                                        \
yann@1264
   157
        "${CT_SRC_DIR}/ncurses-${CT_NCURSES_VERSION}/configure" \
yann@1265
   158
            --build=${CT_REAL_BUILD}                            \
yann@1264
   159
            --host=${CT_BUILD}                                  \
yann@1264
   160
            --prefix=/usr                                       \
yann@1264
   161
            --without-shared                                    \
yann@1264
   162
            --enable-symlinks                                   \
yann@1265
   163
            --with-build-cc=${CT_REAL_BUILD}-gcc                \
yann@1265
   164
            --with-build-cpp=${CT_REAL_BUILD}-gcc               \
yann@1264
   165
            --with-build-cflags="${CT_CFLAGS_FOR_HOST}"         \
yann@1481
   166
            "${ncurses_opts[@]}"
yann@1264
   167
yann@1267
   168
        # Under some operating systems (eg. Winblows), there is an
yann@1267
   169
        # extension appended to executables. Find that.
yann@1267
   170
        tic_ext=$(grep -E '^x[[:space:]]*=' progs/Makefile |sed -r -e 's/^.*=[[:space:]]*//;')
yann@1267
   171
yann@1264
   172
        CT_DoLog EXTRA "Building ncurses tic"
yann@1267
   173
        CT_DoExecLog ALL make ${PARALLELMFLAGS} -C include
yann@1267
   174
        CT_DoExecLog ALL make ${PARALLELMFLAGS} -C progs "tic${tic_ext}"
yann@1264
   175
yann@1264
   176
        CT_DoLog EXTRA "Installing ncurses tic"
yann@1264
   177
        CT_DoExecLog ALL install -d -m 0755 "${CT_PREFIX_DIR}/bin"
yann@1267
   178
        CT_DoExecLog ALL install -m 0755 "progs/tic${tic_ext}" "${CT_PREFIX_DIR}/bin"
yann@1264
   179
yann@1281
   180
        CT_EndStep # tic build
yann@1264
   181
yann@573
   182
        CT_DoLog EXTRA "Configuring ncurses"
yann@573
   183
        mkdir -p "${CT_BUILD_DIR}/build-ncurses"
yann@573
   184
        cd "${CT_BUILD_DIR}/build-ncurses"
yann@573
   185
yann@669
   186
        CT_DoExecLog ALL                                        \
yann@573
   187
        "${CT_SRC_DIR}/ncurses-${CT_NCURSES_VERSION}/configure" \
yann@573
   188
            --build=${CT_BUILD}                                 \
yann@573
   189
            --host=${CT_TARGET}                                 \
yann@1264
   190
            --with-build-cc=${CT_BUILD}-gcc                     \
yann@1264
   191
            --with-build-cpp=${CT_BUILD}-gcc                    \
yann@573
   192
            --with-build-cflags="${CT_CFLAGS_FOR_HOST}"         \
yann@573
   193
            --prefix=/usr                                       \
yann@1732
   194
            --without-shared                                    \
yann@573
   195
            --without-sysmouse                                  \
yann@573
   196
            --without-progs                                     \
yann@573
   197
            --enable-termcap                                    \
yann@1481
   198
            "${ncurses_opts[@]}"
yann@573
   199
yann@573
   200
        CT_DoLog EXTRA "Building ncurses"
yann@669
   201
        CT_DoExecLog ALL make ${PARALLELMFLAGS}
yann@573
   202
yann@573
   203
        CT_DoLog EXTRA "Installing ncurses"
yann@669
   204
        mkdir -p "${CT_SYSROOT_DIR}/usr/bin"
yann@669
   205
        CT_DoExecLog ALL make DESTDIR="${CT_SYSROOT_DIR}" install
yann@573
   206
yann@1281
   207
        # We no longer need the temporary tic. Remove it
yann@1281
   208
        CT_DoExecLog DEBUG rm -fv "${CT_PREFIX_DIR}/bin/tic"
yann@1281
   209
yann@1281
   210
        CT_EndStep # ncurses build
yann@573
   211
yann@479
   212
        CT_DoLog EXTRA "Configuring native gdb"
yann@479
   213
yann@479
   214
        mkdir -p "${CT_BUILD_DIR}/build-gdb-native"
yann@479
   215
        cd "${CT_BUILD_DIR}/build-gdb-native"
yann@479
   216
yann@1481
   217
        native_extra_config=("${extra_config[@]}")
yann@583
   218
        case "${CT_THREADS}" in
yann@1481
   219
            none)   native_extra_config+=("--disable-threads");;
yann@1481
   220
            *)      native_extra_config+=("--enable-threads");;
yann@583
   221
        esac
yann@622
   222
        if [ "${CT_GDB_NATIVE_USE_GMP_MPFR}" = "y" ]; then
yann@1481
   223
            native_extra_config+=("--with-gmp=${CT_SYSROOT_DIR}/usr" "--with-mpfr=${CT_SYSROOT_DIR}/usr")
yann@602
   224
        fi
yann@583
   225
yann@583
   226
        if [ "${CT_GDB_NATIVE_STATIC}" = "y" ]; then
yann@583
   227
            CC_for_gdb="${CT_TARGET}-gcc -static"
yann@583
   228
            LD_for_gdb="${CT_TARGET}-ld -static"
yann@626
   229
        else
yann@626
   230
            CC_for_gdb="${CT_TARGET}-gcc"
yann@626
   231
            LD_for_gdb="${CT_TARGET}-ld"
yann@583
   232
        fi
yann@583
   233
yann@583
   234
        export ac_cv_func_strncmp_works=yes
yann@583
   235
yann@1481
   236
        CT_DoLog DEBUG "Extra config passed: '${native_extra_config[*]}'"
yann@602
   237
yann@583
   238
        CC="${CC_for_gdb}"                              \
yann@583
   239
        LD="${LD_for_gdb}"                              \
yann@669
   240
        CT_DoExecLog ALL                                \
yann@479
   241
        "${gdb_src_dir}/configure"                      \
yann@479
   242
            --build=${CT_BUILD}                         \
yann@479
   243
            --host=${CT_TARGET}                         \
yann@479
   244
            --target=${CT_TARGET}                       \
yann@479
   245
            --prefix=/usr                               \
yann@479
   246
            --with-build-sysroot="${CT_SYSROOT_DIR}"    \
yann@479
   247
            --without-uiout                             \
yann@479
   248
            --disable-tui                               \
yann@479
   249
            --disable-gdbtk                             \
yann@479
   250
            --without-x                                 \
yann@479
   251
            --disable-sim                               \
yann@583
   252
            --disable-werror                            \
yann@479
   253
            --without-included-gettext                  \
yann@583
   254
            --without-develop                           \
yann@1481
   255
            "${native_extra_config[@]}"
yann@479
   256
yann@479
   257
        CT_DoLog EXTRA "Building native gdb"
yann@669
   258
        CT_DoExecLog ALL make ${PARALLELMFLAGS} CC=${CT_TARGET}-${CT_CC}
yann@479
   259
yann@479
   260
        CT_DoLog EXTRA "Installing native gdb"
yann@1219
   261
        CT_DoExecLog ALL make DESTDIR="${CT_DEBUGROOT_DIR}" install
yann@479
   262
yann@583
   263
        # Building a native gdb also builds a gdbserver
yann@1219
   264
        find "${CT_DEBUGROOT_DIR}" -type f -name gdbserver -exec rm -fv {} \; 2>&1 |CT_DoLog ALL
yann@583
   265
yann@583
   266
        unset ac_cv_func_strncmp_works
yann@583
   267
yann@1555
   268
        CT_DoLog EXTRA "Cleaning up ncurses"
yann@1555
   269
        cd "${CT_BUILD_DIR}/build-ncurses"
yann@1555
   270
        CT_DoExecLog ALL make DESTDIR="${CT_SYSROOT_DIR}" uninstall
yann@1555
   271
yann@1281
   272
        CT_EndStep # native gdb build
yann@583
   273
    fi
yann@583
   274
yann@583
   275
    if [ "${CT_GDB_GDBSERVER}" = "y" ]; then
yann@1481
   276
        local -a gdbserver_extra_config
yann@1481
   277
yann@583
   278
        CT_DoStep INFO "Installing gdbserver"
yann@583
   279
        CT_DoLog EXTRA "Configuring gdbserver"
yann@583
   280
yann@583
   281
        mkdir -p "${CT_BUILD_DIR}/build-gdb-gdbserver"
yann@583
   282
        cd "${CT_BUILD_DIR}/build-gdb-gdbserver"
yann@583
   283
yann@583
   284
        # Workaround for bad versions, where the configure
yann@583
   285
        # script for gdbserver is not executable...
yann@583
   286
        # Bah, GNU folks strike again... :-(
yann@583
   287
        chmod +x "${gdb_src_dir}/gdb/gdbserver/configure"
yann@583
   288
yann@583
   289
        gdbserver_LDFLAGS=
yann@583
   290
        if [ "${CT_GDB_GDBSERVER_STATIC}" = "y" ]; then
yann@583
   291
            gdbserver_LDFLAGS=-static
yann@583
   292
        fi
yann@583
   293
yann@1481
   294
        gdbserver_extra_config=("${extra_config[@]}")
yann@602
   295
yann@583
   296
        LDFLAGS="${gdbserver_LDFLAGS}"                  \
yann@669
   297
        CT_DoExecLog ALL                                \
yann@583
   298
        "${gdb_src_dir}/gdb/gdbserver/configure"        \
yann@583
   299
            --build=${CT_BUILD}                         \
yann@583
   300
            --host=${CT_TARGET}                         \
yann@583
   301
            --target=${CT_TARGET}                       \
yann@583
   302
            --prefix=/usr                               \
yann@583
   303
            --sysconfdir=/etc                           \
yann@583
   304
            --localstatedir=/var                        \
yann@583
   305
            --includedir="${CT_HEADERS_DIR}"            \
yann@583
   306
            --with-build-sysroot="${CT_SYSROOT_DIR}"    \
yann@583
   307
            --program-prefix=                           \
yann@583
   308
            --without-uiout                             \
yann@583
   309
            --disable-tui                               \
yann@583
   310
            --disable-gdbtk                             \
yann@583
   311
            --without-x                                 \
yann@583
   312
            --without-included-gettext                  \
yann@583
   313
            --without-develop                           \
yann@801
   314
            --disable-werror                            \
yann@1481
   315
            "${gdbserver_extra_config[@]}"
yann@583
   316
yann@583
   317
        CT_DoLog EXTRA "Building gdbserver"
yann@669
   318
        CT_DoExecLog ALL make ${PARALLELMFLAGS} CC=${CT_TARGET}-${CT_CC}
yann@583
   319
yann@583
   320
        CT_DoLog EXTRA "Installing gdbserver"
yann@1219
   321
        CT_DoExecLog ALL make DESTDIR="${CT_DEBUGROOT_DIR}" install
yann@583
   322
yann@479
   323
        CT_EndStep
yann@479
   324
    fi
yann@479
   325
}