mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-27 03:51:15 +08:00
213516ef31
This commit is the result of running the gdb/copyright.py script, which automated the update of the copyright year range for all source files managed by the GDB project to be updated to include year 2023.
269 lines
6.5 KiB
Bash
269 lines
6.5 KiB
Bash
#!/bin/sh
|
|
|
|
# Build script to build GDB with all targets enabled.
|
|
|
|
# Copyright (C) 2008-2023 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 don't 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
|