From 3950f8e87d5717bdb5e3bcdac69a544cef8efd28 Mon Sep 17 00:00:00 2001 From: "Yann E. MORIN\"" Date: Thu, 19 Jun 2008 15:33:33 +0000 Subject: A bunch of fixes/improvements to the gdb build: - allow native builds (both shared and static) - fix enabling threads - better handle the gdbserver case - introduce the ncurses library to allow native builds - re-order config options adequately /trunk/scripts/build/debug/300-gdb.sh | 126 79 47 0 ++++++++++++++++++++++++++--------------- /trunk/config/debug/gdb.in | 45 33 12 0 +++++++++++---- 2 files changed, 112 insertions(+), 59 deletions(-) diff --git a/config/debug/gdb.in b/config/debug/gdb.in index 8bebde7..4b35cc2 100644 --- a/config/debug/gdb.in +++ b/config/debug/gdb.in @@ -13,38 +13,59 @@ config GDB_CROSS bool prompt "Cross-gdb" default y + select GDB_GDBSERVER help - Build and install a cross-gdb for the target, and to run on host. + Build and install a cross-gdb for the target, to run on host. -config GDB_CROSS_STATIC_GDB +config GDB_CROSS_STATIC bool prompt "Build a static cross gdb" default n depends on GDB_CROSS help A static cross gdb can be usefull if you debug on a machine that is - not the one that is used to compile. + not the one that is used to compile the toolchain. -config GDB_CROSS_STATIC_GDBSERVER + That way, you can share the cross-gdb without installing a toolchain + on every machine that will be used to debug target programs. + +config GDB_NATIVE bool - prompt "Build a static gdbserver" + prompt "Native gdb" default n - depends on GDB_CROSS + select GDB_GDBSERVER + help + Build and install a native gdb for the target, to run on the target. + +config GDB_NATIVE_STATIC + bool + prompt "Build a static native gdb" + default n + depends on GDB_NATIVE help In case you have trouble with dynamic loading of shared libraries, - you will find that a static gdbserver comes in handy. + you will find that a static gdb comes in handy. -config GDB_NATIVE +config GDB_GDBSERVER bool - prompt "Native gdb (EXPERIMENTAL)" + prompt "gdbserver" default n - depends on EXPERIMENTAL help - Build and install a native gdb for the target, to run on the target. + Build and install a gdbserver for the target, to run on the target. + +config GDB_GDBSERVER_STATIC + bool + prompt "Build a static gdbserver" + default n + depends on GDB_GDBSERVER + help + In case you have trouble with dynamic loading of shared libraries, + you will find that a static gdbserver comes in handy. choice bool prompt "gdb version" + depends on GDB_CROSS || GDB_NATIVE || GDB_GDBSERVER config GDB_V_snapshot bool @@ -118,6 +139,6 @@ config NCURSES_VERSION default "4.2" if NCURSES_V_4_2 default "5.6" if NCURSES_V_5_6 -endif # ncurses +endif # GDB_NATIVE --> ncurses endif diff --git a/scripts/build/debug/300-gdb.sh b/scripts/build/debug/300-gdb.sh index b15b281..703082b 100644 --- a/scripts/build/debug/300-gdb.sh +++ b/scripts/build/debug/300-gdb.sh @@ -47,22 +47,29 @@ do_debug_gdb_build() { mkdir -p "${CT_BUILD_DIR}/build-gdb-cross" cd "${CT_BUILD_DIR}/build-gdb-cross" + if [ "${CT_CC_GCC_GMP_MPFR}" = "y" ]; then + extra_config="${extra_config} --with-gmp=${CT_PREFIX_DIR} --with-mpfr=${CT_PREFIX_DIR}" + fi + case "${CT_THREADS}" in + none) extra_config="${extra_config} --disable-threads";; + *) extra_config="${extra_config} --enable-threads";; + esac + CC_for_gdb= LD_for_gdb= - if [ "${CT_GDB_CROSS_STATIC_GDBSERVER}" = "y" ]; then + if [ "${CT_GDB_CROSS_STATIC}" = "y" ]; then CC_for_gdb="gcc -static" LD_for_gdb="ld -static" fi CC="${CC_for_gdb}" \ - LD="${LD_forgdb}" \ + LD="${LD_for_gdb}" \ "${gdb_src_dir}/configure" \ --build=${CT_BUILD} \ --host=${CT_HOST} \ --target=${CT_TARGET} \ --prefix="${CT_PREFIX_DIR}" \ --with-build-sysroot="${CT_SYSROOT_DIR}" \ - --enable-threads \ ${extra_config} 2>&1 |CT_DoLog ALL CT_DoLog EXTRA "Building cross-gdb" @@ -72,48 +79,6 @@ do_debug_gdb_build() { make install 2>&1 |CT_DoLog ALL CT_EndStep - - CT_DoStep INFO "Installing gdbserver" - CT_DoLog EXTRA "Configuring gdbserver" - - mkdir -p "${CT_BUILD_DIR}/build-gdb-gdbserver" - cd "${CT_BUILD_DIR}/build-gdb-gdbserver" - - # Workaround for bad versions, where the configure - # script for gdbserver is not executable... - # Bah, GNU folks strike again... :-( - chmod +x "${gdb_src_dir}/gdb/gdbserver/configure" - - gdbserver_LDFLAGS= - if [ "${CT_GDB_CROSS_STATIC_GDBSERVER}" = "y" ]; then - gdbserver_LDFLAGS=-static - fi - - LDFLAGS="${gdbserver_LDFLAGS}" \ - "${gdb_src_dir}/gdb/gdbserver/configure" \ - --build=${CT_BUILD} \ - --host=${CT_TARGET} \ - --target=${CT_TARGET} \ - --prefix=/usr \ - --sysconfdir=/etc \ - --localstatedir=/var \ - --includedir="${CT_HEADERS_DIR}" \ - --with-build-sysroot="${CT_SYSROOT_DIR}" \ - --program-prefix= \ - --without-uiout \ - --disable-tui \ - --disable-gdbtk \ - --without-x \ - --without-included-gettext \ - ${extra_config} 2>&1 |CT_DoLog ALL - - CT_DoLog EXTRA "Building gdbserver" - make ${PARALLELMFLAGS} CC=${CT_TARGET}-${CT_CC} 2>&1 |CT_DoLog ALL - - CT_DoLog EXTRA "Installing gdbserver" - make DESTDIR="${CT_DEBUG_INSTALL_DIR}" install 2>&1 |CT_DoLog ALL - - CT_EndStep fi if [ "${CT_GDB_NATIVE}" = "y" ]; then @@ -138,7 +103,6 @@ do_debug_gdb_build() { --without-sysmouse \ --without-progs \ --enable-termcap \ - --without-develop \ ${ncurses_opts} 2>&1 |CT_DoLog ALL CT_DoLog EXTRA "Building ncurses" @@ -155,6 +119,22 @@ do_debug_gdb_build() { mkdir -p "${CT_BUILD_DIR}/build-gdb-native" cd "${CT_BUILD_DIR}/build-gdb-native" + case "${CT_THREADS}" in + none) extra_config="${extra_config} --disable-threads";; + *) extra_config="${extra_config} --enable-threads";; + esac + + CC_for_gdb= + LD_for_gdb= + if [ "${CT_GDB_NATIVE_STATIC}" = "y" ]; then + CC_for_gdb="${CT_TARGET}-gcc -static" + LD_for_gdb="${CT_TARGET}-ld -static" + fi + + export ac_cv_func_strncmp_works=yes + + CC="${CC_for_gdb}" \ + LD="${LD_for_gdb}" \ "${gdb_src_dir}/configure" \ --build=${CT_BUILD} \ --host=${CT_TARGET} \ @@ -166,8 +146,9 @@ do_debug_gdb_build() { --disable-gdbtk \ --without-x \ --disable-sim \ - --disable-gdbserver \ + --disable-werror \ --without-included-gettext \ + --without-develop \ ${extra_config} 2>&1 |CT_DoLog ALL CT_DoLog EXTRA "Building native gdb" @@ -176,6 +157,57 @@ do_debug_gdb_build() { CT_DoLog EXTRA "Installing native gdb" make DESTDIR="${CT_DEBUG_INSTALL_DIR}" install 2>&1 |CT_DoLog ALL + # Building a native gdb also builds a gdbserver + CT_DoLog DEBUG "Removing spurious gdbserver" + find "${CT_DEBUG_INSTALL_DIR}" -type f -name gdbserver -exec rm -fv {} + 2>&1 |CT_DoLog ALL + + unset ac_cv_func_strncmp_works + + CT_EndStep + fi + + if [ "${CT_GDB_GDBSERVER}" = "y" ]; then + CT_DoStep INFO "Installing gdbserver" + CT_DoLog EXTRA "Configuring gdbserver" + + mkdir -p "${CT_BUILD_DIR}/build-gdb-gdbserver" + cd "${CT_BUILD_DIR}/build-gdb-gdbserver" + + # Workaround for bad versions, where the configure + # script for gdbserver is not executable... + # Bah, GNU folks strike again... :-( + chmod +x "${gdb_src_dir}/gdb/gdbserver/configure" + + gdbserver_LDFLAGS= + if [ "${CT_GDB_GDBSERVER_STATIC}" = "y" ]; then + gdbserver_LDFLAGS=-static + fi + + LDFLAGS="${gdbserver_LDFLAGS}" \ + "${gdb_src_dir}/gdb/gdbserver/configure" \ + --build=${CT_BUILD} \ + --host=${CT_TARGET} \ + --target=${CT_TARGET} \ + --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --includedir="${CT_HEADERS_DIR}" \ + --with-build-sysroot="${CT_SYSROOT_DIR}" \ + --program-prefix= \ + --without-uiout \ + --disable-tui \ + --disable-gdbtk \ + --without-x \ + --without-included-gettext \ + --without-develop \ + ${extra_config} 2>&1 |CT_DoLog ALL + + CT_DoLog EXTRA "Building gdbserver" + make ${PARALLELMFLAGS} CC=${CT_TARGET}-${CT_CC} 2>&1 |CT_DoLog ALL + + CT_DoLog EXTRA "Installing gdbserver" + make DESTDIR="${CT_DEBUG_INSTALL_DIR}" install 2>&1 |CT_DoLog ALL + CT_EndStep fi } -- cgit v0.10.2-6-g49f6