From effa9ba93ac52551b25d1a04b66191f13a8829dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Wed, 7 Jul 2021 20:10:38 +0100 Subject: [PATCH] Build g++. --- parts.rst | 6 ++-- sysa/bison-2.3/patches/autover-mismatch.patch | 2 +- sysa/gcc-4.7.4/{checksums/pass1 => checksums} | 10 ++++-- sysa/gcc-4.7.4/{pass1.sh => gcc-4.7.4.sh} | 27 ++++++++------ .../gcc-4.7.4/patches/libstdc++-v3_musl.patch | 17 +++++++++ .../patches/remove_gperf_dependency.patch | 36 +++++++++++++++++++ sysa/run2.sh | 2 +- 7 files changed, 83 insertions(+), 17 deletions(-) rename sysa/gcc-4.7.4/{checksums/pass1 => checksums} (77%) rename sysa/gcc-4.7.4/{pass1.sh => gcc-4.7.4.sh} (78%) create mode 100644 sysa/gcc-4.7.4/patches/libstdc++-v3_musl.patch create mode 100644 sysa/gcc-4.7.4/patches/remove_gperf_dependency.patch diff --git a/parts.rst b/parts.rst index 1c5166e..16e8914 100644 --- a/parts.rst +++ b/parts.rst @@ -195,7 +195,7 @@ we patch mes libc. tcc 0.9.27 ========== -Rebuild tcc 0.9.27 to get the fix from patches mes libc. We have to do +Rebuild tcc 0.9.27 to get the fix from patched mes libc. We have to do it using older ``tcc`` because tcc-0.9.27 is not self hosting. musl 1.1.24 @@ -698,7 +698,9 @@ DEFLATE algorithm that is also used in ``gzip``. gcc 4.7.4 ========= -GCC 4.7.4 is the last version written in C. +GCC 4.7.4 is the last version written in C. This time we build both C and C++ backends. +C++ backend has some dependency on ``gperf`` which is written in C++. Fortunately, it is +easy to patch it out and resulting ``g++`` compiler is capable of building ``gperf``. libunistring 0.9.10 =================== diff --git a/sysa/bison-2.3/patches/autover-mismatch.patch b/sysa/bison-2.3/patches/autover-mismatch.patch index 77ed96e..57dbce6 100644 --- a/sysa/bison-2.3/patches/autover-mismatch.patch +++ b/sysa/bison-2.3/patches/autover-mismatch.patch @@ -3,7 +3,7 @@ SPDX-FileCopyrightText: 2021 fosslinux SPDX-License-Identifier: GPL-2.0-or-later This macro does not exist in newer versions of autoconf and is unrequired. -There is no verion of autoconf supporting this project + gnulib + this macro. +There is no version of autoconf supporting this project + gnulib + this macro. --- m4/po_gl.m4 2021-04-11 18:39:53.353069610 +1000 +++ m4/po_gl.m4 2021-04-11 18:40:20.422242498 +1000 diff --git a/sysa/gcc-4.7.4/checksums/pass1 b/sysa/gcc-4.7.4/checksums similarity index 77% rename from sysa/gcc-4.7.4/checksums/pass1 rename to sysa/gcc-4.7.4/checksums index 9df38af..ddefb3a 100644 --- a/sysa/gcc-4.7.4/checksums/pass1 +++ b/sysa/gcc-4.7.4/checksums @@ -1,10 +1,9 @@ -d340fbc8a6db39c17573169b77d480b920f91433dc818fc4ce3f112c58cbcfcc /image/bin/cpp -b267777f9061e0563fe34cd291e9a834bcb6c3fe2b488c40b815055a005692d2 /image/bin/gcc +8f4b1c859ad99f4ef17970dafb4c7b818a4e01744c4a1e7d632c09598bea737d /image/bin/cpp +4b522a12cdc654809e796e41062de1d48458626060ec0fac492f9a4757df38da /image/bin/gcc 8e7bde329795793d2d2f71c5d011376ab93a7673645ea44c0d9aee7e8bb9f058 /image/bin/gcc-ar ede1d40ad93ab8daf788b1362ce1deb4946865398e991725487f25af66a42bed /image/bin/gcc-nm d93e0b44788e1111073f9ced886e9b41b906075ddcdf73a1cf911cc72b1bcbde /image/bin/gcc-ranlib 1657ba8afdac845ddfa8842efa5e7bf3cfc9be23aa31f6265e3f43eead1316d4 /image/bin/gcov -b267777f9061e0563fe34cd291e9a834bcb6c3fe2b488c40b815055a005692d2 /image/bin/i386-unknown-linux-musl-gcc-4.7.4 77adc8cb0648cd8b3546254e7277d16a04b18fe643b889352717c361cc8a4309 /image/libexec/gcc/i386-unknown-linux-musl/4.7.4/cc1 a96e1cd5eff7904cfcd260e859a65bf38c45eafe3f81b7df537e0bb68543e856 /image/libexec/gcc/i386-unknown-linux-musl/4.7.4/collect2 4dd787d729d8d57434fb7cfaf2a7a42dfca2bdf665e6e5246fb56e4cee0f10fd /image/libexec/gcc/i386-unknown-linux-musl/4.7.4/lto-wrapper @@ -19,3 +18,8 @@ e5059cb3aaec30653dfb2cbc09ee555218d276d6b49b1ddc05ba8c4d63e3edfb /image/lib/mus 412c06a772f2bceaef31514685c7634358b9d7a5e01b30c3b1aef2dd24ad68f9 /image/lib/musl/gcc/i386-unknown-linux-musl/4.7.4/crtprec80.o 65082b00fb62e18e816e99a533835a5025794907b8f4d8b5075d3a607249ab08 /image/lib/musl/gcc/i386-unknown-linux-musl/4.7.4/libgcc.a af7c0180e5f5854947414ff8f4dac6dcc8b853cb56e592be367760fd4869829d /image/lib/musl/gcc/i386-unknown-linux-musl/4.7.4/libgcov.a +f0b8f0639b0d596a6028b2eb4f1b738d2ef41243a652083bbb59ade32d0e5a7f /image/lib/musl/libstdc++.a +9ed64bd654c3a9be96e4d60637a9e65183cd94c32f946d5a88370ee9228f280a /image/lib/musl/libstdc++.a-gdb.py +b82cbc46d5977ba01330dc2091656f13df5391a14afcecc729269ceab7fa7706 /image/lib/musl/libstdc++.la +f209ea28cf192f18817724f462402d5d7c307ed2c5256ffe462e93478b751d4d /image/lib/musl/libsupc++.a +963b895bf80dccc967cde0a03e9de439cad6f25fd912e0e7765cd2924768a5ac /image/lib/musl/libsupc++.la diff --git a/sysa/gcc-4.7.4/pass1.sh b/sysa/gcc-4.7.4/gcc-4.7.4.sh similarity index 78% rename from sysa/gcc-4.7.4/pass1.sh rename to sysa/gcc-4.7.4/gcc-4.7.4.sh index de522a9..0c9af01 100755 --- a/sysa/gcc-4.7.4/pass1.sh +++ b/sysa/gcc-4.7.4/gcc-4.7.4.sh @@ -6,12 +6,9 @@ src_prepare() { default - # Needs gperf + # Generated using gperf rm gcc/cp/cfns.h - # Needed for musl - # sed -i 's/struct siginfo/siginfo_t/' libgcc/config/i386/linux-unwind.h - # Regenerating top level Makefile requires GNU Autogen and hence Guile, # but it is not essential for building gcc. rm configure Makefile.in fixincludes/fixincl.x @@ -26,21 +23,24 @@ src_prepare() { done cd gcc rm aclocal.m4 - AUTOCONF=autoconf-2.64 AUTOM4TE=autom4te-2.64 aclocal-1.11 --acdir=../config #AM_PROG_CC_C_O + AUTOCONF=autoconf-2.64 AUTOM4TE=autom4te-2.64 aclocal-1.11 --acdir=../config cd .. cd fixincludes rm aclocal.m4 AUTOCONF=autoconf-2.64 AUTOM4TE=autom4te-2.64 aclocal-1.11 --acdir=../gcc cd .. - #libjava warning - for dir in boehm-gc libffi libgfortran libgo libgomp libitm libjava libmudflap libobjc libquadmath libssp libstdc++-v3 lto-plugin zlib; do + for dir in boehm-gc libffi libgfortran libgo libgomp libitm libjava libmudflap libobjc libquadmath libssp lto-plugin zlib; do cd $dir rm aclocal.m4 AUTOCONF=autoconf-2.64 AUTOM4TE=autom4te-2.64 aclocal-1.11 cd .. done - + cd libstdc++-v3 + ACLOCAL=aclocal-1.11 AUTOMAKE=automake-1.11 AUTOCONF=autoconf-2.64 AUTOM4TE=autom4te-2.64 autoreconf-2.64 -fi + cd .. # Regenerate configure scripts + # Find all folders with configure script and rebuild them. At the moment we exclude boehm-gc folder due to + # an error but we don't use that directory anyway (it's only needed for Objective C) for dir in $(ls */configure | sed 's#/configure##' | tr "\n" " " | sed -e 's/ $/\n/' -e 's/^boehm-gc //'); do cd $dir rm configure @@ -49,6 +49,7 @@ src_prepare() { done # Regenerate Makefile.in + # Find all folders with Makefile.am and rebuild them. At the moment we exclude boehm-gc folder. for dir in $(ls */Makefile.am | sed 's#/Makefile.am##' | tr "\n" " " | sed -e 's/ $/\n/' -e 's/^boehm-gc //'); do cd $dir rm Makefile.in @@ -85,7 +86,7 @@ src_configure() { mkdir build cd build - for dir in libiberty libcpp libdecnumber gcc libgcc; do + for dir in libiberty libcpp libdecnumber gcc libgcc libstdc++-v3; do mkdir $dir cd $dir ../../$dir/configure \ @@ -95,7 +96,9 @@ src_configure() { --target=i386-unknown-linux-musl \ --host=i386-unknown-linux-musl \ --disable-shared \ - --program-transform-name= + --program-transform-name= \ + --enable-languages=c,c++ \ + --disable-sjlj-exceptions cd .. done cd .. @@ -112,9 +115,13 @@ src_compile() { # host_subdir is necessary because we have slightly different build directory layout make -C build/libgcc PATH="${PATH}:../gcc" CC=../gcc/xgcc \ host_subdir=build CFLAGS="-I../gcc/include -I/${PREFIX}/include" + + make -C build/libstdc++-v3 PATH="${PATH}:${PWD}/build/gcc" \ + CXXFLAGS="-I${PWD}/build/gcc/include -I ${PREFIX}/include" } src_install() { make -C build/gcc install STMP_FIXINC= DESTDIR="${DESTDIR}" MAKEINFO=true make -C build/libgcc install DESTDIR="${DESTDIR}" host_subdir=build + make -C build/libstdc++-v3 install DESTDIR="${DESTDIR}" } diff --git a/sysa/gcc-4.7.4/patches/libstdc++-v3_musl.patch b/sysa/gcc-4.7.4/patches/libstdc++-v3_musl.patch new file mode 100644 index 0000000..eb8d759 --- /dev/null +++ b/sysa/gcc-4.7.4/patches/libstdc++-v3_musl.patch @@ -0,0 +1,17 @@ +SPDX-FileCopyrightText: 2021 Andrius Štikonas +SPDX-License-Identifier: GPL-3.0-or-later + +Add support for *-linux-musl triplet. + +--- libstdc++-v3/configure.host 2021-07-07 10:00:23.934848223 +0100 ++++ libstdc++-v3/configure.host 2021-07-07 10:00:36.295195348 +0100 +@@ -242,6 +242,9 @@ + freebsd*) + os_include_dir="os/bsd/freebsd" + ;; ++ linux-musl*) ++ os_include_dir="os/generic" ++ ;; + gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu) + if [ "$uclibc" = "yes" ]; then + os_include_dir="os/uclibc" diff --git a/sysa/gcc-4.7.4/patches/remove_gperf_dependency.patch b/sysa/gcc-4.7.4/patches/remove_gperf_dependency.patch new file mode 100644 index 0000000..76503a5 --- /dev/null +++ b/sysa/gcc-4.7.4/patches/remove_gperf_dependency.patch @@ -0,0 +1,36 @@ +SPDX-FileCopyrightText: 2021 Andrius Štikonas +SPDX-License-Identifier: GPL-3.0-or-later + +Remove dependency on gperf. + +--- gcc/cp/except.c 2021-07-07 18:24:36.561530121 +0100 ++++ gcc/cp/except.c 2021-07-07 18:27:18.035681929 +0100 +@@ -987,8 +987,6 @@ + exception, unless it calls a program-supplied function that + throws an exception. */ + +-#include "cfns.h" +- + int + nothrow_libfn_p (const_tree fn) + { +@@ -1007,7 +1005,7 @@ + unless the system headers are playing rename tricks, and if + they are, we don't want to be confused by them. */ + id = DECL_NAME (fn); +- return !!libc_name_p (IDENTIFIER_POINTER (id), IDENTIFIER_LENGTH (id)); ++ return 0; + } + + /* Returns nonzero if an exception of type FROM will be caught by a +--- gcc/cp/Make-lang.in 2021-07-07 18:24:36.571530380 +0100 ++++ gcc/cp/Make-lang.in 2021-07-07 18:26:47.154887799 +0100 +@@ -313,7 +313,7 @@ + cp/rtti.o: cp/rtti.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) convert.h \ + $(TARGET_H) $(C_PRAGMA_H) gt-cp-rtti.h intl.h + cp/except.o: cp/except.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) \ +- cp/cfns.h $(TREE_INLINE_H) $(TARGET_H) gt-cp-except.h ++ $(TREE_INLINE_H) $(TARGET_H) gt-cp-except.h + cp/expr.o: cp/expr.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) $(TM_P_H) + cp/pt.o: cp/pt.c $(CXX_TREE_H) $(TM_H) cp/decl.h cp/cp-objcp-common.h \ + toplev.h $(TREE_INLINE_H) pointer-set.h gt-cp-pt.h vecprim.h intl.h \ diff --git a/sysa/run2.sh b/sysa/run2.sh index 5f228cf..f638a21 100755 --- a/sysa/run2.sh +++ b/sysa/run2.sh @@ -60,7 +60,7 @@ build texinfo-6.7 build zlib-1.2.11 -build gcc-4.7.4 pass1.sh checksums/pass1 +build gcc-4.7.4 build libunistring-0.9.10