# ------------------------------------------------------ #
# Makefile for the "Yamagi Quake 2 Client"               #
#                                                        #
# Just type "make" to compile the                        #
#  - SDL Client (quake2)                                 #
#  - SDL OpenGL-Refresher (ref_gl.so or ref_gl.dll)      #
#  - Quake II Game (baseq2)                              #
#                                                        #
# Base dependencies:                                     #
#  - SDL 1.2 (Optional)                                  #
#  - libGL                                               #
#                                                        #
# Platforms:                                             #
#  - AROS                                                #
#  - MorphOS                                             #
# ------------------------------------------------------ #

# User configurable options
# -------------------------

# Enables CD audio playback. CD audio playback is used
# for the background music and doesn't add any further
# dependencies. It should work on all platforms where
# CD playback is supported by SDL.
WITH_CDA:=yes

# Enables OGG/Vorbis support. OGG/Vorbis files can be
# used as a substitute of CD audio playback. Adds
# dependencies to libogg, libvorbis and libvorbisfile.
WITH_OGG:=yes

# Enables the optional OpenAL sound system.
# To use it your system needs libopenal.so.1
# or openal32.dll (we recommend openal-soft) 
# installed
WITH_OPENAL:=no

# Enables retexturing support. Adds 
# a dependency to libjpeg
WITH_RETEXTURING:=yes

# Enables opening of ZIP files (also known as .pk3 paks).
# Adds a dependency to libz
WITH_ZIP:=yes

WITH_RBTREE:=yes
WITH_HASH:=yes

#
# Clients will only use the Zone for memory allocations
#
ONLY_ZONE:=yes

VERBOSE=1

# ====================================================== #
#     !!! DO NOT ALTER ANYTHING BELOW THIS LINE !!!      #
# ====================================================== #

# Detect the OS
OSTYPE := $(shell uname -s)

CC = gcc
STRIP = strip
STRIPFLAGS = --strip-unneeded
ifeq ($(OSTYPE), MorphOS)
STRIPFLAGS += -K GetGameAPI -K R_GetRefAPI -K IN_BackendInit -K IN_BackendShutdown \
	-K IN_BackendMouseButtons -K IN_BackendMove -K IN_Update -K IN_KeyboardInit \
	-K IN_Close -K GetSndAPI -K morphos_so_init -K morphos_so_deinit
endif


# ----------

# Base CFLAGS.
#
# -O2 are enough optimizations.
#
# -fno-strict-aliasing since the source doesn't comply
#  with strict aliasing rules and it's next to impossible
#  to get it there...
#
# -fomit-frame-pointer since the framepointer is mostly
#  useless for debugging Quake II and slows things down.
#
# -g to build always with debug symbols. Please DO NOT
#  CHANGE THIS, since it's our only chance to debug this
#  crap when random crashes happen!
#
# -MMD to generate header dependencies.
CFLAGS := -O2 -fno-strict-aliasing -fomit-frame-pointer \
		  -Wall -pipe -g -MMD

# ----------

# Extra CFLAGS for SDL
SDLCFLAGS := $(shell sdl-config --cflags)

# ----------

# Extra LDFLAGS for SDL
SDLLDFLAGS := $(shell sdl-config --libs)

# ----------

# When make is invoked by "make VERBOSE=1" print
# the compiler and linker commands.

ifdef VERBOSE
Q :=
else
Q := @
endif

# ----------

# Phony targets
.PHONY : all client game refresher refreshersdl ref_soft ref_softsdl snd_sdl snd_ahi ctf rogue xatrix zaero

# ----------

# Builds everything
all: client game refresher ref_soft snd_ahi refreshersdl ref_softsdl snd_sdl ctf rogue xatrix zaero

# ----------

# Cleanup
clean:
	@echo "===> CLEAN"
	${Q}rm -Rf build release

# ----------

# The client
client:
	@echo "===> Building quake2"
	${Q}mkdir -p release
	$(MAKE) release/quake2

build/client/%.o: %.c
	@echo "===> CC $<"
	${Q}mkdir -p $(@D)
	${Q}$(CC) -c $(CFLAGS) -o $@ $<

ifeq ($(WITH_CDA),yes)
release/quake2 : CFLAGS += -DCDA
endif

ifeq ($(WITH_OGG),yes)
release/quake2 : CFLAGS += -DOGG
ifneq ($(OSTYPE), MorphOS)
release/quake2 : LDFLAGS += -lvorbisfile -lvorbis -logg
endif
endif

ifeq ($(WITH_OPENAL),yes)
release/quake2 : CFLAGS += -DUSE_OPENAL
ifeq ($(OSTYPE), AROS)
release/quake2 : LDFLAGS += -lopenal
endif
endif

ifeq ($(WITH_ZIP),yes)
release/quake2 : CFLAGS += -DZIP -DNOUNCRYPT
ifneq ($(OSTYPE), MorphOS)
release/quake2 : LDFLAGS += -lz
endif
endif

ifeq ($(WITH_RBTREE),yes)
release/quake2 : CFLAGS += -DUSE_RBTREE
endif

ifeq ($(ONLY_ZONE),yes)
release/quake2 : CFLAGS += -DONLY_ZONE
endif

