# This is the build template for ccomvax, the first pass of the VAX C compiler
TESTDIR = .
FRC =
O = -O
CFLAGS = -v${Xx}V ${O} -I../mi -I${M} -DASSTRINGS -DSTABDOT -DLCOMM -DBUFSTDERR -DFLEXNAMES \
    "-DFIXSTRUCT=outstruct"
LDFLAGS = -v${Xx}V

M=../../pccmip/mi
# all: ccomvax.$(MACHINE) fort.$(MACHINE)  not making f1 until f77 copy of sources is merged back
all: ccomvax.$(MACHINE)
ccomvax.$(MACHINE): rodata.$(OBJSUFFIX) cgram.$(OBJSUFFIX) xdefs.$(OBJSUFFIX) \
	 scan.$(OBJSUFFIX) pftn.$(OBJSUFFIX) trees.$(OBJSUFFIX) \
	 optim.$(OBJSUFFIX) code.$(OBJSUFFIX) local.$(OBJSUFFIX) \
	 reader.$(OBJSUFFIX) local2.$(OBJSUFFIX) order.$(OBJSUFFIX) \
	 match.$(OBJSUFFIX) allo.$(OBJSUFFIX) comm1.$(OBJSUFFIX) \
	 table.$(OBJSUFFIX) stab.$(OBJSUFFIX)
	$(CC) $(LDFLAGS) rodata.$(OBJSUFFIX) cgram.$(OBJSUFFIX) \
	 xdefs.$(OBJSUFFIX) scan.$(OBJSUFFIX) pftn.$(OBJSUFFIX) \
	 trees.$(OBJSUFFIX) optim.$(OBJSUFFIX) code.$(OBJSUFFIX) \
	 local.$(OBJSUFFIX) reader.$(OBJSUFFIX) local2.$(OBJSUFFIX) \
	 order.$(OBJSUFFIX) match.$(OBJSUFFIX) allo.$(OBJSUFFIX) \
	 comm1.$(OBJSUFFIX) table.$(OBJSUFFIX) stab.$(OBJSUFFIX) \
	 -o $(TESTDIR)/ccomvax.${MACHINE}
trees.$(OBJSUFFIX): $M/manifest macdefs $M/mfile1 $M/trees.c
	$(CC) -c $(CFLAGS) -I$M -I.  $M/trees.c
optim.$(OBJSUFFIX): $M/manifest macdefs $M/mfile1 $M/optim.c
	$(CC) -c $(CFLAGS) -I$M -I. $M/optim.c
pftn.$(OBJSUFFIX): $M/manifest macdefs $M/mfile1 $M/pftn.c
	$(CC) -c $(CFLAGS) -I$M -I. $M/pftn.c
code.$(OBJSUFFIX): $M/manifest macdefs $M/mfile1
	$(CC) -c $(CFLAGS) -I$M -I. code.c
local.$(OBJSUFFIX): $M/manifest macdefs $M/mfile1
	$(CC) -c $(CFLAGS) -I$M -I. local.c
scan.$(OBJSUFFIX): $M/manifest macdefs $M/mfile1 $M/scan.c
	$(CC) -c $(CFLAGS) -I$M -I. $M/scan.c
xdefs.$(OBJSUFFIX): $M/manifest $M/mfile1 macdefs $M/xdefs.c
	$(CC) -c $(CFLAGS) -I$M -I. $M/xdefs.c
cgram.$(OBJSUFFIX): $M/manifest $M/mfile1 macdefs cgram.c
	$(CC) -c $(CFLAGS) -I$M -I. cgram.c
rodata.$(OBJSUFFIX): rodata.c
	$(CC) $(CFLAGS) -S rodata.c
	sh ./:rofix rodata.s
	$(AS) -o rodata.$(OBJSUFFIX) rodata.s
	rm -f rodata.s
rodata.c cgram.c: ../mi/y.tab.c
	rm -f rodata.c cgram.c y.tab.c
	cp ../mi/y.tab.c y.tab.c.tmp
# :yyfix moves some data from y.tab.c to rodata.c
	sh ../mi/:yyfix yyexca yyact yypact yypgo yyr1 yyr2 yychk yydef
	mv y.tab.c.tmp cgram.c

# make one copy of y.tab.c in ../mi (since it's machine-independent)
# so we don't have to run yacc separately for each target machine
../mi/y.tab.c: $M/cgram.y
	$(YACC) $M/cgram.y
	rm -f ../mi/y.tab.c
	mv y.tab.c ../mi/y.tab.c
comm1.$(OBJSUFFIX): $M/manifest $M/mfile1 $M/common macdefs $M/comm1.c
	$(CC) -c $(CFLAGS) -I$M -I. $M/comm1.c
