mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-08-17 01:10:28 +03:00
Toolchain+Ports: Split the GCC patches
This shouldn't cause any breaking changes, so a toolchain rebuild is not required. As per Hendiadyoin's request, math errno is disabled by default, which should enable some extra compiler optimizations in LibGL and LibSoftGPU code that uses math functions heavily. Co-Authored-By: Ali Mohammad Pur <mpfard@serenityos.org>
This commit is contained in:
parent
83aa5dcbf6
commit
d0edf2627c
Notes:
sideshowbarker
2024-07-18 01:43:16 +09:00
Author: https://github.com/BertalanD Commit: https://github.com/SerenityOS/serenity/commit/d0edf2627c Pull-request: https://github.com/SerenityOS/serenity/pull/14055 Reviewed-by: https://github.com/alimpfard Reviewed-by: https://github.com/danners Reviewed-by: https://github.com/timschumi
4
.github/workflows/cmake.yml
vendored
4
.github/workflows/cmake.yml
vendored
@ -76,8 +76,8 @@ jobs:
|
||||
# *and* as actual output variable, in this order.
|
||||
message(" set-output name=time::${current_date}")
|
||||
message("::set-output name=time::${current_date}")
|
||||
message(" set-output name=libc_headers::${{ hashFiles('Userland/Libraries/LibC/**/*.h', 'Userland/Libraries/LibPthread/**/*.h', 'Toolchain/Patches/*.patch', 'Toolchain/BuildIt.sh') }}")
|
||||
message("::set-output name=libc_headers::${{ hashFiles('Userland/Libraries/LibC/**/*.h', 'Userland/Libraries/LibPthread/**/*.h', 'Toolchain/Patches/*.patch', 'Toolchain/BuildIt.sh') }}")
|
||||
message(" set-output name=libc_headers::${{ hashFiles('Userland/Libraries/LibC/**/*.h', 'Userland/Libraries/LibPthread/**/*.h', 'Toolchain/Patches/*.patch', 'Toolchain/Patches/gcc/*.patch' 'Toolchain/BuildIt.sh') }}")
|
||||
message("::set-output name=libc_headers::${{ hashFiles('Userland/Libraries/LibC/**/*.h', 'Userland/Libraries/LibPthread/**/*.h', 'Toolchain/Patches/*.patch', 'Toolchain/Patches/gcc/*.patch' 'Toolchain/BuildIt.sh') }}")
|
||||
|
||||
- name: Toolchain cache
|
||||
# TODO: Change the version to the released version when https://github.com/actions/cache/pull/489 (or 571) is merged.
|
||||
|
@ -43,8 +43,8 @@ jobs:
|
||||
# *and* as actual output variable, in this order.
|
||||
message(" set-output name=time::${current_date}")
|
||||
message("::set-output name=time::${current_date}")
|
||||
message(" set-output name=libc_headers::${{ hashFiles('Userland/Libraries/LibC/**/*.h', 'Userland/Libraries/LibPthread/**/*.h', 'Toolchain/Patches/*.patch', 'Toolchain/BuildIt.sh') }}")
|
||||
message("::set-output name=libc_headers::${{ hashFiles('Userland/Libraries/LibC/**/*.h', 'Userland/Libraries/LibPthread/**/*.h', 'Toolchain/Patches/*.patch', 'Toolchain/BuildIt.sh') }}")
|
||||
message(" set-output name=libc_headers::${{ hashFiles('Userland/Libraries/LibC/**/*.h', 'Userland/Libraries/LibPthread/**/*.h', 'Toolchain/Patches/*.patch', 'Toolchain/Patches/gcc/*.patch' 'Toolchain/BuildIt.sh') }}")
|
||||
message("::set-output name=libc_headers::${{ hashFiles('Userland/Libraries/LibC/**/*.h', 'Userland/Libraries/LibPthread/**/*.h', 'Toolchain/Patches/*.patch', 'Toolchain/Patches/gcc/*.patch' 'Toolchain/BuildIt.sh') }}")
|
||||
|
||||
- name: Toolchain cache
|
||||
# TODO: Change the version to the released version when https://github.com/actions/cache/pull/489 (or 571) is merged.
|
||||
|
@ -76,8 +76,8 @@ jobs:
|
||||
# *and* as actual output variable, in this order.
|
||||
message(" set-output name=time::${current_date}")
|
||||
message("::set-output name=time::${current_date}")
|
||||
message(" set-output name=libc_headers::${{ hashFiles('Userland/Libraries/LibC/**/*.h', 'Userland/Libraries/LibPthread/**/*.h', 'Toolchain/Patches/*.patch', 'Toolchain/BuildIt.sh') }}")
|
||||
message("::set-output name=libc_headers::${{ hashFiles('Userland/Libraries/LibC/**/*.h', 'Userland/Libraries/LibPthread/**/*.h', 'Toolchain/Patches/*.patch', 'Toolchain/BuildIt.sh') }}")
|
||||
message(" set-output name=libc_headers::${{ hashFiles('Userland/Libraries/LibC/**/*.h', 'Userland/Libraries/LibPthread/**/*.h', 'Toolchain/Patches/*.patch', 'Toolchain/Patches/gcc/*.patch' 'Toolchain/BuildIt.sh') }}")
|
||||
message("::set-output name=libc_headers::${{ hashFiles('Userland/Libraries/LibC/**/*.h', 'Userland/Libraries/LibPthread/**/*.h', 'Toolchain/Patches/*.patch', 'Toolchain/Patches/gcc/*.patch' 'Toolchain/BuildIt.sh') }}")
|
||||
|
||||
- name: Toolchain cache
|
||||
# TODO: Change the version to the released version when https://github.com/actions/cache/pull/489 (or 571) is merged.
|
||||
|
@ -25,7 +25,7 @@ steps:
|
||||
- ${{ if eq(parameters.toolchain, 'gcc') }}:
|
||||
- task: Cache@2
|
||||
inputs:
|
||||
key: '"toolchain" | "${{ parameters.arch }}" | Toolchain/BuildIt.sh | Toolchain/Patches/{gcc*,binutils}.patch | Userland/Libraries/LibC/**/*.h | Userland/Libraries/LibPthread/**/*.h'
|
||||
key: '"toolchain" | "${{ parameters.arch }}" | Toolchain/BuildIt.sh | Toolchain/Patches/binutils.patch | Toolchain/Patches/gcc/*.patch | Userland/Libraries/LibC/**/*.h | Userland/Libraries/LibPthread/**/*.h'
|
||||
path: $(Build.SourcesDirectory)/Toolchain/Cache
|
||||
displayName: 'Toolchain Prebuilt Cache'
|
||||
|
||||
|
1
Ports/gcc/patches
Symbolic link
1
Ports/gcc/patches
Symbolic link
@ -0,0 +1 @@
|
||||
../../Toolchain/Patches/gcc
|
@ -1 +0,0 @@
|
||||
../../../Toolchain/Patches/gcc.patch
|
@ -271,11 +271,13 @@ pushd "$DIR/Tarballs"
|
||||
git init > /dev/null
|
||||
git add . > /dev/null
|
||||
git commit -am "BASE" > /dev/null
|
||||
git apply "$DIR"/Patches/gcc.patch > /dev/null
|
||||
git am --keep-non-patch "$DIR"/Patches/gcc/*.patch > /dev/null
|
||||
else
|
||||
patch -p1 < "$DIR/Patches/gcc.patch" > /dev/null
|
||||
for patch in "$DIR"/Patches/gcc/*.patch; do
|
||||
patch -p1 < "$patch" > /dev/null
|
||||
done
|
||||
fi
|
||||
$MD5SUM "$DIR/Patches/gcc.patch" > .patch.applied
|
||||
$MD5SUM $DIR/Patches/gcc/*.patch > .patch.applied
|
||||
popd
|
||||
|
||||
if [ "$SYSTEM_NAME" = "Darwin" ]; then
|
||||
@ -392,10 +394,6 @@ pushd "$DIR/Build/$ARCH"
|
||||
perl -pi -e 's/-no-pie/-nopie/g' "$DIR/Tarballs/gcc-$GCC_VERSION/gcc/configure"
|
||||
fi
|
||||
|
||||
if [ ! -f "$DIR/Tarballs/gcc-$GCC_VERSION/gcc/config/serenity-userland.h" ]; then
|
||||
cp "$DIR/Tarballs/gcc-$GCC_VERSION/gcc/config/serenity.h" "$DIR/Tarballs/gcc-$GCC_VERSION/gcc/config/serenity-kernel.h"
|
||||
fi
|
||||
|
||||
rm -rf gcc
|
||||
mkdir -p gcc
|
||||
|
||||
|
@ -1,332 +0,0 @@
|
||||
diff --git a/fixincludes/mkfixinc.sh b/fixincludes/mkfixinc.sh
|
||||
index df90720b7..a45cdd0de 100755
|
||||
--- a/fixincludes/mkfixinc.sh
|
||||
+++ b/fixincludes/mkfixinc.sh
|
||||
@@ -11,6 +11,7 @@ target=fixinc.sh
|
||||
|
||||
# Check for special fix rules for particular targets
|
||||
case $machine in
|
||||
+ *-serenity* | \
|
||||
i?86-*-cygwin* | \
|
||||
i?86-*-mingw32* | \
|
||||
x86_64-*-mingw32* | \
|
||||
diff --git a/gcc/common.opt b/gcc/common.opt
|
||||
index 8a0dafc52..a4f888953 100644
|
||||
--- a/gcc/common.opt
|
||||
+++ b/gcc/common.opt
|
||||
@@ -3607,4 +3607,8 @@ fipa-ra
|
||||
Common Var(flag_ipa_ra) Optimization
|
||||
Use caller save register across calls if possible.
|
||||
|
||||
+arch
|
||||
+Driver Ignore Separate
|
||||
+-arch <name> Generate output for architecture <name>.
|
||||
+
|
||||
; This comment is to ensure we retain the blank line above.
|
||||
diff --git a/gcc/config.gcc b/gcc/config.gcc
|
||||
index c5064dd37..f8a468c6f 100644
|
||||
--- a/gcc/config.gcc
|
||||
+++ b/gcc/config.gcc
|
||||
@@ -673,6 +673,13 @@ x86_cpus="generic intel"
|
||||
|
||||
# Common parts for widely ported systems.
|
||||
case ${target} in
|
||||
+*-*-serenity*)
|
||||
+ gas=yes
|
||||
+ gnu_ld=yes
|
||||
+ default_use_cxa_atexit=yes
|
||||
+ extra_options="${extra_options} serenity.opt"
|
||||
+ tmake_file="t-slibgcc"
|
||||
+ ;;
|
||||
*-*-darwin*)
|
||||
tmake_file="t-darwin "
|
||||
tm_file="${tm_file} darwin.h"
|
||||
@@ -1087,6 +1094,19 @@ case ${target} in
|
||||
esac
|
||||
|
||||
case ${target} in
|
||||
+i[34567]86-*-serenity*)
|
||||
+ default_gnu_indirect_function=yes
|
||||
+ tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h glibc-stdint.h i386/i386elf.h serenity.h i386/serenity.h"
|
||||
+ ;;
|
||||
+x86_64-*-serenity*)
|
||||
+ default_gnu_indirect_function=yes
|
||||
+ tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h glibc-stdint.h i386/i386elf.h i386/x86-64.h serenity.h i386/serenity.h"
|
||||
+ ;;
|
||||
+aarch64-*-serenity*)
|
||||
+ default_gnu_indirect_function=yes
|
||||
+ tm_file="${tm_file} dbxelf.h elfos.h aarch64/aarch64-elf.h glibc-stdint.h serenity.h"
|
||||
+ tmake_file="${tmake_file} aarch64/t-aarch64"
|
||||
+ ;;
|
||||
aarch64*-*-elf | aarch64*-*-fuchsia* | aarch64*-*-rtems*)
|
||||
tm_file="${tm_file} dbxelf.h elfos.h newlib-stdint.h"
|
||||
tm_file="${tm_file} aarch64/aarch64-elf.h aarch64/aarch64-errata.h aarch64/aarch64-elf-raw.h"
|
||||
diff --git a/gcc/config/i386/serenity.h b/gcc/config/i386/serenity.h
|
||||
new file mode 100644
|
||||
index 000000000..53a4b8e93
|
||||
--- /dev/null
|
||||
+++ b/gcc/config/i386/serenity.h
|
||||
@@ -0,0 +1,7 @@
|
||||
+/* Ensure that we are using the SIZE_TYPE indicated by SysV */
|
||||
+#undef SIZE_TYPE
|
||||
+#define SIZE_TYPE (TARGET_64BIT ? "long unsigned int" : "unsigned int")
|
||||
+
|
||||
+/* Ensure that ptrdiff_t matches the actual pointer size */
|
||||
+#undef PTRDIFF_TYPE
|
||||
+#define PTRDIFF_TYPE (TARGET_64BIT ? "long int" : "int")
|
||||
diff --git a/gcc/config/serenity.h b/gcc/config/serenity.h
|
||||
new file mode 100644
|
||||
index 000000000..dc2f5361e
|
||||
--- /dev/null
|
||||
+++ b/gcc/config/serenity.h
|
||||
@@ -0,0 +1,47 @@
|
||||
+/* Useful if you wish to make target-specific GCC changes. */
|
||||
+#undef TARGET_SERENITY
|
||||
+#define TARGET_SERENITY 1
|
||||
+
|
||||
+#if defined(HAVE_LD_EH_FRAME_HDR)
|
||||
+#define LINK_EH_SPEC "%{!static|static-pie:--eh-frame-hdr} "
|
||||
+#endif
|
||||
+
|
||||
+/* Default arguments you want when running your
|
||||
+ i686-serenity-gcc/x86_64-serenity-gcc toolchain */
|
||||
+#undef LIB_SPEC
|
||||
+#define LIB_SPEC "%{pthread:-lpthread} -lc" /* link against C standard library */
|
||||
+
|
||||
+/* Files that are linked before user code.
|
||||
+ The %s tells GCC to look for these files in the library directory. */
|
||||
+#undef STARTFILE_SPEC
|
||||
+#define STARTFILE_SPEC "%{!shared:crt0.o%s} crti.o%s %{shared: %{!fbuilding-libgcc:crt0_shared.o%s}} %{shared|static-pie|!no-pie:crtbeginS.o%s; :crtbegin.o%s}"
|
||||
+
|
||||
+/* Files that are linked after user code. */
|
||||
+#undef ENDFILE_SPEC
|
||||
+#define ENDFILE_SPEC "%{shared|static-pie|!no-pie:crtendS.o%s; :crtend.o%s} crtn.o%s"
|
||||
+
|
||||
+#undef LINK_SPEC
|
||||
+#define LINK_SPEC "%{shared:-shared} %{static:-static} %{!static: %{rdynamic:-export-dynamic} -dynamic-linker /usr/lib/Loader.so}"
|
||||
+
|
||||
+#undef CC1_SPEC
|
||||
+#define CC1_SPEC "-ftls-model=initial-exec %{!fno-pic:%{!fno-PIC:%{!fpic:%{!fPIC: -fPIC}}}} -fno-semantic-interposition"
|
||||
+
|
||||
+#undef CC1PLUS_SPEC
|
||||
+#define CC1PLUS_SPEC "-ftls-model=initial-exec"
|
||||
+
|
||||
+#undef CPP_SPEC
|
||||
+#define CPP_SPEC "%{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}"
|
||||
+
|
||||
+/* Use --as-needed -lgcc_s for eh support. */
|
||||
+#define USE_LD_AS_NEEDED 1
|
||||
+
|
||||
+/* Additional predefined macros. */
|
||||
+#undef TARGET_OS_CPP_BUILTINS
|
||||
+#define TARGET_OS_CPP_BUILTINS() \
|
||||
+ do { \
|
||||
+ builtin_define ("__serenity__"); \
|
||||
+ builtin_define ("__unix__"); \
|
||||
+ builtin_assert ("system=serenity"); \
|
||||
+ builtin_assert ("system=unix"); \
|
||||
+ builtin_assert ("system=posix"); \
|
||||
+ } while(0);
|
||||
diff --git a/gcc/config/serenity.opt b/gcc/config/serenity.opt
|
||||
new file mode 100644
|
||||
index 000000000..2756a5575
|
||||
--- /dev/null
|
||||
+++ b/gcc/config/serenity.opt
|
||||
@@ -0,0 +1,35 @@
|
||||
+; SerenityOS options.
|
||||
+
|
||||
+; Copyright (C) 2021 Gunnar Beutner <gunnar@beutner.name>
|
||||
+;
|
||||
+; This file is part of GCC.
|
||||
+;
|
||||
+; GCC 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, or (at your option) any later
|
||||
+; version.
|
||||
+;
|
||||
+; GCC 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 GCC; see the file COPYING3. If not see
|
||||
+; <http://www.gnu.org/licenses/>.
|
||||
+
|
||||
+; See the GCC internals manual (options.texi) for a description of
|
||||
+; this file's format.
|
||||
+
|
||||
+; Please try to keep this file in ASCII collating order.
|
||||
+
|
||||
+posix
|
||||
+Driver
|
||||
+
|
||||
+pthread
|
||||
+Driver
|
||||
+
|
||||
+rdynamic
|
||||
+Driver
|
||||
+
|
||||
+; This comment is to ensure we retain the blank line above.
|
||||
diff --git a/gcc/configure b/gcc/configure
|
||||
index 5ce055771..2deaac5bc 100755
|
||||
--- a/gcc/configure
|
||||
+++ b/gcc/configure
|
||||
@@ -31608,6 +31608,9 @@ case "$target" in
|
||||
*-linux-musl*)
|
||||
gcc_cv_target_dl_iterate_phdr=yes
|
||||
;;
|
||||
+ *-serenity*)
|
||||
+ gcc_cv_target_dl_iterate_phdr=yes
|
||||
+ ;;
|
||||
esac
|
||||
|
||||
if test x$gcc_cv_target_dl_iterate_phdr = xyes; then
|
||||
diff --git a/libgcc/config.host b/libgcc/config.host
|
||||
index 8c56fcae5..f5855cfa6 100644
|
||||
--- a/libgcc/config.host
|
||||
+++ b/libgcc/config.host
|
||||
@@ -1534,6 +1534,22 @@ nvptx-*)
|
||||
tmake_file="$tmake_file nvptx/t-nvptx"
|
||||
extra_parts="crt0.o"
|
||||
;;
|
||||
+i[34567]86-*-serenity*)
|
||||
+ extra_parts="$extra_parts crti.o crtbegin.o crtbeginS.o crtend.o crtendS.o crtn.o"
|
||||
+ tmake_file="$tmake_file i386/t-crtstuff t-crtstuff-pic t-libgcc-pic t-slibgcc t-eh-dw2-dip"
|
||||
+ ;;
|
||||
+x86_64-*-serenity*)
|
||||
+ extra_parts="$extra_parts crti.o crtbegin.o crtbeginS.o crtend.o crtendS.o crtn.o"
|
||||
+ tmake_file="$tmake_file i386/t-crtstuff t-crtstuff-pic t-libgcc-pic t-slibgcc t-eh-dw2-dip"
|
||||
+ ;;
|
||||
+aarch64-*-serenity*)
|
||||
+ extra_parts="$extra_parts crti.o crtbegin.o crtend.o crtn.o"
|
||||
+ extra_parts="$extra_parts crtfastmath.o"
|
||||
+ tmake_file="$tmake_file ${cpu_type}/t-aarch64"
|
||||
+ tmake_file="$tmake_file ${cpu_type}/t-lse t-slibgcc-libgcc"
|
||||
+ tmake_file="$tmake_file ${cpu_type}/t-softfp t-softp t-crtfm"
|
||||
+ md_unwind_header=aarch64/aarch64-unwind.h
|
||||
+ ;;
|
||||
*)
|
||||
echo "*** Configuration ${host} not supported" 1>&2
|
||||
exit 1
|
||||
diff --git a/libgcc/config/t-slibgcc b/libgcc/config/t-slibgcc
|
||||
index 4efd7b43d..932fa0cfb 100644
|
||||
--- a/libgcc/config/t-slibgcc
|
||||
+++ b/libgcc/config/t-slibgcc
|
||||
@@ -26,7 +26,6 @@ SHLIB_MAP = @shlib_map_file@
|
||||
SHLIB_OBJS = @shlib_objs@
|
||||
SHLIB_DIR = @multilib_dir@
|
||||
SHLIB_SLIBDIR_QUAL = @shlib_slibdir_qual@
|
||||
-SHLIB_LC = -lc
|
||||
SHLIB_MAKE_SOLINK = $(LN_S) $(SHLIB_SONAME) $(SHLIB_DIR)/$(SHLIB_SOLINK)
|
||||
SHLIB_INSTALL_SOLINK = $(LN_S) $(SHLIB_SONAME) \
|
||||
$(DESTDIR)$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SOLINK)
|
||||
diff --git a/libgcc/unwind-dw2-fde-dip.c b/libgcc/unwind-dw2-fde-dip.c
|
||||
index 7f9be5e6b..817c3fe21 100644
|
||||
--- a/libgcc/unwind-dw2-fde-dip.c
|
||||
+++ b/libgcc/unwind-dw2-fde-dip.c
|
||||
@@ -57,6 +57,12 @@
|
||||
# define USE_PT_GNU_EH_FRAME
|
||||
#endif
|
||||
|
||||
+#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \
|
||||
+ && defined(TARGET_DL_ITERATE_PHDR) \
|
||||
+ && defined(__serenity__)
|
||||
+# define USE_PT_GNU_EH_FRAME
|
||||
+#endif
|
||||
+
|
||||
#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \
|
||||
&& defined(TARGET_DL_ITERATE_PHDR) \
|
||||
&& defined(__linux__)
|
||||
diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4
|
||||
index 138bd58d8..6cd7564b6 100644
|
||||
--- a/libstdc++-v3/acinclude.m4
|
||||
+++ b/libstdc++-v3/acinclude.m4
|
||||
@@ -1374,7 +1374,7 @@ AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_TIME], [
|
||||
ac_has_nanosleep=yes
|
||||
ac_has_sched_yield=yes
|
||||
;;
|
||||
- freebsd*|netbsd*|dragonfly*|rtems*)
|
||||
+ freebsd*|netbsd*|dragonfly*|rtems*|serenity*)
|
||||
ac_has_clock_monotonic=yes
|
||||
ac_has_clock_realtime=yes
|
||||
ac_has_nanosleep=yes
|
||||
@@ -2421,7 +2421,7 @@ AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [
|
||||
dragonfly* | freebsd*)
|
||||
enable_clocale_flag=dragonfly
|
||||
;;
|
||||
- openbsd*)
|
||||
+ openbsd* | serenity*)
|
||||
enable_clocale_flag=newlib
|
||||
;;
|
||||
*)
|
||||
diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure
|
||||
index 9b94fd71e..51e45878f 100755
|
||||
--- a/libstdc++-v3/configure
|
||||
+++ b/libstdc++-v3/configure
|
||||
@@ -11914,6 +11914,11 @@ else
|
||||
lt_cv_dlopen_libs=
|
||||
;;
|
||||
|
||||
+ serenity*)
|
||||
+ lt_cv_dlopen="dlopen"
|
||||
+ lt_cv_dlopen_libs="-ldl"
|
||||
+ ;;
|
||||
+
|
||||
darwin*)
|
||||
# if libdl is installed we need to link against it
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
|
||||
@@ -16478,7 +16483,7 @@ fi
|
||||
dragonfly* | freebsd*)
|
||||
enable_clocale_flag=dragonfly
|
||||
;;
|
||||
- openbsd*)
|
||||
+ openbsd* | serenity*)
|
||||
enable_clocale_flag=newlib
|
||||
;;
|
||||
*)
|
||||
@@ -20569,7 +20574,7 @@ fi
|
||||
ac_has_nanosleep=yes
|
||||
ac_has_sched_yield=yes
|
||||
;;
|
||||
- freebsd*|netbsd*|dragonfly*|rtems*)
|
||||
+ freebsd*|netbsd*|dragonfly*|rtems*|serenity*)
|
||||
ac_has_clock_monotonic=yes
|
||||
ac_has_clock_realtime=yes
|
||||
ac_has_nanosleep=yes
|
||||
@@ -29245,7 +29250,7 @@ case "${host}" in
|
||||
# This is a freestanding configuration; there is nothing to do here.
|
||||
;;
|
||||
|
||||
- avr*-*-*)
|
||||
+ avr*-*-* | *serenity*)
|
||||
$as_echo "#define HAVE_ACOSF 1" >>confdefs.h
|
||||
|
||||
$as_echo "#define HAVE_ASINF 1" >>confdefs.h
|
||||
diff --git a/libstdc++-v3/configure.host b/libstdc++-v3/configure.host
|
||||
index ec32980aa..e060300f3 100644
|
||||
--- a/libstdc++-v3/configure.host
|
||||
+++ b/libstdc++-v3/configure.host
|
||||
@@ -297,6 +297,9 @@ case "${host_os}" in
|
||||
# Use libatomic if necessary and avoid libstdc++ specific atomicity support
|
||||
atomicity_dir="cpu/generic/atomicity_builtins"
|
||||
;;
|
||||
+ serenity*)
|
||||
+ os_include_dir="os/newlib"
|
||||
+ ;;
|
||||
solaris2*)
|
||||
os_include_dir="os/solaris"
|
||||
;;
|
||||
diff --git a/libstdc++-v3/crossconfig.m4 b/libstdc++-v3/crossconfig.m4
|
||||
index ae5283b7a..b9fc96e94 100644
|
||||
--- a/libstdc++-v3/crossconfig.m4
|
||||
+++ b/libstdc++-v3/crossconfig.m4
|
||||
@@ -9,7 +9,7 @@ case "${host}" in
|
||||
# This is a freestanding configuration; there is nothing to do here.
|
||||
;;
|
||||
|
||||
- avr*-*-*)
|
||||
+ avr*-*-* | *serenity*)
|
||||
AC_DEFINE(HAVE_ACOSF)
|
||||
AC_DEFINE(HAVE_ASINF)
|
||||
AC_DEFINE(HAVE_ATAN2F)
|
178
Toolchain/Patches/gcc/0001-Add-a-gcc-driver-for-SerenityOS.patch
Normal file
178
Toolchain/Patches/gcc/0001-Add-a-gcc-driver-for-SerenityOS.patch
Normal file
@ -0,0 +1,178 @@
|
||||
From 00ad6c7f79fffa5fe13a9e5b77ad06e987fde3e8 Mon Sep 17 00:00:00 2001
|
||||
From: Andreas Kling <awesomekling@gmail.com>
|
||||
Date: Fri, 5 Apr 2019 03:02:52 +0200
|
||||
Subject: [PATCH 1/6] Add a gcc driver for SerenityOS
|
||||
|
||||
This patch adds support for the `*-*-serenity` target to gcc.
|
||||
|
||||
It specifies which flags need to be passed to the linker, defines the
|
||||
__serenity__ macro, sets the correct underlying type of `size_t` and
|
||||
`ptrdiff_t`, and enables IFUNCs.
|
||||
|
||||
Co-Authored-By: Gunnar Beutner <gbeutner@serenityos.org>
|
||||
Co-Authored-By: Itamar <itamar8910@gmail.com>
|
||||
Co-Authored-By: Daniel Bertalan <dani@danielbertalan.dev>
|
||||
Co-Authored-By: Nico Weber <thakis@chromium.org>
|
||||
Co-Authored-By: Tim Schumacher <timschumi@gmx.de>
|
||||
Co-Authored-By: Andrew Kaster <andrewdkaster@gmail.com>
|
||||
Co-Authored-By: Brian Gianforcaro <bgianf@serenityos.org>
|
||||
Co-Authored-By: Philip Herron <herron.philip@googlemail.com>
|
||||
Co-Authored-By: Shannon Booth <shannon.ml.booth@gmail.com>
|
||||
---
|
||||
gcc/config.gcc | 20 ++++++++++++++++
|
||||
gcc/config/i386/serenity.h | 7 ++++++
|
||||
gcc/config/serenity.h | 47 ++++++++++++++++++++++++++++++++++++++
|
||||
gcc/config/serenity.opt | 35 ++++++++++++++++++++++++++++
|
||||
4 files changed, 109 insertions(+)
|
||||
create mode 100644 gcc/config/i386/serenity.h
|
||||
create mode 100644 gcc/config/serenity.h
|
||||
create mode 100644 gcc/config/serenity.opt
|
||||
|
||||
diff --git a/gcc/config.gcc b/gcc/config.gcc
|
||||
index c5064dd37..f8a468c6f 100644
|
||||
--- a/gcc/config.gcc
|
||||
+++ b/gcc/config.gcc
|
||||
@@ -673,6 +673,13 @@ x86_cpus="generic intel"
|
||||
|
||||
# Common parts for widely ported systems.
|
||||
case ${target} in
|
||||
+*-*-serenity*)
|
||||
+ gas=yes
|
||||
+ gnu_ld=yes
|
||||
+ default_use_cxa_atexit=yes
|
||||
+ extra_options="${extra_options} serenity.opt"
|
||||
+ tmake_file="t-slibgcc"
|
||||
+ ;;
|
||||
*-*-darwin*)
|
||||
tmake_file="t-darwin "
|
||||
tm_file="${tm_file} darwin.h"
|
||||
@@ -1087,6 +1094,19 @@ case ${target} in
|
||||
esac
|
||||
|
||||
case ${target} in
|
||||
+i[34567]86-*-serenity*)
|
||||
+ default_gnu_indirect_function=yes
|
||||
+ tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h glibc-stdint.h i386/i386elf.h serenity.h i386/serenity.h"
|
||||
+ ;;
|
||||
+x86_64-*-serenity*)
|
||||
+ default_gnu_indirect_function=yes
|
||||
+ tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h glibc-stdint.h i386/i386elf.h i386/x86-64.h serenity.h i386/serenity.h"
|
||||
+ ;;
|
||||
+aarch64-*-serenity*)
|
||||
+ default_gnu_indirect_function=yes
|
||||
+ tm_file="${tm_file} dbxelf.h elfos.h aarch64/aarch64-elf.h glibc-stdint.h serenity.h"
|
||||
+ tmake_file="${tmake_file} aarch64/t-aarch64"
|
||||
+ ;;
|
||||
aarch64*-*-elf | aarch64*-*-fuchsia* | aarch64*-*-rtems*)
|
||||
tm_file="${tm_file} dbxelf.h elfos.h newlib-stdint.h"
|
||||
tm_file="${tm_file} aarch64/aarch64-elf.h aarch64/aarch64-errata.h aarch64/aarch64-elf-raw.h"
|
||||
diff --git a/gcc/config/i386/serenity.h b/gcc/config/i386/serenity.h
|
||||
new file mode 100644
|
||||
index 000000000..53a4b8e93
|
||||
--- /dev/null
|
||||
+++ b/gcc/config/i386/serenity.h
|
||||
@@ -0,0 +1,7 @@
|
||||
+/* Ensure that we are using the SIZE_TYPE indicated by SysV */
|
||||
+#undef SIZE_TYPE
|
||||
+#define SIZE_TYPE (TARGET_64BIT ? "long unsigned int" : "unsigned int")
|
||||
+
|
||||
+/* Ensure that ptrdiff_t matches the actual pointer size */
|
||||
+#undef PTRDIFF_TYPE
|
||||
+#define PTRDIFF_TYPE (TARGET_64BIT ? "long int" : "int")
|
||||
diff --git a/gcc/config/serenity.h b/gcc/config/serenity.h
|
||||
new file mode 100644
|
||||
index 000000000..dc2f5361e
|
||||
--- /dev/null
|
||||
+++ b/gcc/config/serenity.h
|
||||
@@ -0,0 +1,47 @@
|
||||
+/* Useful if you wish to make target-specific GCC changes. */
|
||||
+#undef TARGET_SERENITY
|
||||
+#define TARGET_SERENITY 1
|
||||
+
|
||||
+#if defined(HAVE_LD_EH_FRAME_HDR)
|
||||
+#define LINK_EH_SPEC "%{!static|static-pie:--eh-frame-hdr} "
|
||||
+#endif
|
||||
+
|
||||
+/* Default arguments you want when running your
|
||||
+ i686-serenity-gcc/x86_64-serenity-gcc toolchain */
|
||||
+#undef LIB_SPEC
|
||||
+#define LIB_SPEC "%{pthread:-lpthread} -lc" /* link against C standard library */
|
||||
+
|
||||
+/* Files that are linked before user code.
|
||||
+ The %s tells GCC to look for these files in the library directory. */
|
||||
+#undef STARTFILE_SPEC
|
||||
+#define STARTFILE_SPEC "%{!shared:crt0.o%s} crti.o%s %{shared: %{!fbuilding-libgcc:crt0_shared.o%s}} %{shared|static-pie|!no-pie:crtbeginS.o%s; :crtbegin.o%s}"
|
||||
+
|
||||
+/* Files that are linked after user code. */
|
||||
+#undef ENDFILE_SPEC
|
||||
+#define ENDFILE_SPEC "%{shared|static-pie|!no-pie:crtendS.o%s; :crtend.o%s} crtn.o%s"
|
||||
+
|
||||
+#undef LINK_SPEC
|
||||
+#define LINK_SPEC "%{shared:-shared} %{static:-static} %{!static: %{rdynamic:-export-dynamic} -dynamic-linker /usr/lib/Loader.so}"
|
||||
+
|
||||
+#undef CC1_SPEC
|
||||
+#define CC1_SPEC "-ftls-model=initial-exec %{!fno-pic:%{!fno-PIC:%{!fpic:%{!fPIC: -fPIC}}}} -fno-semantic-interposition"
|
||||
+
|
||||
+#undef CC1PLUS_SPEC
|
||||
+#define CC1PLUS_SPEC "-ftls-model=initial-exec"
|
||||
+
|
||||
+#undef CPP_SPEC
|
||||
+#define CPP_SPEC "%{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}"
|
||||
+
|
||||
+/* Use --as-needed -lgcc_s for eh support. */
|
||||
+#define USE_LD_AS_NEEDED 1
|
||||
+
|
||||
+/* Additional predefined macros. */
|
||||
+#undef TARGET_OS_CPP_BUILTINS
|
||||
+#define TARGET_OS_CPP_BUILTINS() \
|
||||
+ do { \
|
||||
+ builtin_define ("__serenity__"); \
|
||||
+ builtin_define ("__unix__"); \
|
||||
+ builtin_assert ("system=serenity"); \
|
||||
+ builtin_assert ("system=unix"); \
|
||||
+ builtin_assert ("system=posix"); \
|
||||
+ } while(0);
|
||||
diff --git a/gcc/config/serenity.opt b/gcc/config/serenity.opt
|
||||
new file mode 100644
|
||||
index 000000000..2756a5575
|
||||
--- /dev/null
|
||||
+++ b/gcc/config/serenity.opt
|
||||
@@ -0,0 +1,35 @@
|
||||
+; SerenityOS options.
|
||||
+
|
||||
+; Copyright (C) 2021 Gunnar Beutner <gunnar@beutner.name>
|
||||
+;
|
||||
+; This file is part of GCC.
|
||||
+;
|
||||
+; GCC 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, or (at your option) any later
|
||||
+; version.
|
||||
+;
|
||||
+; GCC 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 GCC; see the file COPYING3. If not see
|
||||
+; <http://www.gnu.org/licenses/>.
|
||||
+
|
||||
+; See the GCC internals manual (options.texi) for a description of
|
||||
+; this file's format.
|
||||
+
|
||||
+; Please try to keep this file in ASCII collating order.
|
||||
+
|
||||
+posix
|
||||
+Driver
|
||||
+
|
||||
+pthread
|
||||
+Driver
|
||||
+
|
||||
+rdynamic
|
||||
+Driver
|
||||
+
|
||||
+; This comment is to ensure we retain the blank line above.
|
||||
--
|
||||
2.36.1
|
||||
|
@ -0,0 +1,29 @@
|
||||
From e7d65e2c0943078214d9231cbb5c5e8eb9b5c726 Mon Sep 17 00:00:00 2001
|
||||
From: Andreas Kling <awesomekling@gmail.com>
|
||||
Date: Fri, 5 Apr 2019 03:02:52 +0200
|
||||
Subject: [PATCH 2/6] fixincludes: Skip for SerenityOS targets
|
||||
|
||||
`fixincludes` is responsible for fixing mistakes in system headers that
|
||||
rely in compiler extensions that GCC doesn't support or cause errors in
|
||||
C++ mode.
|
||||
|
||||
Our headers don't have such problems, so this hack is of no use for us.
|
||||
---
|
||||
fixincludes/mkfixinc.sh | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/fixincludes/mkfixinc.sh b/fixincludes/mkfixinc.sh
|
||||
index df90720b7..a45cdd0de 100755
|
||||
--- a/fixincludes/mkfixinc.sh
|
||||
+++ b/fixincludes/mkfixinc.sh
|
||||
@@ -11,6 +11,7 @@ target=fixinc.sh
|
||||
|
||||
# Check for special fix rules for particular targets
|
||||
case $machine in
|
||||
+ *-serenity* | \
|
||||
i?86-*-cygwin* | \
|
||||
i?86-*-mingw32* | \
|
||||
x86_64-*-mingw32* | \
|
||||
--
|
||||
2.36.1
|
||||
|
82
Toolchain/Patches/gcc/0003-libgcc-Build-for-SerenityOS.patch
Normal file
82
Toolchain/Patches/gcc/0003-libgcc-Build-for-SerenityOS.patch
Normal file
@ -0,0 +1,82 @@
|
||||
From 9297a27635e83df95c644b9f776d65078c97162e Mon Sep 17 00:00:00 2001
|
||||
From: Andreas Kling <awesomekling@gmail.com>
|
||||
Date: Mon, 16 May 2022 15:01:06 +0200
|
||||
Subject: [PATCH 3/6] libgcc: Build for SerenityOS
|
||||
|
||||
This patch enables building gcc's own C runtime files, and sets up
|
||||
exception handling support.
|
||||
|
||||
Co-Authored-By: Gunnar Beutner <gbeutner@serenityos.org>
|
||||
Co-Authored-By: Itamar <itamar8910@gmail.com>
|
||||
Co-Authored-By: Nico Weber <thakis@chromium.org>
|
||||
Co-Authored-By: Andrew Kaster <andrewdkaster@gmail.com>
|
||||
Co-Authored-By: Daniel Bertalan <dani@danielbertalan.dev>
|
||||
Co-Authored-By: Philip Herron <herron.philip@googlemail.com>
|
||||
Co-Authored-By: Shannon Booth <shannon.ml.booth@gmail.com>
|
||||
---
|
||||
gcc/configure | 3 +++
|
||||
libgcc/config.host | 16 ++++++++++++++++
|
||||
libgcc/unwind-dw2-fde-dip.c | 6 ++++++
|
||||
3 files changed, 25 insertions(+)
|
||||
|
||||
diff --git a/gcc/configure b/gcc/configure
|
||||
index 5ce055771..2deaac5bc 100755
|
||||
--- a/gcc/configure
|
||||
+++ b/gcc/configure
|
||||
@@ -31608,6 +31608,9 @@ case "$target" in
|
||||
*-linux-musl*)
|
||||
gcc_cv_target_dl_iterate_phdr=yes
|
||||
;;
|
||||
+ *-serenity*)
|
||||
+ gcc_cv_target_dl_iterate_phdr=yes
|
||||
+ ;;
|
||||
esac
|
||||
|
||||
if test x$gcc_cv_target_dl_iterate_phdr = xyes; then
|
||||
diff --git a/libgcc/config.host b/libgcc/config.host
|
||||
index 8c56fcae5..f5855cfa6 100644
|
||||
--- a/libgcc/config.host
|
||||
+++ b/libgcc/config.host
|
||||
@@ -1534,6 +1534,22 @@ nvptx-*)
|
||||
tmake_file="$tmake_file nvptx/t-nvptx"
|
||||
extra_parts="crt0.o"
|
||||
;;
|
||||
+i[34567]86-*-serenity*)
|
||||
+ extra_parts="$extra_parts crti.o crtbegin.o crtbeginS.o crtend.o crtendS.o crtn.o"
|
||||
+ tmake_file="$tmake_file i386/t-crtstuff t-crtstuff-pic t-libgcc-pic t-slibgcc t-eh-dw2-dip"
|
||||
+ ;;
|
||||
+x86_64-*-serenity*)
|
||||
+ extra_parts="$extra_parts crti.o crtbegin.o crtbeginS.o crtend.o crtendS.o crtn.o"
|
||||
+ tmake_file="$tmake_file i386/t-crtstuff t-crtstuff-pic t-libgcc-pic t-slibgcc t-eh-dw2-dip"
|
||||
+ ;;
|
||||
+aarch64-*-serenity*)
|
||||
+ extra_parts="$extra_parts crti.o crtbegin.o crtend.o crtn.o"
|
||||
+ extra_parts="$extra_parts crtfastmath.o"
|
||||
+ tmake_file="$tmake_file ${cpu_type}/t-aarch64"
|
||||
+ tmake_file="$tmake_file ${cpu_type}/t-lse t-slibgcc-libgcc"
|
||||
+ tmake_file="$tmake_file ${cpu_type}/t-softfp t-softp t-crtfm"
|
||||
+ md_unwind_header=aarch64/aarch64-unwind.h
|
||||
+ ;;
|
||||
*)
|
||||
echo "*** Configuration ${host} not supported" 1>&2
|
||||
exit 1
|
||||
diff --git a/libgcc/unwind-dw2-fde-dip.c b/libgcc/unwind-dw2-fde-dip.c
|
||||
index 7f9be5e6b..817c3fe21 100644
|
||||
--- a/libgcc/unwind-dw2-fde-dip.c
|
||||
+++ b/libgcc/unwind-dw2-fde-dip.c
|
||||
@@ -57,6 +57,12 @@
|
||||
# define USE_PT_GNU_EH_FRAME
|
||||
#endif
|
||||
|
||||
+#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \
|
||||
+ && defined(TARGET_DL_ITERATE_PHDR) \
|
||||
+ && defined(__serenity__)
|
||||
+# define USE_PT_GNU_EH_FRAME
|
||||
+#endif
|
||||
+
|
||||
#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \
|
||||
&& defined(TARGET_DL_ITERATE_PHDR) \
|
||||
&& defined(__linux__)
|
||||
--
|
||||
2.36.1
|
||||
|
@ -0,0 +1,33 @@
|
||||
From c4e0f7d997b3f7cd5c5465a636e097e43170d609 Mon Sep 17 00:00:00 2001
|
||||
From: Andreas Kling <awesomekling@gmail.com>
|
||||
Date: Mon, 16 May 2022 15:03:14 +0200
|
||||
Subject: [PATCH 4/6] libgcc: Do not link libgcc_s to LibC
|
||||
|
||||
The toolchain is built before LibC, so linking to the C runtime library
|
||||
would fail.
|
||||
|
||||
Co-Authored-By: Gunnar Beutner <gbeutner@serenityos.org>
|
||||
Co-Authored-By: Daniel Bertalan <dani@danielbertalan.dev>
|
||||
Co-Authored-By: Itamar <itamar8910@gmail.com>
|
||||
Co-Authored-By: Nico Weber <thakis@chromium.org>
|
||||
Co-Authored-By: Philip Herron <herron.philip@googlemail.com>
|
||||
Co-Authored-By: Shannon Booth <shannon.ml.booth@gmail.com>
|
||||
---
|
||||
libgcc/config/t-slibgcc | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
diff --git a/libgcc/config/t-slibgcc b/libgcc/config/t-slibgcc
|
||||
index 4efd7b43d..932fa0cfb 100644
|
||||
--- a/libgcc/config/t-slibgcc
|
||||
+++ b/libgcc/config/t-slibgcc
|
||||
@@ -26,7 +26,6 @@ SHLIB_MAP = @shlib_map_file@
|
||||
SHLIB_OBJS = @shlib_objs@
|
||||
SHLIB_DIR = @multilib_dir@
|
||||
SHLIB_SLIBDIR_QUAL = @shlib_slibdir_qual@
|
||||
-SHLIB_LC = -lc
|
||||
SHLIB_MAKE_SOLINK = $(LN_S) $(SHLIB_SONAME) $(SHLIB_DIR)/$(SHLIB_SOLINK)
|
||||
SHLIB_INSTALL_SOLINK = $(LN_S) $(SHLIB_SONAME) \
|
||||
$(DESTDIR)$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SOLINK)
|
||||
--
|
||||
2.36.1
|
||||
|
@ -0,0 +1,30 @@
|
||||
From 7cb91a236863aa5c582d25a920ffbb7408c10e2f Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Bertalan <dani@danielbertalan.dev>
|
||||
Date: Mon, 16 May 2022 15:04:33 +0200
|
||||
Subject: [PATCH 5/6] i386: Disable math errno for SerenityOS
|
||||
|
||||
SerenityOS uses exceptions for math error handling, which allows the
|
||||
compiler to do more optimizations on calls to math functions. This patch
|
||||
has the effect of setting -fno-math-errno by default.
|
||||
---
|
||||
gcc/common/config/i386/i386-common.cc | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/gcc/common/config/i386/i386-common.cc b/gcc/common/config/i386/i386-common.cc
|
||||
index 07fdd045f..6e2419563 100644
|
||||
--- a/gcc/common/config/i386/i386-common.cc
|
||||
+++ b/gcc/common/config/i386/i386-common.cc
|
||||
@@ -1707,6 +1707,10 @@ ix86_option_init_struct (struct gcc_options *opts)
|
||||
avoid calling them when that's the only reason we would. */
|
||||
opts->x_flag_errno_math = 0;
|
||||
|
||||
+#ifdef TARGET_SERENITY
|
||||
+ opts->x_flag_errno_math = 0;
|
||||
+#endif
|
||||
+
|
||||
opts->x_flag_pcc_struct_return = 2;
|
||||
opts->x_flag_asynchronous_unwind_tables = 2;
|
||||
}
|
||||
--
|
||||
2.36.1
|
||||
|
120
Toolchain/Patches/gcc/0006-libstdc-Support-SerenityOS.patch
Normal file
120
Toolchain/Patches/gcc/0006-libstdc-Support-SerenityOS.patch
Normal file
@ -0,0 +1,120 @@
|
||||
From b581fd421af5691bdafda7d30b20723f77d0cc88 Mon Sep 17 00:00:00 2001
|
||||
From: Andreas Kling <awesomekling@gmail.com>
|
||||
Date: Mon, 16 May 2022 15:08:53 +0200
|
||||
Subject: [PATCH 6/6] libstdc++: Support SerenityOS
|
||||
|
||||
During the toolchain build, SerenityOS libraries are not available, so
|
||||
we have to manually tell libstdc++ about what our LibC supports.
|
||||
|
||||
In most places, we take the Newlib code paths.
|
||||
|
||||
Co-Authored-By: Gunnar Beutner <gbeutner@serenityos.org>
|
||||
Co-Authored-By: Daniel Bertalan <dani@danielbertalan.dev>
|
||||
Co-Authored-By: Itamar <itamar8910@gmail.com>
|
||||
Co-Authored-By: James Mintram <me@jamesrm.com>
|
||||
Co-Authored-By: Martin Bříza <m@rtinbriza.cz>
|
||||
Co-Authored-By: Nico Weber <thakis@chromium.org>
|
||||
Co-Authored-By: Philip Herron <herron.philip@googlemail.com>
|
||||
Co-Authored-By: Shannon Booth <shannon.ml.booth@gmail.com>
|
||||
---
|
||||
libstdc++-v3/acinclude.m4 | 4 ++--
|
||||
libstdc++-v3/configure | 11 ++++++++---
|
||||
libstdc++-v3/configure.host | 3 +++
|
||||
libstdc++-v3/crossconfig.m4 | 2 +-
|
||||
4 files changed, 14 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4
|
||||
index 138bd58d8..6cd7564b6 100644
|
||||
--- a/libstdc++-v3/acinclude.m4
|
||||
+++ b/libstdc++-v3/acinclude.m4
|
||||
@@ -1374,7 +1374,7 @@ AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_TIME], [
|
||||
ac_has_nanosleep=yes
|
||||
ac_has_sched_yield=yes
|
||||
;;
|
||||
- freebsd*|netbsd*|dragonfly*|rtems*)
|
||||
+ freebsd*|netbsd*|dragonfly*|rtems*|serenity*)
|
||||
ac_has_clock_monotonic=yes
|
||||
ac_has_clock_realtime=yes
|
||||
ac_has_nanosleep=yes
|
||||
@@ -2421,7 +2421,7 @@ AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [
|
||||
dragonfly* | freebsd*)
|
||||
enable_clocale_flag=dragonfly
|
||||
;;
|
||||
- openbsd*)
|
||||
+ openbsd* | serenity*)
|
||||
enable_clocale_flag=newlib
|
||||
;;
|
||||
*)
|
||||
diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure
|
||||
index 9b94fd71e..51e45878f 100755
|
||||
--- a/libstdc++-v3/configure
|
||||
+++ b/libstdc++-v3/configure
|
||||
@@ -11914,6 +11914,11 @@ else
|
||||
lt_cv_dlopen_libs=
|
||||
;;
|
||||
|
||||
+ serenity*)
|
||||
+ lt_cv_dlopen="dlopen"
|
||||
+ lt_cv_dlopen_libs="-ldl"
|
||||
+ ;;
|
||||
+
|
||||
darwin*)
|
||||
# if libdl is installed we need to link against it
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
|
||||
@@ -16478,7 +16483,7 @@ fi
|
||||
dragonfly* | freebsd*)
|
||||
enable_clocale_flag=dragonfly
|
||||
;;
|
||||
- openbsd*)
|
||||
+ openbsd* | serenity*)
|
||||
enable_clocale_flag=newlib
|
||||
;;
|
||||
*)
|
||||
@@ -20569,7 +20574,7 @@ fi
|
||||
ac_has_nanosleep=yes
|
||||
ac_has_sched_yield=yes
|
||||
;;
|
||||
- freebsd*|netbsd*|dragonfly*|rtems*)
|
||||
+ freebsd*|netbsd*|dragonfly*|rtems*|serenity*)
|
||||
ac_has_clock_monotonic=yes
|
||||
ac_has_clock_realtime=yes
|
||||
ac_has_nanosleep=yes
|
||||
@@ -29245,7 +29250,7 @@ case "${host}" in
|
||||
# This is a freestanding configuration; there is nothing to do here.
|
||||
;;
|
||||
|
||||
- avr*-*-*)
|
||||
+ avr*-*-* | *serenity*)
|
||||
$as_echo "#define HAVE_ACOSF 1" >>confdefs.h
|
||||
|
||||
$as_echo "#define HAVE_ASINF 1" >>confdefs.h
|
||||
diff --git a/libstdc++-v3/configure.host b/libstdc++-v3/configure.host
|
||||
index ec32980aa..e060300f3 100644
|
||||
--- a/libstdc++-v3/configure.host
|
||||
+++ b/libstdc++-v3/configure.host
|
||||
@@ -297,6 +297,9 @@ case "${host_os}" in
|
||||
# Use libatomic if necessary and avoid libstdc++ specific atomicity support
|
||||
atomicity_dir="cpu/generic/atomicity_builtins"
|
||||
;;
|
||||
+ serenity*)
|
||||
+ os_include_dir="os/newlib"
|
||||
+ ;;
|
||||
solaris2*)
|
||||
os_include_dir="os/solaris"
|
||||
;;
|
||||
diff --git a/libstdc++-v3/crossconfig.m4 b/libstdc++-v3/crossconfig.m4
|
||||
index ae5283b7a..b9fc96e94 100644
|
||||
--- a/libstdc++-v3/crossconfig.m4
|
||||
+++ b/libstdc++-v3/crossconfig.m4
|
||||
@@ -9,7 +9,7 @@ case "${host}" in
|
||||
# This is a freestanding configuration; there is nothing to do here.
|
||||
;;
|
||||
|
||||
- avr*-*-*)
|
||||
+ avr*-*-* | *serenity*)
|
||||
AC_DEFINE(HAVE_ACOSF)
|
||||
AC_DEFINE(HAVE_ASINF)
|
||||
AC_DEFINE(HAVE_ATAN2F)
|
||||
--
|
||||
2.36.1
|
||||
|
53
Toolchain/Patches/gcc/ReadMe.md
Normal file
53
Toolchain/Patches/gcc/ReadMe.md
Normal file
@ -0,0 +1,53 @@
|
||||
# Patches for gcc on SerenityOS
|
||||
|
||||
## `0001-Add-a-gcc-driver-for-SerenityOS.patch`
|
||||
|
||||
Add a gcc driver for SerenityOS
|
||||
|
||||
This patch adds support for the `*-*-serenity` target to gcc.
|
||||
|
||||
It specifies which flags need to be passed to the linker, defines the
|
||||
__serenity__ macro, sets the correct underlying type of `size_t` and
|
||||
`ptrdiff_t`, and enables IFUNCs.
|
||||
|
||||
## `0002-fixincludes-Skip-for-SerenityOS-targets.patch`
|
||||
|
||||
fixincludes: Skip for SerenityOS targets
|
||||
|
||||
`fixincludes` is responsible for fixing mistakes in system headers that
|
||||
rely in compiler extensions that GCC doesn't support or cause errors in
|
||||
C++ mode.
|
||||
|
||||
Our headers don't have such problems, so this hack is of no use for us.
|
||||
|
||||
## `0003-libgcc-Build-for-SerenityOS.patch`
|
||||
|
||||
libgcc: Build for SerenityOS
|
||||
|
||||
This patch enables building gcc's own C runtime files, and sets up
|
||||
exception handling support.
|
||||
|
||||
## `0004-libgcc-Do-not-link-libgcc_s-to-LibC.patch`
|
||||
|
||||
libgcc: Do not link libgcc_s to LibC
|
||||
|
||||
The toolchain is built before LibC, so linking to the C runtime library
|
||||
would fail.
|
||||
|
||||
## `0005-i386-Disable-math-errno-for-SerenityOS.patch`
|
||||
|
||||
i386: Disable math errno for SerenityOS
|
||||
|
||||
SerenityOS uses exceptions for math error handling, which allows the
|
||||
compiler to do more optimizations on calls to math functions. This patch
|
||||
has the effect of setting -fno-math-errno by default.
|
||||
|
||||
## `0006-libstdc-Support-SerenityOS.patch`
|
||||
|
||||
libstdc++: Support SerenityOS
|
||||
|
||||
During the toolchain build, SerenityOS libraries are not available, so
|
||||
we have to manually tell libstdc++ about what our LibC supports.
|
||||
|
||||
In most places, we take the Newlib code paths.
|
||||
|
Loading…
Reference in New Issue
Block a user