ifeq ($(OSTYPE), AROS)
release/quake2 : LDFLAGS += -ldll
endif

ifeq ($(OSTYPE), MorphOS)
release/quake2 : CFLAGS += -noixemul
release/quake2 : LDFLAGS += -noixemul
endif

# ----------

# The GL refresher
refresher:
	@echo "===> Building ref_gl.so"
	${Q}mkdir -p release
	$(MAKE) release/ref_gl.so

build/refresher/%.o: %.c
	@echo "===> CC $<"
	${Q}mkdir -p $(@D)
	${Q}$(CC) -c $(CFLAGS) -o $@ $<

ifeq ($(WITH_HASH),yes)
release/ref_gl.so : CFLAGS += -DUSE_HASH
endif
	
ifeq ($(OSTYPE), AROS)
release/ref_gl.so : LDFLAGS += -ldll -lGL
endif

ifeq ($(OSTYPE), MorphOS)
release/ref_gl.so : CFLAGS += -noixemul
release/ref_gl.so : LDFLAGS += -noixemul -nostartfiles
endif

ifeq ($(WITH_RETEXTURING),yes)
release/ref_gl.so : CFLAGS += -DRETEXTURE
ifneq ($(OSTYPE), MorphOS)
release/ref_gl.so : LDFLAGS += -ljpeg
endif
endif

# ----------

# The SDL GL refresher
refreshersdl:
	@echo "===> Building ref_glsdl.so"
	${Q}mkdir -p release
	$(MAKE) release/ref_glsdl.so

build/refreshersdl/%.o: %.c
	@echo "===> CC $<"
	${Q}mkdir -p $(@D)
	${Q}$(CC) -c $(CFLAGS) $(SDLCFLAGS) -o $@ $<

ifeq ($(WITH_HASH),yes)
release/ref_glsdl.so : CFLAGS += -DUSE_HASH
endif
	
ifeq ($(OSTYPE), AROS)
release/ref_glsdl.so : LDFLAGS += -ldll $(SDLLDFLAGS)
endif

ifeq ($(OSTYPE), MorphOS)
release/ref_glsdl.so : CFLAGS += -noixemul
release/ref_glsdl.so : LDFLAGS += -noixemul -nostartfiles $(SDLLDFLAGS)
endif

ifeq ($(WITH_RETEXTURING),yes)
release/ref_glsdl.so : CFLAGS += -DRETEXTURE
ifneq ($(OSTYPE), MorphOS)
release/ref_glsdl.so : LDFLAGS += -ljpeg
endif
endif

# ----------

# The software refresher
ref_soft:
	@echo "===> Building ref_soft.so"
	${Q}mkdir -p release
	$(MAKE) release/ref_soft.so

build/ref_soft/%.o: %.c
	@echo "===> CC $<"
	${Q}mkdir -p $(@D)
	${Q}$(CC) -c $(CFLAGS) -o $@ $<

ifeq ($(WITH_HASH),yes)
release/ref_soft.so : CFLAGS += -DUSE_HASH
endif
	
ifeq ($(OSTYPE), AROS)
release/ref_soft.so : CFLAGS +=
release/ref_soft.so : LDFLAGS += -ldll
endif

ifeq ($(OSTYPE), MorphOS)
release/ref_soft.so : CFLAGS += -noixemul
release/ref_soft.so : LDFLAGS += -noixemul -nostartfiles
endif
 
# ----------

# The SDL software refresher
ref_softsdl:
	@echo "===> Building ref_softsdl.so"
	${Q}mkdir -p release
	$(MAKE) release/ref_softsdl.so

build/ref_softsdl/%.o: %.c
	@echo "===> CC $<"
	${Q}mkdir -p $(@D)
	${Q}$(CC) -c $(CFLAGS) $(SDLCFLAGS) -o $@ $<

ifeq ($(WITH_HASH),yes)
release/ref_softsdl.so : CFLAGS += -DUSE_HASH
endif

ifeq ($(OSTYPE), AROS)
release/ref_softsdl.so : CFLAGS +=
release/ref_softsdl.so : LDFLAGS += -ldll $(SDLLDFLAGS)
endif

ifeq ($(OSTYPE), MorphOS)
release/ref_softsdl.so : CFLAGS += -noixemul
release/ref_softsdl.so : LDFLAGS += -noixemul -nostartfiles $(SDLLDFLAGS)
endif
 
# ----------

# The baseq2 game
game:
	@echo "===> Building baseq2/game.so"
	${Q}mkdir -p release/baseq2
	$(MAKE) release/baseq2/game.so

build/baseq2/%.o: %.c
	@echo "===> CC $<"
	${Q}mkdir -p $(@D)
	${Q}$(CC) -c $(CFLAGS) -o $@ $<

#ifeq ($(ONLY_ZONE),yes)
#release/baseq2/game.so : CFLAGS += -DONLY_ZONE
#endif	
	
ifeq ($(OSTYPE), AROS)
release/baseq2/game.so : LDFLAGS += -ldll
endif

ifeq ($(OSTYPE), MorphOS)
release/baseq2/game.so : CFLAGS += -noixemul
release/baseq2/game.so : LDFLAGS += -noixemul -nostartfiles -lm
endif
 
