# 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

INSTDIR=	/usr/games/fly8

SYSTEM= UNIX

# If you have assembly support, define:
#	-DUSE_ASM
# If you want to use C support with debuging enabled define:
#	-DDEBUG_MULDIV
# If you want joystick support:
#	-DHAVE_JOYSTICK
# If your system is SUN:
#	-DSUN
# For SUN SPARC also add
#	-DSPARC
# If your system is Linux:
#	-DLINUX
# If you still have problems then you still have these available:
#	-DNEED_STRICMP -DNEED_LABS
#

OFLAGS=	-O2 -m486 -Wall 

SHFLAGS=
YFLAGS= -D$(SYSTEM) -DLINUX -DHAVE_JOYSTICK $(OFLAGS) $(SHFLAGS)
XFLAGS= $(YFLAGS)
CFLAGS= -I$(SYSTEM) -I. $(XFLAGS)
IFLAGS= -I$(SYSTEM) -I. $(YFLAGS)

# IMPORTANT NOTE: check_stack() in fly8.c allocates a large automatic
# array to measure stack usage. On systems where the stack size in fixed
# in advance you MUST ensure that this array does not violate the stack
# size. MSDOS is an example of a system where this is the case.

MAKE=	make

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

#	Portable programs
#
COBJS=	fly8.o loop.o show.o objects.o log.o pointer.o device.o debug.o \
	remote.o ifuncs.o autop.o mat.o info.o stroke.o cockpit.o pid.o \
	tunes.o command.o body.o keypad.o land.o sky.o random.o sound.o \
	keyboard.o macros.o menu.o menus.o player.o netport.o memory.o \
	vmodes.o stfont1.o stfont2.o colors.o getstr.o window.o message.o \
	hud.o radar.o heading.o altitude.o speed.o pitch.o nav.o system.o \
	init.o term.o util.o piper.o views.o hudmenu.o nosound.o stack.o \
	need.o max.o nosystem.o notimer.o engine.o sixdof.o gear.o panel.o \
	prm.o symbols.o field.o compass.o airdata.o nokbd.o stores.o \
	$(OOBJS)

OBJS= $(COBJS)

LIBS = -lm -lX11

HFILES = fly.h $(SYSTEM)/config.h

.PRECIOUS: itabs.c

now:	fly

all:	fly dat util

fly:	sys fly8

dat:	shape parm

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

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

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

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

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

fly8.o:		$(HFILES)

$(COBJS):	$(HFILES)

version:	version.c
	$(CC) $(CFLAGS) -c version.c

tunes.o:	$(HFILES) notes.h keyofc.h keyofd.h

colors.o:	colors.h

max.o:		keyname.h

autop.o:	plane.h hud.h

command.o:	plane.h hud.h

engine.o:	plane.h hud.h

gear.o:		plane.h hud.h

hud.o:		plane.h hud.h

obasic.o:	plane.h hud.h

oclassic.o:	plane.h hud.h

ofplane.o:	plane.h hud.h

om61.o:		plane.h hud.h

omk82.o:	plane.h hud.h

oplane.o:	plane.h hud.h

oxplane.o:	plane.h hud.h

oyplane.o:	plane.h hud.h

panel.o:	plane.h hud.h

prm.o:		plane.h hud.h

radar.o:	plane.h hud.h

sixdof.o:	plane.h hud.h

stores.o:	plane.h hud.h

altitude.o:	hud.h

compass.o:	hud.h

heading.o:	hud.h

hudmenu.o:	hud.h

info.o:		hud.h

loop.o:		hud.h

nav.o:		hud.h

oviewer.o:	hud.h

piper.o:	hud.h

pitch.o:	hud.h

speed.o:	hud.h

views.o:	hud.h

ifuncs.o:	ifuncs.c itabs.c $(HFILES)
	$(CC) -c $(CFLAGS) -DEXT_TABS ifuncs.c

#
# Use this to create itabs.c, then -DEXT_TAB for ifuncs.o
#

ifuncsm.o:	ifuncs.c $(HFILES)
	$(CC) -c $(IFLAGS) -DGEN_TAB -o ifuncsm.o ifuncs.c

debug.o:	debug.c
	$(CC) -c $(IFLAGS) debug.c

ifuncsm:	ifuncsm.o debug.o
	$(CC) $(CFLAGS) -o ifuncsm ifuncsm.o debug.o -lm

itabs.c:	ifuncsm
	./ifuncsm >itabs.c

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:	fly shape parm util
	-mkdir $(INSTDIR)
	cp	fly8 *.max \
		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)/fly8srv $(SYSTEM)/udpcli \
		docs/*.doc docs/history \
		$(INSTDIR)
	cp shapes/wf16.vxx	$(INSTDIR)/plane.vxx

reinstall:
	cp	fly8 \
		$(SYSTEM)/fly8srv $(SYSTEM)/udpcli \
		$(INSTDIR)

release:	fly shape parm
	(d=`date +%m%d%H`;\
	cd $(INSTDIR);\
	rm *.mac *.log;\
	tar czvf LX$$d.tgz .;\
	mwrite LX$$d.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
