scripts/build/debug/300-gdb.sh
author Bart vdr. Meulen <bartvdrmeulen@gmail.com>
Sun Aug 02 16:45:43 2009 +0200 (2009-08-02)
changeset 1434 7e7290acccc1
parent 1267 ca485f06bfa7
child 1481 195bde4764b1
permissions -rw-r--r--
fix wrapper script for symlinks

The wrapper script placed around the target binaries when
using the companion libraries does not work for symbolic links
The wrapper scripts needs to follow the links before calling the
actual binary

Signed-off-by: Bart vdr. Meulen <bartvdrmeulen@gmail.com>

---
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@573
    50
        CT_GetFile "ncurses-${CT_NCURSES_VERSION}"          \
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@523
    76
    gdb_src_dir="${CT_SRC_DIR}/gdb$(do_debug_gdb_suffix)"
yann@821
    77
    insight_src_dir="${CT_SRC_DIR}/insight-${CT_GDB_VERSION}"
yann@479
    78
yann@479
    79
    extra_config=
yann@479
    80
    # Version 6.3 and below behave badly with gdbmi
yann@479
    81
    case "${CT_GDB_VERSION}" in
yann@479
    82
        6.2*|6.3)   extra_config="${extra_config} --disable-gdbmi";;
yann@479
    83
    esac
yann@479
    84
yann@479
    85
    if [ "${CT_GDB_CROSS}" = "y" ]; then
yann@479
    86
        CT_DoStep INFO "Installing cross-gdb"
yann@479
    87
        CT_DoLog EXTRA "Configuring cross-gdb"
yann@479
    88
yann@479
    89
        mkdir -p "${CT_BUILD_DIR}/build-gdb-cross"
yann@479
    90
        cd "${CT_BUILD_DIR}/build-gdb-cross"
yann@479
    91
yann@602
    92
        cross_extra_config="${extra_config}"
yann@645
    93
        if [ "${CT_GMP_MPFR}" = "y" ]; then
yann@602
    94
            cross_extra_config="${cross_extra_config} --with-gmp=${CT_PREFIX_DIR} --with-mpfr=${CT_PREFIX_DIR}"
yann@583
    95
        fi
yann@583
    96
        case "${CT_THREADS}" in
yann@602
    97
            none)   cross_extra_config="${cross_extra_config} --disable-threads";;
yann@602
    98
            *)      cross_extra_config="${cross_extra_config} --enable-threads";;
yann@583
    99
        esac
yann@583
   100
yann@479
   101
        CC_for_gdb=
yann@479
   102
        LD_for_gdb=
yann@583
   103
        if [ "${CT_GDB_CROSS_STATIC}" = "y" ]; then
yann@479
   104
            CC_for_gdb="gcc -static"
yann@479
   105
            LD_for_gdb="ld -static"
yann@479
   106
        fi
yann@479
   107
yann@821
   108
        gdb_cross_configure="${gdb_src_dir}/configure"
yann@821
   109
        [ "${CT_GDB_CROSS_INSIGHT}" = "y" ] && gdb_cross_configure="${insight_src_dir}/configure"
yann@821
   110
yann@602
   111
        CT_DoLog DEBUG "Extra config passed: '${cross_extra_config# }'"
yann@602
   112
yann@479
   113
        CC="${CC_for_gdb}"                              \
yann@583
   114
        LD="${LD_for_gdb}"                              \
yann@669
   115
        CT_DoExecLog ALL                                \
yann@821
   116
        "${gdb_cross_configure}"                        \
yann@479
   117
            --build=${CT_BUILD}                         \
yann@479
   118
            --host=${CT_HOST}                           \
yann@479
   119
            --target=${CT_TARGET}                       \
yann@479
   120
            --prefix="${CT_PREFIX_DIR}"                 \
yann@479
   121
            --with-build-sysroot="${CT_SYSROOT_DIR}"    \
yann@801
   122
            --disable-werror                            \
yann@669
   123
            ${cross_extra_config}
yann@479
   124
yann@479
   125
        CT_DoLog EXTRA "Building cross-gdb"
yann@669
   126
        CT_DoExecLog ALL make ${PARALLELMFLAGS}
