#ident "@(#)makefile	35.1       88/08/26     "
#ident "Copyright (c) 1984 AT&T, INC. and MOTOROLA, INC."
#
#	MC68000 PCC2 TWOPASS MAKEFILE
#		PROCESSOR must be set to M68000, M68010, or M68020
#
#
ROOT=	

BINDIR=	$(ROOT)/bin
LIBDIR=	$(ROOT)/lib

BASE= ../..

COM=        ../common
# Directory for sdb.h
SDBINC=	.

FLEX=	-DFLEXNAMES

SGS=                    #prefix
OWN=	bin		#file owner
GRP=	bin		#file group
PROT=	775		#protections
CC=	cc
LINT=	lint
LFLAGS=	-p
CFLAGS=	-O
YACC=	yacc
M68881= -DM68881
#
STRIP=strip
SPFLAGS=
STRIP_CMD=$(STRIP) $(SPFLAGS)
#
INCLIST=        -I. -I $(COM) -I$(SDBINC)
#
#	conditional compilation variables are declared 
#	in the DEFLIST and are passed to cpp.
#
#	variables:
#		STKCK	- causes inclusion of code to generate
#			  stack fault preclusion code at function
#			  entry.  targeted for MC68000.
#
#		PROFILE - causes inclusion of profiling code -
#			  conditional compilation can be removed if desired.
#
#		TWOPASS - causes inclusion of code when defined
#			  to generate two pass compiler.  this "#undef"s
#			  ONEPASS in macdefs.h.  if not defined, a one
#			  pass compiler is created.
#
#               ITREES  - Use icon based passing to pass all information
#			  to the back end.
#

ODEFLIST=	-DSTKCK -DPROFILE
DEFLIST=	$(FLEX) -Dm68k
TWOPASS=	-DTWOPASS -DITREES
LDFLAGS=
YFLAGS=
#
# IMPORTANT NOTE FOR 68020 USERS: If you ever intend on setting the FPU
# environment variable to M68881, then you had better generate the compiler
# with FPU=M68881 set below. The conservative approach would be to always
# define FPU to M68881 when generating a 68020 compiler.
#
#FPU=NOFPU	# for 68000 and 68010 compilers (default case)
FPU=M68881      # for 68020/881 support (set the FPU environ variable)
#
CC_CMD=$(CC) -c $(CFLAGS) $(INCLIST) $(DEFLIST) $(ODEFLIST) $(TWOPASS) \
       -D$(PROCESSOR) -D$(FPU)
YACC_CMD=	$(YACC) $(YFLAGS)


# OFILES= cgram.o xdefs.o scan.o pftn.o trees.o optim.o local.o reader.o\
	local2.o debug.o match.o allo.o comm1.o tablea.o tableb.o cost.o \
	cgen.o
# CFILES= $(COM)/cgram.c $(COM)/xdefs.c $(COM)/scan.c $(COM)/pftn.c \
	$(COM)/cgen.c $(COM)/cost.c $(COM)/trees.c  $(COM)/optim.c  local.c \
	$(COM)/reader.c   local2.c   debug.c  $(COM)/match.c  $(COM)/allo.c \
        $(COM)/comm1.c tablea.c tableb.c

C0_OFILES= trees.o scan.o cgram.o xdefs.o pftn.o optim.o local.o comm1.o \
		debug.o xdefs.o

C0_CFILES=  $(COM)/trees.c  $(COM)/scan.c $(COM)/cgram.c  $(COM)/xdefs.c \
	$(COM)/pftn.c    $(COM)/optim.c   $(COM)/comm1.c  $(COM)/xdefs.c \
        debug.c local.c

C1_OFILES= reader.o local2.o match.o allo.o comm2.o tablea.o tableb.o\
	cgen.o cost.o xdefs.o

C1_CFILES=  $(COM)/reader.c  $(COM)/match.c  $(COM)/allo.c $(COM)/comm2.c \
	$(COM)/cgen.c   $(COM)/cost.c  $(COM)/xdefs.c  local2.c  tablea.c \
	tableb.c

all : cpu build

cpu :
	if [ ! -f t.$(PROCESSOR) ] ; then make clobber; fi
	touch t.$(PROCESSOR)

build:  $(SGS)c0 $(SGS)c1
#-------------------------

$(SGS)c0:     $(C0_OFILES)
		$(CC) $(CFLAGS) $(LDFLAGS) -o $(SGS)c0 $(C0_OFILES)

$(SGS)c1:     $(C1_OFILES)
		$(CC) $(CFLAGS) $(LDFLAGS) -o $(SGS)c1 $(C1_OFILES)

sty: $(COM)/manifest.h $(COM)/sty.y macdefs.h $(COM)/mfile2.h $(COM)/common
		-@echo "Expect 3 reduce/reduce conflicts"
		$(YACC_CMD) $(COM)/sty.y
	#
	# always use the resident compiler to generate sty.
	# whether generating a cross-compiler or a resident
	# on a non-target machine.
	#
		PROCESSOR=M68020 /bin/cc $(CFLAGS) $(LDFLAGS) -I. -I$(COM) \
			-o sty y.tab.c $(COM)/shptbl.c
		rm y.tab.c

trees.o:  $(COM)/manifest.h   macdefs.h   $(COM)/mfile1.h   $(SDBINC)/sdb.h \
	  $(COM)/trees.c
	$(CC_CMD) $(COM)/trees.c

optim.o:  $(COM)/manifest.h   macdefs.h   $(COM)/mfile1.h   $(SDBINC)/sdb.h \
	  $(COM)/optim.c
		$(CC_CMD) $(COM)/optim.c

pftn.o:   $(COM)/manifest.h   macdefs.h   $(COM)/mfile1.h   $(SDBINC)/sdb.h \
	  $(COM)/pftn.c
		$(CC_CMD) $(COM)/pftn.c

local.o:        $(COM)/manifest.h macdefs.h $(COM)/mfile1.h $(SDBINC)/sdb.h
		$(CC_CMD) local.c

scan.o:   $(COM)/manifest.h   macdefs.h   $(COM)/mfile1.h   $(SDBINC)/sdb.h \
	  $(COM)/scan.c
		$(CC_CMD) $(COM)/scan.c

xdefs.o:  $(COM)/manifest.h   $(COM)/mfile1.h   $(SDBINC)/sdb.h   macdefs.h \
	  $(COM)/xdefs.c
		$(CC_CMD) $(COM)/xdefs.c

cgram.o:  $(COM)/manifest.h   $(COM)/mfile1.h   $(SDBINC)/sdb.h   macdefs.h \
	  $(COM)/cgram.c
		$(CC_CMD) $(COM)/cgram.c

$(COM)/cgram.c:     $(COM)/cgram.y
		-@echo "Expect 6 shift/reduce conflicts"
		$(YACC_CMD) $(COM)/cgram.y
		mv y.tab.c $(COM)/cgram.c

comm1.o: $(COM)/manifest.h $(COM)/mfile1.h $(SDBINC)/sdb.h $(COM)/common  \
                        macdefs.h $(COM)/comm1.c
		$(CC_CMD) $(COM)/comm1.c

comm2.o: $(COM)/manifest.h $(COM)/mfile2.h $(SDBINC)/sdb.h $(COM)/common  \
                        macdefs.h $(COM)/comm2.c
		$(CC_CMD) $(COM)/comm2.c

tablea.o:       $(COM)/manifest.h $(COM)/mfile2.h macdefs.h tablea.c
		$(CC_CMD) tablea.c

tableb.o:	tablea.o
		$(CC_CMD) tableb.c

stinb: stin sty
		/usr/bin/vc proc=$(PROCESSOR) < stin > stinb

tablea.c tableb.c: sty stinb
		-@echo "Expect several \"... may be covered by ...\" messages"
		./sty < stinb

cost.o:         $(COM)/manifest.h $(COM)/mfile2.h macdefs.h $(COM)/cost.c
		$(CC_CMD) $(COM)/cost.c

cgen.o:         $(COM)/manifest.h $(COM)/mfile2.h macdefs.h $(COM)/cgen.c
		$(CC_CMD) $(COM)/cgen.c

reader.o:       $(COM)/manifest.h $(COM)/mfile2.h macdefs.h $(COM)/reader.c
		$(CC_CMD) $(COM)/reader.c

