scripts/build/debug/300-gdb.sh
author Titus von Boxberg <titus@v9g.de>
Sat May 22 22:01:18 2010 +0200 (2010-05-22)
changeset 1970 cdd761ad2d1a
parent 1939 39fce98b3747
child 2003 b74a48609d81
permissions -rw-r--r--
scripts/build/internals.sh: compile wrapper with portable options.

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