yann@479
   127
yann@479
   128
        CT_DoLog EXTRA "Installing cross-gdb"
yann@669
   129
        CT_DoExecLog ALL make install
yann@479
   130
yann@479
   131
        CT_EndStep
yann@479
   132
    fi
yann@479
   133
yann@479
   134
    if [ "${CT_GDB_NATIVE}" = "y" ]; then
yann@573
   135
        CT_DoStep INFO "Installing native gdb"
yann@573
   136
yann@1281
   137
        CT_DoStep INFO "Installing ncurses library"
yann@1281
   138
yann@1281
   139
        ncurses_opts=
yann@1281
   140
        [ "${CT_CC_LANG_CXX}" = "y" ] || ncurses_opts="${ncurses_opts} --without-cxx --without-cxx-binding"
yann@1281
   141
        [ "${CT_CC_LANG_ADA}" = "y" ] || ncurses_opts="${ncurses_opts} --without-ada"
yann@1281
   142
yann@1264
   143
        CT_DoStep INFO "Installing native ncurses tic"
yann@1264
   144
        CT_DoLog EXTRA "Configuring ncurses tic"
yann@1264
   145
        mkdir -p "${CT_BUILD_DIR}/build-ncurses-build-tic"
yann@1264
   146
        cd "${CT_BUILD_DIR}/build-ncurses-build-tic"
yann@1264
   147
yann@1265
   148
        # Use build = CT_REAL_BUILD so that configure thinks it is
yann@1265
   149
        # cross-compiling, and thus will use the ${CT_BUILD}-*
yann@1265
   150
        # tools instead of searching for the native ones...
yann@1264
   151
        CT_DoExecLog ALL                                        \
yann@1264
   152
        "${CT_SRC_DIR}/ncurses-${CT_NCURSES_VERSION}/configure" \
yann@1265
   153
            --build=${CT_REAL_BUILD}                            \
yann@1264
   154
            --host=${CT_BUILD}                                  \
yann@1264
   155
            --prefix=/usr                                       \
yann@1264
   156
            --without-shared                                    \
yann@1264
   157
            --enable-symlinks                                   \
yann@1265
   158
            --with-build-cc=${CT_REAL_BUILD}-gcc                \
yann@1265
   159
            --with-build-cpp=${CT_REAL_BUILD}-gcc               \
yann@1264
   160
            --with-build-cflags="${CT_CFLAGS_FOR_HOST}"         \
yann@1264
   161
            ${ncurses_opts}
yann@1264
   162
yann@1267
   163
        # Under some operating systems (eg. Winblows), there is an
yann@1267
   164
        # extension appended to executables. Find that.
yann@1267
   165
        tic_ext=$(grep -E '^x[[:space:]]*=' progs/Makefile |sed -r -e 's/^.*=[[:space:]]*//;')
yann@1267
   166
yann@1264
   167
        CT_DoLog EXTRA "Building ncurses tic"
yann@1267
   168
        CT_DoExecLog ALL make ${PARALLELMFLAGS} -C include
yann@1267
   169
        CT_DoExecLog ALL make ${PARALLELMFLAGS} -C progs "tic${tic_ext}"
yann@1264
   170
yann@1264
   171
        CT_DoLog EXTRA "Installing ncurses tic"
yann@1264
   172
        CT_DoExecLog ALL install -d -m 0755 "${CT_PREFIX_DIR}/bin"
yann@1267
   173
        CT_DoExecLog ALL install -m 0755 "progs/tic${tic_ext}" "${CT_PREFIX_DIR}/bin"
yann@1264
   174
yann@1281
   175
        CT_EndStep # tic build
yann@1264
   176
yann@573
   177
        CT_DoLog EXTRA "Configuring ncurses"
yann@573
   178
        mkdir -p "${CT_BUILD_DIR}/build-ncurses"
yann@573
   179
        cd "${CT_BUILD_DIR}/build-ncurses"
yann@573
   180
yann@669
   181
        CT_DoExecLog ALL                                        \
yann@573
   182
        "${CT_SRC_DIR}/ncurses-${CT_NCURSES_VERSION}/configure" \
