--- gforth/Makefile.in 1997/07/31 16:17:05 1.104 +++ gforth/Makefile.in 1998/05/07 22:44:39 1.108 @@ -23,12 +23,33 @@ # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. -#gforth version +# Warning: +# For some stupid reason setting SHELL to bash does not work properly with +# DOS. If you want to use shell-specific things that must run with DOS make +# an external batch file and call it with bash (see versions.bsh). + +# ------------- gforth version + VERSION_MAJOR=0 -VERSION_MINOR=3 -VERSION_RELEASE=1 +VERSION_MINOR=4 +VERSION_RELEASE=0 VERSION =$(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_RELEASE) DOSVERSION=$(VERSION_MAJOR)$(VERSION_MINOR)$(VERSION_RELEASE) + +# ------------- System specific variables + +machine=@mach_h@ +# this is the type of machine +# used to extend the include path with ./arch/$machine +# so we could include a machine specific +# machine.h file + +PATHSEP = @PATHSEP@ + +osclass = @OSCLASS@ + +# ------------- Utility programs + SHELL = /bin/sh RM = rm RMTREE = rm -rf @@ -40,7 +61,6 @@ INSTALL_DATA = @INSTALL_DATA@ LN_S = @LN_S@ GCC = @CC@ CC = $(GCC) -PATHSEP = @PATHSEP@ FORTHPATH = $(libdir)/gforth/site-forth$(PATHSEP)$(datadir)/gforth/site-forth$(PATHSEP)$(libdir)/gforth/$(VERSION)$(PATHSEP)$(datadir)/gforth/$(VERSION)$(PATHSEP). FORTHSIZES = @FORTHSIZES@ FORTH = ./gforth -p $(FORTHPATH)$(PATHSEP)$(srcdir) @@ -53,12 +73,15 @@ DVI2PS = dvips -D300 #you can get texi2html from http://wwwcn.cern.ch/dci/texi2html/ TEXI2HTML = texi2html MAKEINFO = makeinfo + +# ------------- Compiler Flags + XCFLAGS = @CFLAGS@ XDEFINES = @DEFS@ SWITCHES = $(XCFLAGS) $(XDEFINES) #-DNDEBUG #turn off assertions ENGINE_FLAGS = @ENGINE_FLAGS@ -fno-defer-pop -fcaller-saves DEBUGFLAG = @DEBUGFLAG@ -CFLAGS = $(DEBUGFLAG) -I$(srcdir)/engine -I$(srcdir) -O4 -Wall $(SWITCHES) -DDEFAULTPATH=\"$(FORTHPATH)\" +CFLAGS = $(DEBUGFLAG) -I$(srcdir)/engine -I$(srcdir)/arch/$(machine) -O4 -Wall $(SWITCHES) -DDEFAULTPATH=\"$(FORTHPATH)\" #John Wavrik should use -Xlinker -N to get a writable text (executable) XLDFLAGS = @LDFLAGS@ @@ -66,6 +89,8 @@ GCCLDFLAGS = @GCCLDFLAGS@ LDFLAGS = $(DEBUGFLAG) $(XLDFLAGS) $(GCCLDFLAGS) LDLIBS = @LIBS@ +# ------------ Install Directorys + VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ @@ -106,11 +131,31 @@ KERN_SRC = \ kernel/vars.fs \ kernel/accept.fs \ kernel/basics.fs \ - kernel/interp.fs \ + kernel/int.fs \ + kernel/comp.fs \ kernel/io.fs \ kernel/license.fs \ kernel/nio.fs \ - kernel/saccept.fs + kernel/saccept.fs \ + kernel/doers.fs \ + kernel/getdoers.fs + +EC_SRC = \ + asm/00-readme \ + asm/bitmask.fs \ + asm/numref.fs \ + asm/basic.fs \ + asm/generic.fs \ + asm/target.fs \ + ec/00-readme \ + ec/crossdoc.fd \ + ec/mirror.fs \ + ec/mirrors.fs \ + ec/shex.fs \ + ec/builttag.fs \ + ec/dotx.fs \ + ec/mirrored.fs \ + ec/nesting.fs GFORTH_FI_SRC = \ assert.fs \ @@ -146,7 +191,7 @@ GFORTH_FI_SRC = \ sieve.fs \ add.fs -FORTH_SRC = $(KERN_SRC) $(GFORTH_FI_SRC) \ +FORTH_SRC = $(KERN_SRC) $(GFORTH_FI_SRC) $(EC_SRC) \ ans-report.fs ansi.fs answords.fs \ code.fs colorize.fs comp-i.fs \ doskey.fs ds2texi.fs \ @@ -168,7 +213,8 @@ COMPAT = compat/CVS compat/README compat ALLSUBDIRS = engine -ARCHS = arch/m68k/machine.h \ +ARCHS = arch/generic/machine.h \ + arch/m68k/machine.h \ arch/mips/machine.h \ arch/386/machine.h \ arch/hppa/machine.h \ @@ -187,7 +233,30 @@ ARCHS = arch/m68k/machine.h \ arch/misc/prim.fs \ arch/misc/sim.fs \ arch/misc/sokoban.fs \ - arch/misc/tt.fs + arch/misc/tt.fs \ + arch/6502/asm.fs \ + arch/6502/prim.fs \ + arch/6502/mach.fs \ + arch/6502/zero.fs \ + arch/6502/softuart.fs \ + arch/6502/cold.fs \ + arch/8086/asm.fs \ + arch/8086/mach.fs \ + arch/8086/mach.sh \ + arch/8086/prim.fs \ + arch/avr/asm.fs \ + arch/c165/asm.fs \ + arch/c165/mach.fs \ + arch/c165/prim.fs \ + arch/h8/asm.fs \ + arch/shboom/asm.fs \ + arch/shboom/compiler.fs \ + arch/shboom/dis.fs \ + arch/shboom/mach.fs \ + arch/shboom/prim.fs \ + arch/shboom/dis2.fs \ + arch/shboom/sh.p \ + arch/shboom/doers.fs SOURCES = CVS compat Makefile.in engine/Makefile.in gforthmi \ configure.in configure config.sub config.guess \ @@ -230,7 +299,7 @@ DOCDIST = doc/gforth.info doc/gforth.inf #stuff in a binonly distribution BINONLYDIST = config.status Makefile gforth gforth-ditc \ $(OBJECTS0) $(OBJECTS) $(OBJECTS_DITC)\ - machine/machine.h engine/config.h kernel.fi \ + arch/$(machine)/machine.h engine/config.h kernel.fi \ stamp-h engine/version.h kernel/version.fs version-stamp \ INSTALL.BINDIST @@ -244,20 +313,29 @@ GEN_PRECIOUS = $(FORTH_GEN) $(KERNLS) do .SUFFIXES: .SUFFIXES: .c .o + all: kernel/version.fs more +# use this dependency for phony targets just as mostlyclean,... +FORCE: ; + #this rule avoids remaking everything after minor changes in Makefile.in version: Makefile.in if test -r $@ && test x'$(VERSION)' = x`cat $@` ; then true ; else echo $(VERSION) > $@ ; fi +# With dos we use normal dos echo +# we cannot pipe the output to engine/version.h directly because +# of the "/ and \" problem. Copying works because we use the +# shell und file utilities. + engine/version.h: version - echo "static char gforth_version[]=\"$(VERSION)\" ;" >$@ + bash versions.bsh $(VERSION) kernel/version.fs: version $(MAKE) gforth - echo ": version-string s\" $(VERSION)\" ;" >$@ + bash versions.bsh $(VERSION) -more: $(OBJECTS) $(FORTH_GEN) gforth +more: engine $(FORTH_GEN) gforth #from the gcc Makefile: #"Deletion of files made during compilation. @@ -270,7 +348,7 @@ more: $(OBJECTS) $(FORTH_GEN) gforth # `distclean' also deletes the files made by config. # `realclean' also deletes everything that could be regenerated automatically." -mostlyclean: +mostlyclean: FORCE -$(RM) -rf *.s gforth.fi *.fi~ *.fi- kernel/version.fs *TAGS \ doc/crossdoc.fd doc/doc.fd doc/gforth.texi doc/gforth.fns \ doc/gforth.aux doc/gforth.cp doc/gforth.cps \ @@ -386,12 +464,12 @@ install: gforth $(FORTH_SRC) kernel.fi g $(RM) gforth.fi; $(MAKE) gforth.fi #gforth.fi contains some path names $(INSTALL_DATA) gforth.fi $(libdir)/gforth/$(VERSION) sed 's:^$(srcdir)/:$(datadir)/gforth/$(VERSION)/:' gforth.TAGS >TAGS; $(INSTALL_DATA) TAGS $(datadir)/gforth/$(VERSION) - if test -d $(emacssitelispdir); then \ + @if test -d $(emacssitelispdir); then \ $(INSTALL_DATA) $(srcdir)/gforth.el $(emacssitelispdir); \ else \ echo ">>>>>Please install $(srcdir)/gforth.el in your .../emacs/site-lisp directory"; \ fi - echo ">>>>> Please make an entry for Gforth in your info dir file; e.g.:"; \ + @echo ">>>>> Please make an entry for Gforth in your info dir file; e.g.:"; \ echo "* Gforth: (gforth). A fast interpreter for the Forth language." install-strip: install @@ -401,7 +479,7 @@ installdirs: mkinstalldirs #deinstall all files specific to this version of gforth #to uninstall version foo, type `make uninstall VERSION=foo' -uninstall: +uninstall: FORCE -$(RM) -rf $(libdir)/gforth/$(VERSION) $(datadir)/gforth/$(VERSION) $(bindir)/gforth-$(VERSION) @echo -e "Type\n$(RM) -rf $(bindir)/gforth $(man1dir)/gforth.1 $(infodir)/gforth.info* $(datadir)/gforth $(libdir)/gforth\nto remove Gforth completely" @@ -410,7 +488,7 @@ check test: gforth gforth.fi $(FORTH) test/other.fs -e bye $(FORTH) code.fs test/checkans.fs -e bye @echo 'Expect no differences' - $(FORTH) -m 100000 prims2x.fs -e "s\" $(srcdir)/prim.b\"' output-c process-file bye"| diff -c - $(srcdir)/engine/prim.i + $(FORTHK) -m 100000 prims2x.fs -e "s\" $(srcdir)/prim.b\"' output-c process-file bye"| diff -c - $(srcdir)/engine/prim.i bench: gforth gforth.fi @echo 'Each benchmark takes about 30s on a 486-66 (gcc-2.6.3 -DFORCE_REG)' @@ -419,14 +497,15 @@ bench: gforth gforth.fi time $(FORTH) -m 160000 matrix.fs -e "main bye" time $(FORTH) fib.fs -e "main bye" -gforth: $(OBJECTS) $(OBJECTS0) - -$(CP) gforth gforth~ - $(GCC) $(LDFLAGS) $(OBJECTS) $(OBJECTS0) $(LDLIBS) -o $@ - @GFORTH_EXE@ +# ------------- Make forth images -gforth-ditc: $(OBJECTS_DITC) $(OBJECTS0) - $(GCC) $(LDFLAGS) $(OBJECTS_DITC) $(OBJECTS0) $(LDLIBS) -o $@ - @GFORTHDITC_EXE@ +# Hot to make new images: +# 1. Produce an image called kernlXYZ.fi- +# the original kernel.fi is not touched because it's needed for creation +# 2. copy old kernlXYZ.fi to kernlXYZ.fi~ +# that's a backup copy in case the new kernels don't work +# 3. copy new kernels to kernlXYZ.fi +# these are the ones we want to use now kernl16l.fi-: $(KERN_SRC) kernel/version.fs mach16l.fs $(FORTH_GEN0) $(FORTHK) -e 's" mach16l.fs"' kernel/main.fs -e "save-cross kernl16l.fi- $(bindir)/gforth-$(VERSION) bye" @@ -482,37 +561,17 @@ kernl64l.fi: $(KERNLS) # -$(CP) $@ $@~ # -$(CP) $< $@ -gforth.fi: @kernel_fi@ gforthmi gforth gforth-ditc $(GFORTH_FI_SRC) - GFORTHD="./gforth-ditc -p .$(PATHSEP)$(srcdir)" GFORTH="./gforth-ditc -p .$(PATHSEP)$(srcdir) -i kernel.fi startup.fs" $(srcdir)/gforthmi gforth.fi $(FORTHSIZES) $(FORTHKFLAGS) startup.fs +# If we want a new kernel.fi we should use "kernel.fi:" this makes +# a link or a copy from kernl....fi to kernel.fi +# works for dos-computers, too!! -#TAGS is a GNU standard target -TAGS: gforth.TAGS - $(CP) gforth.TAGS $@ - -gforth.TAGS: @kernel_fi@ gforth $(GFORTH_FI_SRC) prim.TAGS - $(FORTHK) etags.fs startup.fs -e bye - cat TAGS prim.TAGS kernel.TAGS >gforth.TAGS - rm TAGS +kernel.fi: @kernel_fi@ + @LINK_KERNL@ -engine/replace.a: - cd engine; $(MAKE) replace.a - -engine.s: engine/engine.c engine/prim.i engine/prim_lab.i machine/machine.h engine/threaded.h $(INCLUDES) engine/config.h - $(GCC) $(CFLAGS) $(ENGINE_FLAGS) -S $(srcdir)/engine/engine.c - -engine/engine.o: engine/engine.c engine/prim.i engine/prim_lab.i machine/machine.h engine/threaded.h $(INCLUDES) engine/config.h - $(GCC) $(CFLAGS) $(ENGINE_FLAGS) -c $(srcdir)/engine/engine.c -o $@ - -engine/engine-ditc.o: engine/engine.c engine/prim.i engine/prim_lab.i machine/machine.h engine/threaded.h $(INCLUDES) engine/config.h - $(GCC) $(CFLAGS) $(ENGINE_FLAGS) -DDOUBLY_INDIRECT -o $@ -c $(srcdir)/engine/engine.c - -engine/main.o: engine/main.c machine/machine.h engine/threaded.h $(INCLUDES) engine/config.h engine/version.h - $(GCC) $(CFLAGS) $(ENGINE_FLAGS) -o $@ -c $(srcdir)/engine/main.c - -engine/main-ditc.o: engine/main.c machine/machine.h engine/threaded.h $(INCLUDES) engine/config.h engine/version.h - $(GCC) $(CFLAGS) $(ENGINE_FLAGS) -DDOUBLY_INDIRECT -o $@ -c $(srcdir)/engine/main.c +gforth.fi: kernel.fi gforthmi gforth gforth-ditc $(GFORTH_FI_SRC) + GFORTHD="./gforth-ditc -p .$(PATHSEP)$(srcdir)" GFORTH="./gforth-ditc -p .$(PATHSEP)$(srcdir) -i kernel.fi startup.fs" $(srcdir)/gforthmi gforth.fi $(FORTHSIZES) $(FORTHKFLAGS) startup.fs -engine/strtoul.o: strtoul.c strtol.c +# ------------- Make c-engine prim.b: prim m4 -s $(srcdir)/prim >$@ @@ -539,13 +598,47 @@ kernel/prim.fs: prim.b prims2x.fs kernel $(CP) $@- $@ $(RM) $@- +engine: engine/prim_lab.i engine/prim.i engine/version.h FORCE + $(MAKE) -C engine engine + +engine_ditc: engine/prim_lab.i engine/prim.i engine/version.h FORCE + $(MAKE) -C engine engine_ditc + +gforth: engine + -$(CP) gforth gforth~ + $(GCC) $(LDFLAGS) $(OBJECTS) $(OBJECTS0) $(LDLIBS) -o $@ + @GFORTH_EXE@ + +gforth-ditc: engine_ditc + $(GCC) $(LDFLAGS) $(OBJECTS_DITC) $(OBJECTS0) $(LDLIBS) -o $@ + @GFORTHDITC_EXE@ + +# ------------- additional C primitives + +%.c: %.pri prim2cl.fs + $(FORTHK) prim2cl.fs -e "file $< altogether bye" >$@ + +%.so: %.c + $(GCC) -shared $(CFLAGS) $< -o $@ + +# ------------- Make Documentation + +#TAGS is a GNU standard target +TAGS: gforth.TAGS + $(CP) gforth.TAGS $@ + +gforth.TAGS: @kernel_fi@ gforth $(GFORTH_FI_SRC) prim.TAGS + $(FORTHK) etags.fs startup.fs -e bye + cat TAGS prim.TAGS kernel.TAGS >gforth.TAGS + rm TAGS + prim.TAGS: prim.b prims2x.fs $(FORTHK) prims2x.fs -e "s\" $(srcdir)/prim.b\" ' output-tag process-file bye" >$@- $(CP) $@- $@ $(RM) $@- -doc/doc.fd: doc/makedoc.fs $(GFORTH_FI_SRC) code.fs objects.fs - $(FORTHK) -e "s\" doc/doc.fd\"" doc/makedoc.fs startup.fs code.fs objects.fs -e bye +doc/doc.fd: doc/makedoc.fs $(GFORTH_FI_SRC) code.fs objects.fs oof.fs + $(FORTHK) -e "s\" doc/doc.fd\"" doc/makedoc.fs startup.fs code.fs objects.fs oof.fs -e bye doc/crossdoc.fd: $(KERN_SRC) kernel/version.fs $(FORTH_GEN0) $(FORTHK) -e 's" mach32l.fs"' kernel/main.fs -e bye @@ -603,11 +696,11 @@ config.status: configure #create files for DOS, because DOS cannot do it itself -makefile.dos: mkdosmf.sed Makefile.in +makefile.dos: mkdosmf.sed Makefile.in engine/Makefile.in sed -f mkdosmf.sed makefile.dos sed -f mkdosmf.sed engine/makefile.dos -makefile.os2: mkos2mf.sed Makefile.in +makefile.os2: mkos2mf.sed Makefile.in engine/Makefile.in sed -f mkos2mf.sed makefile.os2 sed -f mkos2mf.sed engine/makefile.os2 echo '%.o: %.c' >>makefile.os2 @@ -615,10 +708,13 @@ makefile.os2: mkos2mf.sed Makefile.in echo '%.o: %.c' >>engine/makefile.os2 echo ' $$(GCC) $$(CFLAGS) -c $$<' >>engine/makefile.os2 +# Garbage: +# to be deleted! + # history is a little bit different now! JAW -#history.dos: history.fs Makefile.in +# history.dos: history.fs Makefile.in # sed -e "s,~/\.gforth-history,/gforth.his,g" history.dos -startup.dos: startup.fs Makefile.in - sed -e "s/\\\\ include doskey/include doskey/g" \ - -e "s/include vt100key/\\\\ include vt100key/g" startup.dos +# startup.dos: startup.fs Makefile.in +# sed -e "s/\\\\ include doskey/include doskey/g" \ +# -e "s/include vt100key/\\\\ include vt100key/g" startup.dos