4.3BSD-UWisc/src/lib/pcc/Makefile

#
#	Makefile	1.13	86/03/11
#
# Makefile for PCC
#
# These symbols are used to configure the compiler:
#	ASSTRINGS	assembler handles string initializations
#	STABDOT		assembler understands .stabd
#	LCOMM		assembler supports .lcomm
#	FIXSTRUCT	no trickery (just output structure)
#
# Some symbols are specific to certain compilers:
#	ONEPASS		compile pass 1 and pass 2 together
#	SPRECC		do single precision in single not double
#	FORT		get f77-style pass 2
#
CONFIG=	-DASSTRINGS -DSTABDOT -DLCOMM "-DFIXSTRUCT=outstruct"
O = -O
CFLAGS = $(O) -I. -I$(M) $(CONFIG)

COPTS = -DONEPASS $(CFLAGS)
SCOPTS = -DONEPASS -DSPRECC $(CFLAGS)
FOPTS = -DFORT $(CFLAGS)
LDFLAGS =

RM=	/bin/rm -f
LN=	/bin/ln -s

SFILES=	strees.c slocal.c slocal2.c sallo.c sorder.c stable.c
SOBJS=	strees.o slocal.o slocal2.o sallo.o sorder.o stable.o
FFILES=	freader.c fallo.c fmatch.c ftable.c forder.c flocal2.c fcomm2.c
FOBJS=	freader.o fallo.o fmatch.o ftable.o forder.o flocal2.o fcomm2.o

P1INCS=	$M/pass1.h macdefs.h $M/manifest.h pcclocal.h $M/config.h $M/ndu.h \
	/usr/include/stdio.h
P1ONEP=	$(P1INCS) $M/onepass.h
P2INCS=	$M/pass2.h macdefs.h mac2defs.h $M/manifest.h pcclocal.h $M/config.h \
	$M/ndu.h /usr/include/stdio.h
P2ONEP=	$(P2INCS) $M/onepass.h

M=../mip
TESTDIR = .

all: ccom sccom f1

#
# 'ccom' is a one-pass C compiler.
#
ccom: rodata.o cgram.o xdefs.o scan.o pftn.o trees.o optim.o code.o local.o \
	reader.o local2.o order.o match.o allo.o comm1.o table.o stab.o
	$(CC) $(LDFLAGS) rodata.o cgram.o xdefs.o scan.o pftn.o trees.o \
		optim.o code.o local.o reader.o local2.o order.o match.o \
		allo.o comm1.o table.o stab.o -o $(TESTDIR)/ccom
trees.o: $(P1ONEP) $M/trees.c
	$(CC) -c $(COPTS) $M/trees.c
optim.o: $(P1ONEP) $M/optim.c
	$(CC) -c $(COPTS) $M/optim.c
pftn.o: $(P1ONEP) $M/pftn.c
	$(CC) -c $(COPTS) $M/pftn.c
code.o: $(P1ONEP) code.c
	$(CC) -c $(COPTS) code.c
local.o: $(P1ONEP) local.c
	$(CC) -c $(COPTS) local.c
scan.o: $(P1ONEP) $M/scan.c
	$(CC) -c $(COPTS) $M/scan.c
xdefs.o: $(P1ONEP) $M/xdefs.c
	$(CC) -c $(COPTS) $M/xdefs.c
cgram.o: $(P1ONEP) cgram.c
	$(CC) -c $(COPTS) cgram.c
rodata.o: rodata.c
	$(CC) -c $(COPTS) -R rodata.c
rodata.c cgram.c: $M/cgram.y pcctokens
	cat pcctokens $M/cgram.y > gram.in
	$(YACC) gram.in
	$(RM) rodata.c
	sh ./:yyfix yyexca yyact yypact yypgo yyr1 yyr2 yychk yydef
	mv y.tab.c cgram.c
comm1.o: $(P1ONEP) $M/common.c
	$(LN) $M/common.c comm1.c
	$(CC) -c $(COPTS) -DPASS1COMMON comm1.c
	$(RM) comm1.c
stab.o: $(P1ONEP) stab.c \
	/usr/include/stab.h /usr/include/a.out.h /usr/include/sys/types.h
	$(CC) -c $(COPTS) stab.c
table.o: $(P2ONEP) table.c
	$(CC) -c $(COPTS) -R table.c
reader.o: $(P2ONEP) $M/reader.c
	$(CC) -c $(COPTS) $M/reader.c
local2.o: $(P2ONEP) local2.c
	$(CC) -c $(COPTS) local2.c
order.o: $(P2ONEP) order.c
	$(CC) -c $(COPTS) order.c
match.o: $(P2ONEP) $M/match.c
	$(CC) -c $(COPTS) $M/match.c
allo.o: $(P2ONEP) $M/allo.c
	$(CC) -c $(COPTS) $M/allo.c

