From fb522be854975d14de5d111559d7161dcaee2470 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Thu, 4 Feb 2021 18:37:43 +0000 Subject: [PATCH 1/4] Add flex 2.6.4. --- README.md | 18 ++++++++------ rootfs.sh | 6 ++--- sysa/flex-2.5.11/flex-2.5.11.sh | 9 +++---- sysa/flex-2.5.11/mk/main2.mk | 28 --------------------- sysa/flex-2.5.14/flex-2.5.14.sh | 6 ----- sysa/flex-2.5.14/mk/main.mk | 29 ---------------------- sysa/flex-2.5.14/src/.placeholder | 0 sysa/flex-2.6.4/flex-2.6.4.sh | 19 ++++++++++++++ sysa/flex-2.6.4/mk/main.mk | 41 +++++++++++++++++++++++++++++++ sysa/run.sh | 8 +++--- 10 files changed, 80 insertions(+), 84 deletions(-) delete mode 100644 sysa/flex-2.5.11/mk/main2.mk delete mode 100755 sysa/flex-2.5.14/flex-2.5.14.sh delete mode 100644 sysa/flex-2.5.14/mk/main.mk delete mode 100644 sysa/flex-2.5.14/src/.placeholder create mode 100755 sysa/flex-2.6.4/flex-2.6.4.sh create mode 100644 sysa/flex-2.6.4/mk/main.mk diff --git a/README.md b/README.md index f34af0f..21d8173 100644 --- a/README.md +++ b/README.md @@ -262,8 +262,8 @@ cope here. #### Part 21: m4 1.4 -`m4` is the first piece of software we need in the autotools suite. It allows -macros to be defined and files to be generated from those macros. +`m4` is the first piece of software we need in the autotools suite and flex 2.6.4. +It allows macros to be defined and files to be generated from those macros. #### Part 22: flex 2.5.11 @@ -274,11 +274,7 @@ first flex 2.5.11 is compiled, with its scanner definition manually modified so it can be processed by lex for the Heirloom project (the required modifications are mostly syntactical, plus a few workarounds to avoid some flex advanced features). -#### Part 23 flex 2.5.14 - -Then we recompile unpatched `flex` using its own lexer. - -#### Part 24 musl 1.1.24 +#### Part 23 musl 1.1.24 `musl` is a C standard library that is lightweight, fast, simple, free, and strives to be correct in the sense of standards-conformance and safety. `musl` is used by some distributions of GNU/Linux @@ -289,8 +285,14 @@ newer or more complex programs. we replace all weak symbols with strong symbols and will patch `tcc` in the next step to ignore duplicate symbols. -#### Part 25 tcc 0.9.27 (musl) +#### Part 24 tcc 0.9.27 (musl) We recompile `tcc` against musl. This is a two stage process. First we build tcc-0.9.27 that itself links to Mes C library but produces binaries linked to musl. Then we recompile newly produced tcc with itself. Interestingly, tcc-0.9.27 linked against musl is self hosting. + +#### Part 25 flex 2.6.14 + +We recompile unpatched GNU `flex` using older flex 2.5.11. This is again two stage process, +first compile flex using scanner generated by old flex, then recompile scan.l using the new version +of flex to remove any buggy artificats from the old flex. diff --git a/rootfs.sh b/rootfs.sh index 2d2cc45..e39d40c 100755 --- a/rootfs.sh +++ b/rootfs.sh @@ -136,12 +136,12 @@ get_file https://ftp.gnu.org/gnu/m4/m4-1.4.tar.gz # flex 2.5.11 get_file http://download.nust.na/pub2/openpkg1/sources/DST/flex/flex-2.5.11.tar.gz -# flex 2.5.14 -get_file http://download.nust.na/pub2/openpkg1/sources/DST/flex/flex-2.5.14.tar.gz - # musl 1.1.24 get_file https://musl.libc.org/releases/musl-1.1.24.tar.gz +# flex 2.6.4 +get_file https://github.com/westes/flex/releases/download/v2.6.4/flex-2.6.4.tar.gz + # General cleanup find tmp -name .git -exec rm -rf \; diff --git a/sysa/flex-2.5.11/flex-2.5.11.sh b/sysa/flex-2.5.11/flex-2.5.11.sh index e96a2ce..c185150 100755 --- a/sysa/flex-2.5.11/flex-2.5.11.sh +++ b/sysa/flex-2.5.11/flex-2.5.11.sh @@ -1,13 +1,10 @@ # When we rebuild flex it no longer needs patching # and can use simplified makefile src_prepare() { - if test -d /lex; then - default_src_prepare - else - cp ../../mk/main2.mk Makefile - fi + default_src_prepare + touch config.h - rm parse.c parse.h scan.c + rm parse.c parse.h scan.c skel.c } src_install() { diff --git a/sysa/flex-2.5.11/mk/main2.mk b/sysa/flex-2.5.11/mk/main2.mk deleted file mode 100644 index 0f33808..0000000 --- a/sysa/flex-2.5.11/mk/main2.mk +++ /dev/null @@ -1,28 +0,0 @@ -CFLAGS = -DVERSION=\"2.5.11\" - -all: flex - -flex: ccl.o dfa.o ecs.o gen.o main.o misc.o nfa.o parse.o scan.o skel.o sym.o tblcmp.o yylex.o options.o scanopt.o buf.o - tcc -o $@ $^ - -%.o: %.c - tcc -g -c $(CFLAGS) -o $@ $< - -scan.o: parse.h -yylex.o: parse.h - -parse.c parse.h: parse.y - yacc -d parse.y - mv y.tab.h parse.h - mv y.tab.c parse.c - -scan.c: scan.l - flex scan.l - mv lex.yy.c scan.c - -skel.c: mkskel.sh flex.skl - /bin/sh ./mkskel.sh ./flex.skl > skel.c - -install: all - install flex $(PREFIX)/bin - ln -sf $(PREFIX)/bin/flex $(PREFIX)/bin/lex diff --git a/sysa/flex-2.5.14/flex-2.5.14.sh b/sysa/flex-2.5.14/flex-2.5.14.sh deleted file mode 100755 index edf31de..0000000 --- a/sysa/flex-2.5.14/flex-2.5.14.sh +++ /dev/null @@ -1,6 +0,0 @@ -src_prepare() { - default_src_prepare - - touch config.h - rm parse.c parse.h scan.c -} diff --git a/sysa/flex-2.5.14/mk/main.mk b/sysa/flex-2.5.14/mk/main.mk deleted file mode 100644 index caf85a2..0000000 --- a/sysa/flex-2.5.14/mk/main.mk +++ /dev/null @@ -1,29 +0,0 @@ -CFLAGS = -I . \ - -DVERSION=\"2.5.14\" - -all: flex - -flex: ccl.o dfa.o ecs.o gen.o main.o misc.o nfa.o parse.o scan.o skel.o sym.o tblcmp.o yylex.o options.o scanopt.o buf.o - tcc -o $@ $^ - -%.o: %.c - tcc -g -c $(CFLAGS) -o $@ $< - -scan.o: parse.h -yylex.o: parse.h - -parse.c parse.h: parse.y - yacc -d parse.y - mv y.tab.h parse.h - mv y.tab.c parse.c - -scan.c: scan.l - flex scan.l - mv lex.yy.c scan.c - -skel.c: mkskel.sh flex.skl - /bin/sh ./mkskel.sh ./flex.skl > skel.c - -install: all - install flex $(PREFIX)/bin - ln -sf $(PREFIX)/bin/flex $(PREFIX)/bin/lex diff --git a/sysa/flex-2.5.14/src/.placeholder b/sysa/flex-2.5.14/src/.placeholder deleted file mode 100644 index e69de29..0000000 diff --git a/sysa/flex-2.6.4/flex-2.6.4.sh b/sysa/flex-2.6.4/flex-2.6.4.sh new file mode 100755 index 0000000..9624d4f --- /dev/null +++ b/sysa/flex-2.6.4/flex-2.6.4.sh @@ -0,0 +1,19 @@ +src_prepare() { + default_src_prepare + + mv Makefile src/ + touch src/config.h + rm src/parse.c src/parse.h src/scan.c src/skel.c +} + +src_compile() { + cd src + default_src_compile + cd .. +} + +src_install() { + cd src + default_src_install + cd .. +} diff --git a/sysa/flex-2.6.4/mk/main.mk b/sysa/flex-2.6.4/mk/main.mk new file mode 100644 index 0000000..2064dab --- /dev/null +++ b/sysa/flex-2.6.4/mk/main.mk @@ -0,0 +1,41 @@ +CC := tcc +CFLAGS = -DVERSION=\"2.6.4\" \ + -DM4=\"m4\" \ + -DHAVE_LIMITS_H=1 + +all: flex + +flex: buf.o ccl.o dfa.o ecs.o filter.o gen.o main.o misc.o nfa.o options.o parse.o regex.o scan.o scanflags.o scanopt.o skel.o sym.o tables.o tables_shared.o tblcmp.o yylex.o + $(CC) -o $@ $^ -lm + +flex-tmp: buf.o ccl.o dfa.o ecs.o filter.o gen.o main.o misc.o nfa.o options.o parse.o regex.o scan-tmp.o scanflags.o scanopt.o skel.o sym.o tables.o tables_shared.o tblcmp.o yylex.o + $(CC) -o $@ $^ -lm + +%.o: %.c + $(CC) $(CFLAGS) -g -c -I. -o $@ $< + +main.o: parse.h +scan.o: parse.h +scan-tmp.o: parse.h +yylex.o: parse.h + +parse.c parse.h: parse.y + yacc -d parse.y + mv y.tab.h parse.h + mv y.tab.c parse.c + echo 'extern int yylval;' >> parse.h + +scan-tmp.c: scan.l + flex scan.l + mv lex.yy.c scan-tmp.c + +scan.c: scan.l flex-tmp + ./flex-tmp scan.l + mv lex.yy.c scan.c + +skel.c: mkskel.sh flex.skl + /bin/sh ./mkskel.sh . m4 2.6.4 > skel.c + +install: all + install flex $(PREFIX)/bin + ln -sf $(PREFIX)/bin/flex $(PREFIX)/bin/lex diff --git a/sysa/run.sh b/sysa/run.sh index f557e75..6e3d750 100755 --- a/sysa/run.sh +++ b/sysa/run.sh @@ -16,12 +16,12 @@ build m4-1.4 build flex-2.5.11 # Part 23 -build flex-2.5.14 - -# Part 24 build musl-1.1.24 -# Part 25 +# Part 24 build tcc-0.9.27 tcc-musl.sh +# Part 25 +build flex-2.6.4 + echo "Bootstrapping completed." From 3e7b17c03e81af111a665b64863c6da788a2c09d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Thu, 4 Feb 2021 21:29:33 +0000 Subject: [PATCH 2/4] Update m4 from 1.4 to 1.4.4. --- README.md | 2 +- rootfs.sh | 4 ++-- sysa/grep-2.4/mk/main.mk | 4 +++- sysa/{m4-1.4 => m4-1.4.4}/mk/main.mk | 4 +++- sysa/m4-1.4/patches/signal-include.patch | 15 --------------- sysa/run.sh | 2 +- 6 files changed, 10 insertions(+), 21 deletions(-) rename sysa/{m4-1.4 => m4-1.4.4}/mk/main.mk (83%) delete mode 100644 sysa/m4-1.4/patches/signal-include.patch diff --git a/README.md b/README.md index 21d8173..85bea90 100644 --- a/README.md +++ b/README.md @@ -260,7 +260,7 @@ Bash ships with a bison pre-generated file here which we delete. Unfortunately, we have not bootstrapped bison but fortunately for us, heirloom yacc is able to cope here. -#### Part 21: m4 1.4 +#### Part 21: m4 1.4.4 `m4` is the first piece of software we need in the autotools suite and flex 2.6.4. It allows macros to be defined and files to be generated from those macros. diff --git a/rootfs.sh b/rootfs.sh index e39d40c..3546ffe 100755 --- a/rootfs.sh +++ b/rootfs.sh @@ -130,8 +130,8 @@ get_file http://downloads.sourceforge.net/project/heirloom/heirloom-devtools/070 # bash 2.05b get_file https://ftp.gnu.org/pub/gnu/bash/bash-2.05b.tar.gz -# m4 1.4 -get_file https://ftp.gnu.org/gnu/m4/m4-1.4.tar.gz +# m4 1.4.4 +get_file https://ftp.gnu.org/gnu/m4/m4-1.4.4.tar.gz # flex 2.5.11 get_file http://download.nust.na/pub2/openpkg1/sources/DST/flex/flex-2.5.11.tar.gz diff --git a/sysa/grep-2.4/mk/main.mk b/sysa/grep-2.4/mk/main.mk index c35d91b..09de660 100644 --- a/sysa/grep-2.4/mk/main.mk +++ b/sysa/grep-2.4/mk/main.mk @@ -8,7 +8,9 @@ AR = tcc -ar CFLAGS = -DPACKAGE=\"$(PACKAGE)\" \ -DVERSION=\"$(VERSION)\" \ -DHAVE_DIRENT_H=1 \ - -DHAVE_UNISTD_H=1 + -DHAVE_UNISTD_H=1 \ + -DHAVE_STRERROR=1 \ + -DREGEX_MALLOC=1 .PHONY: all diff --git a/sysa/m4-1.4/mk/main.mk b/sysa/m4-1.4.4/mk/main.mk similarity index 83% rename from sysa/m4-1.4/mk/main.mk rename to sysa/m4-1.4.4/mk/main.mk index a47d196..72c4176 100644 --- a/sysa/m4-1.4/mk/main.mk +++ b/sysa/m4-1.4.4/mk/main.mk @@ -7,7 +7,9 @@ AR = tcc -ar CFLAGS = -I lib \ -DPRODUCT=\"$(PRODUCT)\" \ - -DVERSION=\"$(VERSION)\" + -DVERSION=\"$(VERSION)\" \ + -DHAVE_SIGNAL_H=1 \ + -DPACKAGE_STRING=\"GNU\ M4\ 1.4.4\" LDFLAGS = -L . -lm4 diff --git a/sysa/m4-1.4/patches/signal-include.patch b/sysa/m4-1.4/patches/signal-include.patch deleted file mode 100644 index c027475..0000000 --- a/sysa/m4-1.4/patches/signal-include.patch +++ /dev/null @@ -1,15 +0,0 @@ -sys/signal.h is not the POSIX appropriate place for signal.h, which mes libc -attempts to conform to. - -diff -r -U3 src/m4.c src/m4.c ---- src/m4.c 1994-11-02 03:14:28.000000000 +0000 -+++ src/m4.c 2021-01-15 00:19:21.947654461 +0000 -@@ -19,7 +19,7 @@ - #include "m4.h" - - #include --#include -+#include - - static void usage _((int)); - diff --git a/sysa/run.sh b/sysa/run.sh index 6e3d750..b3cd7a4 100755 --- a/sysa/run.sh +++ b/sysa/run.sh @@ -10,7 +10,7 @@ set -e export PREFIX=/after # Part 21 -build m4-1.4 +build m4-1.4.4 # Part 22 build flex-2.5.11 From 13b030e1ed2302fbd4e8b3a54a21a9bb93cf0333 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Thu, 4 Feb 2021 21:41:43 +0000 Subject: [PATCH 3/4] Move grep after musl. --- README.md | 24 ++++++++++++------------ rootfs.sh | 6 +++--- sysa/after.kaem.run | 10 ++-------- sysa/grep-2.4/grep-2.4.kaem | 23 ----------------------- sysa/grep-2.4/mk/main.mk | 5 +++++ sysa/run.sh | 13 ++++++++----- 6 files changed, 30 insertions(+), 51 deletions(-) delete mode 100755 sysa/grep-2.4/grep-2.4.kaem diff --git a/README.md b/README.md index 85bea90..f6eacfe 100644 --- a/README.md +++ b/README.md @@ -240,17 +240,12 @@ GNU Coreutils is a collection of widely used utilities such as `cat`, `chmod`, ` A few of the utilities cannot be easily compiled with Mes C library, so we skip them. -#### Part 18: grep 2.4 - -GNU `grep` is a pattern matching utility. Is is not immediately needed but will -be useful later for autotools. - -#### Part 19: heirloom devtools +#### Part 18: heirloom devtools `lex` and `yacc` from the Heirloom project. The Heirloom project is a collection of standard UNIX utilities derived from code by Caldera and Sun. Differently from the analogous utilities from the GNU project, they can be compiled with a simple `Makefile`. -#### Part 20: bash 2.05b +#### Part 19: bash 2.05b GNU `bash` is the most well known shell and the most complex piece of software so far. However, it comes with a number of great benefits over kaem, including @@ -260,12 +255,12 @@ Bash ships with a bison pre-generated file here which we delete. Unfortunately, we have not bootstrapped bison but fortunately for us, heirloom yacc is able to cope here. -#### Part 21: m4 1.4.4 +#### Part 20: m4 1.4.4 `m4` is the first piece of software we need in the autotools suite and flex 2.6.4. It allows macros to be defined and files to be generated from those macros. -#### Part 22: flex 2.5.11 +#### Part 21: flex 2.5.11 `flex` is a tool for generating lexers or scanners: programs that recognize lexical patters. @@ -274,7 +269,7 @@ first flex 2.5.11 is compiled, with its scanner definition manually modified so it can be processed by lex for the Heirloom project (the required modifications are mostly syntactical, plus a few workarounds to avoid some flex advanced features). -#### Part 23 musl 1.1.24 +#### Part 22 musl 1.1.24 `musl` is a C standard library that is lightweight, fast, simple, free, and strives to be correct in the sense of standards-conformance and safety. `musl` is used by some distributions of GNU/Linux @@ -285,14 +280,19 @@ newer or more complex programs. we replace all weak symbols with strong symbols and will patch `tcc` in the next step to ignore duplicate symbols. -#### Part 24 tcc 0.9.27 (musl) +#### Part 23 tcc 0.9.27 (musl) We recompile `tcc` against musl. This is a two stage process. First we build tcc-0.9.27 that itself links to Mes C library but produces binaries linked to musl. Then we recompile newly produced tcc with itself. Interestingly, tcc-0.9.27 linked against musl is self hosting. -#### Part 25 flex 2.6.14 +#### Part 24 flex 2.6.14 We recompile unpatched GNU `flex` using older flex 2.5.11. This is again two stage process, first compile flex using scanner generated by old flex, then recompile scan.l using the new version of flex to remove any buggy artificats from the old flex. + +#### Part 25: grep 2.4 + +GNU `grep` is a pattern matching utility. Is is not immediately needed but will +be useful later for autotools. diff --git a/rootfs.sh b/rootfs.sh index 3546ffe..5f61543 100755 --- a/rootfs.sh +++ b/rootfs.sh @@ -121,9 +121,6 @@ get_file ftp://sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz 1 # coreutils 5.0 get_file https://ftp.gnu.org/gnu/coreutils/coreutils-5.0.tar.bz2 1 -# grep 2.4 -get_file https://ftp.gnu.org/gnu/grep/grep-2.4.tar.gz - # heirloom-devtools get_file http://downloads.sourceforge.net/project/heirloom/heirloom-devtools/070527/heirloom-devtools-070527.tar.bz2 @@ -142,6 +139,9 @@ get_file https://musl.libc.org/releases/musl-1.1.24.tar.gz # flex 2.6.4 get_file https://github.com/westes/flex/releases/download/v2.6.4/flex-2.6.4.tar.gz +# grep 2.4 +get_file https://ftp.gnu.org/gnu/grep/grep-2.4.tar.gz + # General cleanup find tmp -name .git -exec rm -rf \; diff --git a/sysa/after.kaem.run b/sysa/after.kaem.run index f2a0ab1..db3a8d6 100755 --- a/sysa/after.kaem.run +++ b/sysa/after.kaem.run @@ -129,19 +129,13 @@ cd ${pkg} kaem --file ${pkg}.kaem cd .. -# Part 18: grep -pkg="grep-2.4" -cd ${pkg} -kaem --file ${pkg}.kaem -cd .. - -# Part 19: heirloom-devtools +# Part 18: heirloom-devtools pkg="heirloom-devtools-070527" cd ${pkg} kaem --file ${pkg}.kaem cd .. -# Part 20: bash +# Part 19: bash pkg="bash-2.05b" cd ${pkg} kaem --file ${pkg}.kaem diff --git a/sysa/grep-2.4/grep-2.4.kaem b/sysa/grep-2.4/grep-2.4.kaem deleted file mode 100755 index bf324e6..0000000 --- a/sysa/grep-2.4/grep-2.4.kaem +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/sh - -set -ex - -mkdir build -cd build - -# Extract -gunzip ../src/${pkg}.tar.gz -tar xf ../src/${pkg}.tar -cd ${pkg} -cp ../../mk/main.mk Makefile - -# Build -make - -# Install -install grep /after/bin/ - -# Test -grep --version - -cd ../.. diff --git a/sysa/grep-2.4/mk/main.mk b/sysa/grep-2.4/mk/main.mk index 09de660..3a49d5e 100644 --- a/sysa/grep-2.4/mk/main.mk +++ b/sysa/grep-2.4/mk/main.mk @@ -21,3 +21,8 @@ all: grep grep: $(GREP_OBJECTS) $(CC) $(CFLAGS) $^ $(LDFLAGS) -o $@ + +install: all + install grep $(PREFIX)/bin + ln -sf $(PREFIX)/bin/grep $(PREFIX)/bin/egrep + ln -sf $(PREFIX)/bin/grep $(PREFIX)/bin/fgrep diff --git a/sysa/run.sh b/sysa/run.sh index b3cd7a4..93b73c6 100755 --- a/sysa/run.sh +++ b/sysa/run.sh @@ -9,19 +9,22 @@ set -e export PREFIX=/after -# Part 21 +# Part 20 build m4-1.4.4 -# Part 22 +# Part 21 build flex-2.5.11 -# Part 23 +# Part 22 build musl-1.1.24 -# Part 24 +# Part 23 build tcc-0.9.27 tcc-musl.sh -# Part 25 +# Part 24 build flex-2.6.4 +# Part 25 +build grep-2.4 + echo "Bootstrapping completed." From ec06f1363f59a728a439a9c3180af1058c17306a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Thu, 4 Feb 2021 23:26:09 +0000 Subject: [PATCH 4/4] Remove yacc, we won't need it anymore. --- sysa/flex-2.6.4/flex-2.6.4.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sysa/flex-2.6.4/flex-2.6.4.sh b/sysa/flex-2.6.4/flex-2.6.4.sh index 9624d4f..59737bb 100755 --- a/sysa/flex-2.6.4/flex-2.6.4.sh +++ b/sysa/flex-2.6.4/flex-2.6.4.sh @@ -16,4 +16,8 @@ src_install() { cd src default_src_install cd .. + + # Remove yacc, we won't need it any longer + rm ${PREFIX}/bin/yacc + rm /yaccpar }