scripts/build/debug/300-gdb.sh
author Michael Hope <michael.hope@linaro.org>
Wed Nov 16 10:06:21 2011 +1300 (2011-11-16)
changeset 2765 6c5658b8b588
parent 2751 bd17cca444ae
child 2784 258160822e35
permissions -rw-r--r--
scripts: add support for building manuals

Add support for building the HTML and PDF manuals for the major
components. Implement for binutils, GCC, GDB, and GLIBC.

Always build all manuals and install a subset. Be explicit about the
subset to reduce the clutter and to avoid getting copies of common
manuals like bfd from all of the sourceware based components. Downside of
being explicit is that you need to update it when a new component
comes along.

Build the manuals as part of the last GCC build, namely 'cc' for glibc
based ones and cc_core_pass_2 for baremetal.

An example of the output is at:
http://people.linaro.org/~michaelh/incoming/crosstool-NG/

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