yann@479: # Build script for the gdb debug facility yann@479: yann@1743: # The version of ncurses to use. Yes, it's hard-coded. yann@1743: # It's used only internally by crosstool-NG, and is yann@1743: # not exposed outside, so we don't care about providing yann@1743: # config options for this. yann@1743: CT_DEBUG_GDB_NCURSES_VERSION="5.7" yann@1743: 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@1743: CT_GetFile "ncurses-${CT_DEBUG_GDB_NCURSES_VERSION}" .tar.gz \ 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@1743: CT_Extract "ncurses-${CT_DEBUG_GDB_NCURSES_VERSION}" yann@1743: CT_Patch "ncurses-${CT_DEBUG_GDB_NCURSES_VERSION}" yann@598: fi yann@479: } yann@479: yann@479: do_debug_gdb_build() { yann@1481: local -a extra_config yann@1481: 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: # Version 6.3 and below behave badly with gdbmi yann@479: case "${CT_GDB_VERSION}" in yann@1481: 6.2*|6.3) extra_config+=("--disable-gdbmi");; yann@479: esac yann@479: yann@479: if [ "${CT_GDB_CROSS}" = "y" ]; then yann@1481: local -a cross_extra_config yann@1481: 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@1481: cross_extra_config=("${extra_config[@]}") yann@645: if [ "${CT_GMP_MPFR}" = "y" ]; then yann@1481: cross_extra_config+=("--with-gmp=${CT_PREFIX_DIR}" "--with-mpfr=${CT_PREFIX_DIR}") yann@583: fi yann@583: case "${CT_THREADS}" in yann@1481: none) cross_extra_config+=("--disable-threads");; yann@1481: *) 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@1481: 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@1481: "${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@1481: local -a native_extra_config yann@1481: local -a ncurses_opt yann@1481: yann@573: CT_DoStep INFO "Installing native gdb" yann@573: yann@1281: CT_DoStep INFO "Installing ncurses library" yann@1281: yann@1481: [ "${CT_CC_LANG_CXX}" = "y" ] || ncurses_opts+=("--without-cxx" "--without-cxx-binding") yann@1481: [ "${CT_CC_LANG_ADA}" = "y" ] || ncurses_opts+=("--without-ada") yann@1281: yann@1264: CT_DoStep INFO "Installing native ncurses tic" yann@1264: CT_DoLog EXTRA "Configuring ncurses tic" yann@1264: mkdir -p "${CT_BUILD_DIR}/build-ncurses-build-tic" yann@1264: cd "${CT_BUILD_DIR}/build-ncurses-build-tic" yann@1264: yann@1265: # Use build = CT_REAL_BUILD so that configure thinks it is yann@1265: # cross-compiling, and thus will use the ${CT_BUILD}-* yann@1265: # tools instead of searching for the native ones... yann@1744: CT_DoExecLog ALL \ yann@1744: "${CT_SRC_DIR}/ncurses-${CT_DEBUG_GDB_NCURSES_VERSION}/configure" \ yann@1744: --build=${CT_REAL_BUILD} \ yann@1744: --host=${CT_BUILD} \ yann@1744: --prefix=/usr \ yann@1744: --without-shared \ yann@1744: --enable-symlinks \ yann@1744: --with-build-cc=${CT_REAL_BUILD}-gcc \ yann@1744: --with-build-cpp=${CT_REAL_BUILD}-gcc \ yann@1744: --with-build-cflags="${CT_CFLAGS_FOR_HOST}" \ yann@1481: "${ncurses_opts[@]}" yann@1264: yann@1267: # Under some operating systems (eg. Winblows), there is an yann@1267: # extension appended to executables. Find that. yann@1267: tic_ext=$(grep -E '^x[[:space:]]*=' progs/Makefile |sed -r -e 's/^.*=[[:space:]]*//;') yann@1267: yann@1264: CT_DoLog EXTRA "Building ncurses tic" yann@1267: CT_DoExecLog ALL make ${PARALLELMFLAGS} -C include yann@1267: CT_DoExecLog ALL make ${PARALLELMFLAGS} -C progs "tic${tic_ext}" yann@1264: yann@1264: CT_DoLog EXTRA "Installing ncurses tic" yann@1264: CT_DoExecLog ALL install -d -m 0755 "${CT_PREFIX_DIR}/bin" yann@1267: CT_DoExecLog ALL install -m 0755 "progs/tic${tic_ext}" "${CT_PREFIX_DIR}/bin" yann@1264: yann@1281: CT_EndStep # tic build yann@1264: 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@1744: CT_DoExecLog ALL \ yann@1744: "${CT_SRC_DIR}/ncurses-${CT_DEBUG_GDB_NCURSES_VERSION}/configure" \ yann@1744: --build=${CT_BUILD} \ yann@1744: --host=${CT_TARGET} \ yann@1744: --with-build-cc=${CT_BUILD}-gcc \ yann@1744: --with-build-cpp=${CT_BUILD}-gcc \ yann@1744: --with-build-cflags="${CT_CFLAGS_FOR_HOST}" \ yann@1744: --prefix="${CT_BUILD_DIR}/ncurses" \ yann@1744: --without-shared \ yann@1744: --without-sysmouse \ yann@1744: --without-progs \ yann@1744: --enable-termcap \ yann@1481: "${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@1733: CT_DoExecLog ALL make install yann@573: yann@1281: # We no longer need the temporary tic. Remove it yann@1281: CT_DoExecLog DEBUG rm -fv "${CT_PREFIX_DIR}/bin/tic" yann@1281: yann@1281: 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@1481: native_extra_config=("${extra_config[@]}") yann@583: case "${CT_THREADS}" in yann@1481: none) native_extra_config+=("--disable-threads");; yann@1481: *) native_extra_config+=("--enable-threads");; yann@583: esac yann@622: if [ "${CT_GDB_NATIVE_USE_GMP_MPFR}" = "y" ]; then yann@1481: 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@1733: gdb_native_CFLAGS="-I${CT_BUILD_DIR}/ncurses/include -L${CT_BUILD_DIR}/ncurses/lib" yann@1733: yann@1481: CT_DoLog DEBUG "Extra config passed: '${native_extra_config[*]}'" yann@602: yann@583: CC="${CC_for_gdb}" \ yann@583: LD="${LD_for_gdb}" \ yann@1733: CFLAGS="${gdb_native_CFLAGS}" \ 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@1481: "${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@1555: CT_DoLog EXTRA "Cleaning up ncurses" yann@1555: cd "${CT_BUILD_DIR}/build-ncurses" yann@1555: CT_DoExecLog ALL make DESTDIR="${CT_SYSROOT_DIR}" uninstall yann@1555: yann@1733: CT_DoExecLog DEBUG rm -rf "${CT_BUILD_DIR}/ncurses" yann@1733: yann@1281: CT_EndStep # native gdb build yann@583: fi yann@583: yann@583: if [ "${CT_GDB_GDBSERVER}" = "y" ]; then yann@1481: local -a gdbserver_extra_config yann@1481: 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@1481: 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@1481: "${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: }