# ###################################################################### #
# The FEEL makefile...                                                   #
# ###################################################################### #

#
# $Id: Makefile,v 1.8.1.3 1992/06/18 19:45:13 pab Exp $
#

##########################################################################
# Customisation section...                                               #
##########################################################################

# Edit the following for your favourite machine.

# Where Src directory lives
BASE = /net/brad/denton_export/denton/You/NewYou

# Feel knows about the systems below:
# Stardent RS6000 Gould Sun4 Sun3 Clipper Vax Alliant Meiko 386

# Here is some info in case you have something different:
#     WITH_SYSTEMV_SOCKETS - System V IP communication
#     WITH_BSD_SOCKETS     - BSD IP communication (4.3, or see defs.h)
#     WITH_SYSTEMV_SIGNALS - System V signalling
#     WITH_BSD_SIGNALS     - BSD signalling
#     DONT_HAVE_STDLIB_H   - half-hearted ANSI without stdlib.h
#     ALIGN8 - if the machine is fussy about 8 byte alignments, e.g., doubles
#     TRAP_ALL		   - vauge attempt to catch segvs, buses, etc. implied by 
#			     MACHINE=SYSTEMV
# Architecture and machine type...
# MACHINE is ANY,BSD or SystemV. 
# ANY is any 'reasonable' architecture --- things that run UNIX, and many others
# BSD is supported on any machine with a *-switch.s file in this 
# directory. See the note in the manual for what it does, and how to port it.
# SystemV is for sun3/4, Stardents and Alliant concentrix machines 
# It ought to work for any UNIX machine that has shared memory primitives 
# and that BSD config. works for.
# BTW, BSD works on MSDOS boxes(!)
# Systems not listed but have worked in the 'ANY' config:
# DEC MIPS (try hacking the ard-switch code for BSD version)
# 

# Extra goodies, won't necesarily work
# -DBCI 		Want a bytecode interpreter?
# -DLOWTAGINTS		Low tag integers kind of work, 
#			but break the addons code (and maybe other things)
#     READLINE		   - used to work. Bit rot may have set in here.

# common options

# how to optimise your code
STDOFLAGS = # -DDEBUG

# everybody needs these
STDFLAGS =  -DWITH_FUDGE 

# Stardent
MFLAGS = -DWITH_SYSTEMV_SOCKETS \
        -DDONT_HAVE_STDLIB_H -DBCI -DWITH_SYS_TIMES
OFLAGS =  -O -inline
MACHINE = SYSTEMV # BSD # Can be SYSTEMV
ARCH = ard
CC = cc 
LIBS = -lm

# Sun4
#MFLAGS = -DWITH_SYSTEMV_SOCKETS -DDONT_HAVE_STDLIB_H -DBCI -DALIGN8 -DWITH_BSD_SIGNALS
#OFLAGS = -g
#MACHINE = BSD #or SYSTEMV, for the keen
#ARCH = sun4
#CC = gcc
#LIBS = -lm

# s4gc (Sun4 with compacting garbage collector)
#MFLAGS = -DWITH_SYSTEMV_SOCKETS -DDONT_HAVE_STDLIB_H -DBCI -DALIGN8 -DWITH_BSD_SIGNALS -DDGC
#OFLAGS = -g
#GCOBJECTS = ../d-gc/gc.o 
#MACHINE = BSD #or SYSTEMV, for the keen
#ARCH = s4gc
#CC = gcc
#LIBS = -lm

# RS6000
#MFLAGS = -DWITH_SYSTEMV_SOCKETS \
#         -DWITH_SYSTEMV_SIGNALS -DTRAP_ALL -D_ALL_SOURCE
#MACHINE = ANY
#ARCH = any
#CC = xlc
#LIBS = -lm

# Gould
#MFLAGS = -DWITH_BSD_SIGNALS \
#        -DDONT_HAVE_STDLIB_H  -DALIGN8
#MACHINE = ANY
#ARCH = any
#CC = gcc
#LIBS = -lm


# Sun3
#MFLAGS =  -DWITH_SYSTEMV_SOCKETS -DDONT_HAVE_STDLIB_H   -DDONT_HAVE_STDLIB_H  
#MACHINE = BSD
#ARCH = sun3
#CC = gcc
#LIBS = -lm

