# $Copyright:	$
# Copyright (c) 1984, 1985, 1986, 1987 Sequent Computer Systems, Inc.
# All rights reserved
#  
# This software is furnished under a license and may be used
# only in accordance with the terms of that license and with the
# inclusion of the above copyright notice.   This software may not
# be provided or otherwise made available to, or used by, any
# other person.  No title to or ownership of the software is
# hereby transferred.

# $Header: Makefile 1.27 87/09/24 $
#
# Makefile for i386 Parallel Support Library
#
# Defines:
#	ALM		- use multibus atomic lock memory for hardware mutex.
#	OPENT		- kernel support for reading program object file.
#	CONCAT		- mmap() support for concatenating mmap regions.
#	MAP_ZEROFILL	- mmap() support for creating ZFOD space.
#				This is picked up from <sys/mman.h>
#
#

C	= ../common

COPTS	= -DCONCAT -UALM
CFLAGS	= -O -i $(COPTS) -I. -I$C $(INCLUDE)

LIB	= libpps.a libpps_p.a
OBJS	= ppinit.o shbrk.o prbrk.o slock.o sbarrier.o shmalloc.o \
		microtask.o cpus_online.o shared_flag.o \
		m_dynalloc.o m_collanyd.o profbrk.o

CFILES	= $C/ppinit.c $C/shbrk.c $C/prbrk.c $C/slock.c $C/sbarrier.c \
		$C/shmalloc.c $C/microtask.c $C/cpus_online.c \
		$C/shared_flag.c $C/m_dynalloc.c $C/profbrk.c

SOBJS	= _exit.o sigvec.o _mmap.o

.s.o:
	$(CPP) -E -DPROF $(INCLUDE) $*.s | $(AS) -o $*.o ; \
	$(LD)  -r $*.o -o profiled/$*.o ; \
	$(CPP) -E -UPROF $(INCLUDE) $*.s | $(AS) -o $*.o ; \
	$(LD)  -r $*.o -o $*.O ; mv $*.O $*.o

all		: $(LIB)

