2023-04-07 18:01:29 +03:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
set -e
|
|
|
|
|
2023-04-24 21:24:22 +03:00
|
|
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
|
|
|
|
|
|
# shellcheck source=/dev/null
|
|
|
|
. "${DIR}/../Meta/shell_include.sh"
|
|
|
|
|
|
|
|
exit_if_running_as_root "Do not run BuildGDB.sh as root, parts of your Toolchain directory will become root-owned"
|
|
|
|
|
2023-04-07 18:01:29 +03:00
|
|
|
GDB_VERSION="13.1"
|
|
|
|
GDB_MD5SUM="4aaad768ff2585464173c091947287ec"
|
|
|
|
GDB_NAME="gdb-$GDB_VERSION"
|
|
|
|
GDB_PKG="${GDB_NAME}.tar.xz"
|
2023-05-28 11:28:03 +03:00
|
|
|
GDB_BASE_URL="https://ftpmirror.gnu.org/gnu/gdb"
|
2023-04-07 18:01:29 +03:00
|
|
|
|
|
|
|
ARCH=${1:-"x86_64"}
|
|
|
|
TARGET="$ARCH-pc-serenity"
|
|
|
|
PREFIX="$DIR/Local/$ARCH-gdb"
|
|
|
|
|
|
|
|
echo "Building GDB $GDB_VERSION for $TARGET"
|
|
|
|
|
|
|
|
MD5SUM="md5sum"
|
|
|
|
|
|
|
|
SYSTEM_NAME="$(uname -s)"
|
|
|
|
|
|
|
|
if [ "$SYSTEM_NAME" = "OpenBSD" ]; then
|
|
|
|
MD5SUM="md5 -q"
|
|
|
|
export CC=egcc
|
|
|
|
export CXX=eg++
|
|
|
|
export with_gmp=/usr/local
|
|
|
|
export LDFLAGS=-Wl,-z,notext
|
|
|
|
elif [ "$SYSTEM_NAME" = "FreeBSD" ]; then
|
|
|
|
MD5SUM="md5 -q"
|
|
|
|
export with_gmp=/usr/local
|
|
|
|
export with_mpfr=/usr/local
|
|
|
|
elif [ "$SYSTEM_NAME" = "Darwin" ]; then
|
|
|
|
MD5SUM="md5 -q"
|
|
|
|
fi
|
|
|
|
|
2023-05-02 22:05:04 +03:00
|
|
|
NPROC=$(get_number_of_processing_units)
|
|
|
|
[ -z "$MAKEJOBS" ] && MAKEJOBS=${NPROC}
|
2023-04-07 18:01:29 +03:00
|
|
|
|
|
|
|
buildstep() {
|
|
|
|
NAME=$1
|
|
|
|
shift
|
|
|
|
"$@" 2>&1 | sed $'s|^|\x1b[34m['"${NAME}"$']\x1b[39m |'
|
|
|
|
}
|
|
|
|
|
|
|
|
missing_lib() {
|
|
|
|
buildstep dependencies echo "Please make sure to install the $lib library and headers." >&2
|
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
|
|
|
|
config_args=()
|
|
|
|
for lib in gmp isl mpfr mpc; do
|
|
|
|
buildstep dependencies echo "Checking whether the $lib library and headers are available..."
|
|
|
|
if [ "$SYSTEM_NAME" = "Darwin" ]; then
|
|
|
|
[ "$lib" = "mpc" ] && formula_name="libmpc" || formula_name="$lib"
|
|
|
|
config_args+=("--with-$lib=$(brew --prefix --installed "$formula_name")") || missing_lib $lib
|
|
|
|
else
|
2023-05-28 11:26:51 +03:00
|
|
|
[ "$lib" = "isl" ] && header="isl/version.h" || header="$lib.h"
|
2023-04-07 18:01:29 +03:00
|
|
|
if ! ${CC:-cc} -I /usr/local/include -L /usr/local/lib -l$lib -o /dev/null -xc - >/dev/null <<PROGRAM
|
2023-05-28 11:26:51 +03:00
|
|
|
#include <$header>
|
2023-04-07 18:01:29 +03:00
|
|
|
int main() {}
|
|
|
|
PROGRAM
|
|
|
|
then
|
|
|
|
missing_lib $lib
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
if [ "$SYSTEM_NAME" = "Darwin" ]; then
|
|
|
|
config_args+=("--with-libgmp-prefix=$(brew --prefix gmp)")
|
|
|
|
fi
|
|
|
|
|
|
|
|
mkdir -p "$DIR/Tarballs"
|
|
|
|
|
|
|
|
pushd "$DIR/Tarballs"
|
|
|
|
md5=""
|
|
|
|
if [ -e "$GDB_PKG" ]; then
|
|
|
|
md5="$($MD5SUM "$GDB_PKG" | cut -f1 -d' ')"
|
|
|
|
fi
|
|
|
|
if [ "$md5" != "$GDB_MD5SUM" ]; then
|
2023-05-28 11:28:03 +03:00
|
|
|
curl -C - -LO "$GDB_BASE_URL/$GDB_PKG"
|
2023-04-07 18:01:29 +03:00
|
|
|
else
|
|
|
|
echo "Skipped downloading $GDB_PKG"
|
|
|
|
fi
|
|
|
|
|
|
|
|
md5="$($MD5SUM "$GDB_PKG" | cut -f1 -d' ')"
|
|
|
|
echo "gdb md5='$md5'"
|
|
|
|
if [ "$md5" != "$GDB_MD5SUM" ] ; then
|
|
|
|
echo "gdb md5 sum mismatching, please run script again."
|
|
|
|
rm -f "$GDB_PKG"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
# If the source directory exists, re-extract it again in case the patches have changed.
|
|
|
|
if [ -d ${GDB_NAME} ]; then
|
|
|
|
rm -rf "${GDB_NAME}"
|
|
|
|
rm -rf "$DIR/Build/$ARCH-gdb"
|
|
|
|
fi
|
|
|
|
echo "Extracting gdb..."
|
|
|
|
tar -xJf "$GDB_PKG"
|
|
|
|
|
|
|
|
pushd "$GDB_NAME"
|
|
|
|
for patch in "${DIR}"/Patches/gdb/*.patch; do
|
|
|
|
patch -p1 < "${patch}" > /dev/null
|
|
|
|
done
|
|
|
|
popd
|
|
|
|
popd
|
|
|
|
|
|
|
|
mkdir -p "$DIR/Build"
|
|
|
|
|
|
|
|
rm -rf "$DIR/Build/$ARCH-gdb"
|
|
|
|
mkdir "$DIR/Build/$ARCH-gdb"
|
|
|
|
|
|
|
|
pushd "$DIR/Build/$ARCH-gdb"
|
|
|
|
unset PKG_CONFIG_LIBDIR # Just in case
|
|
|
|
|
|
|
|
buildstep "gdb/configure" "$DIR"/Tarballs/$GDB_NAME/configure --prefix="$PREFIX" \
|
|
|
|
--target="$TARGET" \
|
|
|
|
--disable-werror \
|
|
|
|
--disable-nls \
|
|
|
|
--with-python \
|
|
|
|
"${config_args[@]}" || exit 1
|
|
|
|
|
|
|
|
buildstep "gdb/build" make MAKEINFO=true -j "$MAKEJOBS" || exit 1
|
|
|
|
buildstep "gdb/install" make MAKEINFO=true install || exit 1
|
|
|
|
popd
|