# SCCSID: @(#)makefile 3.1 10/9/87 # ###################################################################### # Copyright (c) Digital Equipment Corporation 1984, 1985, 1986. # # All Rights Reserved. # # Reference "/usr/src/COPYRIGHT" for applicable restrictions. # ###################################################################### # # Makefile for a Fortran 77 compiler # running on the PDP11, generating code for the PDP11, # using the second pass of the Ritchie C compiler as code generator. SOURCES = fltused.s main.c init.c lex.c proc.c equiv.c data.c \ expr.c exec.c intr.c io.c misc.c error.c put.c \ putdmr.c pdp11.c pdp11x.c gram.head gram.dcl gram.expr \ gram.exec gram.io driver.c fio.h DEFS = _expr.fix _gram.fix _intr.fix datatotext _putdmr.fix \ defines defs dmrdefs drivedefs dofix ftypes pdp11defs tokens OBJECTS = fltused.o main.o init.o gram.o lex.o proc.o equiv.o data.o \ expr.o exec.o intr.o io.o misc.o error.o put.o \ putdmr.o pdp11.o pdp11x.o OVOBJ = gram.z misc.z lex.z fltused.o main.z init.z proc.z equiv.z \ data.z expr.z exec.z intr.z io.z put.z error.z\ putdmr.z pdp11.z pdp11x.z ARCHOBJ= fopen.o fprintf.o sprintf.o ungetc.o filbuf.o doprnt.o strout.o \ flsbuf.o findiop.o atof.o calloc.o malloc.o ARCH2OBJ= ffltpr.o CFL = -DHERE=PDP11 -DTARGET=PDP11 -DFAMILY=DMR -DOVERLAY # used by driver.o (/usr/bin/f77 part) CFLAGS = -O ${CFL} # "-DOVOPT" automatically defines "-DDOSTRINGS", which allows # mkstr to be run using references to /usr/lib/f77_strings for # error(). For SID version, just define "-DDOSTRINGS", since # text space is at a premium there. OVCFL = -N -O ${CFL} -DOVOPT # used by other Split I & D '.o' files: CFLAGS+STR = ${CFLAGS} -DDOSTRINGS AS = as -V - LDFLAGS = -i LIB = ${DESTDIR}/usr/lib BIN = ${DESTDIR}/usr/bin .SUFFIXES: .SUFFIXES: .o .z .c .s all: f77 F77pass1 F77pass1ov ${SOURCES} ${DEFS}: sccs get $@ sources: ${SOURCES} compiler: f77 f77pass1 touch compiler f77: driver.o pdp11x.o cc -n driver.o pdp11x.o -o f77 size f77 @echo driver.o: driver.c ${CC} ${CFLAGS} -c driver.c pdp11x.o: pdp11x.c ${CC} ${CFLAGS} -c pdp11x.c f77pass1: warning @true F77pass1: ${OBJECTS} sid_xs.o @echo LOAD ${CC} ${LDFLAGS} ${OBJECTS} sid_xs.o -o f77pass1 size f77pass1 @echo f77pass1id: f77pass1 F77pass1id: F77pass1 f77pass1ov: warning @true # WARNING: If f77_strings (error) file does not exist, and the overlay version # is made without first making the Split I & D version, then string pointers # will be bogus for SID version, since order of extraction is different if # OVERLAY version is compiled with an initially empty f77_strings. You MUST # make SID version, then leave f77_strings there for OVERLAY version to access. # All of this would be unnecessary if the order of the build for objects was # the same. warning: @(echo "You MUST make both versions of the compiler sequentially,") @(echo "because a common f77_strings file is generated. You can't") @(echo "build one piece; type \"make all\" so you build it right."); F77pass1ov: ${OVOBJ} ${ARCHOBJ} ${ARCH2OBJ} xs.o @echo LOAD /usr/local/calcov -a -n -o f77pass1ov -B xs.o ${ARCH2OBJ} -Z ${OVOBJ} ${ARCHOBJ} size f77pass1ov @echo gram.c: gram.head gram.dcl gram.expr gram.exec gram.io tokdefs ( sed <tokdefs "s/#define/%token/" ;\ cat gram.head gram.dcl gram.expr gram.exec gram.io ) >gram.in ${YACC} ${YFLAGS} gram.in @echo "(expect 4 shift/reduce)" mv y.tab.c gram.c rm gram.in tokdefs: tokens grep -n . <tokens | sed "s/\([^:]*\):\(.*\)/#define \2 \1/" >tokdefs machdefs: pdp11defs cp pdp11defs machdefs install: all cp f77 ${BIN}/f77 -strip ${BIN}/f77 chmod 755 ${BIN}/f77 chog bin ${BIN}/f77 cp f77pass1 f77pass1ov f77_strings ${LIB} cp f77pass1 ${LIB}/f77pass1id -strip ${LIB}/f77pass1 ${LIB}/f77pass1id ${LIB}/f77pass1ov chmod 755 ${LIB}/f77pass1 ${LIB}/f77pass1id ${LIB}/f77pass1ov chmod 444 ${LIB}/f77_strings chog bin ${LIB}/f77pass1 ${LIB}/f77pass1id ${LIB}/f77pass1ov chog bin ${LIB}/f77_strings make clean ${ARCHOBJ} ${ARCH2OBJ}: /lib/libc.a ar x /lib/libc.a $@ xs.c: xstr @mv strings strings.OV @cat /dev/null > strings xs.o: datatotext cc -S -O xs.c ed - xs.s <datatotext as - -V -o xs.o xs.s @rm xs.s # note: above xs.c depends on "strings" also... sid_xs.c: xstr mv xs.c sid_xs.c @mv strings strings.ID @cat /dev/null > strings sid_xs.o: cc -S -O sid_xs.c as - -V -o sid_xs.o sid_xs.s @rm sid_xs.s # Fun, fun, fun. Run the pre-processor to get error() subbed in, # run mkstr to remove the error messages, run xstr to remove # any other strings, then compile to assembly, then do any # assembly tweeking that is left, and finally assemble it # and remove all the tmp files. (whew!) .c.z: dofix ${CC} -E ${OVCFL} $< >$*.i mkstr - f77_strings x $*.i xstr -c - < x$*.i ${CC} -S ${OVCFL} x.c mv x.s $*.s @sh dofix $* ${AS} -o $*.z $*.s rm -f $*.i x$*.i x.c $*.s @echo error.z: error.c ${CC} -S ${OVCFL} error.c ${AS} -o error.z error.s @rm error.s @echo # SID version with error strings extracted (mkstr part) .c.o: ${CC} -E ${CFLAGS+STR} $< >$*.i mkstr - f77_strings x $*.i # don't really need to run xstr, but no way around it here... xstr -c - < x$*.i ${CC} -S -O x.c mv x.s $*.s ${AS} -o $*.o $*.s rm -f $*.i x$*.i x.c $*.s @echo error.o: error.c ${CC} -S ${CFLAGS+STR} error.c ${AS} -o error.o error.s @rm error.s @echo clean: rm -f f77 f77pass1 f77pass1ov f77_strings strings strings.OV strings.ID rm -f machdefs gram.c tokdefs compiler sid_xs.c xs.c log core a.out rm -f *.o ${OVOBJ} cat /dev/null > strings clobber: clean sccs clean data.o data.z: defs ftypes defines machdefs driver.o: defines machdefs drivedefs ftypes equiv.o equiv.z: defs ftypes defines machdefs error.o error.z: defs ftypes defines machdefs exec.o exec.z: defs ftypes defines machdefs expr.o expr.z: defs ftypes defines machdefs init.o init.z: defs ftypes defines machdefs intr.o intr.z: defs ftypes defines machdefs io.o io.z: defs ftypes defines machdefs lex.o lex.z: defs ftypes defines machdefs tokdefs main.o main.z: defs ftypes defines machdefs misc.o misc.z: defs ftypes defines machdefs pdp11.o pdp11.z: defs ftypes defines machdefs dmrdefs pdp11x.o pdp11x.z: defines machdefs proc.o proc.z: defs ftypes defines machdefs machdefs put.o put.z: defs ftypes defines machdefs dmrdefs putdmr.o putdmr.z: defs ftypes defines machdefs dmrdefs ${OVOBJ}: dofix expr.z: _expr.fix gram.z: _gram.fix intr.z: _intr.fix putdmr.z: _putdmr.fix tags: ${SOURCES} ctags ${SOURCES} sccsinfo: sccs info