configure: allow building GDB along with the buildtools

from a stock GDB source tree.

I was getting tired of doing it manually.

Note the prefix is not exactly the same as the buildtools since the
machine triplet is different, but it's not an issue.

Tested with arm and ppc with GDB 7.8. Might need patching gdbTarget for other archs,
as stock GDB doesn't know about Haiku.
This commit is contained in:
François Revol
2016-10-20 11:14:50 +02:00
parent 96c72d6933
commit 4da6cf8403
2 changed files with 41 additions and 2 deletions
+35 -2
View File
@@ -15,15 +15,18 @@ buildToolsDir=$3
installDir=$4 installDir=$4
shift 4 shift 4
additionalMakeArgs=$* additionalMakeArgs=$*
gdbSourceDir="$HAIKU_USE_GDB"
ccFlags="-O2" ccFlags="-O2"
cxxFlags="-O2" cxxFlags="-O2"
binutilsTargets="$haikuMachine" binutilsTargets="$haikuMachine"
gdbTarget="$haikuMachine"
case $haikuMachine in case $haikuMachine in
i586-*) i586-*)
binutilsConfigureArgs="--disable-multilib" binutilsConfigureArgs="--disable-multilib"
gccConfigureArgs="--disable-multilib" gccConfigureArgs="--disable-multilib"
binutilsTargets="$binutilsTargets,i386-efi-pe,x86_64-efi-pe" binutilsTargets="$binutilsTargets,i386-efi-pe,x86_64-efi-pe"
gdbConfigureArgs="--disable-multilib"
;; ;;
x86_64-*) x86_64-*)
# GCC's default is to enable multilib, but there is a bug when # GCC's default is to enable multilib, but there is a bug when
@@ -31,10 +34,12 @@ x86_64-*)
# failure # failure
binutilsConfigureArgs="" binutilsConfigureArgs=""
binutilsTargets="$binutilsTargets,i386-efi-pe,x86_64-efi-pe" binutilsTargets="$binutilsTargets,i386-efi-pe,x86_64-efi-pe"
gdbConfigureArgs="--disable-multilib"
;; ;;
m68k-*) m68k-*)
binutilsConfigureArgs="--enable-multilib" binutilsConfigureArgs="--enable-multilib"
gccConfigureArgs="--enable-multilib" gccConfigureArgs="--enable-multilib"
gdbConfigureArgs="--disable-multilib"
;; ;;
arm-*) arm-*)
# Multilib creates a lot of confusion as the wrong libs end up being linked. # Multilib creates a lot of confusion as the wrong libs end up being linked.
@@ -47,15 +52,20 @@ arm-*)
# TODO: Disable building with TLS support for ARM until implemented. # TODO: Disable building with TLS support for ARM until implemented.
binutilsConfigureArgs="$binutilsConfigureArgs --disable-tls" binutilsConfigureArgs="$binutilsConfigureArgs --disable-tls"
gccConfigureArgs="$gccConfigureArgs --disable-tls" gccConfigureArgs="$gccConfigureArgs --disable-tls"
gdbConfigureArgs="--disable-multilib --disable-werror -enable-interwork"
gdbTarget="arm-unknown-elf"
;; ;;
powerpc-*) powerpc-*)
binutilsConfigureArgs="--disable-multilib" binutilsConfigureArgs="--disable-multilib"
gccConfigureArgs="--disable-multilib" gccConfigureArgs="--disable-multilib"
binutilsTargets="$binutilsTargets,powerpc-apple-linux,powerpc-apple-freebsd,powerpc-apple-vxworks" binutilsTargets="$binutilsTargets,powerpc-apple-linux,powerpc-apple-freebsd,powerpc-apple-vxworks"
gdbConfigureArgs="--disable-multilib --disable-werror"
gdbTarget="powerpc-unknown-elf"
;; ;;
*) *)
binutilsConfigureArgs="--disable-multilib" binutilsConfigureArgs="--disable-multilib"
gccConfigureArgs="--disable-multilib" gccConfigureArgs="--disable-multilib"
gdbConfigureArgs="--disable-multilib"
;; ;;
esac esac
@@ -75,6 +85,11 @@ if [ ! -d "$buildToolsDir" ]; then
exit 1 exit 1
fi fi
if [ -n "$gdbSourceDir" -a ! -d "$gdbSourceDir" ]; then
echo "No such directory: \"$gdbSourceDir\"" >&2
exit 1
fi
# create the output dir # create the output dir
mkdir -p "$installDir" || exit 1 mkdir -p "$installDir" || exit 1
@@ -95,6 +110,12 @@ cd "$installDir"
installDir=$(pwd) installDir=$(pwd)
cd "$currentDir" cd "$currentDir"
if [ -n "$gdbSourceDir" ]; then
cd "$gdbSourceDir"
gdbSourceDir=$(pwd)
cd "$currentDir"
fi
binutilsSourceDir="$buildToolsDir/binutils" binutilsSourceDir="$buildToolsDir/binutils"
gccSourceDir="$buildToolsDir/gcc" gccSourceDir="$buildToolsDir/gcc"
@@ -117,6 +138,7 @@ find "$binutilsSourceDir" "$gccSourceDir" -name \*.info -print0 | xargs -0 touch
objDir="${installDir}-build" objDir="${installDir}-build"
binutilsObjDir="$objDir/binutils" binutilsObjDir="$objDir/binutils"
gccObjDir="$objDir/gcc" gccObjDir="$objDir/gcc"
gdbObjDir="$objDir/gdb"
stdcxxObjDir="$objDir/stdcxx" stdcxxObjDir="$objDir/stdcxx"
sysrootDir="$installDir/sysroot" sysrootDir="$installDir/sysroot"
tmpIncludeDir="$sysrootDir/boot/system/develop/headers" tmpIncludeDir="$sysrootDir/boot/system/develop/headers"
@@ -124,8 +146,8 @@ tmpLibDir="$sysrootDir/boot/system/develop/lib"
rm -rf "$installDir" "$objDir" rm -rf "$installDir" "$objDir"
mkdir -p "$installDir" "$objDir" "$binutilsObjDir" "$gccObjDir" "$stdcxxObjDir" \ mkdir -p "$installDir" "$objDir" "$binutilsObjDir" "$gccObjDir" "$gdbObjDir" \
"$tmpIncludeDir" "$tmpLibDir" || exit 1 "$stdcxxObjDir" "$tmpIncludeDir" "$tmpLibDir" || exit 1
mkdir -p "$installDir/lib/gcc/$haikuMachine/$gccVersion" mkdir -p "$installDir/lib/gcc/$haikuMachine/$gccVersion"
if [ "$HAIKU_USE_GCC_GRAPHITE" = 1 ]; then if [ "$HAIKU_USE_GCC_GRAPHITE" = 1 ]; then
@@ -155,6 +177,17 @@ fi
# force the POSIX locale, as the build (makeinfo) might choke otherwise # force the POSIX locale, as the build (makeinfo) might choke otherwise
export LC_ALL=POSIX export LC_ALL=POSIX
# build gdb
if [ -n "$HAIKU_USE_GDB" ]; then
cd "$gdbObjDir"
"$gdbSourceDir/configure" \
--prefix="$installDir" --target=$gdbTarget \
$gdbConfigureArgs \
|| exit 1
$MAKE $additionalMakeArgs || exit 1
$MAKE $additionalMakeArgs install || exit 1
fi
# build binutils # build binutils
cd "$binutilsObjDir" cd "$binutilsObjDir"
CFLAGS="$ccFlags" CXXFLAGS="$cxxFlags" "$binutilsSourceDir/configure" \ CFLAGS="$ccFlags" CXXFLAGS="$cxxFlags" "$binutilsSourceDir/configure" \
Vendored
+6
View File
@@ -103,6 +103,9 @@ options:
Linux xattr respectively *BSD extattr support to Linux xattr respectively *BSD extattr support to
make it more robust (i.e. attribute mix-ups become make it more robust (i.e. attribute mix-ups become
less likely). less likely).
--with-gdb <gdb sources dir>
specify the path to a GDB source dir, to build
GDB for each arch we build the cross-tools for.
environment variables: environment variables:
CC The host compiler. Defaults to "gcc". CC The host compiler. Defaults to "gcc".
@@ -410,6 +413,7 @@ useClang=0
useGccGraphiteDefault=0 useGccGraphiteDefault=0
unknownArchIndex=1 unknownArchIndex=1
haikuTargetArchs= haikuTargetArchs=
gdbSources=
if [ -z "$CC" ]; then if [ -z "$CC" ]; then
CC=gcc CC=gcc
@@ -618,6 +622,7 @@ while [ $# -gt 0 ] ; do
--use-32bit) HAIKU_HOST_USE_32BIT=1; shift 1;; --use-32bit) HAIKU_HOST_USE_32BIT=1; shift 1;;
--use-xattr) HAIKU_HOST_USE_XATTR=1; shift 1;; --use-xattr) HAIKU_HOST_USE_XATTR=1; shift 1;;
--use-xattr-ref) HAIKU_HOST_USE_XATTR_REF=1; shift 1;; --use-xattr-ref) HAIKU_HOST_USE_XATTR_REF=1; shift 1;;
--with-gdb) gdbSources=$2; shift 2;;
*) echo Invalid argument: \`$1\'; exit 1;; *) echo Invalid argument: \`$1\'; exit 1;;
esac esac
done done
@@ -778,6 +783,7 @@ else
HAIKU_USE_GCC_GRAPHITE=`get_variable \ HAIKU_USE_GCC_GRAPHITE=`get_variable \
HAIKU_USE_GCC_GRAPHITE_$targetArch` \ HAIKU_USE_GCC_GRAPHITE_$targetArch` \
HAIKU_USE_GCC_PIPE=$HAIKU_USE_GCC_PIPE \ HAIKU_USE_GCC_PIPE=$HAIKU_USE_GCC_PIPE \
HAIKU_USE_GDB="$gdbSources" \
"$script" $scriptArgs "$sourceDir" "$buildCrossTools" \ "$script" $scriptArgs "$sourceDir" "$buildCrossTools" \
"$crossToolsDir" $buildCrossToolsJobs || exit 1 "$crossToolsDir" $buildCrossToolsJobs || exit 1
crossToolsPrefix="$crossToolsDir/bin/${targetMachine}-" crossToolsPrefix="$crossToolsDir/bin/${targetMachine}-"