yann@479: # Build script for the gdb debug facility yann@479: yann@479: is_enabled="${CT_GDB}" yann@479: yann@479: do_print_filename() { yann@479: [ "${CT_GDB}" = "y" ] || return 0 yann@523: echo "gdb$(do_debug_gdb_suffix)" yann@598: if [ "${CT_GDB_NATIVE}" = "y" ]; then yann@598: echo "ncurses-${CT_NCURSES_VERSION}" yann@598: fi yann@479: } yann@479: yann@479: do_debug_gdb_suffix() { yann@479: case "${CT_GDB_VERSION}" in yann@479: snapshot) ;; yann@479: *) echo "-${CT_GDB_VERSION}";; yann@479: esac yann@479: } yann@479: yann@479: do_debug_gdb_get() { yann@573: CT_GetFile "gdb$(do_debug_gdb_suffix)" \ yann@573: {ftp,http}://ftp.gnu.org/pub/gnu/gdb \ yann@486: ftp://sources.redhat.com/pub/gdb/{{,old-}releases,snapshots/current} yann@573: if [ "${CT_GDB_NATIVE}" = "y" ]; then yann@573: CT_GetFile "ncurses-${CT_NCURSES_VERSION}" \ yann@573: {ftp,http}://ftp.gnu.org/pub/gnu/ncurses \ yann@573: ftp://invisible-island.net/ncurses yann@573: fi yann@479: } yann@479: yann@479: do_debug_gdb_extract() { yann@523: CT_ExtractAndPatch "gdb$(do_debug_gdb_suffix)" yann@598: if [ "${CT_GDB_NATIVE}" = "y" ]; then yann@598: CT_ExtractAndPatch "ncurses-${CT_NCURSES_VERSION}" yann@598: fi yann@479: } yann@479: yann@479: do_debug_gdb_build() { yann@523: gdb_src_dir="${CT_SRC_DIR}/gdb$(do_debug_gdb_suffix)" yann@479: yann@479: extra_config= yann@479: # Version 6.3 and below behave badly with gdbmi yann@479: case "${CT_GDB_VERSION}" in yann@479: 6.2*|6.3) extra_config="${extra_config} --disable-gdbmi";; yann@479: esac yann@479: yann@479: if [ "${CT_GDB_CROSS}" = "y" ]; then yann@479: CT_DoStep INFO "Installing cross-gdb" yann@479: CT_DoLog EXTRA "Configuring cross-gdb" yann@479: yann@479: mkdir -p "${CT_BUILD_DIR}/build-gdb-cross" yann@479: cd "${CT_BUILD_DIR}/build-gdb-cross" yann@479: yann@602: cross_extra_config="${extra_config}" yann@583: if [ "${CT_CC_GCC_GMP_MPFR}" = "y" ]; then yann@602: cross_extra_config="${cross_extra_config} --with-gmp=${CT_PREFIX_DIR} --with-mpfr=${CT_PREFIX_DIR}" yann@583: fi yann@583: case "${CT_THREADS}" in yann@602: none) cross_extra_config="${cross_extra_config} --disable-threads";; yann@602: *) cross_extra_config="${cross_extra_config} --enable-threads";; yann@583: esac yann@583: yann@479: CC_for_gdb= yann@479: LD_for_gdb= yann@583: if [ "${CT_GDB_CROSS_STATIC}" = "y" ]; then yann@479: CC_for_gdb="gcc -static" yann@479: LD_for_gdb="ld -static" yann@479: fi yann@479: yann@602: CT_DoLog DEBUG "Extra config passed: '${cross_extra_config# }'" yann@602: yann@479: CC="${CC_for_gdb}" \ yann@583: LD="${LD_for_gdb}" \ yann@479: "${gdb_src_dir}/configure" \ yann@479: --build=${CT_BUILD} \ yann@479: --host=${CT_HOST} \ yann@479: --target=${CT_TARGET} \ yann@479: --prefix="${CT_PREFIX_DIR}" \ yann@479: --with-build-sysroot="${CT_SYSROOT_DIR}" \ yann@602: ${cross_extra_config} 2>&1 |CT_DoLog ALL yann@479: yann@479: CT_DoLog EXTRA "Building cross-gdb" yann@479: make ${PARALLELMFLAGS} 2>&1 |CT_DoLog ALL yann@479: yann@479: CT_DoLog EXTRA "Installing cross-gdb" yann@479: make install 2>&1 |CT_DoLog ALL yann@479: yann@479: CT_EndStep yann@479: fi yann@479: yann@479: if [ "${CT_GDB_NATIVE}" = "y" ]; then yann@573: CT_DoStep INFO "Installing native gdb" yann@573: yann@573: CT_DoStep INFO "Installing ncurses library" yann@573: CT_DoLog EXTRA "Configuring ncurses" yann@573: mkdir -p "${CT_BUILD_DIR}/build-ncurses" yann@573: cd "${CT_BUILD_DIR}/build-ncurses" yann@573: yann@573: ncurses_opts= yann@573: [ "${CT_CC_LANG_CXX}" = "y" ] || ncurses_opts="${ncurses_opts} --without-cxx --without-cxx-binding" yann@609: [ "${CT_CC_LANG_ADA}" = "y" ] || ncurses_opts="${ncurses_opts} --without-ada" yann@573: yann@573: "${CT_SRC_DIR}/ncurses-${CT_NCURSES_VERSION}/configure" \ yann@573: --build=${CT_BUILD} \ yann@573: --host=${CT_TARGET} \ yann@573: --with-build-cc=${CT_CC} \ yann@573: --with-build-cpp=${CT_CC} \ yann@573: --with-build-cflags="${CT_CFLAGS_FOR_HOST}" \ yann@573: --prefix=/usr \ yann@573: --with-shared \ yann@573: --without-sysmouse \ yann@573: --without-progs \ yann@573: --enable-termcap \ yann@573: ${ncurses_opts} 2>&1 |CT_DoLog ALL yann@573: yann@573: CT_DoLog EXTRA "Building ncurses" yann@573: make ${PARALLELMFLAGS} 2>&1 |CT_DoLog ALL yann@573: yann@573: CT_DoLog EXTRA "Installing ncurses" yann@577: mkdir -p -v "${CT_SYSROOT_DIR}/usr/bin" 2>&1 |CT_DoLog ALL yann@573: make DESTDIR="${CT_SYSROOT_DIR}" install 2>&1 |CT_DoLog ALL yann@573: yann@573: CT_EndStep yann@573: yann@479: CT_DoLog EXTRA "Configuring native gdb" yann@479: yann@479: mkdir -p "${CT_BUILD_DIR}/build-gdb-native" yann@479: cd "${CT_BUILD_DIR}/build-gdb-native" yann@479: yann@602: native_extra_config="${extra_config}" yann@583: case "${CT_THREADS}" in yann@602: none) native_extra_config="${native_extra_config} --disable-threads";; yann@602: *) native_extra_config="${native_extra_config} --enable-threads";; yann@583: esac yann@622: if [ "${CT_GDB_NATIVE_USE_GMP_MPFR}" = "y" ]; then yann@602: native_extra_config="${native_extra_config} --with-gmp=${CT_SYSROOT_DIR}/usr --with-mpfr=${CT_SYSROOT_DIR}/usr" yann@602: fi yann@583: yann@583: if [ "${CT_GDB_NATIVE_STATIC}" = "y" ]; then yann@583: CC_for_gdb="${CT_TARGET}-gcc -static" yann@583: LD_for_gdb="${CT_TARGET}-ld -static" yann@626: else yann@626: CC_for_gdb="${CT_TARGET}-gcc" yann@626: LD_for_gdb="${CT_TARGET}-ld" yann@583: fi yann@583: yann@583: export ac_cv_func_strncmp_works=yes yann@583: yann@602: CT_DoLog DEBUG "Extra config passed: '${native_extra_config# }'" yann@602: yann@583: CC="${CC_for_gdb}" \ yann@583: LD="${LD_for_gdb}" \ yann@479: "${gdb_src_dir}/configure" \ yann@479: --build=${CT_BUILD} \ yann@479: --host=${CT_TARGET} \ yann@479: --target=${CT_TARGET} \ yann@479: --prefix=/usr \ yann@479: --with-build-sysroot="${CT_SYSROOT_DIR}" \ yann@479: --without-uiout \ yann@479: --disable-tui \ yann@479: --disable-gdbtk \ yann@479: --without-x \ yann@479: --disable-sim \ yann@583: --disable-werror \ yann@479: --without-included-gettext \ yann@583: --without-develop \ yann@602: ${native_extra_config} 2>&1 |CT_DoLog ALL yann@479: yann@479: CT_DoLog EXTRA "Building native gdb" yann@479: make ${PARALLELMFLAGS} CC=${CT_TARGET}-${CT_CC} 2>&1 |CT_DoLog ALL yann@479: yann@479: CT_DoLog EXTRA "Installing native gdb" yann@479: make DESTDIR="${CT_DEBUG_INSTALL_DIR}" install 2>&1 |CT_DoLog ALL yann@479: yann@583: # Building a native gdb also builds a gdbserver yann@583: find "${CT_DEBUG_INSTALL_DIR}" -type f -name gdbserver -exec rm -fv {} + 2>&1 |CT_DoLog ALL yann@583: yann@583: unset ac_cv_func_strncmp_works yann@583: yann@583: CT_EndStep yann@583: fi yann@583: yann@583: if [ "${CT_GDB_GDBSERVER}" = "y" ]; then yann@583: CT_DoStep INFO "Installing gdbserver" yann@583: CT_DoLog EXTRA "Configuring gdbserver" yann@583: yann@583: mkdir -p "${CT_BUILD_DIR}/build-gdb-gdbserver" yann@583: cd "${CT_BUILD_DIR}/build-gdb-gdbserver" yann@583: yann@583: # Workaround for bad versions, where the configure yann@583: # script for gdbserver is not executable... yann@583: # Bah, GNU folks strike again... :-( yann@583: chmod +x "${gdb_src_dir}/gdb/gdbserver/configure" yann@583: yann@583: gdbserver_LDFLAGS= yann@583: if [ "${CT_GDB_GDBSERVER_STATIC}" = "y" ]; then yann@583: gdbserver_LDFLAGS=-static yann@583: fi yann@583: yann@602: gdbserver_extra_config="${extra_config}" yann@602: yann@583: LDFLAGS="${gdbserver_LDFLAGS}" \ yann@583: "${gdb_src_dir}/gdb/gdbserver/configure" \ yann@583: --build=${CT_BUILD} \ yann@583: --host=${CT_TARGET} \ yann@583: --target=${CT_TARGET} \ yann@583: --prefix=/usr \ yann@583: --sysconfdir=/etc \ yann@583: --localstatedir=/var \ yann@583: --includedir="${CT_HEADERS_DIR}" \ yann@583: --with-build-sysroot="${CT_SYSROOT_DIR}" \ yann@583: --program-prefix= \ yann@583: --without-uiout \ yann@583: --disable-tui \ yann@583: --disable-gdbtk \ yann@583: --without-x \ yann@583: --without-included-gettext \ yann@583: --without-develop \ yann@602: ${gdbserver_extra_config} 2>&1 |CT_DoLog ALL yann@583: yann@583: CT_DoLog EXTRA "Building gdbserver" yann@583: make ${PARALLELMFLAGS} CC=${CT_TARGET}-${CT_CC} 2>&1 |CT_DoLog ALL yann@583: yann@583: CT_DoLog EXTRA "Installing gdbserver" yann@583: make DESTDIR="${CT_DEBUG_INSTALL_DIR}" install 2>&1 |CT_DoLog ALL yann@583: yann@479: CT_EndStep yann@479: fi yann@479: }