# makefile.top
#
# This is part of the flight simulator 'fly8'.
# Author: Eyal Lebedinsky (eyal@ise.canberra.edu.au).

# top level makefile for unix

#CC=      gcc

INSTPATH=	$(HOME)/games
INSTDIR=	fly8
INSTFLY8=	$(INSTPATH)/$(INSTDIR)
RELDIR=		/tmp
VERNAME=	fly8111

SYSTEM=		UNIX

# basic options.
#
OFLAGSB=	-I. -D$(SYSTEM) -DSUN -DSPARC -Wall

# If you have assembly support, define:
#	-DUSE_ASM
# If you want to use C support with debuging enabled define:
#	-DDEBUG_MULDIV
# for internal consistency checking defineng enabled define:
#	-DCHECK_GR
# To assist debugging, make all functions external:
#	-DLOCAL_FUNC=extern
# To enable memory trace add:
#	-DCHECK_MEM
# If you still have problems then you still have these available:
#	-DNEED_STRICMP -DNEED_STRNICMP -DNEED_LABS
#
OFLAGSD=	$(OFLAGSB)

# no optimization at all.
#
OFLAGSN=	$(OFLAGSD) -O0

# size (memory) optimization.
#
OFLAGSS=	$(OFLAGSD) -O2 -fomit-frame-pointer

# time (speed) optimization.
#
OFLAGST=	$(OFLAGSS)

# options for inlining. Add this to time-critical modules.
#
OFLAGSO=	$(OFLAGST) -DINLINE

# standard optimization flags
#
OFLAGS=		$(OFLAGST)

SHFLAGS=

UFLAGS=		-I$(SYSTEM) $(SHFLAGS)
CFLAGSX=	$(OFLAGSO) $(SHFLAGS)		# used on subdirectories
CFLAGSN=	$(OFLAGSN) $(UFLAGS)		# not optimized at all
CFLAGS=		$(OFLAGS)  $(UFLAGS)		# standard (speed) optimized
CFLAGSS=	$(OFLAGSS) $(UFLAGS)		# space optimized
CFLAGSO=	$(OFLAGSO) $(UFLAGS)		# highly optimized

OO=	.o

MAKE=	make

#	objects
#
OOBJS=	obasic$(OO) object$(OO) obox$(OO) obroken$(OO) ochute$(OO) \
	oclassic$(OO) ocrater$(OO) ofplane$(OO) oground$(OO) ogtarget$(OO) \
	ohouse$(OO) olow$(OO) om61$(OO) omk82$(OO) opaddoc$(OO) oplane$(OO) \
	orunway$(OO) osmoke$(OO) otarget$(OO) otower$(OO) oviewer$(OO) \
	oxplane$(OO) oyplane$(OO) ogen$(OO)

#	Portable programs
#

COBJS=	airdata$(OO) alarms$(OO) altitude$(OO) autop$(OO) body$(OO) \
	btrail$(OO) cockpit$(OO) colors$(OO) command$(OO) compass$(OO) \
	debug$(OO) grmgr$(OO) editstr$(OO) engine$(OO) field$(OO) fly8$(OO) \
	fly8str$(OO) gear$(OO) heading$(OO) hud$(OO) hudmenu$(OO) ifuncs$(OO) \
	info$(OO) init$(OO) kbdmgr$(OO) keypad$(OO) lamps$(OO) land$(OO) \
	log$(OO) loop$(OO) macros$(OO) mat$(OO) max$(OO) memory$(OO) menu$(OO) \
	menus$(OO) message$(OO) nav$(OO) need$(OO) netmgr$(OO) noellips$(OO) \
	nokbd$(OO) nosound$(OO) nosystem$(OO) notimer$(OO) objects$(OO) \
	panel$(OO) pid$(OO) piper$(OO) pitch$(OO) player$(OO) ptrmgr$(OO) \
	prm$(OO) radar$(OO) random$(OO) remote$(OO) show$(OO) sixdof$(OO) \
	sky$(OO) sndmgr$(OO) speed$(OO) stack$(OO) stfont1$(OO) stfont2$(OO) \
	stores$(OO) stroke$(OO) symbols$(OO) system$(OO) term$(OO) tunes$(OO) \
	util$(OO) views$(OO) vmodes$(OO) vv$(OO) waypoint$(OO) window$(OO) \
	buffers$(OO) lnd$(OO) \
	$(OOBJS)

