From 4da6cf84030728fc2bb07f15a42e631cc827aa9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Revol?= Date: Thu, 20 Oct 2016 02:35:23 +0200 Subject: [PATCH] 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. --- build/scripts/build_cross_tools_gcc4 | 37 ++++++++++++++++++++++++++-- configure | 6 +++++ 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/build/scripts/build_cross_tools_gcc4 b/build/scripts/build_cross_tools_gcc4 index 9e48b00017..fc46e7baa8 100755 --- a/build/scripts/build_cross_tools_gcc4 +++ b/build/scripts/build_cross_tools_gcc4 @@ -15,15 +15,18 @@ buildToolsDir=$3 installDir=$4 shift 4 additionalMakeArgs=$* +gdbSourceDir="$HAIKU_USE_GDB" ccFlags="-O2" cxxFlags="-O2" binutilsTargets="$haikuMachine" +gdbTarget="$haikuMachine" case $haikuMachine in i586-*) binutilsConfigureArgs="--disable-multilib" gccConfigureArgs="--disable-multilib" binutilsTargets="$binutilsTargets,i386-efi-pe,x86_64-efi-pe" + gdbConfigureArgs="--disable-multilib" ;; x86_64-*) # GCC's default is to enable multilib, but there is a bug when @@ -31,10 +34,12 @@ x86_64-*) # failure binutilsConfigureArgs="" binutilsTargets="$binutilsTargets,i386-efi-pe,x86_64-efi-pe" + gdbConfigureArgs="--disable-multilib" ;; m68k-*) binutilsConfigureArgs="--enable-multilib" gccConfigureArgs="--enable-multilib" + gdbConfigureArgs="--disable-multilib" ;; arm-*) # 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. binutilsConfigureArgs="$binutilsConfigureArgs --disable-tls" gccConfigureArgs="$gccConfigureArgs --disable-tls" + gdbConfigureArgs="--disable-multilib --disable-werror -enable-interwork" + gdbTarget="arm-unknown-elf" ;; powerpc-*) binutilsConfigureArgs="--disable-multilib" gccConfigureArgs="--disable-multilib" binutilsTargets="$binutilsTargets,powerpc-apple-linux,powerpc-apple-freebsd,powerpc-apple-vxworks" + gdbConfigureArgs="--disable-multilib --disable-werror" + gdbTarget="powerpc-unknown-elf" ;; *) binutilsConfigureArgs="--disable-multilib" gccConfigureArgs="--disable-multilib" + gdbConfigureArgs="--disable-multilib" ;; esac @@ -75,6 +85,11 @@ if [ ! -d "$buildToolsDir" ]; then exit 1 fi +if [ -n "$gdbSourceDir" -a ! -d "$gdbSourceDir" ]; then + echo "No such directory: \"$gdbSourceDir\"" >&2 + exit 1 +fi + # create the output dir mkdir -p "$installDir" || exit 1 @@ -95,6 +110,12 @@ cd "$installDir" installDir=$(pwd) cd "$currentDir" +if [ -n "$gdbSourceDir" ]; then +cd "$gdbSourceDir" +gdbSourceDir=$(pwd) +cd "$currentDir" +fi + binutilsSourceDir="$buildToolsDir/binutils" gccSourceDir="$buildToolsDir/gcc" @@ -117,6 +138,7 @@ find "$binutilsSourceDir" "$gccSourceDir" -name \*.info -print0 | xargs -0 touch objDir="${installDir}-build" binutilsObjDir="$objDir/binutils" gccObjDir="$objDir/gcc" +gdbObjDir="$objDir/gdb" stdcxxObjDir="$objDir/stdcxx" sysrootDir="$installDir/sysroot" tmpIncludeDir="$sysrootDir/boot/system/develop/headers" @@ -124,8 +146,8 @@ tmpLibDir="$sysrootDir/boot/system/develop/lib" rm -rf "$installDir" "$objDir" -mkdir -p "$installDir" "$objDir" "$binutilsObjDir" "$gccObjDir" "$stdcxxObjDir" \ - "$tmpIncludeDir" "$tmpLibDir" || exit 1 +mkdir -p "$installDir" "$objDir" "$binutilsObjDir" "$gccObjDir" "$gdbObjDir" \ + "$stdcxxObjDir" "$tmpIncludeDir" "$tmpLibDir" || exit 1 mkdir -p "$installDir/lib/gcc/$haikuMachine/$gccVersion" if [ "$HAIKU_USE_GCC_GRAPHITE" = 1 ]; then @@ -155,6 +177,17 @@ fi # force the POSIX locale, as the build (makeinfo) might choke otherwise 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 cd "$binutilsObjDir" CFLAGS="$ccFlags" CXXFLAGS="$cxxFlags" "$binutilsSourceDir/configure" \ diff --git a/configure b/configure index aadd8f68fd..1f74243312 100755 --- a/configure +++ b/configure @@ -103,6 +103,9 @@ options: Linux xattr respectively *BSD extattr support to make it more robust (i.e. attribute mix-ups become less likely). + --with-gdb + specify the path to a GDB source dir, to build + GDB for each arch we build the cross-tools for. environment variables: CC The host compiler. Defaults to "gcc". @@ -410,6 +413,7 @@ useClang=0 useGccGraphiteDefault=0 unknownArchIndex=1 haikuTargetArchs= +gdbSources= if [ -z "$CC" ]; then CC=gcc @@ -618,6 +622,7 @@ while [ $# -gt 0 ] ; do --use-32bit) HAIKU_HOST_USE_32BIT=1; shift 1;; --use-xattr) HAIKU_HOST_USE_XATTR=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;; esac done @@ -778,6 +783,7 @@ else HAIKU_USE_GCC_GRAPHITE=`get_variable \ HAIKU_USE_GCC_GRAPHITE_$targetArch` \ HAIKU_USE_GCC_PIPE=$HAIKU_USE_GCC_PIPE \ + HAIKU_USE_GDB="$gdbSources" \ "$script" $scriptArgs "$sourceDir" "$buildCrossTools" \ "$crossToolsDir" $buildCrossToolsJobs || exit 1 crossToolsPrefix="$crossToolsDir/bin/${targetMachine}-"