# ----------

# The ctf game
ctf:
	@echo "===> Building ctf/game.so"
	$(Q)mkdir -p release/ctf
	$(MAKE) release/ctf/game.so

build/ctf/%.o: %.c
	@echo "===> CC $<"
	$(Q)mkdir -p $(@D)
	$(Q)$(CC) -c $(CFLAGS) -o $@ $<

ifeq ($(OSTYPE), AROS)
release/ctf/game.so : LDFLAGS += -ldll
endif

ifeq ($(OSTYPE), MorphOS)
release/ctf/game.so : CFLAGS += -noixemul
release/ctf/game.so : LDFLAGS += -noixemul -nostartfiles
endif

# ----------

# The rogue game
rogue:
	@echo "===> Building rogue/game.so"
	${Q}mkdir -p release/rogue
	$(MAKE) release/rogue/game.so

build/rogue/%.o: %.c
	@echo "===> CC $<"
	${Q}mkdir -p $(@D)
	${Q}$(CC) -c $(CFLAGS) -o $@ $<

ifeq ($(OSTYPE), AROS)
release/rogue/game.so : LDFLAGS += -ldll
endif

ifeq ($(OSTYPE), MorphOS)
release/rogue/game.so : CFLAGS += -noixemul
release/rogue/game.so : LDFLAGS += -noixemul -nostartfiles
endif
 
# ----------

# The xatrix game
xatrix:
	@echo "===> Building xatrix/game.so"
	${Q}mkdir -p release/xatrix
	$(MAKE) release/xatrix/game.so

build/xatrix/%.o: %.c
	@echo "===> CC $<"
	${Q}mkdir -p $(@D)
	${Q}$(CC) -c $(CFLAGS) -o $@ $<

ifeq ($(OSTYPE), AROS)
release/xatrix/game.so : LDFLAGS += -ldll
endif

ifeq ($(OSTYPE), MorphOS)
release/xatrix/game.so : CFLAGS += -noixemul
release/xatrix/game.so : LDFLAGS += -noixemul -nostartfiles
endif
 
# ----------

# The zaero game
zaero:
	@echo '===> Building zaero/game.so'
	$(Q)mkdir -p release/zaero
	$(MAKE) release/zaero/game.so

build/zaero/%.o: %.c
	@echo '===> CC $<'
	$(Q)mkdir -p $(@D)
	$(Q)$(CC) -c $(CFLAGS) -o $@ $<

ifeq ($(OSTYPE), AROS)
release/zaero/game.so : LDFLAGS += -ldll
endif

ifeq ($(OSTYPE), MorphOS)
release/zaero/game.so : CFLAGS += -noixemul
release/zaero/game.so : LDFLAGS += -noixemul -nostartfiles
endif

# ----------

# SDL sound DLL
snd_sdl:
	@echo "===> Building snd_sdl.so"
	${Q}mkdir -p release
	$(MAKE) release/snd_sdl.so

build/snd_sdl/%.o: %.c
	@echo "===> CC $<"
	${Q}mkdir -p $(@D)
	${Q}$(CC) -c $(CFLAGS) $(SDLCFLAGS) -o $@ $<

ifeq ($(OSTYPE), AROS)
release/snd_sdl.so : CFLAGS += $(SDLCFLAGS)
release/snd_sdl.so : LDFLAGS += -ldll $(SDLLDFLAGS)
endif

ifeq ($(OSTYPE), MorphOS)
release/snd_sdl.so : CFLAGS += -noixemul $(SDLCFLAGS)
release/snd_sdl.so : LDFLAGS += -noixemul -nostartfiles $(SDLLDFLAGS)
endif

# ----------

# AHI sound DLL
snd_ahi:
	@echo "===> Building snd_ahi.so"
	${Q}mkdir -p release
	$(MAKE) release/snd_ahi.so

build/snd_ahi/%.o: %.c
	@echo "===> CC $<"
	${Q}mkdir -p $(@D)
	${Q}$(CC) -c $(CFLAGS) -o $@ $<

ifeq ($(OSTYPE), AROS)
release/snd_ahi.so : CFLAGS += 
release/snd_ahi.so : LDFLAGS += -ldll 
endif

ifeq ($(OSTYPE), MorphOS)
release/snd_ahi.so : CFLAGS += -noixemul
release/snd_ahi.so : LDFLAGS += -noixemul -nostartfiles
endif
 
# ----------