# Clipper
#MFLAGS = -DWITH_BSD_SIGNALS -DALIGN8 
#MACHINE = BSD
#ARCH = clip
#CC = ncc
#LIBS = /lib/crt0.o

# Vax
#MFLAGS = -mg -O -DDONT_HAVE_STDLIB_H -DBCI
#MACHINE = ANY
#ARCH = any
#CC = gcc
#LIBS = -lmg

# Alliant
#MFLAGS = -DWITH_BSD_SIGNALS -DWITH_BSD_SOCKETS -DALIGN8
#MACHINE = SYSTEMV
#ARCH = i860
#CC = fxc
#LIBS = -lm

# Meiko
# MFLAGS =
# MACHINE = ANY
# CC = mcc
# LIBS = -lm
# EXTRASRCS = 
# EXTRAOBJS =

# 386
# ...
#MFLAGS = -DWITH_SYSTEMV_SOCKETS \
#        -DDONT_HAVE_STDLIB_H -DBCI
#OFLAGS =  -O 
#MACHINE = BSD
#ARCH = 386
#CC = gcc  #-43
#LIBS = -lm

# i860
# Not an alliant? 
# Try MACHINE=BSD, then change the shared memory primitives around
#

# ################################################################### #
# Sundry constants						      #
# ################################################################### #
LEX = flex
YACC = bison -y -t

# Local module path

MODULE_PATH = ${BASE}/Modules/

# Semaphoring...
# Hardware semaphores are OK, but
SEMAPHORES = SOFTWARE

# Do the business...

# ###################################################################### #
# Working section...                                                     #
# ###################################################################### #

LOAD_PATH_NAME = FEEL_LOAD_PATH

MACHINEABBREV = ${ARCH}
DATE = `date`

# invent flags
FLAGS = ${STDFLAGS} ${STDOFLAGS} ${MFLAGS} ${OFLAGS}
# Reader specific sources...

READERSOURCES = lex.yy.c y.tab.c alloca.c

READEROBJECTS = lex.yy.o y.tab.o alloca.o

# Default Elvira sources...

ELVIRASOURCES = initelv.c

ELVIRAOBJECTS = initelv.o

# Garbage collector sources

GCOBJECTS = 

# Main sources...

SOURCES = copyalloc.c copy.c arith.c basic.c chars.c error.c \
	  main.c modules.c print.c read.c set.c streams.c \
	  table.c vectors.c bootstrap.c lists.c listops.c \
	  class.c slots.c ngenerics.c \
          symboot.c modboot.c toplevel.c root.c specials.c \
	  calls.c ccc.c macros.c system.c semaphores.c state.c \
	  format.c sockets.c sio.c modops.c lamport.c bvecs2.c 

OBJECTS = copyalloc.o copy.o arith.o basic.o chars.o error.o \
	  main.o modules.o print.o read.o set.o streams.o \
	  table.o vectors.o bootstrap.o lists.o listops.o \
	  class.o slots.o ngenerics.o  \
          symboot.o modboot.o toplevel.o root.o specials.o \
	  calls.o ccc.o macros.o system.o semaphores.o state.o \
	  format.o sockets.o sio.o modops.o lamport.o bvecs2.o 

HDRS = bootstrap.h   generics.h    modules.h     specials.h    toplevel.h \
	calls.h       global.h      ngenerics.h   state.h       vectors.h \
	ccc.h         lamport.h     objects.h     structs.h     version.h \
	class.h       lex_global.h  root.h        symboot.h     y.tab.h	  \
	copy.h        listops.h     runtime.h     syssockets.h	funcalls.h weak.h \
	defs.h        lists.h       semaphores.h  system_p.h	yyfudge.c	allocate.h  \
	error.h       macros.h      sio.h         system_t.h	bvf.h	modops.h garbage.h  \
	format.h      modboot.h     slots.h       table.h	threads.h iset.h sockets.h  \
	interpret.h   bytecodes.h

COSOURCES = ${MACHINEABBREV}-switch.s threads.c 

COOBJECTS = ${MACHINEABBREV}-switch.o threads.o

DISTRIBCO = sun3-switch.s sun4-switch.s ard-switch.s clip-switch.s any-switch.s i860-switch.s \
	    386-switch.s Makefile Makefile.386

KERNELLISP= defs.em extras0.em initcode.em macros0.em standard0.em sockets.em semaphores.em bitvecs.em


