scripts/build/debug/300-gdb.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Wed Feb 17 23:50:49 2010 +0100 (2010-02-17)
changeset 1810 e44f67656c5f
parent 1808 a1370757e6a1
child 1839 2548f6f333da
permissions -rw-r--r--
complibs: hide companion libraries for target entry

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