Fuente de Afera (parte 0: Makefile)
Descripción del contenido de la página
Primera parte de las fuentes de la biblioteca Afera para Abersoft Forth.
Etiquetas:
Código fuente
Makefile contiene las instrucciones para crear los TAP a partir de las fuentes. También contiene contiene ejemplos de cómo crear agrupar módulos para usar la biblioteca.
# Makefile
# Copyright (C) 2015 Marcos Cruz (programandala.net)
# This file is part of Afera
# (Abersoft Forth Extensions, Resources and Addons)
# http://programandala.net/en.program.afera.html
# Copying and distribution of this file, with or without
# modification, are permitted in any medium without royalty
# provided the copyright notice and this notice are
# preserved. This file is offered as-is, without any
# warranty.
# ##############################################################
# History
# See at the end of the file.
# ##############################################################
# Requirements
# fsb or fsb2
# <http://programandala.net/en.program.fsb.html>
# <http://programandala.net/en.program.fsb2.html>
# basename
# <http://www.gnu.org/software/coreutils/>
# mkmgt
# <http://programandala.net/en.program.mkmgt.html>
# Note: Dependig on fsb2 or fsb are used, the following
# commands must be replaced in this file:
#
# For fsb2:
# fsb2-abersoft src/afera.fsb
# fsb2-abersoft11k $<
# For fsb:
# fsb-abersoft src/afera.fsb
# fsb-abersoft11k $<
################################################################
# Config
VPATH = ./:src:tap
MAKEFLAGS = --no-print-directory
.ONESHELL:
# ##############################################################
# Recipes
source_files=$(wildcard src/*.fsb)
tape_files=$(wildcard tap/*.tap)
test_files=$(wildcard tests/*_test.tap)
.PHONY : all
all: \
sys \
tests
clean:
rm -f tap/*.tap
rm -f tests/afera.mgt
# The main file of the library has to be converted
# to a 11263-byte RAM-disk file,
# required by the unfixed Abersoft Forth.
tap/afera.tap: src/afera.fsb
fsb2-abersoft src/afera.fsb
mv src/afera.tap tap/
# The other modules can be 11264-byte RAM-disk files.
tap/%.tap: src/%.fsb
fsb2-abersoft11k $<
mv src/$*.tap tap/
# ##############################################################
# System packages
# System packages whose name ends with "_inc.tap" have no <loaded.tap> at the
# end, so its loader will never stop. They are intended to be used as the
# first part of other packages (see examples below) that add more modules,
# including <loaded.tap> at the end.
sys: \
sys/abersoft_forth_afera.tap \
sys/abersoft_forth_afera_inc.tap \
sys/abersoft_forth_afera_tools.tap \
sys/abersoft_forth_afera_tools_inc.tap
sys/abersoft_forth_afera_inc.tap: \
tap/loader.tap \
tap/afera.tap \
tap/lowersys.tap \
tap/bank.tap
cat \
sys/abersoft_forth.tap \
tap/loader.tap \
tap/afera.tap \
tap/lowersys.tap \
tap/bank.tap \
> sys/abersoft_forth_afera_inc.tap
sys/abersoft_forth_afera.tap: \
sys/abersoft_forth_afera_inc.tap \
tap/loaded.tap
cat \
sys/abersoft_forth_afera_inc.tap \
tap/loaded.tap \
> sys/abersoft_forth_afera.tap
sys/abersoft_forth_afera_tools_inc.tap: \
tap/loader.tap \
tap/afera.tap \
tap/dot-s.tap \
tap/cswap.tap \
tap/dump.tap \
tap/recurse.tap \
tap/decode.tap
cat \
sys/abersoft_forth.tap \
tap/loader.tap \
tap/afera.tap \
tap/dot-s.tap \
tap/cswap.tap \
tap/dump.tap \
tap/recurse.tap \
tap/decode.tap \
> sys/abersoft_forth_afera_tools_inc.tap
sys/abersoft_forth_afera_tools.tap: \
sys/abersoft_forth_afera_tools_inc.tap \
tap/loaded.tap
cat \
sys/abersoft_forth_afera_tools_inc.tap \
tap/loaded.tap \
> sys/abersoft_forth_afera_tools.tap
# ##############################################################
# G+DOS
sys/abersoft_forth_gplusdos.bas.tap: sys/abersoft_forth_gplusdos.bas
bas2tap -q -n -sAutoload -a1 \
sys/abersoft_forth_gplusdos.bas \
sys/abersoft_forth_gplusdos.bas.tap
# XXX
# On Debian i486, with make 3.86, sh fails with error
# "@make not found"; removing the "@" sign works.
# On Raspbian with make 4.0 it works without modification.
.PHONY : tapes
tapes:
for source in $$(ls -1 src/*.fsb) ; do \
make tap/$$(basename $${source} .fsb).tap ; \
done
# XXX TODO
# tests/gplusdos_test.tap: tapes test/afera.mgt
# cat \
# tap/loader.tap \
# tap/afera.tap \
# tap/buffercol.tap \
# tap/flags.tap \
# tap/pick.tap \
# tap/move.tap \
# tap/2r.tap \
# tap/strings.tap \
# tap/at-fetch.tap \
# tap/plusscreen.tap \
# tap/dot-s.tap \
# tap/assembler.tap \
# tap/gplusdos_1.tap \
# tap/gplusdos_2.tap \
# tap/gplusdos_vars.tap \
# tap/loaded.tap \
# > tests/abersoft_forth_afera_gplusdos_install.tap
# tests/gplusdos_128k_test.tap: tapes tests/afera.mgt
# cat \
# tap/loader.tap \
# tap/afera.tap \
# tap/lowersys.tap \
# tap/bank.tap \
# tap/16kramdisks.tap \
# tap/buffercol.tap \
# tap/flags.tap \
# tap/pick.tap \
# tap/move.tap \
# tap/2r.tap \
# tap/strings.tap \
# tap/at-fetch.tap \
# tap/plusscreen.tap \
# tap/dot-s.tap \
# tap/assembler.tap \
# tap/gplusdos_1.tap \
# tap/gplusdos_2.tap \
# tap/gplusdos_vars.tap \
# tap/loaded.tap \
# > tests/gplusdos_128k_test.tap
# The afera.mgt disk image for +D is created with the G+DOS
# system file, Abersoft Forth with a customized loader, and
# a selection of Afera modules, regarded as useful optional
# extensions after the G+DOS version of Abersoft Forth has
# been created and saved to the disk by the user.
tests/afera.mgt: tapes sys/abersoft_forth_gplusdos.bas.tap
mkmgt --quiet tests/afera.mgt \
sys/gplusdos-sys-2a.tap \
sys/abersoft_forth_gplusdos.bas.tap \
sys/abersoft_forth.bin.tap \
--tap-filename \
tap/16kramdisks.tap \
tap/2nip.tap \
tap/2rdrop.tap \
tap/2r.tap \
tap/2slash.tap \
tap/afera.tap \
tap/akey.tap \
tap/alias.tap \
tap/assembler.tap \
tap/at-fetch.tap \
tap/bank.tap \
tap/bracket-flags.tap \
tap/bracket-if.tap \
tap/buffercol.tap \
tap/caseins.tap \
tap/cell.tap \
tap/color.tap \
tap/continued.tap \
tap/csb-256.tap \
tap/csb.tap \
tap/cswap.tap \
tap/decode.tap \
tap/defer.tap \
tap/dminus.tap \
tap/dot-rs.tap \
tap/dot-s.tap \
tap/dump.tap \
tap/flags.tap \
tap/graphics.tap \
tap/inkeyq.tap \
tap/keyboard.tap \
tap/logo.tap \
tap/lowerc.tap \
tap/lowers.tap \
tap/lowersys.tap \
tap/minus-rot.tap \
tap/move.tap \
tap/noname.tap \
tap/notequals.tap \
tap/pick.tap \
tap/plot.tap \
tap/plusscreen.tap \
tap/point.tap \
tap/prefixes.tap \
tap/qexit.tap \
tap/qrstack.tap \
tap/random.tap \
tap/rdepth.tap \
tap/rdrop.tap \
tap/recurse.tap \
tap/renamings.tap \
tap/roll.tap \
tap/scroll.tap \
tap/sgn.tap \
tap/s-plus.tap \
tap/sqrt.tap \
tap/strings.tap \
tap/time.tap \
tap/transient.tap \
tap/traverse.tap \
tap/udg-store.tap \
tap/unloop.tap \
tap/upperc.tap \
tap/uppers.tap \
tap/value.tap
# ##############################################################
# Backups
backup:
tar -cJf backups/$$(date +%Y%m%d%H%M)_afera.tar.xz \
Makefile \
src/*.fsb \
sys/*.bas \
tests/*.fsb \
benchmarks/*.fsb \
_drafts/* \
_ex/*
################################################################
# ZIP archive for distribution
.PHONY: zip
zip:
rm -f afera.zip && \
cd .. && \
zip -9 afera/afera.zip \
afera/Makefile \
afera/ACKNOWLEDGMENTS.adoc \
afera/LICENSE.txt \
afera/README.adoc \
afera/TO-DO.adoc \
afera/src/*.fsb \
afera/sys/* \
afera/tap/*.tap \
afera/tests/* \
afera/benchmarks/*
cd -
# ##############################################################
# Files grouped for disk
# XXX TODO This is experimental. Not used yet.
#
# The goal is to create an MGT disk with less files, because
# the files of the library are small, and a G+DOS disk can
# hold only 80 files.
#
# The approach is to pack the files into wordsets, but
# something has to be done about the source headers, maybe
# convert them to metacomments.
#
# If RAM-disks are used, the grouped files can not be larger
# than 16 KiB, and word `NEEDS`, that currently only gets
# the file into the RAM-disk and interprets it, must be
# improved to search the file and load the required word. A
# draft is already started in <_drafts/require.fsb>.
#
# An alternative is actual disk support. Then files could
# be of any length.
#
# Another alternative is to use Beta DOS instead of G+DOS,
# and reserve more tracks for the disk directory.
groups_for_disk:
cat \
src/2nip.fsb \
src/2slash.fsb \
src/cswap.fsb \
src/dminus.fsb \
src/sqrt.fsb \
src/sgn.fsb \
src/notequals.fsb \
> src.grouped_for_disk/operators.fsb ; \
cat \
src/2rdrop.fsb \
src/2r.fsb \
src/qrstack.fsb \
src/rdepth.fsb \
src/rdrop.fsb \
> src.grouped_for_disk/rstack.fsb ; \
cat \
src/roll.fsb \
src/pick.fsb \
src/minus-rot.fsb \
> src.grouped_for_disk/stack.fsb ; \
cp src/assembler.fsb src.grouped_for_disk/ ; \
cp src/afera.fsb src.grouped_for_disk/ ; \
cat \
src/akey.fsb \
src/inkeyq.fsb \
src/keyboard.fsb \
src/key_identifiers.fsb \
> src.grouped_for_disk/keyboard.fsb ; \
cat \
src/color.fsb \
src/plot.fsb \
src/plusscreen.fsb \
src/point.fsb \
src/scroll.fsb \
src/graphics.fsb \
src/logo.fsb \
src/udg-store.fsb \
src/at-fetch.fsb \
> src.grouped_for_disk/graphics.fsb ; \
cat \
src/bracket-if.fsb \
src/dot-s.fsb \
src/dot-rs.fsb \
src/dot-vocs.fsb \
src/dump.fsb \
src/decode.fsb \
src/ms.fsb \
src/time.fsb \
> src.grouped_for_disk/tools.fsb ; \
cat \
src/strings.fsb \
src/csb.fsb \
src/upperc.fsb \
src/uppers.fsb \
src/lowerc.fsb \
src/lowers.fsb \
src/lengths.fsb \
src/s-plus.fsb \
src/s-equals.fsb \
src/move.fsb \
> src.grouped_for_disk/strings.fsb ; \
cat \
src/gplusdos_1.fsb \
src/gplusdos_2.fsb \
src/gplusdos_3.fsb \
src/gplusdos_cat.fsb \
src/gplusdos_mem.fsb \
src/gplusdos_vars.fsb \
> src.grouped_for_disk/gplusdos.fsb ; \
cat \
src/slash-load-t.fsb \
src/slash-save-t.fsb \
src/tape.fsb \
> src.grouped_for_disk/tape.fsb ; \
cat \
src/alias.fsb \
src/bracket-flags.fsb \
src/buffercol.fsb \
src/caseins.fsb \
src/cell.fsb \
src/continued.fsb \
src/defer.fsb \
src/flags.fsb \
src/lowersys.fsb \
src/noname.fsb \
src/prefixes.fsb \
src/qexit.fsb \
src/random.fsb \
src/recurse.fsb \
src/renamings.fsb \
src/transient.fsb \
src/traverse.fsb \
src/unloop.fsb \
src/value.fsb \
> src.grouped_for_disk/to-do.fsb
# ##############################################################
# Temporary for development
# XXX FIXME The test files are not updated if they don't
# exist.
.PHONY: tests
tests: $(test_files)
tests/lowersys_test.tap: tapes
cat \
sys/abersoft_forth.tap \
tap/loader.tap \
tap/afera.tap \
tap/cswap.tap \
tap/dump.tap \
tap/dot-rs.tap \
tap/dot-s.tap \
tap/lowersys.tap \
tap/loaded.tap \
> tests/lowersys_test.tap
tests/512bbuf_test.tap: \
tapes \
sys/abersoft_forth_afera_tools_inc.tap
cat \
sys/abersoft_forth_afera_tools_inc.tap \
tap/512bbuf.tap \
> tests/512bbuf_test.tap
tests/bank_test.tap: tapes
cat \
sys/abersoft_forth.tap \
tap/loader.tap \
tap/afera.tap \
tap/recurse.tap \
tap/decode.tap \
tap/cswap.tap \
tap/dump.tap \
tap/lowersys.tap \
tap/bank.tap \
tap/16kramdisks.tap \
tap/loaded.tap \
> tests/bank_test.tap
tests/gplusdos_test.tap: tapes tests/afera.mgt
cat \
tap/loader.tap \
tap/afera.tap \
tap/buffercol.tap \
tap/flags.tap \
tap/pick.tap \
tap/move.tap \
tap/2r.tap \
tap/strings.tap \
tap/csb.tap \
tap/csb-256.tap \
tap/at-fetch.tap \
tap/plusscreen.tap \
tap/cswap.tap \
tap/dump.tap \
tap/dot-s.tap \
tap/dot-vocs.tap \
tap/transient.tap \
tap/transient-start-4096.tap \
tap/assembler.tap \
tap/transient-end.tap \
tap/gplusdos_1.tap \
tap/gplusdos_2.tap \
tap/gplusdos_3.tap \
tap/gplusdos_vars.tap \
tap/gplusdos_mem.tap \
tap/transient-remove.tap \
tap/loaded.tap \
> tests/gplusdos_test.tap
tests/gplusdos_128k_test.tap: tapes tests/afera.mgt
cat \
tap/loader.tap \
tap/afera.tap \
tap/lowersys.tap \
tap/bank.tap \
tap/16kramdisks.tap \
tap/buffercol.tap \
tap/flags.tap \
tap/pick.tap \
tap/move.tap \
tap/2r.tap \
tap/strings.tap \
tap/csb.tap \
tap/csb-256.tap \
tap/at-fetch.tap \
tap/plusscreen.tap \
tap/dot-s.tap \
tap/dot-vocs.tap \
tap/transient.tap \
tap/transient-start-4096.tap \
tap/assembler.tap \
tap/transient-end.tap \
tap/gplusdos_1.tap \
tap/gplusdos_2.tap \
tap/gplusdos_3.tap \
tap/gplusdos_cat.tap \
tap/gplusdos_vars.tap \
tap/gplusdos_mem.tap \
tap/transient-remove.tap \
tap/loaded.tap \
> tests/gplusdos_128k_test.tap
tests/transient_test.tap: tapes
cat \
sys/abersoft_forth.tap \
tap/loader.tap \
tap/afera.tap \
tap/transient.tap \
tap/recurse.tap \
tap/decode.tap \
tap/loaded.tap \
> tests/transient_test.tap
# tests/plus3dos_test.tap: tapes
# cat \
# tap/loader.tap \
# tap/afera.tap \
# tap/assembler.tap \
# tap/plus3dos.tap \
# tap/loaded.tap \
# > tests/plus3dos_test.tap
tests/bracket-if_test.tap: tapes
cat \
sys/abersoft_forth.tap \
tap/loader.tap \
tap/afera.tap \
tap/flags.tap \
tap/pick.tap \
tap/2r.tap \
tap/move.tap \
tap/strings.tap \
tap/csb.tap \
tap/csb-256.tap \
tap/bracket-if.tap \
tap/loaded.tap \
> tests/bracket-if.tap
tests/16kramdisks_test.tap: tapes
cat \
sys/abersoft_forth.tap \
tap/loader.tap \
tap/afera.tap \
tap/lowersys.tap \
tap/bank.tap \
tap/time.tap \
tap/recurse.tap \
tap/decode.tap \
tap/16kramdisks.tap \
tap/loaded.tap \
> tests/16kramdisks_test.tap
tests/rdrop_test.tap: tapes
cat \
sys/abersoft_forth_afera_tools_inc.tap \
tap/rdrop.tap \
tap/2rdrop.tap \
tap/loaded.tap \
> tests/rdrop_test.tap
tests/defer_test.tap: tapes
cat \
sys/abersoft_forth_afera_tools_inc.tap \
tap/defer.tap \
tap/noname.tap \
tap/loaded.tap \
> tests/defer_test.tap
tests/hi-to_test.tap: tapes
cat \
sys/abersoft_forth.tap \
tap/loader.tap \
tap/afera.tap \
tap/cswap.tap \
tap/dump.tap \
tap/dot-rs.tap \
tap/dot-s.tap \
tap/lowersys.tap \
tap/hi-to-top.tap \
tap/hi-to.tap \
tap/time.tap \
tap/loaded.tap \
> tests/hi-to_test.tap
# ##############################################################
# History
# 2015-03-12: First version.
#
# 2015-03-27: Updated with fsb2abersoft
#
# 2015-03-28: Implicite recipe.
#
# 2015-04-06: Improved recipes.
#
# 2015-04-15: Updated. New: MGT image.
#
# 2015-05-06: New: 'test' recipe for development TAP files.
#
# 2015-05-07: New: <sys/abersoft_forth_and_tools.tap>, for development.
#
# 2015-05-08: Recipes updated with the <loader.tap> and <loaded.tap> modules,
# that make it possible to compile the files with one command, no matter the
# number of modules included.
#
# 2015-05-11: Updated.
#
# 2015-05-14: Updated with the fsb2abersoft11k converter.
#
# 2015-05-15: New: backup recipe; tapes recipe, factored from afera.mgt.
#
# 2015-06-06: Updated.
#
# 2015-07-05: Updated.
#
# 2015-07-06: `tests/defer_test.tap`.
#
# 2015-07-16: Updated.
#
# 2015-07-17: Added 'tests/hi-to_test.tap' recipe for
# debugging the module <hi-to.fsb>.
#
# 2015-09-04: Added the zip recipe.
#
# 2015-10-23: Updated the names of fsb converters.
#
# 2015-10-26: Updated two names of modules. fsb2 is used by default instead of fsb.
#
# 2015-10-30: Updated the zip recipe with the licenses.