Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Markus Deuling <deuling@de.ibm.com>
To: Eli Zaretskii <eliz@gnu.org>
Cc: gdb-patches@sourceware.org, drow@false.org, uweigand@de.ibm.com,
	        muller@ics.u-strasbg.fr
Subject: Re: [Patch]: Build script gdb_buildall.sh
Date: Tue, 12 Feb 2008 06:02:00 -0000	[thread overview]
Message-ID: <47B135E1.6070108@de.ibm.com> (raw)
In-Reply-To: <uk5lbp8l4.fsf@gnu.org>

[-- Attachment #1: Type: text/plain, Size: 526 bytes --]

Hi Eli,

Eli Zaretskii schrieb:
> Yes, except for a few minor gotchas:
> 

thanks for your input. I reworked the patch. Are the two patches for the script itself
and for the documentation ok now?


ChangeLog:
    
    Add script to build and test GDB using enable-targets=all.

    * gdb_buildall.sh: New file.

ChangeLog Doc:

    * gdbint.texinfo (Build Script): New section. Mention new build script
    gdb_buildall.sh. 




Regards,
Markus

-- 
  Markus Deuling
  GNU Toolchain for Linux on Cell BE
  deuling@de.ibm.com


[-- Attachment #2: diff-DOC-build-all --]
[-- Type: text/plain, Size: 976 bytes --]

diff -urpN src/gdb/doc/gdbint.texinfo dev/gdb/doc/gdbint.texinfo
--- src/gdb/doc/gdbint.texinfo	2008-01-29 09:48:39.000000000 +0100
+++ dev/gdb/doc/gdbint.texinfo	2008-02-12 06:56:35.000000000 +0100
@@ -7058,6 +7058,21 @@ is so old that it has never been convert
 
 @end table
 
+@section Build Script
+
+@cindex build script
+
+The script @file{gdb_buildall.sh} builds @value{GDBN} with flag
+@option{--enable-targets=all} set.  This builds @value{GDBN} with all supported
+targets activated.  This helps testing @value{GDBN} when doing changes that
+affect more than one architecture and is much faster than using
+@file{gdb_mbuild.sh}.
+
+After building @value{GDBN} the script checks which architectures are
+supported and then switches the current architecture to each of those to get
+information about the architecture.  The test results are stored in log files
+in the directory the script was called from.
+
 @include observer.texi
 @raisesections
 @include fdl.texi

[-- Attachment #3: diff-all-build --]
[-- Type: text/plain, Size: 7154 bytes --]

diff -urpN src/gdb/gdb_buildall.sh dev/gdb/gdb_buildall.sh
--- src/gdb/gdb_buildall.sh	1970-01-01 01:00:00.000000000 +0100
+++ dev/gdb/gdb_buildall.sh	2008-01-30 06:46:43.000000000 +0100
@@ -0,0 +1,268 @@
+#!/bin/sh
+
+# Build script to build GDB with all targets enabled.
+
+# Copyright (C) 2008 Free Software Foundation, Inc.
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# Make certain that the script is not running in an internationalized
+# environment. The script is grepping for GDB's output.
+
+# Contributed by Markus Deuling <deuling@de.ibm.com>.
+# Based on gdb_mbuild.sh from Richard Earnshaw.
+
+
+LANG=c ; export LANG
+LC_ALL=c ; export LC_ALL
+
+# Prints a usage message.
+usage()
+{
+  cat <<EOF
+Usage: gdb_buildall.sh [ <options> ... ] <srcdir> <builddir>
+
+Options:
+
+  --bfd64        Enable 64-bit BFD.
+  --clean        Delete build directory after check.
+  -e <regexp>    Regular expression for selecting the targets to build.
+  --force        Force rebuild.
+  -j <makejobs>  Run <makejobs> in parallel.  Passed to make.
+                 On a single cpu machine, 2 is recommended.
+ Arguments:
+   <srcdir>       Source code directory.
+   <builddir>     Build directory.
+
+ Environment variables examined (with default if not defined):
+   MAKE (make)"
+EOF
+  exit 1
+}
+
+### Command line options.
+makejobs=
+force=false
+targexp=""
+bfd_flag=""
+clean=false
+while test $# -gt 0
+do
+  case "$1" in
+  -j )
+      # Number of parallel make jobs.
+      shift
+      test $# -ge 1 || usage
+      makejobs="-j $1"
+      ;;
+      --clean )
+        # Shall the build directory be deleted after processing?
+        clean=true
+        ;;
+    -e )
+      # A regular expression for selecting targets
+      shift
+      test $# -ge 1 || usage
+      targexp="${targexp} -e ${1}"
+      ;;
+    --force )
+      # Force a rebuild
+      force=true ;
+      ;;
+    --bfd64)
+      # Enable 64-bit BFD
+      bfd_flag="--enable-64-bit-bfd"
+      ;;
+    -* ) usage ;;
+    *) break ;;
+  esac
+  shift
+done
+
+if test $# -ne 2
+then
+  usage
+fi
+
+### Environment.
+
+# Convert these to absolute directory paths.
+srcdir=`cd $1 && /bin/pwd` || exit 1
+builddir=`cd $2 && /bin/pwd` || exit 1
+# Version of make to use
+make=${MAKE:-make}
+MAKE=${make}
+export MAKE
+# We dont want GDB do dump cores.
+ulimit -c 0
+
+# Just make sure we're in the right directory.
+maintainers=${srcdir}/gdb/MAINTAINERS
+if [ ! -r ${maintainers} ]
+then
+    echo Maintainers file ${maintainers} not found
+    exit 1
+fi
+
+
+# Build GDB with all targets enabled.
+echo "Starting gdb_buildall.sh ..."
+
+trap "exit 1"  1 2 15
+dir=${builddir}/ALL
+
+# Should a scratch rebuild be forced, for perhaps the entire build be skipped?
+if ${force}
+then
+  echo ... forcing rebuild
+  rm -rf ${dir}
+fi
+
+# Did the previous configure attempt fail?  If it did restart from scratch
+if test -d ${dir} -a ! -r ${dir}/Makefile
+then
+  echo ... removing partially configured 
+  rm -rf ${dir}
+  if test -d ${dir}
+  then
+    echo "... ERROR: Unable to remove directory ${dir}"
+    exit 1
+  fi
+fi
+
+# Create build directory.
+mkdir -p ${dir}
+cd ${dir} || exit 1
+
+# Configure GDB.
+if test ! -r Makefile
+then
+  # Default SIMOPTS to GDBOPTS.
+  test -z "${simopts}" && simopts="${gdbopts}"
+
+  # The config options.
+  __build="--enable-targets=all"
+  __enable_gdb_build_warnings=`test -z "${gdbopts}" \
+    || echo "--enable-gdb-build-warnings=${gdbopts}"`
+  __enable_sim_build_warnings=`test -z "${simopts}" \
+    || echo "--enable-sim-build-warnings=${simopts}"`
+  __configure="${srcdir}/configure \
+    ${__build} ${bfd_flag}\
+    ${__enable_gdb_build_warnings} \
+    ${__enable_sim_build_warnings}"
+  echo ... ${__configure}
+  trap "echo Removing partially configured ${dir} directory ...; rm -rf ${dir}; exit 1" 1 2 15
+  ${__configure} > Config.log 2>&1
+  trap "exit 1"  1 2 15
+
+  # Without Makefile GDB won't build.
+  if test ! -r Makefile
+  then
+    echo "... CONFIG ERROR: GDB couldn't be configured " | tee -a Config.log
+    echo "... CONFIG ERROR: see Config.log for details "
+    exit 1
+  fi
+fi
+
+# Build GDB, if not built.
+gdb_bin="gdb/gdb"
+if test ! -x gdb/gdb -a ! -x gdb/gdb.exe
+then
+  echo ... ${make} ${makejobs}
+  ( ${make} ${makejobs} all-gdb || rm -f gdb/gdb gdb/gdb.exe
+  ) > Build.log 2>&1
+
+  # If the build fails, exit.
+  if test ! -x gdb/gdb -a ! -x gdb/gdb.exe
+  then
+    echo "... BUILD ERROR: GDB couldn't be compiled " | tee -a Build.log
+    echo "... BUILD ERROR: see Build.log for details "
+    exit 1
+  fi
+  if test -x gdb/gdb.exe
+  then
+    gdb_bin="gdb/gdb.exe"
+  fi
+fi
+
+
+# Retrieve a list of settable architectures by invoking "set architecture"
+# without parameters.
+cat <<EOF > arch
+set architecture
+quit
+EOF
+./gdb/gdb --batch -nx -x arch 2>&1 | cat > gdb_archs
+tail -n 1 gdb_archs | sed 's/auto./\n/g' | sed 's/,/\n/g' |  sed 's/Requires an argument. Valid arguments are/\n/g' | sed '/^[ ]*$/d' > arch
+mv arch gdb_archs
+
+if test "${targexp}" != ""
+then
+  alltarg=`cat gdb_archs | grep ${targexp}`
+else 
+  alltarg=`cat gdb_archs`
+fi
+rm -f gdb_archs
+
+# Test all architectures available in ALLTARG
+echo "maint print architecture for"
+echo "$alltarg" | while read target
+do
+  cat <<EOF > x
+set architecture ${target}
+maint print architecture
+quit
+EOF
+  log_file=$target.log
+  log_file=${log_file//:/_}
+  echo -n "... ${target}"
+  ./gdb/gdb -batch -nx -x x 2>&1 | cat > $log_file
+  # Check GDBs results
+  if test ! -s $log_file
+  then
+    echo " ERR: gdb printed no output" | tee -a $log_file
+  elif test `grep -o internal-error $log_file | tail -n 1`
+  then
+    echo " ERR: gdb panic" | tee -a $log_file
+  else
+    echo " OK"
+  fi
+  
+  # Create a sed script that cleans up the output from GDB.
+  rm -f mbuild.sed
+  # Rules to replace <0xNNNN> with the corresponding function's name.
+  sed -n -e '/<0x0*>/d' -e 's/^.*<0x\([0-9a-f]*\)>.*$/0x\1/p' $log_file \
+  | sort -u \
+  | while read addr
+  do
+    func="`addr2line -f -e ./$gdb_bin -s ${addr} | sed -n -e 1p`"
+    echo "s/<${addr}>/<${func}>/g"
+  done >> mbuild.sed
+  # Rules to strip the leading paths off of file names.
+  echo 's/"\/.*\/gdb\//"gdb\//g' >> mbuild.sed
+  # Run the script.
+  sed -f mbuild.sed $log_file > Mbuild.log
+
+  mv Mbuild.log ${builddir}/$log_file
+  rm -rf $log_file x mbuild.sed
+done
+echo "done."
+
+# Clean up build directory if necessary.
+if ${clean}
+then
+  echo "cleanning up $dir"
+  rm -rf ${dir}
+fi
+
+exit 0

  reply	other threads:[~2008-02-12  6:02 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-02-11  8:01 Markus Deuling
2008-02-11 20:01 ` Eli Zaretskii
2008-02-12  6:02   ` Markus Deuling [this message]
2008-02-12 19:44     ` Eli Zaretskii
2008-02-12 19:45       ` Daniel Jacobowitz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=47B135E1.6070108@de.ibm.com \
    --to=deuling@de.ibm.com \
    --cc=drow@false.org \
    --cc=eliz@gnu.org \
    --cc=gdb-patches@sourceware.org \
    --cc=muller@ics.u-strasbg.fr \
    --cc=uweigand@de.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox