Skip to content

Commit

Permalink
Update toolchain to binutils-2.33.1 gcc-9.2.0
Browse files Browse the repository at this point in the history
Toolchain build makes git repo out of toolchain to allow patching
Fix Makefiles to use new libstdc++
Parameterize BuildIt with default TARGET of i686 but arm is experimental
  • Loading branch information
philberty authored and awesomekling committed Dec 19, 2019
1 parent 1c9742a commit c73aa66
Show file tree
Hide file tree
Showing 5 changed files with 298 additions and 162 deletions.
4 changes: 2 additions & 2 deletions Kernel/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -109,8 +109,8 @@ OBJS = $(CXX_OBJS) Arch/i386/Boot/boot.ao
KERNEL = kernel
CXXFLAGS += -ffreestanding -mno-80387 -mno-mmx -mno-sse -mno-sse2 -fno-asynchronous-unwind-tables
CXXFLAGS += -nostdlib -nostdinc -nostdinc++
CXXFLAGS += -I../Toolchain/Local/i686-pc-serenity/include/c++/8.3.0/
CXXFLAGS += -I../Toolchain/Local/i686-pc-serenity/include/c++/8.3.0/i686-pc-serenity/
CXXFLAGS += -I../Toolchain/Local/i686-pc-serenity/include/c++/9.2.0/
CXXFLAGS += -I../Toolchain/Local/i686-pc-serenity/include/c++/9.2.0/i686-pc-serenity/
DEFINES += -DKERNEL
LDFLAGS += -Ttext 0x100000 -Wl,-T linker.ld -nostdlib

Expand Down
2 changes: 1 addition & 1 deletion Makefile.common
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
ARCH_FLAGS =
STANDARD_FLAGS = -std=c++17 -Wno-sized-deallocation -fno-sized-deallocation
WARNING_FLAGS = -Werror -Wextra -Wall -Wundef -Wcast-qual -Wwrite-strings -Wimplicit-fallthrough -Wno-expansion-to-defined
WARNING_FLAGS = -Werror -Wextra -Wall -Wno-nonnull-compare -Wno-deprecated-copy -Wno-address-of-packed-member -Wundef -Wcast-qual -Wwrite-strings -Wimplicit-fallthrough -Wno-expansion-to-defined
FLAVOR_FLAGS = -fno-exceptions -fno-rtti
OPTIMIZATION_FLAGS = -Os

Expand Down
58 changes: 38 additions & 20 deletions Toolchain/BuildIt.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,53 +7,71 @@ DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

echo "$DIR"

TARGET=i686-pc-serenity
ARCH=${ARCH:-"i686"}
TARGET="$ARCH-pc-serenity"
PREFIX="$DIR/Local"
SYSROOT="$DIR/../Root"

echo PREFIX is "$PREFIX"
echo SYSROOT is "$SYSROOT"

mkdir -p "$DIR/Tarballs"

source "$DIR/UseIt.sh"

BINUTILS_VERSION="2.33.1"
BINUTILS_MD5SUM="d1119c93fc0ed3007be4a84dd186af5"
BINUTILS_NAME="binutils-$BINUTILS_VERSION"
BINUTILS_PKG="${BINUTILS_NAME}.tar.gz"
BINUTILS_BASE_URL="https://ftp.gnu.org/gnu/binutils"

GCC_VERSION="9.2.0"
GCC_MD5SUM="e03739b042a14376d727ddcfd05a9bc3"
GCC_NAME="gcc-$GCC_VERSION"
GCC_PKG="${GCC_NAME}.tar.gz"
GCC_BASE_URL="https://ftp.gnu.org/gnu/gcc"

pushd "$DIR/Tarballs"
md5="$(md5sum binutils-2.32.tar.gz | cut -f1 -d' ')"
md5="$(md5sum $BINUTILS_PKG | cut -f1 -d' ')"
echo "bu md5='$md5'"
if [ ! -e "binutils-2.32.tar.gz" ] || [ "$md5" != "d1119c93fc0ed3007be4a84dd186af55" ] ; then
rm -f binutils-2.32.tar.gz
curl -O "https://ftp.gnu.org/gnu/binutils/binutils-2.32.tar.gz"
if [ ! -e $BINUTILS_PKG ] || [ "$md5" != ${BINUTILS_MD5SUM} ] ; then
rm -f $BINUTILS_PKG
wget "$BINUTILS_BASE_URL/$BINUTILS_PKG"
else
echo "Skipped downloading binutils"
fi

md5="$(md5sum gcc-8.3.0.tar.gz | cut -f1 -d' ')"
md5="$(md5sum ${GCC_PKG} | cut -f1 -d' ')"
echo "gc md5='$md5'"
if [ ! -e "gcc-8.3.0.tar.gz" ] || [ "$md5" != "9972f8c24c02ebcb5a342c1b30de69ff" ] ; then
rm -f gcc-8.3.0.tar.gz
curl -O "https://ftp.gnu.org/gnu/gcc/gcc-8.3.0/gcc-8.3.0.tar.gz"
if [ ! -e $GCC_PKG ] || [ "$md5" != ${GCC_MD5SUM} ] ; then
rm -f $GCC_PKG
wget "$GCC_BASE_URL/$GCC_NAME/$GCC_PKG"
else
echo "Skipped downloading gcc"
fi

if [ ! -d "binutils-2.32" ]; then
if [ ! -d ${BINUTILS_NAME} ]; then
echo "Extracting binutils..."
tar -xf "binutils-2.32.tar.gz"
tar -xf ${BINUTILS_PKG}

pushd "binutils-2.32"
patch -p1 < "$DIR"/Patches/binutils.patch > /dev/null
pushd ${BINUTILS_NAME}
git init
git add .
git commit -am "BASE"
git apply "$DIR"/Patches/binutils.patch
popd
else
echo "Skipped extracting binutils"
fi

if [ ! -d "gcc-8.3.0" ]; then
if [ ! -d $GCC_NAME ]; then
echo "Extracting gcc..."
tar -xf "gcc-8.3.0.tar.gz"
tar -xf $GCC_PKG

pushd "gcc-8.3.0"
patch -p1 < "$DIR"/Patches/gcc.patch > /dev/null
pushd $GCC_NAME
git init
git add .
git commit -am "BASE"
git apply "$DIR"/Patches/gcc.patch
popd
else
echo "Skipped extracting gcc"
Expand All @@ -73,7 +91,7 @@ pushd "$DIR/Build/"
unset PKG_CONFIG_LIBDIR # Just in case

pushd binutils
"$DIR"/Tarballs/binutils-2.32/configure --prefix="$PREFIX" \
"$DIR"/Tarballs/binutils-2.33.1/configure --prefix="$PREFIX" \
--target="$TARGET" \
--with-sysroot="$SYSROOT" \
--disable-nls || exit 1
Expand All @@ -82,7 +100,7 @@ pushd "$DIR/Build/"
popd

pushd gcc
"$DIR"/Tarballs/gcc-8.3.0/configure --prefix="$PREFIX" \
"$DIR"/Tarballs/gcc-9.2.0/configure --prefix="$PREFIX" \
--target="$TARGET" \
--with-sysroot="$SYSROOT" \
--disable-nls \
Expand Down
174 changes: 98 additions & 76 deletions Toolchain/Patches/binutils.patch
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
diff -Nru ../binutils-2.32/bfd/config.bfd binutils-2.32-serenity/bfd/config.bfd
--- ../binutils-2.32/bfd/config.bfd 2019-01-19 17:01:32.000000000 +0100
+++ binutils-2.32-serenity/bfd/config.bfd 2019-04-04 17:41:07.000000000 +0200
@@ -223,6 +223,20 @@
;;

diff --git a/bfd/config.bfd b/bfd/config.bfd
index 13d678e1..782ad689 100644
--- a/bfd/config.bfd
+++ b/bfd/config.bfd
@@ -220,6 +220,26 @@ esac
case "${targ}" in
# START OF targmatch.h
#ifdef BFD64
+
+ i[3-7]86-*-serenity*)
+ targ_defvec=i386_elf32_vec
Expand All @@ -18,86 +19,86 @@ diff -Nru ../binutils-2.32/bfd/config.bfd binutils-2.32-serenity/bfd/config.bfd
+ want64=true
+ ;;
+#endif
+
#ifdef BFD64
+
+ arm-*-serenity*)
+ targ_defvec=arm_elf32_le_vec
+ targ_selvecs=
+ targ64_selvecs=
+ ;;
+
aarch64-*-darwin*)
targ_defvec=aarch64_mach_o_vec
diff -Nru ../binutils-2.32/config.sub binutils-2.32-serenity/config.sub
--- ../binutils-2.32/config.sub 2019-01-19 17:01:33.000000000 +0100
+++ binutils-2.32-serenity/config.sub 2019-04-04 17:39:29.000000000 +0200
@@ -1337,6 +1337,7 @@
targ_selvecs="arm_mach_o_vec mach_o_le_vec mach_o_be_vec mach_o_fat_vec"
diff --git a/config.sub b/config.sub
index 5b158ac4..49f05c37 100755
--- a/config.sub
+++ b/config.sub
@@ -1342,6 +1342,7 @@ case $os in
# Each alternative MUST end in a * to match a version number.
# sysv* is not here because it comes later, after sysvr4.
gnu* | bsd* | mach* | minix* | genix* | ultrix* | irix* \
+ | serenity* \
| *vms* | esix* | aix* | cnk* | sunos | sunos[34]*\
| hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \
| sym* | kopensolaris* | plan9* \
diff -Nru ../binutils-2.32/gas/configure.tgt binutils-2.32-serenity/gas/configure.tgt
--- ../binutils-2.32/gas/configure.tgt 2019-01-19 17:01:33.000000000 +0100
+++ binutils-2.32-serenity/gas/configure.tgt 2019-04-04 17:41:40.000000000 +0200
@@ -121,6 +121,7 @@
diff --git a/gas/configure.tgt b/gas/configure.tgt
index a4828c4c..4d75ca56 100644
--- a/gas/configure.tgt
+++ b/gas/configure.tgt
@@ -121,6 +121,8 @@ esac
generic_target=${cpu_type}-$vendor-$os
# Note: This table is alpha-sorted, please try to keep it that way.
case ${generic_target} in
+ i386-*-serenity*) fmt=elf;;
+ arm-*-serenity*) fmt=elf;;
aarch64*-*-elf*) fmt=elf;;
aarch64*-*-fuchsia*) fmt=elf;;
aarch64*-*-linux*) fmt=elf em=linux
diff -Nru ../binutils-2.32/ld/Makefile.am binutils-2.32-serenity/ld/Makefile.am
--- ../binutils-2.32/ld/Makefile.am 2019-01-19 17:01:33.000000000 +0100
+++ binutils-2.32-serenity/ld/Makefile.am 2019-04-04 17:50:13.000000000 +0200
@@ -1289,6 +1289,10 @@
eelf_i386.c: $(srcdir)/emulparams/elf_i386.sh \
$(ELF_X86_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}

+eelf_i386_serenity.c: $(srcdir)/emulparams/elf_i386_serenity.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf_i386_serenity "$(tdir_elf_i386_serenity)"
+
eelf_i386_be.c: $(srcdir)/emulparams/elf_i386_be.sh \
$(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}

@@ -1849,6 +1853,10 @@
eelf_x86_64.c: $(srcdir)/emulparams/elf_x86_64.sh \
$(ELF_X86_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}

