P	=
DEST	=	/usr/local/lib
CC	=	CC
CPP	=	/lib/cpp
#DEFINES =	-DPRESTO -DPREEMPT -Ddebug
DEFINES =	-DPRESTO -DPREEMPT
#DEFINES =	-DPRESTO
CFLAGS1 =	-g
#CFLAGS  =	+i $(DEFINES) $(CFLAGS1)
CFLAGS  =	$(DEFINES) $(CFLAGS1)
LIBPRESTO =	./libpresto.a			# normal
LIBPRESTO_P =	./libpresto_p.a			# profiling in ..c
LIBPRESTO_O =	./libpresto_o.a			# optimized with -O flag
LIBPRESTO_C =	./libpresto_c.a			# no profiling in ..c
LDFLAGS =

#
# Presto srcs and headers.  
#
CSRCFILES	=  shmalloc.c
COBJFILES	=  shmalloc.o

SRCS	=	callstate.c	\
		debug.c		\
		main_init.c	\
		main_main.c	\
		main_done.c	\
		misc.c		\
		objects.c	\
		preempt.c	\
		presto.c	\
		process.c	\
		pstream.c	\
		scheduler.c	\
		scheduler_sig.c	\
		spinlock.c	\
		stack.c		\
		swtch.s		\
		synchro.c	\
		threads.c	\
		timer.c		\
		vax_lock.s	\
		locks.c


OBJS	=	callstate.o	\
		debug.o		\
		main_init.o	\
		main_main.o	\
		main_done.o	\
		misc.o		\
		objects.o	\
		preempt.o	\
		presto.o	\
		process.o	\
		pstream.o	\
		scheduler.o	\
		scheduler_sig.o	\
		spinlock.o	\
		stack.o		\
		swtch.o		\
		synchro.o	\
		threads.o	\
		timer.o		\
		vax_lock.o	\
		locks.o		\
		$(COBJFILES)

HDRS	=	debug.h		\
		defs.h		\
		callstate.h	\
		locks.h		\
		machdep.h 	\
		objects.h 	\
		process.h 	\
		pstream.h	\
		scheduler.h 	\
		spinlock.h 	\
		spinlock_impl.h	\
		synchro.h 	\
		threads.h 	\
		threadq.h	\
		timer.h		\
		main.h		\
		stack.h

THREADHDRS =	

presto:		$(LIBPRESTO)
	
first:		straightc

all:$(P)		$(LIBPRESTO) profile straightc

$(LIBPRESTO):$(P)	$(OBJS)
		ar rv $(LIBPRESTO) $(OBJS)
		ranlib $(LIBPRESTO)

lpr:		
		pr `echo $(HDRS) $(THREADHDRS) $(SRCS) | tr ' ' '\012' | sort ` | rsh june lpr -Plpbeaver

optimized:;
		(cd Optimized; make _optimized "CFLAGS1=-O")

_optimized:	$(LIBPRESTO_O)
$(LIBPRESTO_O):	  	$(OBJS)
		ar rv $(LIBPRESTO_O) $(OBJS)
		ranlib $(LIBPRESTO_O)

profile:;
		(cd Profile; make _profile "CFLAGS1=-pg -g")

_profile:	$(LIBPRESTO_P)
$(LIBPRESTO_P):	  	$(OBJS)
		ar rv $(LIBPRESTO_P) $(OBJS)
		ranlib $(LIBPRESTO_P)

cleanlinks:	clean
		rm -f libpresto.a
		rm -f *.h *.c *.s

install: presto
	cp ${LIBPRESTO} ${DEST}; ranlib ${DEST}/${LIBPRESTO}

#	Make a ..c version
straightc:;
		(cd StraightC; make _straightc "CFLAGS1=+i -g")

_straightc:	$(LIBPRESTO_C)
$(LIBPRESTO_C):	  	$(OBJS)
		ar rv $(LIBPRESTO_C) $(OBJS)
		ranlib $(LIBPRESTO_C)

#
# run this to set up Profile and StraightC directories with
# symlinks to everything in the source directories
#
#links:;		./makelinks

## Global
## Dependencies
shmalloc.o:	shmalloc.c
		cc $(CFLAGS) -c shmalloc.c 

shbrk.o:	shbrk.c
		cc $(CFLAGS) -c shbrk.c

SLOCK.o:	SLOCK.c
		cc $(CFLAGS) -c SLOCK.c

objects.o:	objects.c $(HDRS)
		$(CC) $(CFLAGS) -c objects.c

process.o:	process.c $(HDRS)
		$(CC) $(CFLAGS) -c process.c

threads.o:	threads.c $(HDRS) $(THREADHDRS)
		$(CC) $(CFLAGS) -c threads.c

locks.o:	locks.c $(HDRS) locks.h
		$(CC) $(CFLAGS) -c locks.c

swtch.o:	swtch.s threads.h objects.h
		echo "Warning: swtch.o is being recompiled.  Check headers."; \
		$(CPP) $(DEFINES) swtch.s | $(AS) -o swtch.o

vax_lock.o:	vax_lock.s
		$(CPP) $(DEFINES) vax_lock.s | $(AS) -o vax_lock.o

stack.o:	$(HDRS) stack.h 
		$(CC) $(CFLAGS) -c stack.c

callstate.o:	callstate.c $(HDRS) 
		$(CC) $(CFLAGS) -c callstate.c

scheduler.o:	scheduler.c $(HDRS)
		$(CC) $(CFLAGS) -c scheduler.c

scheduler_sig.o:	scheduler_sig.c $(HDRS)
		$(CC) $(CFLAGS) -c scheduler_sig.c
		
synchro.o:	synchro.c $(HDRS)
		$(CC) $(CFLAGS) -c synchro.c

#
# the guy with the +e1 must include all header files with virtual funcs
# in them so we get an emission for the vtbls.
#
presto.o:	presto.c $(HDRS) presto.h callstate.h
		$(CC) $(CFLAGS) -c presto.c

misc.o:		misc.c $(HDRS) presto.h
		$(CC) $(CFLAGS) -c misc.c

pstream.o:	pstream.c pstream.h
		$(CC) $(CFLAGS) -c pstream.c

timer.o:		timer.c  $(HDRS)
		$(CC) $(CFLAGS) -c timer.c

preempt.o:	preempt.c $(HDRS)
		$(CC) $(CFLAGS) -c preempt.c

spinlock.o:	spinlock.c $(HDRS)
		$(CC) $(CFLAGS) -c spinlock.c

main_init.o:	main_init.c $(HDRS)
		$(CC) $(CFLAGS) -c main_init.c
main_main.o:	main_main.c $(HDRS)
		$(CC) $(CFLAGS) -c main_main.c
main_done.o:	main_done.c $(HDRS)
		$(CC) $(CFLAGS) -c main_done.c
debug.o:	debug.c $(HDRS)
		$(CC) $(CFLAGS) -c debug.c

links:
		-../genlinks
		-ln -s ../src/unix/preempt.c preempt.c
		-ln -s ../src/unix/process.c process.c
		-ln -s ../src/unix/process.h process.h
		-ln -s ../src/unix/scheduler_sig.c scheduler_sig.c
		-ln -s ../src/unix/timer.c timer.c
		-ln -s ../src/unix/asmdefs.h asmdefs.h
		-ln -s ../src/vax/vax_lock.s vax_lock.s

clean:
	-rm -f *.o *.out core *..c *.dis makelinks