yann@573
   183
            --build=${CT_BUILD}                                 \
yann@573
   184
            --host=${CT_TARGET}                                 \
yann@1264
   185
            --with-build-cc=${CT_BUILD}-gcc                     \
yann@1264
   186
            --with-build-cpp=${CT_BUILD}-gcc                    \
yann@573
   187
            --with-build-cflags="${CT_CFLAGS_FOR_HOST}"         \
yann@573
   188
            --prefix=/usr                                       \
yann@573
   189
            --with-shared                                       \
yann@573
   190
            --without-sysmouse                                  \
yann@573
   191
            --without-progs                                     \
yann@573
   192
            --enable-termcap                                    \
yann@669
   193
            ${ncurses_opts}
yann@573
   194
yann@573
   195
        CT_DoLog EXTRA "Building ncurses"
yann@669
   196
        CT_DoExecLog ALL make ${PARALLELMFLAGS}
yann@573
   197
yann@573
   198
        CT_DoLog EXTRA "Installing ncurses"
yann@669
   199
        mkdir -p "${CT_SYSROOT_DIR}/usr/bin"
yann@669
   200
        CT_DoExecLog ALL make DESTDIR="${CT_SYSROOT_DIR}" install
yann@573
   201
yann@1281
   202
        # We no longer need the temporary tic. Remove it
yann@1281
   203
        CT_DoExecLog DEBUG rm -fv "${CT_PREFIX_DIR}/bin/tic"
yann@1281
   204
yann@1281
   205
        CT_EndStep # ncurses build
yann@573
   206
yann@479
   207
        CT_DoLog EXTRA "Configuring native gdb"
yann@479
   208
yann@479
   209
        mkdir -p "${CT_BUILD_DIR}/build-gdb-native"
yann@479
   210
        cd "${CT_BUILD_DIR}/build-gdb-native"
yann@479
   211
yann@602
   212
        native_extra_config="${extra_config}"
yann@583
   213
        case "${CT_THREADS}" in
yann@602
   214
            none)   native_extra_config="${native_extra_config} --disable-threads";;
yann@602
   215
            *)      native_extra_config="${native_extra_config} --enable-threads";;
yann@583
   216
        esac
yann@622
   217
        if [ "${CT_GDB_NATIVE_USE_GMP_MPFR}" = "y" ]; then
yann@602
   218
            native_extra_config="${native_extra_config} --with-gmp=${CT_SYSROOT_DIR}/usr --with-mpfr=${CT_SYSROOT_DIR}/usr"
yann@602
   219
        fi
yann@583
   220
yann@583
   221
        if [ "${CT_GDB_NATIVE_STATIC}" = "y" ]; then
yann@583
   222
            CC_for_gdb="${CT_TARGET}-gcc -static"
yann@583
   223
            LD_for_gdb="${CT_TARGET}-ld -static"
yann@626
   224
        else
yann@626
   225
            CC_for_gdb="${CT_TARGET}-gcc"
yann@626
   226
            LD_for_gdb="${CT_TARGET}-ld"
yann@583
   227
        fi
yann@583
   228
yann@583
   229
        export ac_cv_func_strncmp_works=yes
yann@583
   230
yann@602
   231
        CT_DoLog DEBUG "Extra config passed: '${native_extra_config# }'"
yann@602
   232
yann@583
   233
        CC="${CC_for_gdb}"                              \
yann@583
   234
        LD="${LD_for_gdb}"                              \
yann@669
   235
        CT_DoExecLog ALL                                \
yann@479
   236
        "${gdb_src_dir}/configure"                      \
yann@479
   237
            --build=${CT_BUILD}                         \
yann@479
   238
            --host=${CT_TARGET}                         \
yann@479
   239
            --target=${CT_TARGET}                       \
yann@479
   240
            --prefix=/usr                               \
yann@479
   241
            --with-build-sysroot="${CT_SYSROOT_DIR}"    \
yann@479
   242
            --without-uiout                             \
yann@479
   243
            --disable-tui                               \
yann@479
   244
            --disable-gdbtk                             \
yann@479
   245
            --without-x                                 \
yann@479
   246
            --disable-sim                               \