# Used by the game
GAME_OBJS_ = \
	src/common/shared/flash.o \
	src/common/shared/rand.o \
	src/common/shared/shared.o \
    src/game/g_ai.o \
	src/game/g_chase.o \
	src/game/g_cmds.o \
	src/game/g_combat.o \
	src/game/g_func.o \
	src/game/g_items.o \
	src/game/g_main.o \
	src/game/g_misc.o \
	src/game/g_monster.o \
	src/game/g_phys.o \
	src/game/g_spawn.o \
	src/game/g_svcmds.o \
	src/game/g_target.o \
	src/game/g_trigger.o \
	src/game/g_turret.o \
	src/game/g_utils.o \
	src/game/g_weapon.o \
	src/game/monster/berserker/berserker.o \
	src/game/monster/boss2/boss2.o \
	src/game/monster/boss3/boss3.o \
	src/game/monster/boss3/boss31.o \
	src/game/monster/boss3/boss32.o \
	src/game/monster/brain/brain.o \
	src/game/monster/chick/chick.o \
	src/game/monster/flipper/flipper.o \
	src/game/monster/float/float.o \
	src/game/monster/flyer/flyer.o \
	src/game/monster/gladiator/gladiator.o \
	src/game/monster/gunner/gunner.o \
	src/game/monster/hover/hover.o \
	src/game/monster/infantry/infantry.o \
	src/game/monster/insane/insane.o \
	src/game/monster/medic/medic.o \
	src/game/monster/misc/move.o \
	src/game/monster/mutant/mutant.o \
	src/game/monster/parasite/parasite.o \
	src/game/monster/soldier/soldier.o \
	src/game/monster/supertank/supertank.o \
	src/game/monster/tank/tank.o \
	src/game/player/client.o \
	src/game/player/hud.o \
	src/game/player/trail.o \
	src/game/player/view.o \
	src/game/player/weapon.o \
    src/game/savegame/savegame.o

ifeq ($(OSTYPE), MorphOS)
GAME_OBJS_ += \
	src/morphos/libnix_so.o
endif

# ----------

# used by ctf
CTF_OBJS_ = \
	src/ctf/g_ai.o \
	src/ctf/g_chase.o \
	src/ctf/g_cmds.o \
	src/ctf/g_combat.o \
	src/ctf/g_ctf.o \
	src/ctf/g_func.o \
	src/ctf/g_items.o \
	src/ctf/g_main.o \
	src/ctf/g_misc.o \
	src/ctf/g_monster.o \
	src/ctf/g_phys.o \
	src/ctf/g_save.o \
	src/ctf/g_spawn.o \
	src/ctf/g_svcmds.o \
	src/ctf/g_target.o \
	src/ctf/g_trigger.o \
	src/ctf/g_utils.o \
	src/ctf/g_weapon.o \
	src/ctf/menu/menu.o \
	src/ctf/monster/move.o \
	src/ctf/player/client.o \
	src/ctf/player/hud.o \
	src/ctf/player/trail.o \
	src/ctf/player/view.o \
	src/ctf/player/weapon.o \
	src/ctf/shared/shared.o 

ifeq ($(OSTYPE), MorphOS)
CTF_OBJS_ += \
	src/morphos/libnix_so.o
endif

# ----------

# used by rogue
ROGUE_OBJS_ = \
	src/rogue/g_ai.o \
	src/rogue/g_chase.o \
	src/rogue/g_cmds.o \
	src/rogue/g_combat.o \
	src/rogue/g_func.o \
	src/rogue/g_items.o \
	src/rogue/g_main.o \
	src/rogue/g_misc.o \
	src/rogue/g_monster.o \
	src/rogue/g_newai.o \
	src/rogue/g_newdm.o \
	src/rogue/g_newfnc.o \
	src/rogue/g_newtarg.o \
	src/rogue/g_newtrig.o \
	src/rogue/g_newweap.o \
	src/rogue/g_phys.o \
	src/rogue/g_spawn.o \
	src/rogue/g_sphere.o \
	src/rogue/g_svcmds.o \
	src/rogue/g_target.o \
	src/rogue/g_trigger.o \
	src/rogue/g_turret.o \
	src/rogue/g_utils.o \
	src/rogue/g_weapon.o \
	src/rogue/dm/ball.o \
	src/rogue/dm/tag.o \
	src/rogue/monster/actor/actor.o \
	src/rogue/monster/berserker/berserker.o \
	src/rogue/monster/boss2/boss2.o \
	src/rogue/monster/boss3/boss3.o \
	src/rogue/monster/boss3/boss31.o \
	src/rogue/monster/boss3/boss32.o \
	src/rogue/monster/brain/brain.o \
	src/rogue/monster/carrier/carrier.o \
	src/rogue/monster/chick/chick.o \
	src/rogue/monster/flipper/flipper.o \
	src/rogue/monster/float/float.o \
	src/rogue/monster/flyer/flyer.o \
	src/rogue/monster/gladiator/gladiator.o \
	src/rogue/monster/gunner/gunner.o \
	src/rogue/monster/hover/hover.o \
	src/rogue/monster/infantry/infantry.o \
	src/rogue/monster/insane/insane.o \
	src/rogue/monster/medic/medic.o \
	src/rogue/monster/misc/move.o \
	src/rogue/monster/mutant/mutant.o \
	src/rogue/monster/parasite/parasite.o \
	src/rogue/monster/soldier/soldier.o \
	src/rogue/monster/stalker/stalker.o \
	src/rogue/monster/supertank/supertank.o \
	src/rogue/monster/tank/tank.o \
	src/rogue/monster/turret/turret.o \
	src/rogue/monster/widow/widow.o \
	src/rogue/monster/widow/widow2.o \
	src/rogue/player/client.o \
	src/rogue/player/hud.o \
	src/rogue/player/trail.o \
	src/rogue/player/view.o \
	src/rogue/player/weapon.o \
	src/rogue/savegame/savegame.o \
	src/rogue/shared/flash.o \
	src/rogue/shared/rand.o \
	src/rogue/shared/shared.o 