+eelf_x86_64_serenity.c: $(srcdir)/emulparams/elf_x86_64_serenity.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf_x86_64_serenity "$(tdir_elf_x86_64_serenity)"
+
eelf_x86_64_cloudabi.c: $(srcdir)/emulparams/elf_x86_64_cloudabi.sh \
$(srcdir)/emulparams/elf_x86_64.sh \
$(ELF_X86_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
diff -Nru ../binutils-2.32/ld/Makefile.in binutils-2.32-serenity/ld/Makefile.in
--- ../binutils-2.32/ld/Makefile.in 2019-02-02 16:54:43.000000000 +0100
+++ binutils-2.32-serenity/ld/Makefile.in 2019-04-04 17:50:55.000000000 +0200
@@ -2893,6 +2893,10 @@
eelf_i386.c: $(srcdir)/emulparams/elf_i386.sh \
$(ELF_X86_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}

+eelf_i386_serenity.c: $(srcdir)/emulparams/elf_i386_serenity.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf_i386_serenity "$(tdir_elf_i386_serenity)"
+
eelf_i386_be.c: $(srcdir)/emulparams/elf_i386_be.sh \
$(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}

@@ -3453,6 +3457,10 @@
eelf_x86_64.c: $(srcdir)/emulparams/elf_x86_64.sh \
$(ELF_X86_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}

+eelf_x86_64_serenity.c: $(srcdir)/emulparams/elf_x86_64_serenity.sh \
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf_x86_64_serenity "$(tdir_elf_x86_64_serenity)"
+
eelf_x86_64_cloudabi.c: $(srcdir)/emulparams/elf_x86_64_cloudabi.sh \
$(srcdir)/emulparams/elf_x86_64.sh \
$(ELF_X86_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
diff -Nru ../binutils-2.32/ld/configure.tgt binutils-2.32-serenity/ld/configure.tgt
--- ../binutils-2.32/ld/configure.tgt 2019-01-19 17:01:33.000000000 +0100
+++ binutils-2.32-serenity/ld/configure.tgt 2019-04-04 17:42:40.000000000 +0200
@@ -45,6 +45,15 @@
diff --git a/ld/Makefile.am b/ld/Makefile.am
index 0509c2e5..b1adc7c6 100644
--- a/ld/Makefile.am
+++ b/ld/Makefile.am
@@ -178,6 +178,7 @@ ALL_EMULATION_SOURCES = \
earmelf_nbsd.c \
earmelf_phoenix.c \
earmelf_vxworks.c \
+ earmelf_serenity.c \
earmelfb.c \
earmelfb_fbsd.c \
earmelfb_fuchsia.c \
diff --git a/ld/Makefile.in b/ld/Makefile.in
index 9898392a..9357b539 100644
--- a/ld/Makefile.in
+++ b/ld/Makefile.in
@@ -665,6 +665,7 @@ ALL_EMULATION_SOURCES = \
earmelf_nbsd.c \
earmelf_phoenix.c \
earmelf_vxworks.c \
+ earmelf_serenity.c \
earmelfb.c \
earmelfb_fbsd.c \
earmelfb_fuchsia.c \
@@ -779,6 +780,7 @@ ALL_EMULATION_SOURCES = \
eelf_i386_vxworks.c \
eelf_iamcu.c \
eelf_s390.c \
+ eelf_i386_serenity.c \
eh8300elf.c \
eh8300elf_linux.c \
eh8300helf.c \
@@ -945,6 +947,7 @@ ALL_64_EMULATION_SOURCES = \
eelf_x86_64_fbsd.c \
eelf_x86_64_nacl.c \
eelf_x86_64_sol2.c \
+ eelf_x86_64_serenity.c \
ehppa64linux.c \
ei386pep.c \
emmo.c
diff --git a/ld/configure.tgt b/ld/configure.tgt
index c81bc8a7..a93a04c6 100644
--- a/ld/configure.tgt
+++ b/ld/configure.tgt
@@ -45,6 +45,19 @@ targ64_extra_libpath=
# architecture variants should be kept together even if their names
# break the alpha sorting.
case "${targ}" in
Expand All @@ -109,19 +110,40 @@ diff -Nru ../binutils-2.32/ld/configure.tgt binutils-2.32-serenity/ld/configure.
+x86_64-*-serenity*)
+ targ_emul=elf_x86_64_serenity
+ targ_extra_emuls="elf_i386_serenity elf_x86_64 elf_i386"
+ ;;
+arm-*-serenity*)
+ targ_emul=armelf_serenity
+ targ_extra_emuls="armelf_serenity armelf"
+ ;;
aarch64_be-*-elf) targ_emul=aarch64elfb
targ_extra_emuls="aarch64elf aarch64elf32 aarch64elf32b armelfb armelf" ;;
aarch64-*-elf | aarch64-*-rtems*)
diff -Nru ../binutils-2.32/ld/emulparams/elf_i386_serenity.sh binutils-2.32-serenity/ld/emulparams/elf_i386_serenity.sh
--- ../binutils-2.32/ld/emulparams/elf_i386_serenity.sh 1970-01-01 01:00:00.000000000 +0100
+++ binutils-2.32-serenity/ld/emulparams/elf_i386_serenity.sh 2019-04-04 17:43:12.000000000 +0200
diff --git a/ld/emulparams/armelf_serenity.sh b/ld/emulparams/armelf_serenity.sh
new file mode 100644
index 00000000..517cd626
--- /dev/null
+++ b/ld/emulparams/armelf_serenity.sh
@@ -0,0 +1,7 @@
+. ${srcdir}/emulparams/armelf.sh
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+TEXT_START_ADDR=0x00008000
+TARGET2_TYPE=got-rel
+
+unset STACK_ADDR
+unset EMBEDDED
diff --git a/ld/emulparams/elf_i386_serenity.sh b/ld/emulparams/elf_i386_serenity.sh
new file mode 100644
index 00000000..342d5298
--- /dev/null
+++ b/ld/emulparams/elf_i386_serenity.sh
@@ -0,0 +1,3 @@
+. ${srcdir}/emulparams/elf_i386.sh
+GENERATE_SHLIB_SCRIPT=yes
+GENERATE_PIE_SCRIPT=yes
diff -Nru ../binutils-2.32/ld/emulparams/elf_x86_64_serenity.sh binutils-2.32-serenity/ld/emulparams/elf_x86_64_serenity.sh
--- ../binutils-2.32/ld/emulparams/elf_x86_64_serenity.sh 1970-01-01 01:00:00.000000000 +0100
+++ binutils-2.32-serenity/ld/emulparams/elf_x86_64_serenity.sh 2019-04-04 17:43:34.000000000 +0200
diff --git a/ld/emulparams/elf_x86_64_serenity.sh b/ld/emulparams/elf_x86_64_serenity.sh
new file mode 100644
index 00000000..a2af90a6
--- /dev/null
+++ b/ld/emulparams/elf_x86_64_serenity.sh
@@ -0,0 +1 @@
+. ${srcdir}/emulparams/elf_x86_64.sh
Loading

0 comments on commit c73aa66

Please sign in to comment.