#
# Quake Makefile for Amiga SAS/C
#

COMMONFLAGS = parm=reg cpu=68060 math=68881 verbose \
        code=far stringmerge data=far absfuncpointer define=AMIGA

SCFLAGS = optimize opttime optsched nodebug nostackcheck $(COMMONFLAGS)

#SCFLAGS = nooptimize debug=full stackcheck $(COMMONFLAGS)

#SCFLAGS = profile optimize opttime debug=full nostackcheck $(COMMONFLAGS)

COMMONPPCFLAGS = parm=reg verbose stringmerge code=far data=far define=AMIGA

SCPPCFLAGS = optimize opttime optsched nodebug nostackcheck $(COMMONPPCFLAGS)

#SCPPCFLAGS = nooptimize debug=full $(COMMONPPCFLAGS)

#SCPPCFLAGS = optimize opttime optsched debug=full nostackcheck $(COMMONPPCFLAGS)

OBJS1 = cd_amiga.o chase.o cl_demo.o cl_input.o cl_main.o cl_parse.o cl_tent.o cmd.o \
 common.o console.o crc.o cvar.o d_edge.o d_fill.o d_init.o d_modech.o \
 d_part.o d_polyse.o d_scan.o d_sky.o d_sprite.o d_surf.o d_vars.o d_zpoint.o \

OBJS2 = draw.o host.o host_cmd.o in_amiga.o keys.o mathlib.o menu.o model.o \
 net_dgrm.o net_loop.o net_main.o net_bsd.o net_amigaudp.o net_vcr.o nonintel.o pr_cmds.o \
 pr_edict.o pr_exec.o r_aclip.o r_alias.o r_bsp.o r_draw.o r_edge.o r_efrag.o \

OBJS3 = r_light.o r_main.o r_misc1.o r_misc2.o r_part.o r_sky.o r_sprite.o \
 r_surf.o r_vars.o sbar.o screen.o snd_dma.o snd_mem.o snd_mix.o snd_amiga.o \
 sv_main.o sv_move.o sv_phys.o sv_user.o sys_amiga.o vid_amiga.o view.o wad.o \
 world.o zone.o

OBJS = $(OBJS1) $(OBJS2) $(OBJS3)

# *.oPPC files are compiled with scppc
# *.oPPC2 files are compiled with ppc-amigaos-gcc

#OBJSPPC1 = lib:sprofutil.o cd_amiga.oPPC chase.oPPC cl_demo.oPPC cl_input.oPPC cl_main.oPPC cl_parse.oPPC cl_tent.oPPC cmd.oPPC \
OBJSPPC1 = cd_amiga.oPPC chase.oPPC cl_demo.oPPC cl_input.oPPC cl_main.oPPC cl_parse.oPPC cl_tent.oPPC cmd.oPPC \
 common.oPPC console.oPPC crc.oPPC cvar.oPPC d_edge.oPPC2 d_fill.oPPC d_init.oPPC d_modech.oPPC \
 d_part.oPPC2 d_polyse.oPPC2 d_scan.oPPC2 d_sky.oPPC d_sprite.oPPC d_surf.oPPC d_vars.oPPC d_zpoint.oPPC \

OBJSPPC2 = draw.oPPC host.oPPC host_cmd.oPPC in_amiga.oPPC keys.oPPC mathlib.oPPC menu.oPPC model.oPPC \
 net_dgrm.oPPC net_loop.oPPC net_main.oPPC net_bsd.oPPC net_amigaudp.oPPC net_vcr.oPPC nonintel.oPPC pr_cmds.oPPC \
 pr_edict.oPPC pr_exec.oPPC r_aclip.oPPC2 r_alias.oPPC2 r_bsp.oPPC2 r_draw.oPPC2 r_edge.oPPC2 r_efrag.oPPC \

OBJSPPC3 = r_light.oPPC2 r_main.oPPC r_misc1.oPPC r_misc2.oPPC r_part.oPPC r_sky.oPPC r_sprite.oPPC \
 r_surf.oPPC2 r_vars.oPPC sbar.oPPC screen.oPPC snd_dma.oPPC snd_mem.oPPC snd_mix.oPPC snd_amiga.oPPC \
 sv_main.oPPC sv_move.oPPC sv_phys.oPPC sv_user.oPPC sys_amiga.oPPC vid_amiga.oPPC view.oPPC wad.oPPC \
 world.oPPC zone.oPPC amiga_ppc_c2p.oPPC amiga_cgxtagfns.oPPC amiga_socket_lib.oPPC

OBJSPPC = $(OBJSPPC1) $(OBJSPPC2) $(OBJSPPC3)

all: awinquake awinquakeppc

awinquake: $(OBJS1) $(OBJS2) $(OBJS3)
	slink < with <
	from lib:c.o $(OBJS1) $(OBJS2) $(OBJS3) to awinquake \
	lib lib:scm881.lib lib:sc.lib lib:amiga.lib \
	noicons verbose
<
#	addsym

awinquakeppc: temp1.o temp2.o temp3.o amiga_timer.o
	ppc-amigaos-ld -r -o awinquakeppc lib:c_ppc.o temp1.o temp2.o temp3.o \
		amiga_timer.o lib:libmoto.a lib:scppc.a lib:end.o
	protect awinquakeppc +e

.c.o:
	sc ${SCFLAGS} $<

.c.oPPC:
	scppc ${SCPPCFLAGS} objectname $*.oPPC $<

.c.oPPC2:
	ppc-amigaos-gcc -c -O3 -mcpu=604 -fomit-frame-pointer -funroll-loops -ffast-math -o $*.oPPC2 -Ignu:include $<

.s.oPPC:
	pasm -o $*.oPPC $<

temp1.o: $(OBJSPPC1)
	ppc-amigaos-ld $(LDFLAGS) -r -o temp1.o $(OBJSPPC1)

temp2.o: $(OBJSPPC2)
	ppc-amigaos-ld $(LDFLAGS) -r -o temp2.o $(OBJSPPC2)

temp3.o: $(OBJSPPC3)
	ppc-amigaos-ld $(LDFLAGS) -r -o temp3.o $(OBJSPPC3)

amiga_timer.o: amiga_timer.s
	pasm -o $*.o $<

# r_misc2.c doesn't work on 680x0 when optimised
r_misc2.o: r_misc2.c
	sc nooptimize nodebug $(COMMONFLAGS) r_misc2.c

net_amigaudp.o: net_amigaudp.c
	sc $(SCFLAGS) $< INCLUDEDIRECTORY=amitcp:SDK/netinclude

net_amigaudp.oPPC: net_amigaudp.c
	scppc $(SCPPCFLAGS) objectname $*.oPPC $< INCLUDEDIRECTORY=amitcp:SDK/netinclude

amiga_socket_lib.oPPC: amiga_socket_lib.s
	pasm $<
	rename $*.o $*.oPPC

clean:
	delete *.o
	delete *.oPPC