ifeq ($(OSTYPE), MorphOS)
ROGUE_OBJS_ += \
	src/morphos/libnix_so.o
endif	

# ----------

# used by xatrix
XATRIX_OBJS_ = \
	src/xatrix/g_ai.o \
	src/xatrix/g_chase.o \
	src/xatrix/g_cmds.o \
	src/xatrix/g_combat.o \
	src/xatrix/g_func.o \
	src/xatrix/g_items.o \
	src/xatrix/g_main.o \
	src/xatrix/g_misc.o \
	src/xatrix/g_monster.o \
	src/xatrix/g_phys.o \
	src/xatrix/g_spawn.o \
	src/xatrix/g_svcmds.o \
	src/xatrix/g_target.o \
	src/xatrix/g_trigger.o \
	src/xatrix/g_turret.o \
	src/xatrix/g_utils.o \
	src/xatrix/g_weapon.o \
	src/xatrix/monster/actor/actor.o \
	src/xatrix/monster/berserker/berserker.o \
	src/xatrix/monster/boss2/boss2.o \
	src/xatrix/monster/boss3/boss3.o \
	src/xatrix/monster/boss3/boss31.o \
	src/xatrix/monster/boss3/boss32.o \
	src/xatrix/monster/boss5/boss5.o \
	src/xatrix/monster/brain/brain.o \
	src/xatrix/monster/chick/chick.o \
	src/xatrix/monster/fixbot/fixbot.o \
	src/xatrix/monster/flipper/flipper.o \
	src/xatrix/monster/float/float.o \
	src/xatrix/monster/flyer/flyer.o \
	src/xatrix/monster/gekk/gekk.o \
	src/xatrix/monster/gladiator/gladb.o \
	src/xatrix/monster/gladiator/gladiator.o \
	src/xatrix/monster/gunner/gunner.o \
	src/xatrix/monster/hover/hover.o \
	src/xatrix/monster/infantry/infantry.o \
	src/xatrix/monster/insane/insane.o \
	src/xatrix/monster/medic/medic.o \
	src/xatrix/monster/misc/move.o \
	src/xatrix/monster/mutant/mutant.o \
	src/xatrix/monster/parasite/parasite.o \
	src/xatrix/monster/soldier/soldier.o \
	src/xatrix/monster/supertank/supertank.o \
	src/xatrix/monster/tank/tank.o \
	src/xatrix/player/client.o \
	src/xatrix/player/hud.o \
	src/xatrix/player/trail.o \
	src/xatrix/player/view.o \
	src/xatrix/player/weapon.o \
	src/xatrix/savegame/savegame.o \
	src/xatrix/shared/flash.o \
	src/xatrix/shared/rand.o \
	src/xatrix/shared/shared.o 

ifeq ($(OSTYPE), MorphOS)
XATRIX_OBJS_ += \
	src/morphos/libnix_so.o
endif	
	
# ----------

# used by zaero
ZAERO_OBJS_ = \
	src/zaero/g_ai.o \
	src/zaero/g_cmds.o \
	src/zaero/g_combat.o \
	src/zaero/g_func.o \
	src/zaero/g_items.o \
	src/zaero/g_main.o \
	src/zaero/g_misc.o \
	src/zaero/g_monster.o \
	src/zaero/g_phys.o \
	src/zaero/g_spawn.o \
	src/zaero/g_svcmds.o \
	src/zaero/g_target.o \
	src/zaero/g_trigger.o \
	src/zaero/g_turret.o \
	src/zaero/g_utils.o \
	src/zaero/g_weapon.o \
	src/zaero/monster/actor/actor.o \
	src/zaero/monster/berserker/berserker.o \
	src/zaero/monster/boss/boss.o \
	src/zaero/monster/boss2/boss2.o \
	src/zaero/monster/boss3/boss3.o \
	src/zaero/monster/boss3/boss31.o \
	src/zaero/monster/boss3/boss32.o \
	src/zaero/monster/brain/brain.o \
	src/zaero/monster/chick/chick.o \
	src/zaero/monster/flipper/flipper.o \
	src/zaero/monster/float/float.o \
	src/zaero/monster/flyer/flyer.o \
	src/zaero/monster/gladiator/gladiator.o \
	src/zaero/monster/gunner/gunner.o \
	src/zaero/monster/handler/handler.o \
	src/zaero/monster/hound/hound.o \
	src/zaero/monster/hover/hover.o \
	src/zaero/monster/infantry/infantry.o \
	src/zaero/monster/insane/insane.o \
	src/zaero/monster/medic/medic.o \
	src/zaero/monster/misc/move.o \
	src/zaero/monster/mutant/mutant.o \
	src/zaero/monster/parasite/parasite.o \
	src/zaero/monster/sentien/sentien.o \
	src/zaero/monster/soldier/soldier.o \
	src/zaero/monster/supertank/supertank.o \
	src/zaero/monster/tank/tank.o \
	src/zaero/player/client.o \
	src/zaero/player/hud.o \
	src/zaero/player/trail.o \
	src/zaero/player/view.o \
	src/zaero/player/weapon.o \
	src/zaero/savegame/savegame.o \
	src/zaero/shared/flash.o \
	src/zaero/shared/shared.o \
    src/zaero/zaero/acannon.o \
    src/zaero/zaero/ai.o \
    src/zaero/zaero/anim.o \
    src/zaero/zaero/camera.o \
    src/zaero/zaero/frames.o \
    src/zaero/zaero/item.o \
    src/zaero/zaero/mtest.o \
    src/zaero/zaero/spawn.o \
    src/zaero/zaero/trigger.o \
    src/zaero/zaero/weapon.o

