scripts/build/debug/300-gdb.sh
author Michael Hope <michael.hope@linaro.org>
Wed Oct 19 15:27:32 2011 +1300 (2011-10-19)
changeset 2739 f320e22f2cba
parent 2617 41bd6777fa4f
child 2751 bd17cca444ae
permissions -rw-r--r--
arch: add softfp support

Some architectures support a mixed hard/soft floating point, where
the compiler emits hardware floating point instructions, but passes
the operands in core (aka integer) registers.

For example, ARM supports this mode (to come in the next changeset).

Add support for softfp cross compilers to the GCC and GLIBC
configuration. Needed for Ubuntu and other distros that are softfp.

Signed-off-by: Michael Hope <michael.hope@linaro.org>
[yann.morin.1998@anciens.enib.fr: split the original patch]
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
     1 # Build script for the gdb debug facility
     2 
     3 # The version of ncurses to use. Yes, it's hard-coded.
     4 # It's used only internally by crosstool-NG, and is
     5 # not exposed outside, so we don't care about providing
     6 # config options for this.
     7 CT_DEBUG_GDB_NCURSES_VERSION="5.9"
     8 
     9 # Ditto for the expat library
    10 CT_DEBUG_GDB_EXPAT_VERSION="2.0.1"
    11 
    12 do_debug_gdb_parts() {
    13     do_gdb=
    14     do_ncurses=
    15     do_expat=
    16 
    17     if [ "${CT_GDB_CROSS}" = y ]; then
    18         do_gdb=y
    19     fi
    20 
    21     if [ "${CT_GDB_GDBSERVER}" = "y" ]; then
    22         do_gdb=y
    23     fi
    24 
    25     if [ "${CT_GDB_NATIVE}" = "y" ]; then
    26         do_gdb=y
    27         # GDB on Mingw depends on PDcurses, not ncurses
    28         if [ "${CT_MINGW32}" != "y" ]; then
    29             do_ncurses=y
    30         fi
    31         do_expat=y
    32     fi
    33 }
    34 
    35 do_debug_gdb_get() {
    36     local linaro_version
    37     local linaro_series
    38     local linaro_base_url="http://launchpad.net/gdb-linaro"
    39 
    40     # Account for the Linaro versioning
    41     linaro_version="$( echo "${CT_GDB_VERSION}"      \
    42                        |sed -r -e 's/^linaro-//;'   \
    43                      )"
    44     linaro_series="$( echo "${linaro_version}"      \
    45                       |sed -r -e 's/-.*//;'         \
    46                     )"
    47 
    48     do_debug_gdb_parts
    49 
    50     if [ "${do_gdb}" = "y" ]; then
    51         CT_GetFile "gdb-${CT_GDB_VERSION}"                          \
    52                    {ftp,http}://ftp.gnu.org/pub/gnu/gdb             \
    53                    ftp://sources.redhat.com/pub/gdb/{,old-}releases \
    54                    "${linaro_base_url}/${linaro_series}/${linaro_version}/+download"
    55     fi
    56 
    57     if [ "${do_ncurses}" = "y" ]; then
    58         CT_GetFile "ncurses-${CT_DEBUG_GDB_NCURSES_VERSION}" .tar.gz  \
    59                    {ftp,http}://ftp.gnu.org/pub/gnu/ncurses \
    60                    ftp://invisible-island.net/ncurses
    61     fi
    62 
    63     if [ "${do_expat}" = "y" ]; then
    64         CT_GetFile "expat-${CT_DEBUG_GDB_EXPAT_VERSION}" .tar.gz    \
    65                    http://mesh.dl.sourceforge.net/sourceforge/expat/expat/${CT_DEBUG_GDB_EXPAT_VERSION}
    66     fi
    67 }
    68 
    69 do_debug_gdb_extract() {
    70     do_debug_gdb_parts
    71 
    72     if [ "${do_gdb}" = "y" ]; then
    73         CT_Extract "gdb-${CT_GDB_VERSION}"
    74         CT_Patch "gdb" "${CT_GDB_VERSION}"
    75     fi
    76 
    77     if [ "${do_ncurses}" = "y" ]; then
    78         CT_Extract "ncurses-${CT_DEBUG_GDB_NCURSES_VERSION}"
    79         CT_DoExecLog ALL chmod -R u+w "${CT_SRC_DIR}/ncurses-${CT_DEBUG_GDB_NCURSES_VERSION}"
    80         CT_Patch "ncurses" "${CT_DEBUG_GDB_NCURSES_VERSION}"
    81     fi
    82 
    83     if [ "${do_expat}" = "y" ]; then
    84         CT_Extract "expat-${CT_DEBUG_GDB_EXPAT_VERSION}"
    85         CT_Patch "expat" "${CT_DEBUG_GDB_EXPAT_VERSION}"
    86     fi
    87 }
    88 
    89 do_debug_gdb_build() {
    90     local -a extra_config
    91 
    92     do_debug_gdb_parts
    93 
    94     gdb_src_dir="${CT_SRC_DIR}/gdb-${CT_GDB_VERSION}"
    95 
    96     # Version 6.3 and below behave badly with gdbmi
    97     case "${CT_GDB_VERSION}" in
    98         6.2*|6.3)   extra_config+=("--disable-gdbmi");;
    99     esac
   100 
   101     if [ "${CT_GDB_HAS_PKGVERSION_BUGURL}" = "y" ]; then
   102         extra_config+=("--with-pkgversion=${CT_PKGVERSION}")
   103         [ -n "${CT_TOOLCHAIN_BUGURL}" ] && extra_config+=("--with-bugurl=${CT_TOOLCHAIN_BUGURL}")
   104     fi
   105 
   106     if [ "${CT_GDB_CROSS}" = "y" ]; then
   107         local -a cross_extra_config
   108         local gcc_version
   109 
   110         CT_DoStep INFO "Installing cross-gdb"
   111         CT_DoLog EXTRA "Configuring cross-gdb"
   112 
   113         mkdir -p "${CT_BUILD_DIR}/build-gdb-cross"
   114         cd "${CT_BUILD_DIR}/build-gdb-cross"
   115 
   116         cross_extra_config=("${extra_config[@]}")
   117         case "${CT_THREADS}" in
   118             none)   cross_extra_config+=("--disable-threads");;
   119             *)      cross_extra_config+=("--enable-threads");;
   120         esac
   121         if [ "${CT_GDB_CROSS_PYTHON}" = "y" ]; then
   122             cross_extra_config+=( "--with-python=yes" )
   123         else
   124             cross_extra_config+=( "--with-python=no" )
   125         fi
   126 
   127         CC_for_gdb=
   128         LD_for_gdb=
   129         if [ "${CT_GDB_CROSS_STATIC}" = "y" ]; then
   130             CC_for_gdb="gcc -static"
   131             LD_for_gdb="ld -static"
   132         fi
   133 
   134         gdb_cross_configure="${gdb_src_dir}/configure"
   135 
   136         CT_DoLog DEBUG "Extra config passed: '${cross_extra_config[*]}'"
   137 
   138         CT_DoExecLog CFG                                \
   139         CC="${CC_for_gdb}"                              \
   140         LD="${LD_for_gdb}"                              \
   141         "${gdb_cross_configure}"                        \
   142             --build=${CT_BUILD}                         \
   143             --host=${CT_HOST}                           \
   144             --target=${CT_TARGET}                       \
   145             --prefix="${CT_PREFIX_DIR}"                 \
   146             --with-build-sysroot="${CT_SYSROOT_DIR}"    \
   147             --with-sysroot="${CT_SYSROOT_DIR}"          \
   148             --with-expat=yes                            \
   149             --disable-werror                            \
   150             "${cross_extra_config[@]}"
   151 
   152         CT_DoLog EXTRA "Building cross-gdb"
   153         CT_DoExecLog ALL make ${JOBSFLAGS}
   154 
   155         CT_DoLog EXTRA "Installing cross-gdb"
   156         CT_DoExecLog ALL make install
   157 
   158         if [ "${CT_GDB_INSTALL_GDBINIT}" = "y" ]; then
   159             CT_DoLog EXTRA "Install '.gdbinit' template"
   160             # See in scripts/build/internals.sh for why we do this
   161             if [ -f "${CT_SRC_DIR}/gcc-${CT_CC_VERSION}/gcc/BASE-VER" ]; then
   162                 gcc_version=$( cat "${CT_SRC_DIR}/gcc-${CT_CC_VERSION}/gcc/BASE-VER" )
   163             else
   164                 gcc_version=$( sed -r -e '/version_string/!d; s/^.+= "([^"]+)".*$/\1/;' \
   165                                    "${CT_SRC_DIR}/gcc-${CT_CC_VERSION}/gcc/version.c"   \
   166                              )
   167             fi
   168             ${sed} -r                                               \
   169                    -e "s:@@PREFIX@@:${CT_PREFIX_DIR}:;"             \
   170                    -e "s:@@VERSION@@:${gcc_version}:;"              \
   171                    "${CT_LIB_DIR}/scripts/build/debug/gdbinit.in"   \
   172                    >"${CT_PREFIX_DIR}/share/gdb/gdbinit"
   173         fi # Install gdbinit sample
   174 
   175         CT_EndStep
   176     fi
   177 
   178     if [ "${CT_GDB_NATIVE}" = "y" ]; then
   179         local -a native_extra_config
   180         local -a ncurses_opt
   181         local -a gdb_native_CFLAGS
   182 
   183         CT_DoStep INFO "Installing native gdb"
   184 
   185         native_extra_config=("${extra_config[@]}")
   186 
   187         # GDB on Mingw depends on PDcurses, not ncurses
   188         if [ "${do_ncurses}" = "y" ]; then
   189             CT_DoLog EXTRA "Building static target ncurses"
   190 
   191             [ "${CT_CC_LANG_CXX}" = "y" ] || ncurses_opts+=("--without-cxx" "--without-cxx-binding")
   192             [ "${CT_CC_LANG_ADA}" = "y" ] || ncurses_opts+=("--without-ada")
   193 
   194             mkdir -p "${CT_BUILD_DIR}/build-ncurses-build-tic"
   195             cd "${CT_BUILD_DIR}/build-ncurses-build-tic"
   196 
   197             # Use build = CT_REAL_BUILD so that configure thinks it is
   198             # cross-compiling, and thus will use the ${CT_BUILD}-*
   199             # tools instead of searching for the native ones...
   200             CT_DoExecLog CFG                                                    \
   201             "${CT_SRC_DIR}/ncurses-${CT_DEBUG_GDB_NCURSES_VERSION}/configure"   \
   202                 --build=${CT_BUILD}                                             \
   203                 --host=${CT_BUILD}                                              \
   204                 --prefix=/usr                                                   \
   205                 --enable-symlinks                                               \
   206                 --with-build-cc=${CT_REAL_BUILD}-gcc                            \
   207                 --with-build-cpp=${CT_REAL_BUILD}-gcc                           \
   208                 --with-build-cflags="${CT_CFLAGS_FOR_HOST}"                     \
   209                 "${ncurses_opts[@]}"
   210 
   211             # ncurses insists on linking tic statically. It does not work
   212             # on some OSes (eg. MacOS-X/Darwin/whatever-you-call-it).
   213             CT_DoExecLog DEBUG sed -r -i -e 's/-static//g;' "progs/Makefile"
   214 
   215             # Under some operating systems (eg. Winblows), there is an
   216             # extension appended to executables. Find that.
   217             tic_ext=$(grep -E '^x[[:space:]]*=' progs/Makefile |sed -r -e 's/^.*=[[:space:]]*//;')
   218 
   219             CT_DoExecLog ALL make ${JOBSFLAGS} -C include
   220             CT_DoExecLog ALL make ${JOBSFLAGS} -C progs "tic${tic_ext}"
   221 
   222             CT_DoExecLog ALL install -d -m 0755 "${CT_PREFIX_DIR}/buildtools"
   223             CT_DoExecLog ALL install -m 0755 "progs/tic${tic_ext}" "${CT_PREFIX_DIR}/buildtools"
   224 
   225             mkdir -p "${CT_BUILD_DIR}/build-ncurses"
   226             cd "${CT_BUILD_DIR}/build-ncurses"
   227 
   228             CT_DoExecLog CFG                                                    \
   229             "${CT_SRC_DIR}/ncurses-${CT_DEBUG_GDB_NCURSES_VERSION}/configure"   \
   230                 --build=${CT_BUILD}                                             \
   231                 --host=${CT_TARGET}                                             \
   232                 --with-build-cc=${CT_BUILD}-gcc                                 \
   233                 --with-build-cpp=${CT_BUILD}-gcc                                \
   234                 --with-build-cflags="${CT_CFLAGS_FOR_HOST}"                     \
   235                 --prefix="${CT_BUILD_DIR}/static-target"                        \
   236                 --without-shared                                                \
   237                 --without-sysmouse                                              \
   238                 --without-progs                                                 \
   239                 --enable-termcap                                                \
   240                 "${ncurses_opts[@]}"
   241 
   242             CT_DoExecLog ALL make ${JOBSFLAGS}
   243 
   244             CT_DoExecLog ALL make install
   245 
   246             # We no longer need the temporary tic. Remove it
   247             CT_DoExecLog DEBUG rm -fv "${CT_PREFIX_DIR}/buildtools/tic${tic_ext}"
   248 
   249             native_extra_config+=("--with-curses")
   250             # There's no better way to tell gdb where to find -lcurses... :-(
   251             gdb_native_CFLAGS+=("-I${CT_BUILD_DIR}/static-target/include")
   252             gdb_native_CFLAGS+=("-L${CT_BUILD_DIR}/static-target/lib")
   253         fi # do_ncurses
   254 
   255         if [ "${do_expat}" = "y" ]; then
   256             CT_DoLog EXTRA "Building static target expat"
   257 
   258             mkdir -p "${CT_BUILD_DIR}/expat-build"
   259             cd "${CT_BUILD_DIR}/expat-build"
   260 
   261             CT_DoExecLog CFG                                                \
   262             "${CT_SRC_DIR}/expat-${CT_DEBUG_GDB_EXPAT_VERSION}/configure"   \
   263                 --build=${CT_BUILD}                                         \
   264                 --host=${CT_TARGET}                                         \
   265                 --prefix="${CT_BUILD_DIR}/static-target"                    \
   266                 --enable-static                                             \
   267                 --disable-shared
   268 
   269             CT_DoExecLog ALL make ${JOBSFLAGS}
   270             CT_DoExecLog ALL make install
   271 
   272             native_extra_config+=("--with-expat")
   273             native_extra_config+=("--with-libexpat-prefix=${CT_BUILD_DIR}/static-target")
   274         fi # do_expat
   275 
   276         CT_DoLog EXTRA "Configuring native gdb"
   277 
   278         mkdir -p "${CT_BUILD_DIR}/build-gdb-native"
   279         cd "${CT_BUILD_DIR}/build-gdb-native"
   280 
   281         case "${CT_THREADS}" in
   282             none)   native_extra_config+=("--disable-threads");;
   283             *)      native_extra_config+=("--enable-threads");;
   284         esac
   285 
   286         if [ "${CT_GDB_NATIVE_STATIC}" = "y" ]; then
   287             CC_for_gdb="${CT_TARGET}-gcc -static"
   288             LD_for_gdb="${CT_TARGET}-ld -static"
   289         else
   290             CC_for_gdb="${CT_TARGET}-gcc"
   291             LD_for_gdb="${CT_TARGET}-ld"
   292         fi
   293 
   294         export ac_cv_func_strncmp_works=yes
   295 
   296         CT_DoLog DEBUG "Extra config passed: '${native_extra_config[*]}'"
   297 
   298         CT_DoExecLog CFG                                \
   299         CC="${CC_for_gdb}"                              \
   300         LD="${LD_for_gdb}"                              \
   301         CFLAGS="${gdb_native_CFLAGS[*]}"                \
   302         "${gdb_src_dir}/configure"                      \
   303             --build=${CT_BUILD}                         \
   304             --host=${CT_TARGET}                         \
   305             --target=${CT_TARGET}                       \
   306             --prefix=/usr                               \
   307             --with-build-sysroot="${CT_SYSROOT_DIR}"    \
   308             --without-uiout                             \
   309             --disable-tui                               \
   310             --disable-gdbtk                             \
   311             --without-x                                 \
   312             --disable-sim                               \
   313             --disable-werror                            \
   314             --without-included-gettext                  \
   315             --without-develop                           \
   316             "${native_extra_config[@]}"
   317 
   318         CT_DoLog EXTRA "Building native gdb"
   319         CT_DoExecLog ALL make ${JOBSFLAGS} CC=${CT_TARGET}-${CT_CC}
   320 
   321         CT_DoLog EXTRA "Installing native gdb"
   322         CT_DoExecLog ALL make DESTDIR="${CT_DEBUGROOT_DIR}" install
   323 
   324         # Building a native gdb also builds a gdbserver
   325         find "${CT_DEBUGROOT_DIR}" -type f -name gdbserver -exec rm -fv {} \; 2>&1 |CT_DoLog ALL
   326 
   327         unset ac_cv_func_strncmp_works
   328 
   329         # GDB on Mingw depends on PDcurses, not ncurses
   330         if [ "${CT_MINGW32}" != "y" ]; then
   331             CT_DoLog EXTRA "Cleaning up ncurses"
   332             cd "${CT_BUILD_DIR}/build-ncurses"
   333             CT_DoExecLog ALL make DESTDIR="${CT_SYSROOT_DIR}" uninstall
   334 
   335             CT_DoExecLog DEBUG rm -rf "${CT_BUILD_DIR}/ncurses"
   336         fi
   337 
   338         CT_EndStep # native gdb build
   339     fi
   340 
   341     if [ "${CT_GDB_GDBSERVER}" = "y" ]; then
   342         local -a gdbserver_extra_config
   343 
   344         CT_DoStep INFO "Installing gdbserver"
   345         CT_DoLog EXTRA "Configuring gdbserver"
   346 
   347         mkdir -p "${CT_BUILD_DIR}/build-gdb-gdbserver"
   348         cd "${CT_BUILD_DIR}/build-gdb-gdbserver"
   349 
   350         # Workaround for bad versions, where the configure
   351         # script for gdbserver is not executable...
   352         # Bah, GNU folks strike again... :-(
   353         chmod +x "${gdb_src_dir}/gdb/gdbserver/configure"
   354 
   355         gdbserver_LDFLAGS=
   356         if [ "${CT_GDB_GDBSERVER_STATIC}" = "y" ]; then
   357             gdbserver_LDFLAGS=-static
   358         fi
   359 
   360         gdbserver_extra_config=("${extra_config[@]}")
   361 
   362         CT_DoExecLog CFG                                \
   363         LDFLAGS="${gdbserver_LDFLAGS}"                  \
   364         "${gdb_src_dir}/gdb/gdbserver/configure"        \
   365             --build=${CT_BUILD}                         \
   366             --host=${CT_TARGET}                         \
   367             --target=${CT_TARGET}                       \
   368             --prefix=/usr                               \
   369             --sysconfdir=/etc                           \
   370             --localstatedir=/var                        \
   371             --includedir="${CT_HEADERS_DIR}"            \
   372             --with-build-sysroot="${CT_SYSROOT_DIR}"    \
   373             --program-prefix=                           \
   374             --without-uiout                             \
   375             --disable-tui                               \
   376             --disable-gdbtk                             \
   377             --without-x                                 \
   378             --without-included-gettext                  \
   379             --without-develop                           \
   380             --disable-werror                            \
   381             "${gdbserver_extra_config[@]}"
   382 
   383         CT_DoLog EXTRA "Building gdbserver"
   384         CT_DoExecLog ALL make ${JOBSFLAGS} CC=${CT_TARGET}-${CT_CC}
   385 
   386         CT_DoLog EXTRA "Installing gdbserver"
   387         CT_DoExecLog ALL make DESTDIR="${CT_DEBUGROOT_DIR}" install
   388 
   389         CT_EndStep
   390     fi
   391 }