OBJS=	$(COBJS)

HFILES=	fly.h colors.h $(SYSTEM)/config.h
HPLANE=	$(HFILES) plane.h hud.h
LIBS=	-lm -lX11 -lXext

.PRECIOUS: itabs.c

now:	fly

all:	fly dat util

fly:	need$(OO) sys fly8

dat:	parm shape

sys:
	(cd $(SYSTEM); \
	 $(MAKE) XFLAGS="$(CFLAGSX)"  SYSTEM=$(SYSTEM) CC=$(CC) all)

parm:
	(cd parms; \
	 $(MAKE) SHFLAGS="$(SHFLAGS)" SYSTEM=$(SYSTEM) CC=$(CC) all)

shape:
	(cd shapes; \
	 $(MAKE) SHFLAGS="$(SHFLAGS)" SYSTEM=$(SYSTEM) CC=$(CC) all)

util:
	(cd utils; \
	 $(MAKE) XFLAGS="$(CFLAGSX)" SYSTEM=$(SYSTEM) CC=$(CC) all)

fly8:	$(OBJS) $(SYSTEM)/fly8sys.a version
	$(CC) $(CFLAGS) $(OBJS) version$(OO) $(SYSTEM)/fly8sys.a \
		-o fly8 $(LIBS)

clean:
	-rm *.o *.log *.tgz errs *.a ifuncsm fly8
	-(cd $(SYSTEM); $(MAKE) clean)
	-(cd shapes; $(MAKE) clean)
	-(cd parms; $(MAKE) clean)
	-(cd utils; $(MAKE) clean)

