diff --git a/GNUmakefile b/GNUmakefile new file mode 100644 index 0000000..ff11fb2 --- /dev/null +++ b/GNUmakefile @@ -0,0 +1,198 @@ +VERSION ?= 2021.4 +KEYPAIR ?= 2021-04 +PREFIX ?= /usr/local +DATADIR ?= $(PREFIX)/share/RETRO12 +DOCSDIR ?= $(PREFIX)/share/doc/RETRO12 +EXAMPLESDIR ?= $(PREFIX)/share/examples/RETRO12 +MANDIR ?= $(PREFIX)/share/man/man1 +LIBM ?= -lm + +all: build + +help: + +build: dirs toolchain ngaImage bin/retro bin/retro-describe + +optional: build bin/retro-repl + +toolchain: dirs bin/retro-embedimage bin/retro-extend bin/retro-muri bin/retro-unu + +image: vm/nga-c/image.c + +repl: bin/retro-repl + +dirs: + mkdir -p bin + cp tools/retro-document.sh bin/retro-document + +clean: + rm -f bin/* + + +# installation targets + +install: build install-data install-docs install-examples install-manpages + install -m 755 -d -- $(DESTDIR)$(PREFIX)/bin + install -c -m 755 bin/retro-embedimage $(DESTDIR)$(PREFIX)/bin/retro-embedimage + install -c -m 755 bin/retro-extend $(DESTDIR)$(PREFIX)/bin/retro-extend + install -c -m 755 bin/retro-muri $(DESTDIR)$(PREFIX)/bin/retro-muri + install -c -m 755 bin/retro $(DESTDIR)$(PREFIX)/bin/retro + install -c -m 755 bin/retro-unu $(DESTDIR)$(PREFIX)/bin/retro-unu + install -c -m 755 bin/retro-describe $(DESTDIR)$(PREFIX)/bin/retro-describe + install -c -m 755 bin/retro-document $(DESTDIR)$(PREFIX)/bin/retro-document + install -c -m 755 example/retro-tags.retro $(DESTDIR)$(PREFIX)/bin/retro-tags + install -c -m 755 example/retro-locate.retro $(DESTDIR)$(PREFIX)/bin/retro-locate + +install-strip: build install-data install-docs install-examples + install -m 755 -d -- $(DESTDIR)/bin + install -c -m 755 -s bin/retro-embedimage $(DESTDIR)$(PREFIX)/bin/retro-embedimage + install -c -m 755 -s bin/retro-extend $(DESTDIR)$(PREFIX)/bin/retro-extend + install -c -m 755 -s bin/retro-muri $(DESTDIR)$(PREFIX)/bin/retro-muri + install -c -m 755 -s bin/retro $(DESTDIR)$(PREFIX)/bin/retro + install -c -m 755 -s bin/retro-unu $(DESTDIR)$(PREFIX)/bin/retro-unu + install -c -m 755 bin/retro-describe $(DESTDIR)$(PREFIX)/bin/retro-describe + install -c -m 755 bin/retro-document $(DESTDIR)$(PREFIX)/bin/retro-document + install -c -m 755 example/retro-tags.retro $(DESTDIR)$(PREFIX)/bin/retro-tags + install -c -m 755 example/retro-locate.retro $(DESTDIR)$(PREFIX)/bin/retro-locate + +install-data: + install -m 755 -d -- $(DESTDIR)$(DATADIR) + install -c -m 644 tools/glossary.retro $(DESTDIR)$(DATADIR)/glossary.retro + install -c -m 644 ngaImage $(DESTDIR)$(DATADIR)/ngaImage + cp -fpR tests $(DESTDIR)$(DATADIR)/ + install -c -m 644 doc/words.tsv $(DESTDIR)$(DATADIR)/words.tsv + +install-docs: + install -m 755 -d -- $(DESTDIR)$(DOCSDIR) + install -c -m 644 README $(DESTDIR)$(DOCSDIR)/README + install -c -m 644 RELEASE-NOTES $(DESTDIR)$(DOCSDIR)/RELEASE-NOTES + install -c -m 644 doc/RETRO-Book.md $(DESTDIR)$(DOCSDIR)/RETRO-Book.md + install -c -m 644 doc/words.tsv $(DESTDIR)$(DOCSDIR)/words.tsv + +install-examples: + install -m 755 -d -- $(DESTDIR)$(EXAMPLESDIR) + cp -fpR example $(DESTDIR)$(EXAMPLESDIR) + +install-manpages: + install -m 755 -d -- $(DESTDIR)$(MANDIR) + install -c -m 644 man/retro.1 $(DESTDIR)$(MANDIR)/retro.1 + install -c -m 644 man/retro-embedimage.1 $(DESTDIR)$(MANDIR)/retro-embedimage.1 + install -c -m 644 man/retro-extend.1 $(DESTDIR)$(MANDIR)/retro-extend.1 + install -c -m 644 man/retro-describe.1 $(DESTDIR)$(MANDIR)/retro-describe.1 + install -c -m 644 man/retro-document.1 $(DESTDIR)$(MANDIR)/retro-document.1 + install -c -m 644 man/retro-muri.1 $(DESTDIR)$(MANDIR)/retro-muri.1 + install -c -m 644 man/retro-unu.1 $(DESTDIR)$(MANDIR)/retro-unu.1 + install -c -m 644 man/retro-tags.1 $(DESTDIR)$(MANDIR)/retro-tags.1 + install -c -m 644 man/retro-locate.1 $(DESTDIR)$(MANDIR)/retro-locate.1 + + + +# toolchain targets + +bin/retro-describe: tools/retro-describe.retro doc/words.tsv + cat tools/retro-describe.retro doc/words.tsv >bin/retro-describe + chmod +x bin/retro-describe + +bin/retro-embedimage: tools/retro-embedimage.c + $(CC) $(OPTIONS) $(CFLAGS) $(LDFLAGS) -o $@ tools/retro-embedimage.c + +bin/retro-extend: tools/retro-extend.c + $(CC) $(OPTIONS) $(CFLAGS) $(LDFLAGS) -o $@ tools/retro-extend.c + +bin/retro-muri: tools/retro-muri.c + $(CC) $(OPTIONS) $(CFLAGS) $(LDFLAGS) -o $@ tools/retro-muri.c + +bin/retro-unu: tools/retro-unu.c + $(CC) $(OPTIONS) $(CFLAGS) $(LDFLAGS) -o $@ tools/retro-unu.c + + + +# basic image target + +ngaImage: image/retro.muri image/retro.forth bin/retro-muri bin/retro-extend + ./bin/retro-muri image/retro.muri + ./bin/retro-extend ngaImage image/retro.forth + + + +# minimal system + +bin/retro-repl: vm/nga-c/repl.c vm/nga-c/image.c + cd vm/nga-c && $(CC) $(OPTIONS) $(CFLAGS) $(LDFLAGS) -o ../../bin/retro-repl repl.c + + + +# retro on unix + +update-extensions: bin/retro + cd package/extensions && ../../bin/retro -f ../../tools/generate-extensions-list.retro >../load-extensions.retro + +vm/nga-c/retro-image.c: ngaImage bin/retro-embedimage bin/retro-extend interface/filesystem.retro interface/floatingpoint.retro interface/unix.retro interface/rng.retro interface/sockets.retro interface/scripting.retro interface/retro-unix.retro interface/clock.retro + cp ngaImage rre.image + ./bin/retro-extend rre.image interface/filesystem.retro interface/floatingpoint.retro interface/unix.retro interface/rng.retro interface/sockets.retro interface/scripting.retro interface/clock.retro interface/retro-unix.retro + ./bin/retro-embedimage rre.image >vm/nga-c/retro-image.c + +bin/retro: vm/nga-c/retro-image.c vm/nga-c/retro-unix.c vm/nga-c/bsd-strl.c vm/nga-c/config.h vm/nga-c/dev-clock.c vm/nga-c/dev-files.c vm/nga-c/dev-floatingpoint.c vm/nga-c/dev-image.c vm/nga-c/dev-rng.c vm/nga-c/dev-sockets.c vm/nga-c/dev-unix.c vm/nga-c/prototypes.h package/list.forth package/load-extensions.retro + cd vm/nga-c && $(CC) $(OPTIONS) $(CFLAGS) $(LDFLAGS) -o ../../bin/retro retro-unix.c $(LIBM) + cd package && ../bin/retro -u rre.image -f list.forth + ./bin/retro-embedimage rre.image >vm/nga-c/retro-image.c + rm rre.image + cd vm/nga-c && $(CC) $(OPTIONS) $(CFLAGS) $(LDFLAGS) -o ../../bin/retro retro-unix.c $(LIBM) + + + +# optional targets + +bin/retro-compiler: bin/retro-extend vm/nga-c/retro-compiler.c vm/nga-c/retro-runtime.c vm/nga-c/bsd-strl.c vm/nga-c/config.h vm/nga-c/dev-clock.c vm/nga-c/dev-files.c vm/nga-c/dev-floatingpoint.c vm/nga-c/dev-image.c vm/nga-c/dev-rng.c vm/nga-c/dev-sockets.c vm/nga-c/dev-unix.c vm/nga-c/prototypes.h + cp ngaImage runtime.image + ./bin/retro-extend runtime.image interface/scripting.retro interface/filesystem.retro interface/floatingpoint.retro interface/unix.retro interface/rng.retro interface/retro-unix.retro interface/clock.retro + cd vm/nga-c && $(CC) $(OPTIONS) $(CFLAGS) $(LDFLAGS) -o ../../retro-runtime retro-runtime.c $(LIBM) + cd vm/nga-c && $(CC) $(OPTIONS) $(CFLAGS) $(LDFLAGS) -o ../../bin/retro-compiler retro-compiler.c + objcopy --add-section .ngaImage=runtime.image --set-section-flags .ngaImage=noload,readonly bin/retro-compiler + objcopy --add-section .runtime=retro-runtime --set-section-flags .runtime=noload,readonly bin/retro-compiler + rm runtime.image retro-runtime + +image-js: bin/retro + ./bin/retro example/retro-generate-image-js.retro >vm/nga-js/image.js + + + +# documentation targets + +glossary: doc/Glossary.txt doc/Glossary.html doc/Glossary-Concise.txt doc/Glossary-Names-and-Stack.txt doc/words.tsv + +sorted: doc/words.tsv + LC_ALL=C sort -o sorted.tsv doc/words.tsv + mv sorted.tsv doc/words.tsv + +doc/Glossary.txt: bin/retro sorted + ./bin/retro tools/glossary.retro export glossary >doc/Glossary.txt + +doc/Glossary.html: bin/retro sorted + ./bin/retro tools/glossary.retro export html >doc/Glossary.html + +doc/Glossary-Concise.txt: bin/retro sorted + ./bin/retro tools/glossary.retro export concise >doc/Glossary-Concise.txt + +doc/Glossary-Names-and-Stack.txt: bin/retro sorted + ./bin/retro tools/glossary.retro export concise-stack >doc/Glossary-Names-and-Stack.txt + + + +# other targets + +release: clean build glossary + fossil tarball tip R12.tar.gz + mkdir release + cd release && tar xzvf ../R12.tar.gz + cd release && mv * RETRO12-$(VERSION) + cd release && tar cf RETRO12-$(VERSION).tar RETRO12-$(VERSION) + cd release && gzip RETRO12-$(VERSION).tar + mv release/RETRO12-$(VERSION).tar.gz . + rm -rf release + signify -S -s /home/crc/keys/$(KEYPAIR).sec -m RETRO12-$(VERSION).tar.gz + signify -V -p security/$(KEYPAIR).pub -m RETRO12-$(VERSION).tar.gz + +test: bin/retro + ./bin/retro tests/test-core.forth + diff --git a/vm/nga-c-native-x86/image.c b/vm/nga-c-native-x86/image.c index dcc07ed..81db113 100644 --- a/vm/nga-c-native-x86/image.c +++ b/vm/nga-c-native-x86/image.c @@ -3,7 +3,7 @@ #define CELL int32_t #endif CELL ngaImageCells = 13846; -CELL ngaImage[] = { 1793,13757,13747,13845,202102,0,10,1,10,2,10,3,10,4,10,5,10,6,10, +CELL ngaImage[] = { 1793,13757,13747,13845,202104,0,10,1,10,2,10,3,10,4,10,5,10,6,10, 7,10,8,10,9,10,10,11,10,12,10,13,10,14,10,15,10,16,10,17, 10,18,10,19,10,20,10,21,10,22,10,23,10,24,10,25,10,68223234,1,2575, 85000450,1,656912,3211,3220,268505089,63,62,285281281,0,63,2063,10,101384453,0,9,10,2049,56,25,