scripts/build/debug/300-gdb.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Fri Aug 19 00:52:05 2011 +0200 (2011-08-19)
changeset 2614 814ea73df7e0
parent 2570 2651341cc084
child 2616 d32d723b239c
child 2634 e29a762bbadf
permissions -rw-r--r--
scripts: simplify and fix the toolchain config script

The script that is installed, and which sole purpose is to dump
the .config that was used to build the toolchain, is pure insanity.

Let's make it much, much more simpler...

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.7"
     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                 --without-shared                                                \
   201                 --enable-symlinks                                               \
   202                 --with-build-cc=${CT_REAL_BUILD}-gcc                            \
   203                 --with-build-cpp=${CT_REAL_BUILD}-gcc                           \
   204                 --with-build-cflags="${CT_CFLAGS_FOR_HOST}"                     \
   205                 "${ncurses_opts[@]}"
   206 
   207             # Under some operating systems (eg. Winblows), there is an
   208             # extension appended to executables. Find that.
   209             tic_ext=$(grep -E '^x[[:space:]]*=' progs/Makefile |sed -r -e 's/^.*=[[:space:]]*//;')
   210 
   211             CT_DoExecLog ALL make ${JOBSFLAGS} -C include
   212             CT_DoExecLog ALL make ${JOBSFLAGS} -C progs "tic${tic_ext}"
   213 
   214             CT_DoExecLog ALL install -d -m 0755 "${CT_PREFIX_DIR}/buildtools"
   215             CT_DoExecLog ALL install -m 0755 "progs/tic${tic_ext}" "${CT_PREFIX_DIR}/buildtools"
   216 
   217             mkdir -p "${CT_BUILD_DIR}/build-ncurses"
   218             cd "${CT_BUILD_DIR}/build-ncurses"
   219 
   220             CT_DoExecLog CFG                                                    \
   221             "${CT_SRC_DIR}/ncurses-${CT_DEBUG_GDB_NCURSES_VERSION}/configure"   \
   222                 --build=${CT_BUILD}                                             \
   223                 --host=${CT_TARGET}                                             \
   224                 --with-build-cc=${CT_BUILD}-gcc                                 \
   225                 --with-build-cpp=${CT_BUILD}-gcc                                \
   226                 --with-build-cflags="${CT_CFLAGS_FOR_HOST}"                     \
   227                 --prefix="${CT_BUILD_DIR}/static-target"                        \
   228                 --without-shared                                                \
   229                 --without-sysmouse                                              \
   230                 --without-progs                                                 \
   231                 --enable-termcap                                                \
   232                 "${ncurses_opts[@]}"
   233 
   234             CT_DoExecLog ALL make ${JOBSFLAGS}
   235 
   236             CT_DoExecLog ALL make install
   237 
   238             # We no longer need the temporary tic. Remove it
   239             CT_DoExecLog DEBUG rm -fv "${CT_PREFIX_DIR}/buildtools/tic${tic_ext}"
   240 
   241             native_extra_config+=("--with-curses")
   242             # There's no better way to tell gdb where to find -lcurses... :-(
   243             gdb_native_CFLAGS+=("-I${CT_BUILD_DIR}/static-target/include")
   244             gdb_native_CFLAGS+=("-L${CT_BUILD_DIR}/static-target/lib")
   245         fi # do_ncurses
   246 
   247         if [ "${do_expat}" = "y" ]; then
   248             CT_DoLog EXTRA "Building static target expat"
   249 
   250             mkdir -p "${CT_BUILD_DIR}/expat-build"
   251             cd "${CT_BUILD_DIR}/expat-build"
   252 
   253             CT_DoExecLog CFG                                                \
   254             "${CT_SRC_DIR}/expat-${CT_DEBUG_GDB_EXPAT_VERSION}/configure"   \
   255                 --build=${CT_BUILD}                                         \
   256                 --host=${CT_TARGET}                                         \
   257                 --prefix="${CT_BUILD_DIR}/static-target"                    \
   258                 --enable-static                                             \
   259                 --disable-shared
   260 
   261             CT_DoExecLog ALL make ${JOBSFLAGS}
   262             CT_DoExecLog ALL make install
   263 
   264             native_extra_config+=("--with-expat")
   265             native_extra_config+=("--with-libexpat-prefix=${CT_BUILD_DIR}/static-target")
   266         fi # do_expat
   267 
   268         CT_DoLog EXTRA "Configuring native gdb"
   269 
   270         mkdir -p "${CT_BUILD_DIR}/build-gdb-native"
   271         cd "${CT_BUILD_DIR}/build-gdb-native"
   272 
   273         case "${CT_THREADS}" in
   274             none)   native_extra_config+=("--disable-threads");;
   275             *)      native_extra_config+=("--enable-threads");;
   276         esac
   277 
   278         if [ "${CT_GDB_NATIVE_STATIC}" = "y" ]; then
   279             CC_for_gdb="${CT_TARGET}-gcc -static"
   280             LD_for_gdb="${CT_TARGET}-ld -static"
   281         else
   282             CC_for_gdb="${CT_TARGET}-gcc"
   283             LD_for_gdb="${CT_TARGET}-ld"
   284         fi
   285 
   286         export ac_cv_func_strncmp_works=yes
   287 
   288         CT_DoLog DEBUG "Extra config passed: '${native_extra_config[*]}'"
   289 
   290         CT_DoExecLog CFG                                \
   291         CC="${CC_for_gdb}"                              \
   292         LD="${LD_for_gdb}"                              \
   293         CFLAGS="${gdb_native_CFLAGS[*]}"                \
   294         "${gdb_src_dir}/configure"                      \
   295             --build=${CT_BUILD}                         \
   296             --host=${CT_TARGET}                         \
   297             --target=${CT_TARGET}                       \
   298             --prefix=/usr                               \
   299             --with-build-sysroot="${CT_SYSROOT_DIR}"    \
   300             --without-uiout                             \
   301             --disable-tui                               \
   302             --disable-gdbtk                             \
   303             --without-x                                 \
   304             --disable-sim                               \
   305             --disable-werror                            \
   306             --without-included-gettext                  \
   307             --without-develop                           \
   308             "${native_extra_config[@]}"
   309 
   310         CT_DoLog EXTRA "Building native gdb"
   311         CT_DoExecLog ALL make ${JOBSFLAGS} CC=${CT_TARGET}-${CT_CC}
   312 
   313         CT_DoLog EXTRA "Installing native gdb"
   314         CT_DoExecLog ALL make DESTDIR="${CT_DEBUGROOT_DIR}" install
   315 
   316         # Building a native gdb also builds a gdbserver
   317         find "${CT_DEBUGROOT_DIR}" -type f -name gdbserver -exec rm -fv {} \; 2>&1 |CT_DoLog ALL
   318 
   319         unset ac_cv_func_strncmp_works
   320 
   321         # GDB on Mingw depends on PDcurses, not ncurses
   322         if [ "${CT_MINGW32}" != "y" ]; then
   323             CT_DoLog EXTRA "Cleaning up ncurses"
   324             cd "${CT_BUILD_DIR}/build-ncurses"
   325             CT_DoExecLog ALL make DESTDIR="${CT_SYSROOT_DIR}" uninstall
   326 
   327             CT_DoExecLog DEBUG rm -rf "${CT_BUILD_DIR}/ncurses"
   328         fi
   329 
   330         CT_EndStep # native gdb build
   331     fi
   332 
   333     if [ "${CT_GDB_GDBSERVER}" = "y" ]; then
   334         local -a gdbserver_extra_config
   335 
   336         CT_DoStep INFO "Installing gdbserver"
   337         CT_DoLog EXTRA "Configuring gdbserver"
   338 
   339         mkdir -p "${CT_BUILD_DIR}/build-gdb-gdbserver"
   340         cd "${CT_BUILD_DIR}/build-gdb-gdbserver"
   341 
   342         # Workaround for bad versions, where the configure
   343         # script for gdbserver is not executable...
   344         # Bah, GNU folks strike again... :-(
   345         chmod +x "${gdb_src_dir}/gdb/gdbserver/configure"
   346 
   347         gdbserver_LDFLAGS=
   348         if [ "${CT_GDB_GDBSERVER_STATIC}" = "y" ]; then
   349             gdbserver_LDFLAGS=-static
   350         fi
   351 
   352         gdbserver_extra_config=("${extra_config[@]}")
   353 
   354         CT_DoExecLog CFG                                \
   355         LDFLAGS="${gdbserver_LDFLAGS}"                  \
   356         "${gdb_src_dir}/gdb/gdbserver/configure"        \
   357             --build=${CT_BUILD}                         \
   358             --host=${CT_TARGET}                         \
   359             --target=${CT_TARGET}                       \
   360             --prefix=/usr                               \
   361             --sysconfdir=/etc                           \
   362             --localstatedir=/var                        \
   363             --includedir="${CT_HEADERS_DIR}"            \
   364             --with-build-sysroot="${CT_SYSROOT_DIR}"    \
   365             --program-prefix=                           \
   366             --without-uiout                             \
   367             --disable-tui                               \
   368             --disable-gdbtk                             \
   369             --without-x                                 \
   370             --without-included-gettext                  \
   371             --without-develop                           \
   372             --disable-werror                            \
   373             "${gdbserver_extra_config[@]}"
   374 
   375         CT_DoLog EXTRA "Building gdbserver"
   376         CT_DoExecLog ALL make ${JOBSFLAGS} CC=${CT_TARGET}-${CT_CC}
   377 
   378         CT_DoLog EXTRA "Installing gdbserver"
   379         CT_DoExecLog ALL make DESTDIR="${CT_DEBUGROOT_DIR}" install
   380 
   381         CT_EndStep
   382     fi
   383 }