scripts/build/debug/300-gdb.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Mon Dec 12 00:01:54 2011 +0100 (2011-12-12)
changeset 2798 4d92888ec7cb
parent 2765 6c5658b8b588
child 2856 7723b8457efa
permissions -rw-r--r--
kernel/linux: add alternate download locations

Some longterm versions are not in the usual directory.
Account for these new locations.

Get rid of the mirror location, now that the main kernel site is
(almost) back to normal operations.

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