install:
	-mkdir $(INSTFLY8)
	cp	fly8 *.max *.adv \
		utils/mac2max utils/max2mac \
		shapes/*.vxx \
		parms/*.prm parms/*.nav parms/*.lnd \
		$(SYSTEM)/*.ini $(SYSTEM)/*.vmd \
		$(SYSTEM)/fly $(SYSTEM)/flytty $(SYSTEM)/flyfifo \
		$(SYSTEM)/flyudp $(SYSTEM)/fly8udp $(SYSTEM)/udpmgr \
		docs/*.doc docs/bugs.txt \
		$(INSTFLY8)
	cp $(SYSTEM)/sunsp.txt	$(INSTFLY8)/README
	cp shapes/wf16.vxx	$(INSTFLY8)/plane.vxx

reinstall:
	cp	fly8 \
		$(SYSTEM)/fly8udp $(SYSTEM)/udpmgr \
		$(INSTFLY8)

release:	fly shape parm
	(cd $(INSTPATH);\
	rm $(INSTDIR)/*.mac $(INSTDIR)/*.log;\
	tar cvf $(RELDIR)/$(VERNAME)s.tar $(INSTDIR);\
	gzip -9 $(RELDIR)/$(VERNAME)s.tar;\
	mwrite $(RELDIR)/$(VERNAME)s.* $(RELDIR)/$(VERNAME)s.tgz)
	mdir

backup:
	-(d=`date +%m%d%H`;\
	tar czvf FL$$d.tgz *.c *.h fly.max docs/*\
	 $(SYSTEM)/*.c $(SYSTEM)/*.h $(SYSTEM)/make?? $(SYSTEM)/*.top\
	 $(SYSTEM)/fly $(SYSTEM)/*.ini $(SYSTEM)/*.vmd $(SYSTEM)/readme\
	 $(SYSTEM)/config;\
	mwrite FL$$d.tgz .)
	mdir

# Use this to create itabs.c, then use -DEXT_TAB for ifuncs
#
ifuncsm$(OO):	ifuncs.c $(HFILES) 
	$(CC) $(CFLAGSN) -DGEN_TAB -c -o ifuncsm$(OO) ifuncs.c

ifuncsm:	ifuncsm$(OO) debug$(OO)
	$(CC) $(LCFLAGS) ifuncsm$(OO) debug$(OO) -o ifuncsm $(LIBS)

itabs.c:	ifuncsm
	ifuncsm >itabs.c

# optimization flags are carefuly selected. Only CFLAGSN is used with bug
# ridden complers to avoid failures; the other options are not platform
# dependent.

airdata$(OO):	airdata.c $(HFILES)
	$(CC) $(CFLAGS) -c $*.c

alarms$(OO):	alarms.c $(HPLANE)
	$(CC) $(CFLAGS) -c $*.c

altitude$(OO):	altitude.c $(HPLANE)
	$(CC) $(CFLAGS) -c $*.c

autop$(OO):	autop.c $(HPLANE)
	$(CC) $(CFLAGS) -c $*.c

body$(OO):	body.c $(HFILES)
	$(CC) $(CFLAGS) -c $*.c

btrail$(OO):	btrail.c $(HPLANE)
	$(CC) $(CFLAGS) -c $*.c

buffers$(OO):	buffers.c $(HFILES)
	$(CC) $(CFLAGSO) -c $*.c

cockpit$(OO):	cockpit.c $(HPLANE)
	$(CC) $(CFLAGS) -c $*.c

colors$(OO):	colors.c $(HFILES)
	$(CC) $(CFLAGSS) -c $*.c

command$(OO):	command.c $(HFILES)
	$(CC) $(CFLAGSS) -c $*.c

compass$(OO):	compass.c $(HPLANE)
	$(CC) $(CFLAGS) -c $*.c

debug$(OO):	debug.c $(HFILES) 
	$(CC) $(CFLAGSS) -c $*.c

editstr$(OO):	editstr.c $(HFILES) keydef.h keymap.h
	$(CC) $(CFLAGSS) -c $*.c

engine$(OO):	engine.c $(HPLANE)
	$(CC) $(CFLAGS) -c $*.c

field$(OO):	field.c $(HFILES)
	$(CC) $(CFLAGSS) -c $*.c

fly8$(OO):	fly8.c $(HFILES)
	$(CC) $(CFLAGSS) -c $*.c

fly8str$(OO):	fly8str.c $(HFILES)
	$(CC) $(CFLAGSS) -c $*.c

gear$(OO):	gear.c $(HPLANE)
	$(CC) $(CFLAGS) -c $*.c

grmgr$(OO):	grmgr.c $(HFILES)
	$(CC) $(CFLAGS) -c $*.c

hddmenu$(OO):	hddmenu.c $(HFILES)
	$(CC) $(CFLAGSS) -c $*.c

heading$(OO):	heading.c $(HPLANE)
	$(CC) $(CFLAGS) -c $*.c

hud$(OO):	hud.c $(HPLANE)
	$(CC) $(CFLAGS) -c $*.c

hudmenu$(OO):	hudmenu.c $(HPLANE)
	$(CC) $(CFLAGSS) -c $*.c

ifuncs$(OO):	ifuncs.c itabs.c $(HFILES)
	$(CC) $(CFLAGSO) -DEXT_TABS -c $*.c

info$(OO):	info.c $(HPLANE)
	$(CC) $(CFLAGSS) -c $*.c

init$(OO):	init.c $(HFILES)
	$(CC) $(CFLAGSS) -c $*.c

kbdmgr$(OO):	kbdmgr.c $(HFILES)
	$(CC) $(CFLAGSS) -c $*.c

keypad$(OO):	keypad.c $(HFILES)
	$(CC) $(CFLAGSS) -c $*.c

lamps$(OO):	lamps.c $(HPLANE)
	$(CC) $(CFLAGS) -c $*.c

land$(OO):	land.c $(HFILES)
	$(CC) $(CFLAGS) -c $*.c

lnd$(OO):	lnd.c $(HFILES)
	$(CC) $(CFLAGSS) -c $*.c

log$(OO):	log.c $(HFILES)
	$(CC) $(CFLAGSS) -c $*.c

loop$(OO):	loop.c $(HPLANE)
	$(CC) $(CFLAGSS) -c $*.c

macros$(OO):	macros.c $(HFILES) keydef.h keymap.h
	$(CC) $(CFLAGSS) -c $*.c

mat$(OO):	mat.c $(HFILES)
	$(CC) $(CFLAGSO) -c $*.c

max$(OO):	max.c $(HFILES) keydef.h keymap.h keyname.h
	$(CC) $(CFLAGSS) -c $*.c

memory$(OO):	memory.c $(HFILES)
	$(CC) $(CFLAGSS) -c $*.c

menu$(OO):	menu.c $(HFILES) keydef.h keymap.h
	$(CC) $(CFLAGSS) -c $*.c

menus$(OO):	menus.c $(HFILES) keydef.h keymap.h
	$(CC) $(CFLAGSS) -c $*.c

netmgr$(OO):	netmgr.c $(HFILES)
	$(CC) $(CFLAGSS) -c $*.c

message$(OO):	message.c $(HFILES)
	$(CC) $(CFLAGSS) -c $*.c

nav$(OO):	nav.c $(HPLANE)
	$(CC) $(CFLAGS) -c $*.c

need$(OO):	need.c $(HFILES)
	$(CC) $(CFLAGS) -c $*.c

noellips$(OO):	noellips.c $(HFILES)
	$(CC) $(CFLAGS) -c $*.c

nokbd$(OO):	nokbd.c $(HFILES)
	$(CC) $(CFLAGS) -c $*.c

nosound$(OO):	nosound.c $(HFILES)
	$(CC) $(CFLAGS) -c $*.c

nosystem$(OO):	nosystem.c $(HFILES)
	$(CC) $(CFLAGS) -c $*.c

notimer$(OO):	notimer.c $(HFILES)
	$(CC) $(CFLAGS) -c $*.c

obasic$(OO):	obasic.c $(HPLANE)
	$(CC) $(CFLAGS) -c $*.c

object$(OO):	object.c $(HPLANE)
	$(CC) $(CFLAGS) -c $*.c

objects$(OO):	objects.c $(HPLANE)
	$(CC) $(CFLAGS) -c $*.c

obox$(OO):	obox.c $(HFILES)
	$(CC) $(CFLAGS) -c $*.c

obroken$(OO):	obroken.c $(HFILES)
	$(CC) $(CFLAGS) -c $*.c

ochute$(OO):	ochute.c $(HFILES)
	$(CC) $(CFLAGS) -c $*.c

oclassic$(OO):	oclassic.c $(HPLANE)
	$(CC) $(CFLAGS) -c $*.c

ocrater$(OO):	ocrater.c $(HFILES)
	$(CC) $(CFLAGS) -c $*.c

ofplane$(OO):	ofplane.c $(HPLANE)
	$(CC) $(CFLAGS) -c $*.c

ogen$(OO):	ogen.c $(HFILES)
	$(CC) $(CFLAGS) -c $*.c

oground$(OO):	oground.c $(HFILES)
	$(CC) $(CFLAGS) -c $*.c

ogtarget$(OO):	ogtarget.c $(HFILES)
	$(CC) $(CFLAGS) -c $*.c

ohouse$(OO):	ohouse.c $(HFILES)
	$(CC) $(CFLAGS) -c $*.c

olow$(OO):	olow.c $(HFILES)
	$(CC) $(CFLAGS) -c $*.c

om61$(OO):	om61.c $(HPLANE)
	$(CC) $(CFLAGS) -c $*.c

omk82$(OO):	omk82.c $(HPLANE)
	$(CC) $(CFLAGS) -c $*.c

opaddoc$(OO):	opaddoc.c $(HFILES)
	$(CC) $(CFLAGS) -c $*.c

oplane$(OO):	oplane.c $(HPLANE)
	$(CC) $(CFLAGS) -c $*.c

orunway$(OO):	orunway.c $(HFILES)
	$(CC) $(CFLAGS) -c $*.c

osmoke$(OO):	osmoke.c $(HFILES)
	$(CC) $(CFLAGS) -c $*.c

otarget$(OO):	otarget.c $(HFILES)
	$(CC) $(CFLAGS) -c $*.c

otower$(OO):	otower.c $(HFILES)
	$(CC) $(CFLAGS) -c $*.c

oxplane$(OO):	oxplane.c $(HPLANE)
	$(CC) $(CFLAGS) -c $*.c

oyplane$(OO):	oyplane.c $(HPLANE)
	$(CC) $(CFLAGS) -c $*.c

oviewer$(OO):	oviewer.c $(HPLANE)
	$(CC) $(CFLAGS) -c $*.c

panel$(OO):	panel.c $(HPLANE)
	$(CC) $(CFLAGS) -c $*.c

pid$(OO):	pid.c $(HFILES)
	$(CC) $(CFLAGS) -c $*.c

piper$(OO):	piper.c $(HPLANE)
	$(CC) $(CFLAGS) -c $*.c

pitch$(OO):	pitch.c $(HPLANE)
	$(CC) $(CFLAGS) -c $*.c

player$(OO):	player.c $(HFILES)
	$(CC) $(CFLAGS) -c $*.c

prm$(OO):	prm.c $(HPLANE)
	$(CC) $(CFLAGSS) -c $*.c

ptrmgr$(OO):	ptrmgr.c $(HFILES) keydef.h keymap.h
	$(CC) $(CFLAGSS) -c $*.c

radar$(OO):	radar.c $(HPLANE)
	$(CC) $(CFLAGSS) -c $*.c

random$(OO):	random.c $(HFILES)
	$(CC) $(CFLAGS) -c $*.c

remote$(OO):	remote.c $(HFILES)
	$(CC) $(CFLAGS) -c $*.c

show$(OO):	show.c $(HFILES)
	$(CC) $(CFLAGSO) -c $*.c

sky$(OO):	sky.c $(HFILES)
	$(CC) $(CFLAGS) -c $*.c

sixdof$(OO):	sixdof.c $(HPLANE)
	$(CC) $(CFLAGS) -c $*.c

sndmgr$(OO):	sndmgr.c $(HFILES)
	$(CC) $(CFLAGS) -c $*.c

speed$(OO):	speed.c $(HPLANE)
	$(CC) $(CFLAGS) -c $*.c

stack$(OO):	stack.c $(HFILES)
	$(CC) $(CFLAGSS) -c $*.c

stfont1$(OO):	stfont1.c $(HFILES)
	$(CC) $(CFLAGSN) -c $*.c

stfont2$(OO):	stfont2.c $(HFILES)
	$(CC) $(CFLAGSN) -c $*.c

stores$(OO):	stores.c $(HPLANE)
	$(CC) $(CFLAGS) -c $*.c

stroke$(OO):	stroke.c $(HFILES)
	$(CC) $(CFLAGSO) -c $*.c

symbols$(OO):	symbols.c $(HFILES)
	$(CC) $(CFLAGSO) -c $*.c

system$(OO):	system.c $(HFILES)
	$(CC) $(CFLAGS) -c $*.c

term$(OO):	term.c $(HFILES)
	$(CC) $(CFLAGSS) -c $*.c

tunes$(OO):	tunes.c $(HFILES) notes.h keyofc.h keyofd.h
	$(CC) $(CFLAGSN) -c $*.c

util$(OO):	util.c $(HFILES)
	$(CC) $(CFLAGS) -c $*.c

version:	version.c $(HFILES)
	$(CC) $(CFLAGSS) -c version.c

views$(OO):	views.c $(HPLANE)
	$(CC) $(CFLAGS) -c $*.c

vmodes$(OO):	vmodes.c $(HFILES)
	$(CC) $(CFLAGSS) -c $*.c

vv$(OO):	vv.c $(HPLANE)
	$(CC) $(CFLAGS) -c $*.c

waypoint$(OO):	waypoint.c $(HPLANE)
	$(CC) $(CFLAGS) -c $*.c

window$(OO):	window.c $(HFILES) keydef.h keymap.h
	$(CC) $(CFLAGS) -c $*.c