# Lisp object file

LISPOBJECTS = LispSrc/all-lisp.o

ISOURCES = interpret.c
IHDRS = bytecodes.h interpret.h
IOBJECTS = interp.o
# Lisp object file

LISPOBJECTS = LispSrc/all-lisp.o

you:	${OBJECTS} ${COOBJECTS} ${READEROBJECTS} ${ELVIRAOBJECTS} ${IOBJECTS} ${GCOBJECTS}
	-touch you
	rm you
	${CC}  -o you ${OBJECTS} ${COOBJECTS} ${GCOBJECTS}\
		     ${READEROBJECTS} ${IOBJECTS} ${ELVIRAOBJECTS} ${LIBS} 
	echo 

proyou:	${OBJECTS} ${COOBJECTS} ${READEROBJECTS} ${ELVIRAOBJECTS}
	${CC} -p -o proyou ${OBJECTS} ${COOBJECTS} \
		     	   ${READEROBJECTS} ${ELVIRAOBJECTS} ${LIBS}
	echo 

elvira:	${OBJECTS} ${COOBJECTS} ${READEROBJECTS} ${IOBJECTS} ${GCOBJECTS}
	ld -r -o feel_elvira.o ${OBJECTS} ${COOBJECTS} ${READEROBJECTS} ${IOBJECTS} ${GCOBJECTS}
	mv feel_elvira.o ../Objs/${ARCH}-elvira.o
	echo 

feel_elvira.o:	elvira

feel:	feel_elvira.o ${LISPOBJECTS}
	(cd LispSrc; make all-lisp.o)
	ecc -o feel ${LISPOBJECTS}
	echo  

reader:		
	${LEX} comp.lex
	${YACC} test.yac

# Sicko bytecode hacking
# preprocess explicitly, then compile the result, after stripping out
# cpp control codes. Ugh. Makes debugging easier though.
interp.o: interpret.c bytecodes.h interpret.h
	-${CC} -E -c interpret.c ${FLAGS} \
		 -DMACHINE_${MACHINE} \
		 -DMODULE_PATH=\"${MODULE_PATH}\" \
		 -DLOAD_PATH_NAME=\"${LOAD_PATH_NAME}\" \
		 -DSEMAPHORES_${SEMAPHORES} \
		 -DMAKE_DATE="\"${DATE}\"" \
		  |  grep -v '^#' | /usr/local/bin/indent > interp.c
		cc -c -O -inline interp.c

.c.o:
	${CC} -c $*.c ${FLAGS} \
		 -DMACHINE_${MACHINE} \
		 -DMODULE_PATH=\"${MODULE_PATH}\" \
		 -DLOAD_PATH_NAME=\"${LOAD_PATH_NAME}\" \
		 -DSEMAPHORES_${SEMAPHORES} \
		 -DMAKE_DATE="\"${DATE}\"" 




version: ${SOURCES} ${COSOURCES} ${READERSOURCES} ${ELVIRASOURCES} ${DISTRIBCO} ${HDRS} ${KERNELLISP}
	rcsfreeze 

tar: ${SOURCES} ${COSOURCES} ${READERSOURCES} ${ELVIRASOURCES} ${DISTRIBCO} \
	${HDRS} ${KERNELLISP} ${ISOURCES} ${IHDRS}
	tar chf -  ${SOURCES} ${COSOURCES} ${READERSOURCES} ${ELVIRASOURCES} \
	           ${DISTRIBCO} ${HDRS} ${KERNELLISP} ${ISOURCES} ${IHDRS} \
	  | compress > you.tar.Z

# Rather assumes that you have X...

depend: ${SOURCES} ${HDRS} ${READERSOURCES} ${COSOURCES}
	makedepend -s "# DO NOT DELETE THIS LINE" -- ${FLAGS} -- ${SOURCES} ${COSOURCES} 

clean:
	rm ${OBJECTS} ${COOBJECTS} ${READEROBJECTS} you


${MACHINE}-coroutine.o:	${MACHINE}-coroutine.s
		${CC} -c ${MACHINE}-coroutine.s

#if there is odd stuff below this line, remove it and do make depend.
# if make depend fails don't worry. It only gets the header dependencies 
# right.
# DO NOT DELETE THIS LINE