local2.o:       $(COM)/manifest.h $(COM)/mfile2.h macdefs.h local2.c
		$(CC_CMD) local2.c

debug.o:        $(COM)/mfile1.h macdefs.h $(ROOT)/usr/include/storclass.h
		$(CC_CMD) debug.c

match.o:   $(COM)/manifest.h   $(COM)/mfile2.h   macdefs.h   $(COM)/match.c \
	   $(SDBINC)/sdb.h
		$(CC_CMD) $(COM)/match.c

allo.o:         $(COM)/manifest.h $(COM)/mfile2.h macdefs.h $(COM)/allo.c
		$(CC_CMD) $(COM)/allo.c

#-------------------------

install:        $(SGS)c0 $(SGS)c1
	-rm -f $(LIBDIR)/$(SGS)c0 $(LIBDIR)/$(SGS)c1
	cp $(SGS)c0 $(SGS)c0.bak
	-$(STRIP_CMD) $(SGS)c0
	sh $(BASE)/sgs.install $(PROT) $(OWN) $(GRP) $(LIBDIR)/$(SGS)c0 $(SGS)c0
	mv $(SGS)c0.bak $(SGS)c0
	cp $(SGS)c1 $(SGS)c1.bak
	-$(STRIP_CMD) $(SGS)c1
	sh $(BASE)/sgs.install $(PROT) $(OWN) $(GRP) $(LIBDIR)/$(SGS)c1 $(SGS)c1
	mv $(SGS)c1.bak $(SGS)c1

#--------------------------

save:   $(LIBDIR)/$(SGS)c0 $(LIBDIR)/$(SGS)c1
	-rm -f $(LIBDIR)/$(SGS)c0.bak $(LIBDIR)/$(SGS)c1.bak
	cp $(LIBDIR)/$(SGS)c0 $(LIBDIR)/$(SGS)c0.bak
	cp $(LIBDIR)/$(SGS)c1 $(LIBDIR)/$(SGS)c1.bak

#--------------------------

uninstall:      $(LIBDIR)/$(SGS)c0.bak $(LIBDIR)/$(SGS)c1.bak
		-rm -f $(LIBDIR)/$(SGS)c0 $(LIBDIR)/$(SGS)c1
		cp $(LIBDIR)/$(SGS)c0.bak $(LIBDIR)/$(SGS)c0
		cp $(LIBDIR)/$(SGS)c1.bak $(LIBDIR)/$(SGS)c1

#--------------------------

clean:
	-rm -f $(C0_OFILES) $(C1_OFILES) t.M680?0 stinb

#--------------------------

clobber shrink:	clean
	-rm -f $(SGS)c0 $(SGS)c1 table*.c \
			sty shptbl.o y.tab.o $(COM)/cgram.c

#--------------------------

lint:	$(C0_CFILES) $(C1_CFILES)
	$(LINT) $(LFLAGS) -I. -I$(COM) -I$(SDBINC) $(C0_CFILES) $(C1_CFILES) \
		>lint.out

#--------------------------
DEFS=$(DEFLIST) $(ODEFLIST) $(TWOPASS) -D$(PROCESSOR) -D$(FPU)

cxref0: $(C0_CFILES)
	cxref -c -I. -I$(COM) -I$(SDBINC) $(DEFS) $(C0_CFILES) -o $(SGS)c0.xref

cxref1: $(C1_CFILES)
	cxref -c -I. -I$(COM) -I$(SDBINC) $(DEFS) $(C1_CFILES) -o $(SGS)c1.xref

cxref: cxref0 cxref1

#--------------------------
C0_CFILES2= $(COM)/trees.c $(COM)/scan.c  $(COM)/cgram.y  $(COM)/xdefs.c  \
        $(COM)/pftn.c   $(COM)/optim.c   $(COM)/comm1.c   $(COM)/xdefs.c  \
        debug.c local.c

cflow0:	$(C0_CFILES2)
	cflow -r -I. -I$(COM) -I$(SDBINC) $(DEFS) $(C0_CFILES) >$(SGS)c0.cflow

cflow1:	$(C1_CFILES)
	cflow -r -I. -I$(COM) -I$(SDBINC) $(DEFS) $(C1_CFILES) >$(SGS)c1.cflow

cflow: cflow0 cflow1