table.$(OBJSUFFIX): $M/manifest $M/mfile2 mac2defs macdefs table.c
	$(CC) $(CFLAGS) -S -I$M -I. table.c
	sh ./:rofix table.s
	$(AS) -o table.$(OBJSUFFIX) table.s
	rm -f table.s
stab.$(OBJSUFFIX): $M/manifest $M/mfile1 $M/common macdefs stab.c
	$(CC) -c $(CFLAGS) -I$M -I. stab.c
reader.$(OBJSUFFIX): $M/manifest $M/mfile2 mac2defs macdefs $M/reader.c
	$(CC) -c $(CFLAGS) -I$M -I. $M/reader.c
local2.$(OBJSUFFIX): $M/manifest $M/mfile2 mac2defs macdefs
	$(CC) -c $(CFLAGS) -I$M -I. local2.c
order.$(OBJSUFFIX): $M/manifest $M/mfile2 mac2defs macdefs
	$(CC) -c $(CFLAGS) -I$M -I. order.c
match.$(OBJSUFFIX): $M/manifest $M/mfile2 mac2defs macdefs $M/match.c
	$(CC) -c $(CFLAGS) -I$M -I. $M/match.c
allo.$(OBJSUFFIX): $M/manifest $M/mfile2 mac2defs macdefs $M/allo.c
	$(CC) -c $(CFLAGS) -I$M -I. $M/allo.c
shrink:
	rm *.$(OBJSUFFIX) ccomvax.$(MACHINE)
clean:
	rm -f *.$(OBJSUFFIX) ccomvax.$(MACHINE) fort cgram.c rodata.c \
	 y.tab.c.tmp
lintall:
	lint -hpv -I. -I$M  $M/cgram.c $M/xdefs.c $M/scan.c $M/pftn.c \
		$M/trees.c $M/optim.c code.c local.c $M/reader \
		local2.c order.c $M/match.c $M/allo.c $M/comm1.c table.c
fort: ccomvax.$(MACHINE) fort.$(OBJSUFFIX) freader.$(OBJSUFFIX) \
	 fallo.$(OBJSUFFIX) fmatch.$(OBJSUFFIX) ftable.$(OBJSUFFIX) \
	 forder.$(OBJSUFFIX) flocal2.$(OBJSUFFIX) fcomm2.$(OBJSUFFIX)
	@echo "f1 is usually made from sources in /usr/src/usr.lib/f77 ..."
	$(CC) -z $(CFLAGS) fort.$(OBJSUFFIX) freader.$(OBJSUFFIX) \
	 fallo.$(OBJSUFFIX) fmatch.$(OBJSUFFIX) ftable.$(OBJSUFFIX) \
	 forder.$(OBJSUFFIX) flocal2.$(OBJSUFFIX) fcomm2.$(OBJSUFFIX) \
	 -o $(TESTDIR)/fort
fort.$(OBJSUFFIX): fort.h $M/fort.c
	$(CC) -c $(CFLAGS) -I$M -I. $M/fort.c
freader.$(OBJSUFFIX): reader.$(OBJSUFFIX)
	$(CC) -c $(CFLAGS) -I$M -I. $M/freader.c
fallo.$(OBJSUFFIX): allo.$(OBJSUFFIX)
	$(CC) -c $(CFLAGS) -I$M -I. $M/fallo.c
fmatch.$(OBJSUFFIX): match.$(OBJSUFFIX)
	$(CC) -c $(CFLAGS) -I$M -I. $M/fmatch.c
ftable.$(OBJSUFFIX): table.$(OBJSUFFIX)
	$(CC) -c -R $(CFLAGS) -I$M -I. $M/ftable.c
forder.$(OBJSUFFIX): order.$(OBJSUFFIX)
	$(CC) -c $(CFLAGS) -I$M -I. $M/forder.c
flocal2.$(OBJSUFFIX): local2.$(OBJSUFFIX)
	$(CC) -c $(CFLAGS) -I$M -I. $M/flocal2.c
fcomm2.$(OBJSUFFIX): $M/common
	$(CC) -c $(CFLAGS) -I$M -I. $M/fcomm2.c
fort.$(OBJSUFFIX) freader.$(OBJSUFFIX) fallo.$(OBJSUFFIX) fmatch.$(OBJSUFFIX) \
	 ftable.$(OBJSUFFIX) forder.$(OBJSUFFIX) flocal2.$(OBJSUFFIX) \
	 fcomm2.$(OBJSUFFIX): \
	$M/mfile2 $M/manifest macdefs mac2defs
install:        all
	$(NETINSTALL) -p "$(TESTDIR)/ccomvax.$(MACHINE)" $(VSYS)/run/cc
#	$(NETINSTALL) -p "$(TESTDIR)/lib/f1.$(MACHINE)" $(VSYS)/run/fortran