ifeq ($(OSTYPE), MorphOS)
ZAERO_OBJS_ += \
	src/morphos/libnix_so.o
endif

# ----------

# Used by the client
CLIENT_OBJS_ := \
	src/client/cl_cin.o \
	src/client/cl_console.o \
	src/client/cl_download.o \
	src/client/cl_effects.o \
	src/client/cl_entities.o \
	src/client/cl_input.o \
	src/client/cl_inventory.o \
	src/client/cl_keyboard.o \
	src/client/cl_lights.o \
	src/client/cl_main.o \
	src/client/cl_network.o \
	src/client/cl_parse.o \
	src/client/cl_particles.o \
	src/client/cl_prediction.o \
	src/client/cl_screen.o \
	src/client/cl_tempentities.o \
	src/client/cl_view.o \
	src/client/menu/menu.o \
	src/client/menu/qmenu.o \
	src/client/menu/videomenu.o \
	src/client/sound/snd_al.o \
	src/client/sound/snd_dma.o \
	src/client/sound/snd_mem.o \
	src/client/sound/snd_mix.o \
	src/client/sound/snd_vorbis.o \
	src/client/sound/snd_wav.o \
	src/common/argproc.o \
	src/common/clientserver.o \
	src/common/collision.o \
	src/common/crc.o \
	src/common/cmdparser.o \
	src/common/cvar.o \
	src/common/filesystem.o \
	src/common/glob.o \
	src/common/md4.o \
	src/common/movemsg.o \
	src/common/misc.o \
	src/common/netchan.o \
	src/common/pmove.o \
	src/common/szone.o \
	src/common/zone.o \
	src/common/shared/flash.o \
	src/common/shared/rand.o \
	src/common/shared/shared.o \
	src/common/unzip/ioapi.o \
	src/common/unzip/unzip.o \
	src/server/sv_cmd.o \
	src/server/sv_conless.o \
	src/server/sv_entities.o \
	src/server/sv_game.o \
	src/server/sv_init.o \
	src/server/sv_main.o \
	src/server/sv_save.o \
	src/server/sv_send.o \
	src/server/sv_user.o \
	src/server/sv_world.o

ifeq ($(WITH_RBTREE),yes)
CLIENT_OBJS_ += \
	src/common/redblack/redblack.o
endif	
	
ifeq ($(OSTYPE), AROS)
CLIENT_OBJS_ += \
	src/aros/snd_amiga.o \
	src/aros/cd_amiga.o \
	src/aros/twfsound_cd.o \
	src/aros/hunk.o \
	src/unix/main.o \
 	src/aros/net_udp.o \
	src/aros/qal.o \
	src/unix/system.o \
 	src/unix/vid.o
else
ifeq ($(OSTYPE), MorphOS)
CLIENT_OBJS_ += \
	src/aros/snd_amiga.o \
	src/aros/cd_amiga.o \
	src/aros/twfsound_cd.o \
	src/aros/hunk.o \
	src/unix/main.o \
 	src/aros/net_udp.o \
	src/aros/qal.o \
	src/unix/system.o \
 	src/unix/vid.o
endif
endif

# ----------

# Used by the OpenGL refresher
OPENGL_OBJS_ = \
	src/refresh/r_draw.o \
	src/refresh/r_image.o \
	src/refresh/r_light.o \
	src/refresh/r_lightmap.o \
	src/refresh/r_main.o \
	src/refresh/r_mesh.o \
	src/refresh/r_misc.o \
	src/refresh/r_model.o \
	src/refresh/r_scrap.o \
	src/refresh/r_surf.o \
	src/refresh/r_warp.o \
	src/refresh/files/md2.o \
	src/refresh/files/pcx.o \
	src/refresh/files/sp2.o \
	src/refresh/files/tga.o \
	src/refresh/files/jpeg.o \
	src/refresh/files/wal.o \
	src/aros/input.o \
    src/common/glob.o \
    src/common/shared/shared.o

ifeq ($(OSTYPE), AROS)
OPENGL_OBJS_ += \
	src/aros/refresh.o \
	src/aros/hunk.o \
	src/aros/qgl.o
else
ifeq ($(OSTYPE), MorphOS)
OPENGL_OBJS_ += \
	src/morphos/libnix_so.o \
	src/morphos/refresh.o \
	src/aros/hunk.o \
	src/aros/qgl.o
endif
endif

# ----------

