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>

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