$(LIB)		: profiled parallel
		  @echo '	Fixing modes, groups, and owners on *.o'
		  @chmod    644 $(OBJS) $(SOBJS) profiled/*.o
		  @-chgrp daemon $(OBJS) $(SOBJS) profiled/*.o > /dev/null 2>&1
		  @-chown  root $(OBJS) $(SOBJS) profiled/*.o > /dev/null 2>&1
		  @$(AR) cru libpps.a `$(LORDER) $(OBJS) $(SOBJS) | tsort` && \
			$(AR) ma microtask.o libpps.a ppinit.o && \
			$(AR) ma ppinit.o libpps.a  shared_flag.o && \
			$(AR) ma ppinit.o libpps.a  shbrk.o && \
			$(RANLIB) libpps.a
		  cd profiled && \
		  $(AR) cru ../libpps_p.a `$(LORDER) $(OBJS) $(SOBJS) | tsort` && \
			$(AR) ma microtask.o ../libpps_p.a ppinit.o && \
			$(AR) ma ppinit.o ../libpps_p.a  shared_flag.o && \
			$(AR) ma ppinit.o ../libpps_p.a  shbrk.o && \
		  	$(RANLIB) ../libpps_p.a

parallel	:& $(OBJS) $(SOBJS)
profiled	:; mkdir profiled
clean		:; rm -rf $(LIB) $(OBJS) $(SOBJS) profiled SYS.h

install.headers	:
		rm -f parallel.h microtask.h
		sh -c 'unifdef $(COPTS) -Di386 -Uns32000 $C/parallel.h > parallel.h; true'
		sh -c 'unifdef $(COPTS) -Di386 -Uns32000 $C/microtask.h > microtask.h; true'
		install -m 644 parallel.h \
			$(DESTDIR)/usr/include/parallel/parallel.h
		install -m 644 microtask.h \
			$(DESTDIR)/usr/include/parallel/microtask.h

install		:
		install -m 644 libpps.a $(DESTDIR)/usr/lib
		$(RANLIB) $(DESTDIR)/usr/lib/libpps.a
		install -m 644 libpps_p.a $(DESTDIR)/usr/lib
		$(RANLIB) $(DESTDIR)/usr/lib/libpps_p.a
		cd ../gtpp.demo && \
			install -c -m 644 * $(DESTDIR)/usr/sequent/gtpp.demo

lint		:
		${LINT} -hbx ${CFLAGS} ${CFILES} lintasm.c 


cpus_online.o	: $C/cpus_online.c
			$(CC) -p -DPROF $(CFLAGS) -c $C/cpus_online.c ; \
			$(LD)  -r cpus_online.o -o profiled/cpus_online.o ; \
			$(CC) $(CFLAGS) -c $C/cpus_online.c ; \
			mv cpus_online.o cpus_online.O ; \
			$(LD)  -r cpus_online.O -o cpus_online.o; \
			rm -f cpus_online.O

microtask.o	: $C/microtask.c
			$(CC) -p -DPROF $(CFLAGS) -c $C/microtask.c ; \
			$(LD)  -r microtask.o -o profiled/microtask.o ; \
			$(CC) $(CFLAGS) -c $C/microtask.c ; \
			mv microtask.o microtask.O; \
			$(LD)  -r microtask.O -o microtask.o ; \
			rm -f microtask.O

shared_flag.o	: $C/shared_flag.c
			$(CC) -p -DPROF $(CFLAGS) -c $C/shared_flag.c ; \
			$(LD)  -r shared_flag.o -o profiled/shared_flag.o ; \
			$(CC) $(CFLAGS) -c $C/shared_flag.c ; \
			mv shared_flag.o shared_flag.O; \
			$(LD)  -r shared_flag.O -o shared_flag.o ; \
			rm -f shared_flag.O

ppinit.o	: $C/ppinit.c
			$(CC) -p -DPROF $(CFLAGS) -c $C/ppinit.c ; \
			$(LD)  -r ppinit.o -o profiled/ppinit.o ; \
			$(CC) $(CFLAGS) -c $C/ppinit.c ; \
			mv ppinit.o ppinit.O; \
			$(LD)  -r ppinit.O -o ppinit.o ; \
			rm -f ppinit.O

prbrk.o		: $C/prbrk.c 
			$(CC) -p -DPROF $(CFLAGS) -c $C/prbrk.c ; \
			$(LD)  -r prbrk.o -o profiled/prbrk.o ; \
			$(CC) $(CFLAGS) -c $C/prbrk.c ; \
			mv prbrk.o prbrk.O; \
			$(LD)  -r prbrk.O -o prbrk.o ; \
			rm -f prbrk.O

sbarrier.o	: $C/sbarrier.c 
			$(CC) -p -DPROF $(CFLAGS) -c $C/sbarrier.c ; \
			$(LD)  -r sbarrier.o -o profiled/sbarrier.o ; \
			$(CC) $(CFLAGS) -c $C/sbarrier.c ; \
			mv sbarrier.o sbarrier.O; \
			$(LD)  -r sbarrier.O -o sbarrier.o ; \
			rm -f sbarrier.O

shbrk.o		: $C/shbrk.c 
			$(CC) -p -DPROF $(CFLAGS) -c $C/shbrk.c ; \
			$(LD)  -r shbrk.o -o profiled/shbrk.o ; \
			$(CC) $(CFLAGS) -c $C/shbrk.c ; \
			mv shbrk.o shbrk.O; \
			$(LD)  -r shbrk.O -o shbrk.o ; \
			rm -f shbrk.O

shmalloc.o	: $C/shmalloc.c 
			$(CC) -p -DPROF $(CFLAGS) -c $C/shmalloc.c ; \
			$(LD)  -r shmalloc.o -o profiled/shmalloc.o ; \
			$(CC) $(CFLAGS) -c $C/shmalloc.c ; \
			mv shmalloc.o shmalloc.O; \
			$(LD)  -r shmalloc.O -o shmalloc.o ; \
			rm -f shmalloc.O

slock.o		: $C/slock.c 
			$(CC) -p -DPROF $(CFLAGS)  -c $C/slock.c ; \
			$(LD)  -r slock.o -o profiled/slock.o ; \
			$(CC) $(CFLAGS)  -c $C/slock.c ; \
			mv slock.o slock.O; \
			$(LD)  -r slock.O -o slock.o ; \
			rm -f slock.O

m_dynalloc.o	: $C/m_dynalloc.c
			$(CC) -p -DPROF -DINTEL386 -c $C/m_dynalloc.c ; \
			$(LD)  -r m_dynalloc.o -o profiled/m_dynalloc.o ; \
			$(CC) -DINTEL386 -c $C/m_dynalloc.c ; \
			$(LD)  -r m_dynalloc.o -o m_dynalloc.O ; \
			mv m_dynalloc.O m_dynalloc.o ; \
			rm -f m_dynalloc.O

m_collanyd.o	: $C/m_dynalloc.c
			cp $C/m_dynalloc.c m_collanyd.c ; \
			$(CC) -p -DPROF -DINTEL386 -DRIGHT_TO_LEFT -c m_collanyd.c ; \
			$(LD)  -r m_collanyd.o -o profiled/m_collanyd.o ; \
			$(CC) -DINTEL386 -DRIGHT_TO_LEFT -c m_collanyd.c ; \
			$(LD)  -r m_collanyd.o -o m_collanyd.O ; \
			mv m_collanyd.O m_collanyd.o ; \
			rm -f m_collanyd.O m_collanyd.c

#
#	Don't want these profiled!!!
#
_mmap.o		: _mmap.s
			$(CPP) -E -UPROF $(INCLUDE) $*.s | $(AS) -o $*.o ; \
			$(LD)  -r $*.o -o profiled/$*.o ; \
			$(CPP) -E -UPROF $(INCLUDE) $*.s | $(AS) -o $*.o ; \
			$(LD)  -r $*.o -o $*.O ; mv $*.O $*.o

profbrk.o	: $C/profbrk.c 
			$(CC) $(CFLAGS) -c $C/profbrk.c ; \
			mv profbrk.o profbrk.O; \
			$(LD)  -r profbrk.O -o profbrk.o ; \
			cp profbrk.o profiled ; \
			rm -f profbrk.O

$(SOBJS)	: SYS.h
SYS.h		:; ln -s ../../../lib/libc/$(MACHINE)/sys/SYS.h

FRC:
