scripts/build/debug/300-gdb.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Thu Aug 25 18:30:18 2011 +0200 (2011-08-25)
changeset 2645 9cb3554bebeb
parent 2616 d32d723b239c
child 2703 bd2529ef6665
permissions -rw-r--r--
configure: check for lzma

Some packages are available as LZMA tarballs. LZMA is a relatively recent
compression algorithm; it's slightly better than bzip2, but offers much
faster decompression. LZMA is now deprecated in favor of XZ, but some
packages switched to LZMA when XZ was not yet available, or still in its
infancy. Latest XZ (which totaly obsoletes LZMA) offers a backward LZMA-
compatible utility, so we can check for 'lzma' nonetheless.

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 
   122         CC_for_gdb=
   123         LD_for_gdb=
   124         if [ "${CT_GDB_CROSS_STATIC}" = "y" ]; then
   125             CC_for_gdb="gcc -static"
   126             LD_for_gdb="ld -static"
   127         fi
   128 
   129         gdb_cross_configure="${gdb_src_dir}/configure"
   130 
   131         CT_DoLog DEBUG "Extra config passed: '${cross_extra_config[*]}'"
   132 
   133         CT_DoExecLog CFG                                \
   134         CC="${CC_for_gdb}"                              \
   135         LD="${LD_for_gdb}"                              \
   136         "${gdb_cross_configure}"                        \
   137             --build=${CT_BUILD}                         \
   138             --host=${CT_HOST}                           \
   139             --target=${CT_TARGET}                       \
   140             --prefix="${CT_PREFIX_DIR}"                 \
   141             --with-build-sysroot="${CT_SYSROOT_DIR}"    \
   142             --with-sysroot="${CT_SYSROOT_DIR}"          \
   143             --with-expat=yes                            \
   144             --disable-werror                            \
   145             "${cross_extra_config[@]}"
   146 
   147         CT_DoLog EXTRA "Building cross-gdb"
   148         CT_DoExecLog ALL make ${JOBSFLAGS}
   149 
   150         CT_DoLog EXTRA "Installing cross-gdb"
   151         CT_DoExecLog ALL make install
   152 
   153         if [ "${CT_GDB_INSTALL_GDBINIT}" = "y" ]; then
   154             CT_DoLog EXTRA "Install '.gdbinit' template"
   155             # See in scripts/build/internals.sh for why we do this
   156             if [ -f "${CT_SRC_DIR}/gcc-${CT_CC_VERSION}/gcc/BASE-VER" ]; then
   157                 gcc_version=$( cat "${CT_SRC_DIR}/gcc-${CT_CC_VERSION}/gcc/BASE-VER" )
   158             else
   159                 gcc_version=$( sed -r -e '/version_string/!d; s/^.+= "([^"]+)".*$/\1/;' \
   160                                    "${CT_SRC_DIR}/gcc-${CT_CC_VERSION}/gcc/version.c"   \
   161                              )
   162             fi
   163             ${sed} -r                                               \
   164                    -e "s:@@PREFIX@@:${CT_PREFIX_DIR}:;"             \
   165                    -e "s:@@VERSION@@:${gcc_version}:;"              \
   166                    "${CT_LIB_DIR}/scripts/build/debug/gdbinit.in"   \
   167                    >"${CT_PREFIX_DIR}/share/gdb/gdbinit"
   168         fi # Install gdbinit sample
   169 
   170         CT_EndStep
   171     fi
   172 
   173     if [ "${CT_GDB_NATIVE}" = "y" ]; then
   174         local -a native_extra_config
   175         local -a ncurses_opt
   176         local -a gdb_native_CFLAGS
   177 
   178         CT_DoStep INFO "Installing native gdb"
   179 
   180         native_extra_config=("${extra_config[@]}")
   181 
   182         # GDB on Mingw depends on PDcurses, not ncurses
   183         if [ "${do_ncurses}" = "y" ]; then
   184             CT_DoLog EXTRA "Building static target ncurses"
   185 
   186             [ "${CT_CC_LANG_CXX}" = "y" ] || ncurses_opts+=("--without-cxx" "--without-cxx-binding")
   187             [ "${CT_CC_LANG_ADA}" = "y" ] || ncurses_opts+=("--without-ada")
   188 
   189             mkdir -p "${CT_BUILD_DIR}/build-ncurses-build-tic"
   190             cd "${CT_BUILD_DIR}/build-ncurses-build-tic"
   191 
   192             # Use build = CT_REAL_BUILD so that configure thinks it is
   193             # cross-compiling, and thus will use the ${CT_BUILD}-*
   194             # tools instead of searching for the native ones...
   195             CT_DoExecLog CFG                                                    \
   196             "${CT_SRC_DIR}/ncurses-${CT_DEBUG_GDB_NCURSES_VERSION}/configure"   \
   197                 --build=${CT_BUILD}                                             \
   198                 --host=${CT_BUILD}                                              \
   199                 --prefix=/usr                                                   \
   200                 --enable-symlinks                                               \
   201                 --with-build-cc=${CT_REAL_BUILD}-gcc                            \
   202                 --with-build-cpp=${CT_REAL_BUILD}-gcc                           \
   203                 --with-build-cflags="${CT_CFLAGS_FOR_HOST}"                     \
   204                 "${ncurses_opts[@]}"
   205 
   206             # ncurses insists on linking tic statically. It does not work
   207             # on some OSes (eg. MacOS-X/Darwin/whatever-you-call-it).
   208             CT_DoExecLog DEBUG sed -r -i -e 's/-static//g;' "progs/Makefile"
   209 
   210             # Under some operating systems (eg. Winblows), there is an
   211             # extension appended to executables. Find that.
   212             tic_ext=$(grep -E '^x[[:space:]]*=' progs/Makefile |sed -r -e 's/^.*=[[:space:]]*//;')
   213 
   214             CT_DoExecLog ALL make ${JOBSFLAGS} -C include
   215             CT_DoExecLog ALL make ${JOBSFLAGS} -C progs "tic${tic_ext}"
   216 
   217             CT_DoExecLog ALL install -d -m 0755 "${CT_PREFIX_DIR}/buildtools"
   218             CT_DoExecLog ALL install -m 0755 "progs/tic${tic_ext}" "${CT_PREFIX_DIR}/buildtools"
   219 
   220             mkdir -p "${CT_BUILD_DIR}/build-ncurses"
   221             cd "${CT_BUILD_DIR}/build-ncurses"
   222 
   223             CT_DoExecLog CFG                                                    \
   224             "${CT_SRC_DIR}/ncurses-${CT_DEBUG_GDB_NCURSES_VERSION}/configure"   \
   225                 --build=${CT_BUILD}                                             \
   226                 --host=${CT_TARGET}                                             \
   227                 --with-build-cc=${CT_BUILD}-gcc                                 \
   228                 --with-build-cpp=${CT_BUILD}-gcc                                \
   229                 --with-build-cflags="${CT_CFLAGS_FOR_HOST}"                     \
   230                 --prefix="${CT_BUILD_DIR}/static-target"                        \
   231                 --without-shared                                                \
   232                 --without-sysmouse                                              \
   233                 --without-progs                                                 \
   234                 --enable-termcap                                                \
   235                 "${ncurses_opts[@]}"
   236 
   237             CT_DoExecLog ALL make ${JOBSFLAGS}
   238 
   239             CT_DoExecLog ALL make install
   240 
   241             # We no longer need the temporary tic. Remove it
   242             CT_DoExecLog DEBUG rm -fv "${CT_PREFIX_DIR}/buildtools/tic${tic_ext}"
   243 
   244             native_extra_config+=("--with-curses")
   245             # There's no better way to tell gdb where to find -lcurses... :-(
   246             gdb_native_CFLAGS+=("-I${CT_BUILD_DIR}/static-target/include")
   247             gdb_native_CFLAGS+=("-L${CT_BUILD_DIR}/static-target/lib")
   248         fi # do_ncurses
   249 
   250         if [ "${do_expat}" = "y" ]; then
   251             CT_DoLog EXTRA "Building static target expat"
   252 
   253             mkdir -p "${CT_BUILD_DIR}/expat-build"
   254             cd "${CT_BUILD_DIR}/expat-build"
   255 
   256             CT_DoExecLog CFG                                                \
   257             "${CT_SRC_DIR}/expat-${CT_DEBUG_GDB_EXPAT_VERSION}/configure"   \
   258                 --build=${CT_BUILD}                                         \
   259                 --host=${CT_TARGET}                                         \
   260                 --prefix="${CT_BUILD_DIR}/static-target"                    \
   261                 --enable-static                                             \
   262                 --disable-shared
   263 
   264             CT_DoExecLog ALL make ${JOBSFLAGS}
   265             CT_DoExecLog ALL make install
   266 
   267             native_extra_config+=("--with-expat")
   268             native_extra_config+=("--with-libexpat-prefix=${CT_BUILD_DIR}/static-target")
   269         fi # do_expat
   270 
   271         CT_DoLog EXTRA "Configuring native gdb"
   272 
   273         mkdir -p "${CT_BUILD_DIR}/build-gdb-native"
   274         cd "${CT_BUILD_DIR}/build-gdb-native"
   275 
   276         case "${CT_THREADS}" in
   277             none)   native_extra_config+=("--disable-threads");;
   278             *)      native_extra_config+=("--enable-threads");;
   279         esac
   280 
   281         if [ "${CT_GDB_NATIVE_STATIC}" = "y" ]; then
   282             CC_for_gdb="${CT_TARGET}-gcc -static"
   283             LD_for_gdb="${CT_TARGET}-ld -static"
   284         else
   285             CC_for_gdb="${CT_TARGET}-gcc"
   286             LD_for_gdb="${CT_TARGET}-ld"
   287         fi
   288 
   289         export ac_cv_func_strncmp_works=yes
   290 
   291         CT_DoLog DEBUG "Extra config passed: '${native_extra_config[*]}'"
   292 
   293         CT_DoExecLog CFG                                \
   294         CC="${CC_for_gdb}"                              \
   295         LD="${LD_for_gdb}"                              \
   296         CFLAGS="${gdb_native_CFLAGS[*]}"                \
   297         "${gdb_src_dir}/configure"                      \
   298             --build=${CT_BUILD}                         \
   299             --host=${CT_TARGET}                         \
   300             --target=${CT_TARGET}                       \
   301             --prefix=/usr                               \
   302             --with-build-sysroot="${CT_SYSROOT_DIR}"    \
   303             --without-uiout                             \
   304             --disable-tui                               \
   305             --disable-gdbtk                             \
   306             --without-x                                 \
   307             --disable-sim                               \
   308             --disable-werror                            \
   309             --without-included-gettext                  \
   310             --without-develop                           \
   311             "${native_extra_config[@]}"
   312 
   313         CT_DoLog EXTRA "Building native gdb"
   314         CT_DoExecLog ALL make ${JOBSFLAGS} CC=${CT_TARGET}-${CT_CC}
   315 
   316         CT_DoLog EXTRA "Installing native gdb"
   317         CT_DoExecLog ALL make DESTDIR="${CT_DEBUGROOT_DIR}" install
   318 
   319         # Building a native gdb also builds a gdbserver
   320         find "${CT_DEBUGROOT_DIR}" -type f -name gdbserver -exec rm -fv {} \; 2>&1 |CT_DoLog ALL
   321 
   322         unset ac_cv_func_strncmp_works
   323 
   324         # GDB on Mingw depends on PDcurses, not ncurses
   325         if [ "${CT_MINGW32}" != "y" ]; then
   326             CT_DoLog EXTRA "Cleaning up ncurses"
   327             cd "${CT_BUILD_DIR}/build-ncurses"
   328             CT_DoExecLog ALL make DESTDIR="${CT_SYSROOT_DIR}" uninstall
   329 
   330             CT_DoExecLog DEBUG rm -rf "${CT_BUILD_DIR}/ncurses"
   331         fi
   332 
   333         CT_EndStep # native gdb build
   334     fi
   335 
   336     if [ "${CT_GDB_GDBSERVER}" = "y" ]; then
   337         local -a gdbserver_extra_config
   338 
   339         CT_DoStep INFO "Installing gdbserver"
   340         CT_DoLog EXTRA "Configuring gdbserver"
   341 
   342         mkdir -p "${CT_BUILD_DIR}/build-gdb-gdbserver"
   343         cd "${CT_BUILD_DIR}/build-gdb-gdbserver"
   344 
   345         # Workaround for bad versions, where the configure
   346         # script for gdbserver is not executable...
   347         # Bah, GNU folks strike again... :-(
   348         chmod +x "${gdb_src_dir}/gdb/gdbserver/configure"
   349 
   350         gdbserver_LDFLAGS=
   351         if [ "${CT_GDB_GDBSERVER_STATIC}" = "y" ]; then
   352             gdbserver_LDFLAGS=-static
   353         fi
   354 
   355         gdbserver_extra_config=("${extra_config[@]}")
   356 
   357         CT_DoExecLog CFG                                \
   358         LDFLAGS="${gdbserver_LDFLAGS}"                  \
   359         "${gdb_src_dir}/gdb/gdbserver/configure"        \
   360             --build=${CT_BUILD}                         \
   361             --host=${CT_TARGET}                         \
   362             --target=${CT_TARGET}                       \
   363             --prefix=/usr                               \
   364             --sysconfdir=/etc                           \
   365             --localstatedir=/var                        \
   366             --includedir="${CT_HEADERS_DIR}"            \
   367             --with-build-sysroot="${CT_SYSROOT_DIR}"    \
   368             --program-prefix=                           \
   369             --without-uiout                             \
   370             --disable-tui                               \
   371             --disable-gdbtk                             \
   372             --without-x                                 \
   373             --without-included-gettext                  \
   374             --without-develop                           \
   375             --disable-werror                            \
   376             "${gdbserver_extra_config[@]}"
   377 
   378         CT_DoLog EXTRA "Building gdbserver"
   379         CT_DoExecLog ALL make ${JOBSFLAGS} CC=${CT_TARGET}-${CT_CC}
   380 
   381         CT_DoLog EXTRA "Installing gdbserver"
   382         CT_DoExecLog ALL make DESTDIR="${CT_DEBUGROOT_DIR}" install
   383 
   384         CT_EndStep
   385     fi
   386 }