yann@583
   247
            --disable-werror                            \
yann@479
   248
            --without-included-gettext                  \
yann@583
   249
            --without-develop                           \
yann@669
   250
            ${native_extra_config}
yann@479
   251
yann@479
   252
        CT_DoLog EXTRA "Building native gdb"
yann@669
   253
        CT_DoExecLog ALL make ${PARALLELMFLAGS} CC=${CT_TARGET}-${CT_CC}
yann@479
   254
yann@479
   255
        CT_DoLog EXTRA "Installing native gdb"
yann@1219
   256
        CT_DoExecLog ALL make DESTDIR="${CT_DEBUGROOT_DIR}" install
yann@479
   257
yann@583
   258
        # Building a native gdb also builds a gdbserver
yann@1219
   259
        find "${CT_DEBUGROOT_DIR}" -type f -name gdbserver -exec rm -fv {} \; 2>&1 |CT_DoLog ALL
yann@583
   260
yann@583
   261
        unset ac_cv_func_strncmp_works
yann@583
   262
yann@1281
   263
        CT_EndStep # native gdb build
yann@583
   264
    fi
yann@583
   265
yann@583
   266
    if [ "${CT_GDB_GDBSERVER}" = "y" ]; then
yann@583
   267
        CT_DoStep INFO "Installing gdbserver"
yann@583
   268
        CT_DoLog EXTRA "Configuring gdbserver"
yann@583
   269
yann@583
   270
        mkdir -p "${CT_BUILD_DIR}/build-gdb-gdbserver"
yann@583
   271
        cd "${CT_BUILD_DIR}/build-gdb-gdbserver"
yann@583
   272
yann@583
   273
        # Workaround for bad versions, where the configure
yann@583
   274
        # script for gdbserver is not executable...
yann@583
   275
        # Bah, GNU folks strike again... :-(
yann@583
   276
        chmod +x "${gdb_src_dir}/gdb/gdbserver/configure"
yann@583
   277
yann@583
   278
        gdbserver_LDFLAGS=
yann@583
   279
        if [ "${CT_GDB_GDBSERVER_STATIC}" = "y" ]; then
yann@583
   280
            gdbserver_LDFLAGS=-static
yann@583
   281
        fi
yann@583
   282
yann@602
   283
        gdbserver_extra_config="${extra_config}"
yann@602
   284
yann@583
   285
        LDFLAGS="${gdbserver_LDFLAGS}"                  \
yann@669
   286
        CT_DoExecLog ALL                                \
yann@583
   287
        "${gdb_src_dir}/gdb/gdbserver/configure"        \
yann@583
   288
            --build=${CT_BUILD}                         \
yann@583
   289
            --host=${CT_TARGET}                         \
yann@583
   290
            --target=${CT_TARGET}                       \
yann@583
   291
            --prefix=/usr                               \
yann@583
   292
            --sysconfdir=/etc                           \
yann@583
   293
            --localstatedir=/var                        \
yann@583
   294
            --includedir="${CT_HEADERS_DIR}"            \
yann@583
   295
            --with-build-sysroot="${CT_SYSROOT_DIR}"    \
yann@583
   296
            --program-prefix=                           \
yann@583
   297
            --without-uiout                             \
yann@583
   298
            --disable-tui                               \
yann@583
   299
            --disable-gdbtk                             \
yann@583
   300
            --without-x                                 \
yann@583
   301
            --without-included-gettext                  \
yann@583
   302
            --without-develop                           \
yann@801
   303
            --disable-werror                            \
yann@669
   304
            ${gdbserver_extra_config}
yann@583
   305
yann@583
   306
        CT_DoLog EXTRA "Building gdbserver"
yann@669
   307
        CT_DoExecLog ALL make ${PARALLELMFLAGS} CC=${CT_TARGET}-${CT_CC}
yann@583
   308
yann@583
   309
        CT_DoLog EXTRA "Installing gdbserver"
yann@1219
   310
        CT_DoExecLog ALL make DESTDIR="${CT_DEBUGROOT_DIR}" install
yann@583
   311
yann@479
   312
        CT_EndStep
yann@479
   313
    fi
yann@479
   314
}