# Used by the SDL OpenGL refresher
OPENGLSDL_OBJS_ = \
	src/refresh/r_draw.o \
	src/refresh/r_image.o \
	src/refresh/r_light.o \
	src/refresh/r_lightmap.o \
	src/refresh/r_main.o \
	src/refresh/r_mesh.o \
	src/refresh/r_misc.o \
	src/refresh/r_model.o \
	src/refresh/r_scrap.o \
	src/refresh/r_surf.o \
	src/refresh/r_warp.o \
	src/refresh/files/md2.o \
	src/refresh/files/pcx.o \
	src/refresh/files/sp2.o \
	src/refresh/files/tga.o \
	src/refresh/files/jpeg.o \
	src/refresh/files/wal.o \
	src/sdl/input.o \
	src/sdl/refresh.o \
    src/common/glob.o \
    src/common/shared/shared.o

ifeq ($(OSTYPE), AROS)
OPENGLSDL_OBJS_ += \
	src/aros/hunk.o \
	src/aros/qgl.o
else
ifeq ($(OSTYPE), MorphOS)
OPENGLSDL_OBJS_ += \
	src/morphos/libnix_so.o \
	src/aros/hunk.o \
	src/aros/qgl.o
endif
endif

# ----------

# Used by the Software refresher
SOFT_OBJS_ = \
	src/ref_soft/r_aclip.o \
	src/ref_soft/r_alias.o \
	src/ref_soft/r_bsp.o \
	src/ref_soft/r_draw.o \
	src/ref_soft/r_edge.o \
	src/ref_soft/r_image.o \
	src/ref_soft/r_light.o \
	src/ref_soft/r_main.o \
	src/ref_soft/r_misc.o \
	src/ref_soft/r_model.o \
	src/ref_soft/r_part.o \
	src/ref_soft/r_poly.o \
	src/ref_soft/r_polyse.o \
	src/ref_soft/r_rast.o \
	src/ref_soft/r_scan.o \
	src/ref_soft/r_sprite.o \
	src/ref_soft/r_surf.o \
	src/aros/input.o \
	src/aros/refresh_soft.o \
    src/common/glob.o \
    src/common/shared/shared.o

ifeq ($(OSTYPE), AROS)
SOFT_OBJS_ += \
	src/aros/hunk.o
else
ifeq ($(OSTYPE), MorphOS)
SOFT_OBJS_ += \
	src/morphos/libnix_so.o \
	src/aros/hunk.o
endif
endif

# ----------

# Used by the Software SDL refresher
SOFTSDL_OBJS_ = \
	src/ref_soft/r_aclip.o \
	src/ref_soft/r_alias.o \
	src/ref_soft/r_bsp.o \
	src/ref_soft/r_draw.o \
	src/ref_soft/r_edge.o \
	src/ref_soft/r_image.o \
	src/ref_soft/r_light.o \
	src/ref_soft/r_main.o \
	src/ref_soft/r_misc.o \
	src/ref_soft/r_model.o \
	src/ref_soft/r_part.o \
	src/ref_soft/r_poly.o \
	src/ref_soft/r_polyse.o \
	src/ref_soft/r_rast.o \
	src/ref_soft/r_scan.o \
	src/ref_soft/r_sprite.o \
	src/ref_soft/r_surf.o \
	src/sdl/input.o \
	src/sdl/refresh_soft.o \
    src/common/glob.o \
    src/common/shared/shared.o

ifeq ($(OSTYPE), AROS)
SOFTSDL_OBJS_ += \
	src/aros/hunk.o
else
ifeq ($(OSTYPE), MorphOS)
SOFTSDL_OBJS_ += \
	src/morphos/libnix_so.o \
	src/aros/hunk.o
endif
endif

# ----------

# Used by the SDL sound backend
SDLSND_OBJS_ = \
	src/snd_sdl/snd_sdl.o

ifeq ($(OSTYPE), MorphOS)
SDLSND_OBJS_ += \
	src/morphos/libnix_so.o
endif

# ----------

# Used by the AHI sound backend
AHISND_OBJS_ = \
	src/snd_ahi/snd_ahi.o

ifeq ($(OSTYPE), MorphOS)
AHISND_OBJS_ += \
	src/morphos/libnix_so.o
endif


# ----------

# Rewrite pathes to our object directory
CLIENT_OBJS = $(patsubst %,build/client/%,$(CLIENT_OBJS_))
OPENGL_OBJS = $(patsubst %,build/refresher/%,$(OPENGL_OBJS_))
OPENGLSDL_OBJS = $(patsubst %,build/refreshersdl/%,$(OPENGLSDL_OBJS_))
SOFT_OBJS = $(patsubst %,build/ref_soft/%,$(SOFT_OBJS_))
SOFTSDL_OBJS = $(patsubst %,build/ref_softsdl/%,$(SOFTSDL_OBJS_))
GAME_OBJS = $(patsubst %,build/baseq2/%,$(GAME_OBJS_))
CTF_OBJS = $(patsubst %,build/ctf/%,$(CTF_OBJS_))
ROGUE_OBJS = $(patsubst %,build/rogue/%,$(ROGUE_OBJS_))
XATRIX_OBJS = $(patsubst %,build/xatrix/%,$(XATRIX_OBJS_))
ZAERO_OBJS = $(patsubst %,build/zaero/%,$(ZAERO_OBJS_))
SDLSND_OBJS = $(patsubst %,build/snd_sdl/%,$(SDLSND_OBJS_))
AHISND_OBJS = $(patsubst %,build/snd_ahi/%,$(AHISND_OBJS_))

