scripts/build/debug/300-gdb.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Fri Aug 19 00:52:05 2011 +0200 (2011-08-19)
changeset 2614 814ea73df7e0
parent 2570 2651341cc084
child 2616 d32d723b239c
child 2634 e29a762bbadf
permissions -rw-r--r--
scripts: simplify and fix the toolchain config script

The script that is installed, and which sole purpose is to dump
the .config that was used to build the toolchain, is pure insanity.

Let's make it much, much more simpler...

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