P	=	
DEST	=	/usr/local/lib
CC	=	CC
CPP	=	/lib/cpp
# Other interesting #defines:
#
#     TDEBUG        - used in process.c
#     PREEMPT_DEBUG - used in preempt.c
#     debug         - used in threads.c
#     THREAD_HAS_INTERRUPTIBLE_FIELD - used in swtch.s, preempt.c
#
DEFINES =  -DPRESTO -DPREEMPT -DTHREAD_HAS_INTERRUPTIBLE_FIELD -Dsun -Dmc68020
CFLAGS1 =	-g
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 =	

#
# Pepto srcs and headers.  
#
#CSRCFILES	=  shbrk.c smalloc.c SLOCK.c
#COBJFILES	=  shbrk.o shmalloc.o SLOCK.o
CSRCFILES	=  
COBJFILES	=  


SRCS	=	callstate.c	\
		debug.c		\
		locks.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	

OBJS	=	callstate.o	\
		debug.o		\
		locks.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		\
		$(COBJFILES)

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

THREADHDRS =	

presto:		$(LIBPRESTO) 
	
first:		straightc

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

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

lpr:		
		enscript -2rp - *[a-z].[chs] | lpr -Pchiron

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) -DTDEBUG $(CFLAGS) -c process.c

threads.o:	threads.c $(HDRS) $(THREADHDRS)
		$(CC) -Ddebug $(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.";
		@echo $(AS) swtch.s -o swtch.o
		@$(CPP) $(DEFINES) swtch.s > /tmp/swtch.out 
		@$(AS) -g /tmp/swtch.out -o swtch.o
		@rm /tmp/swtch.out

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  timer.h pstream.h
		$(CC) $(CFLAGS) -c timer.c

preempt.o:	preempt.c $(HDRS)
		$(CC) -DPREEMPT_DEBUG $(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 debug.h
		$(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/sun/parallel.h parallel.h

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