# ----------

# Generate header dependencies
CLIENT_DEPS= $(CLIENT_OBJS:.o=.d)
OPENGL_DEPS= $(OPENGL_OBJS:.o=.d)
OPENGLSDL_DEPS= $(OPENGLSDL_OBJS:.o=.d)
SOFT_DEPS= $(SOFT_OBJS:.o=.d)
SOFTSDL_DEPS= $(SOFTSDL_OBJS:.o=.d)
GAME_DEPS= $(GAME_OBJS:.o=.d)
CTF_DEPS= $(CTF_OBJS:.o=.d)
ROGUE_DEPS= $(ROGUE_OBJS:.o=.d)
XATRIX_DEPS= $(XATRIX_OBJS:.o=.d)
ZAERO_DEPS= $(ZAERO_OBJS:.o=.d)
SDLSND_DEPS= $(SDLSND_OBJS:.o=.d)
AHISND_DEPS= $(AHISND_OBJS:.o=.d)

# ----------

# Suck header dependencies in
-include $(CLIENT_DEPS)
-include $(OPENGL_DEPS)
-include $(OPENGLSDL_DEPS)
-include $(SOFT_DEPS)
-include $(SOFTSDL_DEPS)
-include $(GAME_DEPS)
-include $(CTF_DEPS)
-include $(ROGUE_DEPS)
-include $(XATRIX_DEPS)
-include $(ZAERO_DEPS)
-include $(SDLSND_DEPS)
-include $(AHISND_DEPS)

# ----------

# release/quake2
release/quake2 : $(CLIENT_OBJS)
	@echo "===> LD $@"
	${Q}$(CC) $(CLIENT_OBJS) $(LDFLAGS) -Wl,-Map=quake2.map,--traditional-format -o $@
	${Q}$(STRIP) $(STRIPFLAGS) $@
 
# release/ref_gl.so
release/ref_gl.so : $(OPENGL_OBJS)
	@echo "===> LD $@"
	${Q}$(CC) $(OPENGL_OBJS) $(LDFLAGS) -Wl,-Map=ref_gl.map,--traditional-format -o $@
	${Q}$(STRIP) $(STRIPFLAGS) $@
	
# release/ref_glsdl.so
release/ref_glsdl.so : $(OPENGLSDL_OBJS)
	@echo "===> LD $@"
	${Q}$(CC) $(OPENGLSDL_OBJS) $(LDFLAGS) -o $@	
	${Q}$(STRIP) $(STRIPFLAGS) $@
	
# release/ref_soft.so
release/ref_soft.so : $(SOFT_OBJS)
	@echo "===> LD $@"
	${Q}$(CC) $(SOFT_OBJS) $(LDFLAGS) -Wl,-Map=ref_soft.map,--traditional-format -o $@
	${Q}$(STRIP) $(STRIPFLAGS) $@

# release/ref_softsdl.so
release/ref_softsdl.so : $(SOFTSDL_OBJS)
	@echo "===> LD $@"
	${Q}$(CC) $(SOFTSDL_OBJS) $(LDFLAGS) -o $@
	${Q}$(STRIP) $(STRIPFLAGS) $@

# release/baseq2/game.so
release/baseq2/game.so : $(GAME_OBJS)
	@echo "===> LD $@"
	${Q}$(CC) $(GAME_OBJS) $(LDFLAGS) -o $@
	${Q}$(STRIP) $(STRIPFLAGS) $@

release/ctf/game.so : $(CTF_OBJS)
	@echo "===> LD $@"
	$(Q)$(CC) $(CTF_OBJS) $(LDFLAGS) -o $@ 
	${Q}$(STRIP) $(STRIPFLAGS) $@

release/rogue/game.so : $(ROGUE_OBJS)
	@echo "===> LD $@"
	${Q}$(CC) $(ROGUE_OBJS) $(LDFLAGS) -o $@
	${Q}$(STRIP) $(STRIPFLAGS) $@

release/xatrix/game.so : $(XATRIX_OBJS)
	@echo "===> LD $@"
	${Q}$(CC) $(XATRIX_OBJS) $(LDFLAGS) -o $@
	${Q}$(STRIP) $(STRIPFLAGS) $@

release/zaero/game.so : $(ZAERO_OBJS)
	@echo '===> LD $@'
	${Q}$(CC) $(ZAERO_OBJS) $(LDFLAGS) -o $@
	${Q}$(STRIP) $(STRIPFLAGS) $@

# release/snd_sdl.so
release/snd_sdl.so : $(SDLSND_OBJS)
	@echo "===> LD $@"
	${Q}$(CC) $(SDLSND_OBJS) $(LDFLAGS) -o $@
	${Q}$(STRIP) $(STRIPFLAGS) $@

# release/snd_ahi.so
release/snd_ahi.so : $(AHISND_OBJS)
	@echo "===> LD $@"
	${Q}$(CC) $(AHISND_OBJS) $(LDFLAGS) -Wl,-Map=snd_ahi.map,--traditional-format -o $@
	${Q}$(STRIP) $(STRIPFLAGS) $@	