#
# 'sccom' is a C compiler that does single precision computations in
#	single precision rather than double precision.
#
sccom: rodata.o cgram.o xdefs.o scan.o pftn.o strees.o optim.o code.o slocal.o \
	reader.o slocal2.o sorder.o match.o sallo.o comm1.o stable.o stab.o
	$(CC) $(LDFLAGS) rodata.o cgram.o xdefs.o scan.o pftn.o strees.o \
		optim.o code.o slocal.o reader.o slocal2.o sorder.o match.o \
		sallo.o comm1.o stable.o stab.o -o $(TESTDIR)/sccom
strees.o: $(P1ONEP) $M/trees.c
	$(LN) $M/trees.c strees.c
	$(CC) -c $(SCOPTS) strees.c
	$(RM) strees.c
slocal.o: $(P1ONEP) local.c
	$(LN) local.c slocal.c
	$(CC) -c $(SCOPTS) slocal.c
	$(RM) slocal.c
slocal2.o: $(P2ONEP) local2.c
	$(LN) local2.c slocal2.c
	$(CC) -c $(SCOPTS) slocal2.c
	$(RM) slocal2.c
sallo.o: $(P2ONEP) $M/allo.c
	$(LN) $M/allo.c sallo.c
	$(CC) -c $(SCOPTS) sallo.c
	$(RM) sallo.c
sorder.o: $(P2ONEP) order.c
	$(LN) order.c sorder.c
	$(CC) -c $(SCOPTS) sorder.c
	$(RM) sorder.c
stable.o: $(P2ONEP) table.c
	$(LN) table.c stable.c
	$(CC) -c $(SCOPTS) -R stable.c
	$(RM) stable.c

#
# 'f1' is the f77 and pc code generator.
#
f1: fort.o freader.o fallo.o fmatch.o ftable.o forder.o flocal2.o \
	fcomm2.o
	$(CC) $(LDFLAGS) fort.o freader.o fallo.o fmatch.o ftable.o \
		forder.o flocal2.o fcomm2.o -o $(TESTDIR)/f1
fort.o: $(P2INCS) fort.h $M/fort.c
	$(CC) -c $(FOPTS) $M/fort.c
freader.o: $(P2INCS) $M/reader.c
	$(LN) $M/reader.c freader.c
	$(CC) -c $(FOPTS) freader.c
	$(RM) freader.c
fallo.o: $(P2INCS) $M/allo.c
	$(LN) $M/allo.c fallo.c
	$(CC) -c $(FOPTS) fallo.c
	$(RM) fallo.c
fmatch.o: $(P2INCS) $M/match.c
	$(LN) $M/match.c fmatch.c
	$(CC) -c $(FOPTS) fmatch.c
	$(RM) fmatch.c
ftable.o: $(P2INCS) table.c
	$(LN) table.c ftable.c
	$(CC) -c -R $(FOPTS) ftable.c
	$(RM) ftable.c
forder.o: $(P2INCS) order.c
	$(LN) order.c forder.c
	$(CC) -c $(FOPTS) forder.c
	$(RM) forder.c
flocal2.o: $(P2INCS) local2.c
	$(LN) local2.c flocal2.c
	$(CC) -c $(FOPTS) flocal2.c
	$(RM) flocal2.c
fcomm2.o: $(P2INCS) $M/common.c
	$(LN) $M/common.c fcomm2.c
	$(CC) -c $(FOPTS) -DPASS2COMMON fcomm2.c
	$(RM) fcomm2.c

install: all
	install -s ${TESTDIR}/ccom ${DESTDIR}/lib/ccom
	install -s ${TESTDIR}/sccom ${DESTDIR}/lib/sccom
	install -s ${TESTDIR}/f1 ${DESTDIR}/lib/f1

GREP=	egrep

pcclocal.h: localdefs.h /usr/include/pcc.h
	$(RM) pcclocal.h
	cat /usr/include/pcc.h localdefs.h | $(GREP) '^#[ 	]*(define[ 	][ 	]*PCC(F|T|TM|OM)?_|ifdef|ifndef|endif)' | sed -e 's/PCC[A-Z]*_//' > pcclocal.h 

pcctokens: localdefs.h /usr/include/pcc.h
	$(RM) pcctokens
	cat /usr/include/pcc.h localdefs.h | $(GREP) '^#[ 	]*define[ 	][ 	]*PCC_' | sed -e 's/^#[ 	]*define[ 	][ 	]*PCC_/%term	/' > pcctokens

DUMMIES=	$(SFILES) $(FFILES)

shrink:
	$(RM) *.o ccom sccom f1 $(DUMMIES)
clean:
	$(RM) *.o ccom sccom f1 cgram.c rodata.c pcctokens pcclocal.h gram.in $(DUMMIES)
sfix:
	$(RM) $(SFILES)
sclean:
	$(RM) $(SOBJS) $(SFILES)
ffix:
	$(RM) $(FFILES)
fclean:
	$(RM) $(FOBJS) $(FFILES)

lintall:
	lint -hax -I. -I$M  cgram.c $M/xdefs.c $M/scan.c $M/pftn.c \
		$M/trees.c $M/optim.c code.c local.c stab.c $M/reader.c \
		local2.c order.c $M/match.c $M/allo.c $M/comm1.c table.c