yann@479: # Build script for the gdb debug facility 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@821: do_debug_gdb_parts() { yann@821: do_gdb= yann@821: do_insight= yann@821: do_ncurses= yann@821: yann@821: if [ "${CT_GDB_CROSS}" = y ]; then yann@821: if [ "${CT_GDB_CROSS_INSIGHT}" = "y" ]; then yann@821: do_insight=y yann@821: else yann@821: do_gdb=y yann@821: fi yann@821: fi yann@821: yann@821: if [ "${CT_GDB_GDBSERVER}" = "y" ]; then yann@821: do_gdb=y yann@821: fi yann@821: yann@821: if [ "${CT_GDB_NATIVE}" = "y" ]; then yann@821: do_gdb=y yann@821: do_ncurses=y yann@821: fi yann@821: } yann@821: yann@479: do_debug_gdb_get() { yann@821: do_debug_gdb_parts yann@821: yann@821: if [ "${do_gdb}" = "y" ]; then yann@821: CT_GetFile "gdb$(do_debug_gdb_suffix)" \ yann@821: {ftp,http}://ftp.gnu.org/pub/gnu/gdb \ yann@821: ftp://sources.redhat.com/pub/gdb/{{,old-}releases,snapshots/current} yann@821: fi yann@821: yann@821: if [ "${do_insight}" = "y" ]; then yann@821: CT_GetFile "insight-${CT_GDB_VERSION}" \ yann@821: ftp://sourceware.org/pub/insight/releases \ yann@821: {ftp,http}://ftp.twaren.net/Unix/Sourceware/insight/releases \ yann@821: {ftp,http}://ftp.gwdg.de/pub/linux/sources.redhat.com/insight/releases yann@821: fi yann@821: yann@821: if [ "${do_ncurses}" = "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@821: do_debug_gdb_parts yann@821: yann@821: if [ "${do_gdb}" = "y" ]; then yann@1126: CT_Extract "gdb$(do_debug_gdb_suffix)" yann@1126: CT_Patch "gdb$(do_debug_gdb_suffix)" yann@821: fi yann@821: yann@821: if [ "${do_insight}" = "y" ]; then yann@1126: CT_Extract "insight-${CT_GDB_VERSION}" yann@1126: CT_Patch "insight-${CT_GDB_VERSION}" yann@821: fi yann@821: yann@821: if [ "${do_ncurses}" = "y" ]; then yann@1126: CT_Extract "ncurses-${CT_NCURSES_VERSION}" yann@1126: CT_Patch "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@821: insight_src_dir="${CT_SRC_DIR}/insight-${CT_GDB_VERSION}" 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@645: if [ "${CT_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@821: gdb_cross_configure="${gdb_src_dir}/configure" yann@821: [ "${CT_GDB_CROSS_INSIGHT}" = "y" ] && gdb_cross_configure="${insight_src_dir}/configure" yann@821: 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@669: CT_DoExecLog ALL \ yann@821: "${gdb_cross_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@801: --disable-werror \ yann@669: ${cross_extra_config} yann@479: yann@479: CT_DoLog EXTRA "Building cross-gdb" yann@669: CT_DoExecLog ALL make ${PARALLELMFLAGS} yann@479: yann@479: CT_DoLog EXTRA "Installing cross-gdb" yann@669: CT_DoExecLog ALL make install 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: 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@1365: CT_DoStep INFO "Installing native ncurses tic" yann@1365: CT_DoLog EXTRA "Configuring ncurses tic" yann@1365: mkdir -p "${CT_BUILD_DIR}/build-ncurses-build-tic" yann@1365: cd "${CT_BUILD_DIR}/build-ncurses-build-tic" yann@1365: yann@1365: # Use build = CT_REAL_BUILD so that configure thinks it is yann@1365: # cross-compiling, and thus will use the ${CT_BUILD}-* yann@1365: # tools instead of searching for the native ones... yann@1365: CT_DoExecLog ALL \ yann@1365: "${CT_SRC_DIR}/ncurses-${CT_NCURSES_VERSION}/configure" \ yann@1365: --build=${CT_REAL_BUILD} \ yann@1365: --host=${CT_BUILD} \ yann@1365: --prefix=/usr \ yann@1365: --without-shared \ yann@1365: --enable-symlinks \ yann@1365: --with-build-cc=${CT_REAL_BUILD}-gcc \ yann@1365: --with-build-cpp=${CT_REAL_BUILD}-gcc \ yann@1365: --with-build-cflags="${CT_CFLAGS_FOR_HOST}" \ yann@1365: ${ncurses_opts} yann@1365: yann@1365: # Under some operating systems (eg. Winblows), there is an yann@1365: # extension appended to executables. Find that. yann@1365: tic_ext=$(grep -E '^x[[:space:]]*=' progs/Makefile |sed -r -e 's/^.*=[[:space:]]*//;') yann@1365: yann@1365: CT_DoLog EXTRA "Building ncurses tic" yann@1365: CT_DoExecLog ALL make ${PARALLELMFLAGS} -C include yann@1365: CT_DoExecLog ALL make ${PARALLELMFLAGS} -C progs "tic${tic_ext}" yann@1365: yann@1365: CT_DoLog EXTRA "Installing ncurses tic" yann@1365: CT_DoExecLog ALL install -d -m 0755 "${CT_PREFIX_DIR}/bin" yann@1365: CT_DoExecLog ALL install -m 0755 "progs/tic${tic_ext}" "${CT_PREFIX_DIR}/bin" yann@1365: yann@1365: CT_EndStep # tic build yann@1365: yann@1365: CT_DoLog EXTRA "Configuring ncurses" yann@1365: mkdir -p "${CT_BUILD_DIR}/build-ncurses" yann@1365: cd "${CT_BUILD_DIR}/build-ncurses" yann@1365: yann@669: CT_DoExecLog ALL \ yann@573: "${CT_SRC_DIR}/ncurses-${CT_NCURSES_VERSION}/configure" \ yann@573: --build=${CT_BUILD} \ yann@573: --host=${CT_TARGET} \ yann@1365: --with-build-cc=${CT_BUILD}-gcc \ yann@1365: --with-build-cpp=${CT_BUILD}-gcc \ 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@669: ${ncurses_opts} yann@573: yann@573: CT_DoLog EXTRA "Building ncurses" yann@669: CT_DoExecLog ALL make ${PARALLELMFLAGS} yann@573: yann@573: CT_DoLog EXTRA "Installing ncurses" yann@669: mkdir -p "${CT_SYSROOT_DIR}/usr/bin" yann@669: CT_DoExecLog ALL make DESTDIR="${CT_SYSROOT_DIR}" install yann@573: yann@1365: # We no longer need the temporary tic. Remove it yann@1365: CT_DoExecLog DEBUG rm -fv "${CT_PREFIX_DIR}/bin/tic" yann@1365: yann@1365: CT_EndStep # ncurses build 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@669: CT_DoExecLog ALL \ 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@669: ${native_extra_config} yann@479: yann@479: CT_DoLog EXTRA "Building native gdb" yann@669: CT_DoExecLog ALL make ${PARALLELMFLAGS} CC=${CT_TARGET}-${CT_CC} yann@479: yann@479: CT_DoLog EXTRA "Installing native gdb" yann@1219: CT_DoExecLog ALL make DESTDIR="${CT_DEBUGROOT_DIR}" install yann@479: yann@583: # Building a native gdb also builds a gdbserver yann@1219: find "${CT_DEBUGROOT_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@1365: CT_EndStep # native gdb build 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@669: CT_DoExecLog ALL \ 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@801: --disable-werror \ yann@669: ${gdbserver_extra_config} yann@583: yann@583: CT_DoLog EXTRA "Building gdbserver" yann@669: CT_DoExecLog ALL make ${PARALLELMFLAGS} CC=${CT_TARGET}-${CT_CC} yann@583: yann@583: CT_DoLog EXTRA "Installing gdbserver" yann@1219: CT_DoExecLog ALL make DESTDIR="${CT_DEBUGROOT_DIR}" install yann@583: yann@479: CT_EndStep yann@479: fi yann@479: }