#
# Quake standalone makefile for unified tree
#

VERSION=0.1.0

ifneq (,$(findstring alpha,$(shell uname -m)))
ARCH=axp
else
ARCH=i386
endif

PROJECT_DIR=..

COMMON_DIR=$(PROJECT_DIR)/common
STAND_DIR=$(PROJECT_DIR)/standalone

BUILD_DEBUG_DIR=debug-$(ARCH)
BUILD_RELEASE_DIR=release-$(ARCH)

X11_DIR=/usr/X11R6

INCL=-I. -I$(STAND_DIR) -I$(COMMON_DIR) -I$(X11_DIR)/include

CC=gcc

BASE_CFLAGS=-Wall -DSTANDALONE -Dstricmp=strcasecmp $(INCL)
DEBUG_CFLAGS=$(BASE_CFLAGS) -g

ifeq ($(ARCH),i386)
RELEASE_CFLAGS=$(BASE_CFLAGS) -m486 -O6 -ffast-math -funroll-loops \
	-fomit-frame-pointer -fexpensive-optimizations -malign-loops=2 \
	-malign-jumps=2 -malign-functions=2
else
RELEASE_CFLAGS=$(BASE_CFLAGS) -ffast-math -funroll-loops \
	-fomit-frame-pointer -fexpensive-optimizations
endif
GL_CFLAGS=-DGLQUAKE -I$(X11_DIR)/include

LDFLAGS=-lm
SVGA_LDFLAGS=$(LDFLAGS) -lvga
X11_LDFLAGS=-L$(X11_DIR)/lib $(LDFLAGS) -lX11 -lXext
GL_X11_LDFLAGS=-L$(X11_DIR)/lib $(LDFLAGS) -lGL -lX11 -lXext
GL_SVGA_LDFLAGS=-L$(X11_DIR)/lib -lvga -lMesaGL -lglide2x -lX11 -lXext

DO_CC=$(CC) $(CFLAGS) -o $@ -c $<
DO_AS=$(CC) $(CFLAGS) -DELF -x assembler-with-cpp -o $@ -c $<

DO_GL_CC=$(CC) $(CFLAGS) $(GL_CFLAGS) -o $@ -c $<
DO_GL_AS=$(CC) $(CFLAGS) $(GL_CFLAGS) -DELF -x assembler-with-cpp -o $@ -c $<

DO_O_CC=$(CC) -O $(CFLAGS) -o $@ -c $<

#############################################################################
# SETUP AND BUILD
#############################################################################

SOFT_TARGETS=$(OBJ_DIR)/quake-svga \
	$(OBJ_DIR)/quake-x
GL_TARGETS=$(OBJ_DIR)/quake-gl \
	$(OBJ_DIR)/quake-glide

debug:		debug-soft debug-gl

release:	release-soft release-gl

all:		debug-soft debug-gl release-soft release-gl

debug-soft:	$(BUILD_DEBUG_DIR) $(BUILD_DEBUG_DIR)/soft_obj $(SOFT_OBJS) $(SOFT_AS_OBJS) $(SOFT_SVGA_OBJS) $(SOFT_X11_OBJS)
		
	$(MAKE) soft-targets OBJ_DIR=$(BUILD_DEBUG_DIR) CFLAGS="$(DEBUG_CFLAGS)"

debug-gl:	$(BUILD_DEBUG_DIR) $(BUILD_DEBUG_DIR)/gl_obj $(GL_OBJS) $(GL_AS_OBJS) $(GL_SVGA_OBJS) $(GL_X11_OBJS)
		
	$(MAKE) gl-targets OBJ_DIR=$(BUILD_DEBUG_DIR) CFLAGS="$(DEBUG_CFLAGS)"

release-soft:	$(BUILD_RELEASE_DIR) $(BUILD_RELEASE_DIR)/soft_obj $(SOFT_OBJS) $(SOFT_AS_OBJS) $(SOFT_SVGA_OBJS) $(SOFT_X11_OBJS)
		
	$(MAKE) soft-targets OBJ_DIR=$(BUILD_RELEASE_DIR) CFLAGS="$(RELEASE_CFLAGS)"

release-gl:	$(BUILD_RELEASE_DIR) $(BUILD_RELEASE_DIR)/gl_obj $(GL_OBJS) $(GL_AS_OBJS) $(GL_SVGA_OBJS) $(GL_X11_OBJS)
		
	$(MAKE) gl-targets OBJ_DIR=$(BUILD_RELEASE_DIR) CFLAGS="$(RELEASE_CFLAGS)"

soft-targets:	$(SOFT_TARGETS)
gl-targets:	$(GL_TARGETS)

$(BUILD_DEBUG_DIR):
	@mkdir $(BUILD_DEBUG_DIR)
	
$(BUILD_DEBUG_DIR)/soft_obj:
	@mkdir $(BUILD_DEBUG_DIR)/soft_obj
	
$(BUILD_DEBUG_DIR)/gl_obj:
	@mkdir $(BUILD_DEBUG_DIR)/gl_obj

$(BUILD_RELEASE_DIR):
	@mkdir $(BUILD_RELEASE_DIR)
	
$(BUILD_RELEASE_DIR)/soft_obj:
	@mkdir $(BUILD_RELEASE_DIR)/soft_obj
	
$(BUILD_RELEASE_DIR)/gl_obj:
	@mkdir $(BUILD_RELEASE_DIR)/gl_obj

#############################################################################
# SETUP AND BUILD
#############################################################################

TARGETS=$(BUILDDIR)/bin/squake \
	$(BUILDDIR)/bin/xquake \
	$(BUILDDIR)/bin/glquake \
	$(BUILDDIR)/bin/glquake.3dfx
	# $(BUILDDIR)/bin/unixded

build_debug:
	@-mkdir $(BUILD_DEBUG_DIR) \
		$(BUILD_DEBUG_DIR)/bin \
		$(BUILD_DEBUG_DIR)/glquake \
		$(BUILD_DEBUG_DIR)/glquake.3dfx \
		$(BUILD_DEBUG_DIR)/squake \
		$(BUILD_DEBUG_DIR)/unixded \
		$(BUILD_DEBUG_DIR)/x11
	$(MAKE) targets BUILDDIR=$(BUILD_DEBUG_DIR) CFLAGS="$(DEBUG_CFLAGS)"

build_release:
	@-mkdir $(BUILD_RELEASE_DIR) \
		$(BUILD_RELEASE_DIR)/bin \
		$(BUILD_RELEASE_DIR)/glquake \
		$(BUILD_RELEASE_DIR)/glquake.3dfx \
		$(BUILD_RELEASE_DIR)/squake \
		$(BUILD_RELEASE_DIR)/unixded \
		$(BUILD_RELEASE_DIR)/x11
	$(MAKE) targets BUILDDIR=$(BUILD_RELEASE_DIR) CFLAGS="$(RELEASE_CFLAGS)"

all: build_debug build_release

targets: $(TARGETS)

#############################################################################
# Software Renderer
#############################################################################

SOFT_OBJS = \
	$(OBJ_DIR)/soft_obj/cl_demo.o \
	$(OBJ_DIR)/soft_obj/cl_input.o \
	$(OBJ_DIR)/soft_obj/cl_main.o \
	$(OBJ_DIR)/soft_obj/cl_parse.o \
	$(OBJ_DIR)/soft_obj/cl_tent.o \
	$(OBJ_DIR)/soft_obj/chase.o \
	$(OBJ_DIR)/soft_obj/cmd.o \
	$(OBJ_DIR)/soft_obj/common.o \
	$(OBJ_DIR)/soft_obj/console.o \
	$(OBJ_DIR)/soft_obj/crc.o \
	$(OBJ_DIR)/soft_obj/cvar.o \
	$(OBJ_DIR)/soft_obj/d_edge.o \
	$(OBJ_DIR)/soft_obj/d_fill.o \
	$(OBJ_DIR)/soft_obj/d_init.o \
	$(OBJ_DIR)/soft_obj/d_modech.o \
	$(OBJ_DIR)/soft_obj/d_part.o \
	$(OBJ_DIR)/soft_obj/d_polyse.o \
	$(OBJ_DIR)/soft_obj/d_scan.o \
	$(OBJ_DIR)/soft_obj/d_sky.o \
	$(OBJ_DIR)/soft_obj/d_sprite.o \
	$(OBJ_DIR)/soft_obj/d_surf.o \
	$(OBJ_DIR)/soft_obj/d_vars.o \
	$(OBJ_DIR)/soft_obj/d_zpoint.o \
	$(OBJ_DIR)/soft_obj/host.o \
	$(OBJ_DIR)/soft_obj/host_cmd.o \
	$(OBJ_DIR)/soft_obj/keys.o \
	$(OBJ_DIR)/soft_obj/mathlib.o \
	$(OBJ_DIR)/soft_obj/menu.o \
	$(OBJ_DIR)/soft_obj/model.o \
	$(OBJ_DIR)/soft_obj/net_dgrm.o \
	$(OBJ_DIR)/soft_obj/net_loop.o \
	$(OBJ_DIR)/soft_obj/net_main.o \
	$(OBJ_DIR)/soft_obj/net_vcr.o \
	$(OBJ_DIR)/soft_obj/net_udp.o \
	$(OBJ_DIR)/soft_obj/net_bsd.o \
	$(OBJ_DIR)/soft_obj/nonintel.o \
	$(OBJ_DIR)/soft_obj/pr_cmds.o \
	$(OBJ_DIR)/soft_obj/pr_edict.o \
	$(OBJ_DIR)/soft_obj/pr_exec.o \
	$(OBJ_DIR)/soft_obj/r_aclip.o \
	$(OBJ_DIR)/soft_obj/r_alias.o \
	$(OBJ_DIR)/soft_obj/r_bsp.o \
	$(OBJ_DIR)/soft_obj/r_draw.o \
	$(OBJ_DIR)/soft_obj/r_edge.o \
	$(OBJ_DIR)/soft_obj/r_efrag.o \
	$(OBJ_DIR)/soft_obj/r_light.o \
	$(OBJ_DIR)/soft_obj/r_main.o \
	$(OBJ_DIR)/soft_obj/r_misc.o \
	$(OBJ_DIR)/soft_obj/r_part.o \
	$(OBJ_DIR)/soft_obj/r_sky.o \
	$(OBJ_DIR)/soft_obj/r_sprite.o \
	$(OBJ_DIR)/soft_obj/r_surf.o \
	$(OBJ_DIR)/soft_obj/r_vars.o \
	$(OBJ_DIR)/soft_obj/sbar.o \
	$(OBJ_DIR)/soft_obj/screen.o \
	$(OBJ_DIR)/soft_obj/snd_dma.o \
	$(OBJ_DIR)/soft_obj/snd_mem.o \
	$(OBJ_DIR)/soft_obj/snd_mix.o \
	$(OBJ_DIR)/soft_obj/sv_main.o \
	$(OBJ_DIR)/soft_obj/sv_phys.o \
	$(OBJ_DIR)/soft_obj/sv_move.o \
	$(OBJ_DIR)/soft_obj/sv_user.o \
	$(OBJ_DIR)/soft_obj/view.o \
	$(OBJ_DIR)/soft_obj/wad.o \
	$(OBJ_DIR)/soft_obj/zone.o \
	$(OBJ_DIR)/soft_obj/cd_linux.o \
	$(OBJ_DIR)/soft_obj/snd_linux.o \
	$(OBJ_DIR)/soft_obj/sys_linux.o \

ifeq ($(ARCH),i386)
SOFT_AS_OBJS = \
	$(OBJ_DIR)/soft_obj/d_copy.o \
	$(OBJ_DIR)/soft_obj/d_draw.o \
	$(OBJ_DIR)/soft_obj/d_draw16.o \
	$(OBJ_DIR)/soft_obj/d_parta.o \
	$(OBJ_DIR)/soft_obj/d_polysa.o \
	$(OBJ_DIR)/soft_obj/d_scana.o \
	$(OBJ_DIR)/soft_obj/d_spr8.o \
	$(OBJ_DIR)/soft_obj/d_varsa.o \
	$(OBJ_DIR)/soft_obj/math.o \
	$(OBJ_DIR)/soft_obj/r_aliasa.o \
	$(OBJ_DIR)/soft_obj/r_drawa.o \
	$(OBJ_DIR)/soft_obj/r_edgea.o \
	$(OBJ_DIR)/soft_obj/r_varsa.o \
	$(OBJ_DIR)/soft_obj/surf16.o \
	$(OBJ_DIR)/soft_obj/surf8.o \
	$(OBJ_DIR)/soft_obj/worlda.o \
	$(OBJ_DIR)/soft_obj/r_aclipa.o \
	$(OBJ_DIR)/soft_obj/snd_mixa.o \
	$(OBJ_DIR)/soft_obj/sys_dosa.o
else
SOFT_AS_OBJS=
endif

SOFT_SVGA_OBJS = $(OBJ_DIR)/soft_obj/vid_svgalib.o
SOFT_X11_OBJS = $(OBJ_DIR)/soft_obj/vid_x.o

$(OBJ_DIR)/quake-svga:	$(SOFT_OBJS) $(SOFT_AS_OBJS) $(SOFT_SVGA_OBJS)
	$(CC) $(CFLAGS) -o $@ $(SOFT_OBJS) $(SOFT_AS_OBJS) $(SOFT_SVGA_OBJS) \
		$(SVGA_LDFLAGS)

$(OBJ_DIR)/quake-x:	$(SOFT_OBJS) $(SOFT_AS_OBJS) $(SOFT_X11_OBJS)
	$(CC) $(CFLAGS) -o $@ $(SOFT_OBJS) $(SOFT_AS_OBJS) $(SOFT_X11_OBJS) \
		$(X11_LDFLAGS)


$(OBJ_DIR)/soft_obj/cl_demo.o:	$(STAND_DIR)/cl_demo.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/cl_input.o:	$(STAND_DIR)/cl_input.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/cl_main.o:	$(STAND_DIR)/cl_main.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/cl_parse.o:	$(STAND_DIR)/cl_parse.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/cl_tent.o:	$(STAND_DIR)/cl_tent.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/cl_cam.o:	$(STAND_DIR)/chase.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/cmd.o:	$(STAND_DIR)/cmd.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/common.o:	$(STAND_DIR)/common.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/console.o:	$(STAND_DIR)/console.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/crc.o:	$(STAND_DIR)/crc.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/cvar.o:	$(STAND_DIR)/cvar.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/draw.o:	$(STAND_DIR)/draw.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/d_edge.o:	$(STAND_DIR)/d_edge.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/d_fill.o:	$(STAND_DIR)/d_fill.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/d_init.o:	$(STAND_DIR)/d_init.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/d_modech.o:	$(STAND_DIR)/d_modech.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/d_part.o:	$(STAND_DIR)/d_part.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/d_polyse.o:	$(STAND_DIR)/d_polyse.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/d_scan.o:	$(STAND_DIR)/d_scan.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/d_sky.o:	$(STAND_DIR)/d_sky.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/d_sprite.o:	$(STAND_DIR)/d_sprite.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/d_surf.o:	$(STAND_DIR)/d_surf.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/d_vars.o:	$(STAND_DIR)/d_vars.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/d_zpoint.o:	$(STAND_DIR)/d_zpoint.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/host.o :     $(STAND_DIR)/host.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/host_cmd.o : $(STAND_DIR)/host_cmd.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/keys.o:	$(STAND_DIR)/keys.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/mathlib.o:	$(STAND_DIR)/mathlib.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/menu.o:	$(STAND_DIR)/menu.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/model.o:	$(STAND_DIR)/model.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/net_dgrm.o: $(STAND_DIR)/net_dgrm.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/net_loop.o: $(STAND_DIR)/net_loop.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/net_main.o: $(STAND_DIR)/net_main.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/net_vcr.o:	$(STAND_DIR)/net_vcr.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/net_udp.o:	$(STAND_DIR)/net_udp.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/net_bsd.o:	$(STAND_DIR)/net_bsd.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/nonintel.o:	$(STAND_DIR)/nonintel.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/pr_cmds.o :  $(STAND_DIR)/pr_cmds.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/pr_edict.o : $(STAND_DIR)/pr_edict.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/pr_exec.o :  $(STAND_DIR)/pr_exec.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/r_aclip.o:	$(STAND_DIR)/r_aclip.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/r_alias.o:	$(STAND_DIR)/r_alias.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/r_bsp.o:	$(STAND_DIR)/r_bsp.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/r_draw.o:	$(STAND_DIR)/r_draw.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/r_edge.o:	$(STAND_DIR)/r_edge.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/r_efrag.o:	$(STAND_DIR)/r_efrag.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/r_light.o:	$(STAND_DIR)/r_light.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/r_main.o:	$(STAND_DIR)/r_main.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/r_misc.o:	$(STAND_DIR)/r_misc.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/r_part.o:	$(STAND_DIR)/r_part.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/r_sky.o:	$(STAND_DIR)/r_sky.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/r_sprite.o:	$(STAND_DIR)/r_sprite.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/r_surf.o:	$(STAND_DIR)/r_surf.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/r_vars.o:	$(STAND_DIR)/r_vars.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/sbar.o:	$(STAND_DIR)/sbar.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/screen.o:	$(STAND_DIR)/screen.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/snd_dma.o:  $(STAND_DIR)/snd_dma.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/snd_mem.o:  $(STAND_DIR)/snd_mem.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/snd_mix.o:  $(STAND_DIR)/snd_mix.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/snd_linux.o: $(STAND_DIR)/snd_linux.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/sv_main.o:	$(STAND_DIR)/sv_main.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/sv_phys.o:	$(STAND_DIR)/sv_phys.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/sv_move.o:	$(STAND_DIR)/sv_move.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/sv_user.o:	$(STAND_DIR)/sv_user.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/view.o:	$(STAND_DIR)/view.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/wad.o:	$(STAND_DIR)/wad.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/world.o:	$(STAND_DIR)/world.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/zone.o:	$(STAND_DIR)/zone.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/cd_linux.o:	$(STAND_DIR)/cd_linux.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/snd_linux.o: $(STAND_DIR)/snd_linux.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/sys_linux.o: $(STAND_DIR)/sys_linux.c
	$(DO_CC)

# Assembler code

$(OBJ_DIR)/soft_obj/d_copy.o:	$(STAND_DIR)/d_copy.s
	$(DO_AS)

$(OBJ_DIR)/soft_obj/d_draw.o:	$(STAND_DIR)/d_draw.s
	$(DO_AS)

$(OBJ_DIR)/soft_obj/d_draw16.o:	$(STAND_DIR)/d_draw16.s
	$(DO_AS)

$(OBJ_DIR)/soft_obj/d_parta.o:	$(STAND_DIR)/d_parta.s
	$(DO_AS)

$(OBJ_DIR)/soft_obj/d_polysa.o:	$(STAND_DIR)/d_polysa.s
	$(DO_AS)

$(OBJ_DIR)/soft_obj/d_scana.o:	$(STAND_DIR)/d_scana.s
	$(DO_AS)

$(OBJ_DIR)/soft_obj/d_spr8.o:	$(STAND_DIR)/d_spr8.s
	$(DO_AS)

$(OBJ_DIR)/soft_obj/d_varsa.o:	$(STAND_DIR)/d_varsa.s
	$(DO_AS)

$(OBJ_DIR)/soft_obj/math.o:	$(STAND_DIR)/math.s
	$(DO_AS)

$(OBJ_DIR)/soft_obj/r_aclipa.o:	$(STAND_DIR)/r_aclipa.s
	$(DO_AS)

$(OBJ_DIR)/soft_obj/r_aliasa.o:	$(STAND_DIR)/r_aliasa.s
	$(DO_AS)

$(OBJ_DIR)/soft_obj/r_drawa.o:	$(STAND_DIR)/r_drawa.s
	$(DO_AS)

$(OBJ_DIR)/soft_obj/r_edgea.o:	$(STAND_DIR)/r_edgea.s
	$(DO_AS)

$(OBJ_DIR)/soft_obj/r_varsa.o:	$(STAND_DIR)/r_varsa.s
	$(DO_AS)

$(OBJ_DIR)/soft_obj/surf16.o:	$(STAND_DIR)/surf16.s
	$(DO_AS)

$(OBJ_DIR)/soft_obj/surf8.o:	$(STAND_DIR)/surf8.s
	$(DO_AS)

$(OBJ_DIR)/soft_obj/snd_mixa.o:	$(STAND_DIR)/snd_mixa.s
	$(DO_AS)

$(OBJ_DIR)/soft_obj/sys_dosa.o:	$(STAND_DIR)/sys_dosa.s
	$(DO_AS)

$(OBJ_DIR)/soft_obj/worlda.o:	$(PROJECT_DIR)/standalone/worlda.s
	$(DO_AS)

# specific things

$(OBJ_DIR)/soft_obj/vid_svgalib.o: $(STAND_DIR)/vid_svgalib.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/vid_x.o:	$(STAND_DIR)/vid_x.c
	$(DO_CC)

#############################################################################
# GLQuake
#############################################################################

GLQUAKE_OBJS= \
	$(BUILDDIR)/glquake/cl_demo.o \
	$(BUILDDIR)/glquake/cl_input.o \
	$(BUILDDIR)/glquake/cl_main.o \
	$(BUILDDIR)/glquake/cl_parse.o \
	$(BUILDDIR)/glquake/cl_tent.o \
	$(BUILDDIR)/glquake/chase.o \
	$(BUILDDIR)/glquake/cmd.o \
	$(BUILDDIR)/glquake/common.o \
	$(BUILDDIR)/glquake/console.o \
	$(BUILDDIR)/glquake/crc.o \
	$(BUILDDIR)/glquake/cvar.o \
	\
	$(BUILDDIR)/glquake/gl_draw.o \
	$(BUILDDIR)/glquake/gl_mesh.o \
	$(BUILDDIR)/glquake/gl_model.o \
	$(BUILDDIR)/glquake/gl_refrag.o \
	$(BUILDDIR)/glquake/gl_rlight.o \
	$(BUILDDIR)/glquake/gl_rmain.o \
	$(BUILDDIR)/glquake/gl_rmisc.o \
	$(BUILDDIR)/glquake/gl_rsurf.o \
	$(BUILDDIR)/glquake/gl_screen.o \
	$(BUILDDIR)/glquake/gl_test.o \
	$(BUILDDIR)/glquake/gl_warp.o \
	\
	$(BUILDDIR)/glquake/host.o \
	$(BUILDDIR)/glquake/host_cmd.o \
	$(BUILDDIR)/glquake/keys.o \
	$(BUILDDIR)/glquake/menu.o \
	$(BUILDDIR)/glquake/mathlib.o \
	$(BUILDDIR)/glquake/net_dgrm.o \
	$(BUILDDIR)/glquake/net_loop.o \
	$(BUILDDIR)/glquake/net_main.o \
	$(BUILDDIR)/glquake/net_vcr.o \
	$(BUILDDIR)/glquake/net_udp.o \
	$(BUILDDIR)/glquake/net_bsd.o \
	$(BUILDDIR)/glquake/pr_cmds.o \
	$(BUILDDIR)/glquake/pr_edict.o \
	$(BUILDDIR)/glquake/pr_exec.o \
	$(BUILDDIR)/glquake/r_part.o \
	$(BUILDDIR)/glquake/sbar.o \
	$(BUILDDIR)/glquake/sv_main.o \
	$(BUILDDIR)/glquake/sv_phys.o \
	$(BUILDDIR)/glquake/sv_move.o \
	$(BUILDDIR)/glquake/sv_user.o \
	$(BUILDDIR)/glquake/zone.o	\
	$(BUILDDIR)/glquake/view.o	\
	$(BUILDDIR)/glquake/wad.o \
	$(BUILDDIR)/glquake/world.o \
	$(BUILDDIR)/glquake/cd_linux.o \
	$(BUILDDIR)/glquake/sys_linux.o \
	$(BUILDDIR)/glquake/snd_dma.o \
	$(BUILDDIR)/glquake/snd_mem.o \
	$(BUILDDIR)/glquake/snd_mix.o \
	$(BUILDDIR)/glquake/snd_linux.o \
	\
	$(BUILDDIR)/glquake/math.o \
	$(BUILDDIR)/glquake/worlda.o \
	$(BUILDDIR)/glquake/snd_mixa.o \
	$(BUILDDIR)/glquake/sys_dosa.o

GLSVGA_OBJS=$(BUILDDIR)/glquake/gl_vidlinux.o

GLX_OBJS=$(BUILDDIR)/glquake/gl_vidlinuxglx.o

$(BUILDDIR)/bin/glquake : $(GLQUAKE_OBJS) $(GLX_OBJS)
	$(CC) $(CFLAGS) -o $@ $(GLQUAKE_OBJS) $(GLX_OBJS) $(GL_LDFLAGS) $(SVGA_LDFLAGS) $(LDFLAGS)

$(BUILDDIR)/bin/glquake.3dfx : $(GLQUAKE_OBJS) $(GLSVGA_OBJS)
	$(CC) $(CFLAGS) -o $@ $(GLQUAKE_OBJS) $(GLSVGA_OBJS) $(GLIDE_LDFLAGS) $(LDFLAGS)

$(BUILDDIR)/glquake/cl_demo.o :      $(PROJECT_DIR)/standalone/cl_demo.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/cl_input.o :     $(PROJECT_DIR)/standalone/cl_input.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/cl_main.o :      $(PROJECT_DIR)/standalone/cl_main.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/cl_parse.o :     $(PROJECT_DIR)/standalone/cl_parse.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/cl_tent.o :      $(PROJECT_DIR)/standalone/cl_tent.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/chase.o :        $(PROJECT_DIR)/standalone/chase.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/cmd.o :          $(PROJECT_DIR)/standalone/cmd.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/common.o :       $(PROJECT_DIR)/standalone/common.c
	$(DO_GL_DEBUG_CC)

$(BUILDDIR)/glquake/console.o :      $(PROJECT_DIR)/standalone/console.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/crc.o :          $(PROJECT_DIR)/standalone/crc.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/cvar.o :         $(PROJECT_DIR)/standalone/cvar.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/gl_draw.o :      $(PROJECT_DIR)/standalone/gl_draw.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/gl_mesh.o :      $(PROJECT_DIR)/standalone/gl_mesh.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/gl_model.o :     $(PROJECT_DIR)/standalone/gl_model.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/gl_refrag.o :    $(PROJECT_DIR)/standalone/gl_refrag.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/gl_rlight.o :    $(PROJECT_DIR)/standalone/gl_rlight.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/gl_rmain.o :     $(PROJECT_DIR)/standalone/gl_rmain.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/gl_rmisc.o :     $(PROJECT_DIR)/standalone/gl_rmisc.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/gl_rsurf.o :     $(PROJECT_DIR)/standalone/gl_rsurf.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/gl_screen.o :    $(PROJECT_DIR)/standalone/gl_screen.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/gl_test.o :      $(PROJECT_DIR)/standalone/gl_test.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/gl_vidlinux.o :  $(PROJECT_DIR)/standalone/gl_vidlinux.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/gl_vidlinuxglx.o :  $(PROJECT_DIR)/common/gl_vidlinuxglx.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/gl_warp.o :      $(PROJECT_DIR)/standalone/gl_warp.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/host.o :         $(PROJECT_DIR)/standalone/host.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/host_cmd.o :     $(PROJECT_DIR)/standalone/host_cmd.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/keys.o :         $(PROJECT_DIR)/standalone/keys.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/menu.o :         $(PROJECT_DIR)/standalone/menu.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/mathlib.o :      $(PROJECT_DIR)/common/mathlib.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/net_dgrm.o :     $(PROJECT_DIR)/standalone/net_dgrm.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/net_loop.o :     $(PROJECT_DIR)/standalone/net_loop.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/net_main.o :     $(PROJECT_DIR)/standalone/net_main.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/net_vcr.o :      $(PROJECT_DIR)/standalone/net_vcr.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/net_udp.o :      $(PROJECT_DIR)/standalone/net_udp.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/net_bsd.o :      $(PROJECT_DIR)/standalone/net_bsd.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/pr_cmds.o :      $(PROJECT_DIR)/standalone/pr_cmds.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/pr_edict.o :     $(PROJECT_DIR)/standalone/pr_edict.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/pr_exec.o :      $(PROJECT_DIR)/standalone/pr_exec.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/r_part.o :       $(PROJECT_DIR)/standalone/r_part.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/sbar.o :         $(PROJECT_DIR)/standalone/sbar.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/sv_main.o :      $(PROJECT_DIR)/standalone/sv_main.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/sv_phys.o :      $(PROJECT_DIR)/standalone/sv_phys.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/sv_move.o :      $(PROJECT_DIR)/standalone/sv_move.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/sv_user.o :      $(PROJECT_DIR)/standalone/sv_user.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/zone.o :        $(PROJECT_DIR)/common/zone.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/view.o :        $(PROJECT_DIR)/standalone/view.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/wad.o :          $(PROJECT_DIR)/common/wad.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/world.o :        $(PROJECT_DIR)/standalone/world.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/cd_linux.o :     $(PROJECT_DIR)/common/cd_linux.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/sys_linux.o :    $(PROJECT_DIR)/standalone/sys_linux.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/snd_dma.o :      $(PROJECT_DIR)/common/snd_dma.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/snd_mem.o :      $(PROJECT_DIR)/common/snd_mem.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/snd_mix.o :      $(PROJECT_DIR)/common/snd_mix.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/snd_linux.o :    $(PROJECT_DIR)/common/snd_linux.c
	$(DO_GL_CC)

$(BUILDDIR)/glquake/math.o :         $(PROJECT_DIR)/common/math.s
	$(DO_GL_AS)

$(BUILDDIR)/glquake/worlda.o :       $(PROJECT_DIR)/standalone/worlda.s
	$(DO_GL_AS)

$(BUILDDIR)/glquake/snd_mixa.o :     $(PROJECT_DIR)/common/snd_mixa.s
	$(DO_GL_AS)

$(BUILDDIR)/glquake/sys_dosa.o :     $(PROJECT_DIR)/standalone/sys_dosa.s
	$(DO_GL_AS)

#############################################################################
# MISC
#############################################################################

clean: clean-debug clean-release
	@echo Done.

clean-debug:
	-rm -rf $(BUILD_DEBUG_DIR)

clean-release:
	-rm -rf $(BUILD_RELEASE_DIR)

#############################################################################
# CLIENT
#############################################################################

SOFT_OBJS = \
	$(OBJ_DIR)/soft_obj/cl_demo.o \
	$(OBJ_DIR)/soft_obj/cl_ents.o \
	$(OBJ_DIR)/soft_obj/cl_input.o \
	$(OBJ_DIR)/soft_obj/cl_main.o \
	$(OBJ_DIR)/soft_obj/cl_parse.o \
	$(OBJ_DIR)/soft_obj/cl_pred.o \
	$(OBJ_DIR)/soft_obj/cl_tent.o \
	$(OBJ_DIR)/soft_obj/cl_cam.o \
	$(OBJ_DIR)/soft_obj/cmd.o \
	$(OBJ_DIR)/soft_obj/common.o \
	$(OBJ_DIR)/soft_obj/console.o \
	$(OBJ_DIR)/soft_obj/crc.o \
	$(OBJ_DIR)/soft_obj/cvar.o \
	$(OBJ_DIR)/soft_obj/d_edge.o \
	$(OBJ_DIR)/soft_obj/d_fill.o \
	$(OBJ_DIR)/soft_obj/d_init.o \
	$(OBJ_DIR)/soft_obj/d_modech.o \
	$(OBJ_DIR)/soft_obj/d_part.o \
	$(OBJ_DIR)/soft_obj/d_polyse.o \
	$(OBJ_DIR)/soft_obj/d_scan.o \
	$(OBJ_DIR)/soft_obj/d_sky.o \
	$(OBJ_DIR)/soft_obj/d_sprite.o \
	$(OBJ_DIR)/soft_obj/d_surf.o \
	$(OBJ_DIR)/soft_obj/d_vars.o \
	$(OBJ_DIR)/soft_obj/d_zpoint.o \
	$(OBJ_DIR)/soft_obj/draw.o \
	$(OBJ_DIR)/soft_obj/keys.o \
	$(OBJ_DIR)/soft_obj/mathlib.o \
	$(OBJ_DIR)/soft_obj/md4.o \
	$(OBJ_DIR)/soft_obj/menu.o \
	$(OBJ_DIR)/soft_obj/model.o \
	$(OBJ_DIR)/soft_obj/net_chan.o \
	$(OBJ_DIR)/soft_obj/net_udp.o \
	$(OBJ_DIR)/soft_obj/nonintel.o \
	$(OBJ_DIR)/soft_obj/pmove.o \
	$(OBJ_DIR)/soft_obj/pmovetst.o \
	$(OBJ_DIR)/soft_obj/r_aclip.o \
	$(OBJ_DIR)/soft_obj/r_alias.o \
	$(OBJ_DIR)/soft_obj/r_bsp.o \
	$(OBJ_DIR)/soft_obj/r_draw.o \
	$(OBJ_DIR)/soft_obj/r_edge.o \
	$(OBJ_DIR)/soft_obj/r_efrag.o \
	$(OBJ_DIR)/soft_obj/r_light.o \
	$(OBJ_DIR)/soft_obj/r_main.o \
	$(OBJ_DIR)/soft_obj/r_misc.o \
	$(OBJ_DIR)/soft_obj/r_part.o \
	$(OBJ_DIR)/soft_obj/r_sky.o \
	$(OBJ_DIR)/soft_obj/r_sprite.o \
	$(OBJ_DIR)/soft_obj/r_surf.o \
	$(OBJ_DIR)/soft_obj/r_vars.o \
	$(OBJ_DIR)/soft_obj/sbar.o \
	$(OBJ_DIR)/soft_obj/screen.o \
	$(OBJ_DIR)/soft_obj/skin.o \
	$(OBJ_DIR)/soft_obj/snd_dma.o \
	$(OBJ_DIR)/soft_obj/snd_mem.o \
	$(OBJ_DIR)/soft_obj/snd_mix.o \
	$(OBJ_DIR)/soft_obj/view.o \
	$(OBJ_DIR)/soft_obj/wad.o \
	$(OBJ_DIR)/soft_obj/zone.o \
	$(OBJ_DIR)/soft_obj/cd_linux.o \
	$(OBJ_DIR)/soft_obj/sys_linux.o \
	$(OBJ_DIR)/soft_obj/snd_linux.o \

ifeq ($(ARCH),i386)
SOFT_AS_OBJS = \
	$(OBJ_DIR)/soft_obj/d_copy.o \
	$(OBJ_DIR)/soft_obj/d_draw.o \
	$(OBJ_DIR)/soft_obj/d_draw16.o \
	$(OBJ_DIR)/soft_obj/d_parta.o \
	$(OBJ_DIR)/soft_obj/d_polysa.o \
	$(OBJ_DIR)/soft_obj/d_scana.o \
	$(OBJ_DIR)/soft_obj/d_spr8.o \
	$(OBJ_DIR)/soft_obj/d_varsa.o \
	$(OBJ_DIR)/soft_obj/math.o \
	$(OBJ_DIR)/soft_obj/r_aclipa.o \
	$(OBJ_DIR)/soft_obj/r_aliasa.o \
	$(OBJ_DIR)/soft_obj/r_drawa.o \
	$(OBJ_DIR)/soft_obj/r_edgea.o \
	$(OBJ_DIR)/soft_obj/r_varsa.o \
	$(OBJ_DIR)/soft_obj/snd_mixa.o \
	$(OBJ_DIR)/soft_obj/surf16.o \
	$(OBJ_DIR)/soft_obj/surf8.o \
	$(OBJ_DIR)/soft_obj/sys_dosa.o
else
SOFT_AS_OBJS=
endif

SOFT_SVGA_OBJS = $(OBJ_DIR)/soft_obj/vid_svgalib.o
SOFT_X11_OBJS = $(OBJ_DIR)/soft_obj/vid_x.o

$(OBJ_DIR)/qw-client-svga:	$(SOFT_OBJS) $(SOFT_AS_OBJS) $(SOFT_SVGA_OBJS)
	$(CC) $(CFLAGS) -o $@ $(SOFT_OBJS) $(SOFT_AS_OBJS) $(SOFT_SVGA_OBJS) \
		$(SVGA_LDFLAGS)

$(OBJ_DIR)/qw-client-x:	$(SOFT_OBJS) $(SOFT_AS_OBJS) $(SOFT_X11_OBJS)
	$(CC) $(CFLAGS) -o $@ $(SOFT_OBJS) $(SOFT_AS_OBJS) $(SOFT_X11_OBJS) \
		$(X11_LDFLAGS)

$(OBJ_DIR)/soft_obj/cl_demo.o:	$(CLIENT_DIR)/cl_demo.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/cl_ents.o:	$(CLIENT_DIR)/cl_ents.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/cl_input.o:	$(CLIENT_DIR)/cl_input.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/cl_main.o:	$(CLIENT_DIR)/cl_main.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/cl_parse.o:	$(CLIENT_DIR)/cl_parse.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/cl_pred.o:	$(CLIENT_DIR)/cl_pred.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/cl_tent.o:	$(CLIENT_DIR)/cl_tent.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/cl_cam.o:	$(CLIENT_DIR)/cl_cam.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/d_edge.o:	$(CLIENT_DIR)/d_edge.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/d_fill.o:	$(CLIENT_DIR)/d_fill.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/d_init.o:	$(CLIENT_DIR)/d_init.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/d_modech.o:	$(CLIENT_DIR)/d_modech.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/d_part.o:	$(CLIENT_DIR)/d_part.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/d_polyse.o:	$(CLIENT_DIR)/d_polyse.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/d_scan.o:	$(CLIENT_DIR)/d_scan.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/d_sky.o:	$(CLIENT_DIR)/d_sky.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/d_sprite.o:	$(CLIENT_DIR)/d_sprite.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/d_surf.o:	$(CLIENT_DIR)/d_surf.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/d_vars.o:	$(CLIENT_DIR)/d_vars.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/d_zpoint.o:	$(CLIENT_DIR)/d_zpoint.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/draw.o:	$(CLIENT_DIR)/draw.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/keys.o:	$(CLIENT_DIR)/keys.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/menu.o:	$(CLIENT_DIR)/menu.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/model.o:	$(CLIENT_DIR)/model.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/nonintel.o:	$(CLIENT_DIR)/nonintel.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/r_aclip.o:	$(CLIENT_DIR)/r_aclip.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/r_alias.o:	$(CLIENT_DIR)/r_alias.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/r_bsp.o:	$(CLIENT_DIR)/r_bsp.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/r_draw.o:	$(CLIENT_DIR)/r_draw.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/r_edge.o:	$(CLIENT_DIR)/r_edge.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/r_efrag.o:	$(CLIENT_DIR)/r_efrag.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/r_light.o:	$(CLIENT_DIR)/r_light.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/r_main.o:	$(CLIENT_DIR)/r_main.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/r_misc.o:	$(CLIENT_DIR)/r_misc.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/r_part.o:	$(CLIENT_DIR)/r_part.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/r_sky.o:	$(CLIENT_DIR)/r_sky.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/r_sprite.o:	$(CLIENT_DIR)/r_sprite.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/r_surf.o:	$(CLIENT_DIR)/r_surf.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/r_vars.o:	$(CLIENT_DIR)/r_vars.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/sbar.o:	$(CLIENT_DIR)/sbar.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/screen.o:	$(CLIENT_DIR)/screen.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/skin.o:	$(CLIENT_DIR)/skin.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/view.o:	$(CLIENT_DIR)/view.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/sys_linux.o: $(CLIENT_DIR)/sys_linux.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/cmd.o:	$(QW_COMMON_DIR)/cmd.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/common.o:	$(QW_COMMON_DIR)/common.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/console.o:	$(QW_COMMON_DIR)/console.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/cvar.o:	$(QW_COMMON_DIR)/cvar.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/md4.o:	$(QW_COMMON_DIR)/md4.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/net_chan.o:	$(QW_COMMON_DIR)/net_chan.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/net_udp.o:	$(QW_COMMON_DIR)/net_udp.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/pmove.o:	$(QW_COMMON_DIR)/pmove.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/pmovetst.o:	$(QW_COMMON_DIR)/pmovetst.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/crc.o:	$(COMMON_DIR)/crc.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/mathlib.o:	$(COMMON_DIR)/mathlib.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/snd_dma.o:	$(COMMON_DIR)/snd_dma.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/snd_mem.o:	$(COMMON_DIR)/snd_mem.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/snd_mix.o:	$(COMMON_DIR)/snd_mix.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/wad.o:	$(COMMON_DIR)/wad.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/zone.o:	$(COMMON_DIR)/zone.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/cd_linux.o:	$(COMMON_DIR)/cd_linux.c
	$(DO_CC)

$(OBJ_DIR)/soft_obj/snd_linux.o: $(COMMON_DIR)/snd_linux.c
	$(DO_CC)

# Assembler code

$(OBJ_DIR)/soft_obj/d_copy.o:	$(CLIENT_DIR)/d_copy.s
	$(DO_AS)

$(OBJ_DIR)/soft_obj/d_draw.o:	$(CLIENT_DIR)/d_draw.s
	$(DO_AS)

$(OBJ_DIR)/soft_obj/d_draw16.o:	$(CLIENT_DIR)/d_draw16.s
	$(DO_AS)

$(OBJ_DIR)/soft_obj/d_parta.o:	$(CLIENT_DIR)/d_parta.s
	$(DO_AS)

$(OBJ_DIR)/soft_obj/d_polysa.o:	$(CLIENT_DIR)/d_polysa.s
	$(DO_AS)

$(OBJ_DIR)/soft_obj/d_scana.o:	$(CLIENT_DIR)/d_scana.s
	$(DO_AS)

$(OBJ_DIR)/soft_obj/d_spr8.o:	$(CLIENT_DIR)/d_spr8.s
	$(DO_AS)

$(OBJ_DIR)/soft_obj/d_varsa.o:	$(CLIENT_DIR)/d_varsa.s
	$(DO_AS)

$(OBJ_DIR)/soft_obj/r_aclipa.o:	$(CLIENT_DIR)/r_aclipa.s
	$(DO_AS)

$(OBJ_DIR)/soft_obj/r_aliasa.o:	$(CLIENT_DIR)/r_aliasa.s
	$(DO_AS)

$(OBJ_DIR)/soft_obj/r_drawa.o:	$(CLIENT_DIR)/r_drawa.s
	$(DO_AS)

$(OBJ_DIR)/soft_obj/r_edgea.o:	$(CLIENT_DIR)/r_edgea.s
	$(DO_AS)

$(OBJ_DIR)/soft_obj/r_varsa.o:	$(CLIENT_DIR)/r_varsa.s
	$(DO_AS)

$(OBJ_DIR)/soft_obj/surf16.o:	$(CLIENT_DIR)/surf16.s
	$(DO_AS)

$(OBJ_DIR)/soft_obj/surf8.o:	$(CLIENT_DIR)/surf8.s
	$(DO_AS)

$(OBJ_DIR)/soft_obj/sys_dosa.o:	$(CLIENT_DIR)/sys_dosa.s
	$(DO_AS)

$(OBJ_DIR)/soft_obj/math.o:	$(COMMON_DIR)/math.s
	$(DO_AS)

$(OBJ_DIR)/soft_obj/snd_mixa.o:	$(COMMON_DIR)/snd_mixa.s
	$(DO_AS)

$(OBJ_DIR)/soft_obj/vid_svgalib.o: 	$(COMMON_DIR)/vid_svgalib.c
	$(DO_O_CC)

$(OBJ_DIR)/soft_obj/vid_x.o:	$(COMMON_DIR)/vid_x.c
	$(DO_CC)

#
# OpenGL Client
#

GL_OBJS = \
	$(OBJ_DIR)/gl_obj/cl_demo.o \
	$(OBJ_DIR)/gl_obj/cl_input.o \
	$(OBJ_DIR)/gl_obj/cl_main.o \
	$(OBJ_DIR)/gl_obj/cl_parse.o \
	$(OBJ_DIR)/gl_obj/cl_tent.o \
	$(OBJ_DIR)/gl_obj/cl_chase.o \
	$(OBJ_DIR)/gl_obj/cmd.o \
	$(OBJ_DIR)/gl_obj/common.o \
	$(OBJ_DIR)/gl_obj/console.o \
	$(OBJ_DIR)/gl_obj/crc.o \
	$(OBJ_DIR)/gl_obj/cvar.o \
	$(OBJ_DIR)/gl_obj/host.o \
	$(OBJ_DIR)/gl_obj/host_cmd.o \
	$(OBJ_DIR)/gl_obj/keys.o \
	$(OBJ_DIR)/gl_obj/mathlib.o \
	$(OBJ_DIR)/gl_obj/menu.o \
	$(OBJ_DIR)/gl_obj/net_bsd.o \
	$(OBJ_DIR)/gl_obj/net_dgrm.o \
	$(OBJ_DIR)/gl_obj/net_loop.o \
	$(OBJ_DIR)/gl_obj/net_main.o \
	$(OBJ_DIR)/gl_obj/net_udp.o \
	$(OBJ_DIR)/gl_obj/net_vcr.o \
	$(OBJ_DIR)/gl_obj/nonintel.o \
	$(OBJ_DIR)/gl_obj/pmove.o \
	$(OBJ_DIR)/gl_obj/pmovetst.o \
	$(OBJ_DIR)/gl_obj/r_part.o \
	$(OBJ_DIR)/gl_obj/sbar.o \
	$(OBJ_DIR)/gl_obj/skin.o \
	$(OBJ_DIR)/gl_obj/snd_dma.o \
	$(OBJ_DIR)/gl_obj/snd_mem.o \
	$(OBJ_DIR)/gl_obj/snd_mix.o \
	$(OBJ_DIR)/gl_obj/view.o \
	$(OBJ_DIR)/gl_obj/wad.o \
	$(OBJ_DIR)/gl_obj/zone.o \
	$(OBJ_DIR)/gl_obj/cd_linux.o \
	$(OBJ_DIR)/gl_obj/sys_linux.o \
	$(OBJ_DIR)/gl_obj/snd_linux.o \
	\
	$(OBJ_DIR)/gl_obj/gl_draw.o \
	$(OBJ_DIR)/gl_obj/gl_mesh.o \
	$(OBJ_DIR)/gl_obj/gl_model.o \
	$(OBJ_DIR)/gl_obj/gl_ngraph.o \
	$(OBJ_DIR)/gl_obj/gl_refrag.o \
	$(OBJ_DIR)/gl_obj/gl_rlight.o \
	$(OBJ_DIR)/gl_obj/gl_rmain.o \
	$(OBJ_DIR)/gl_obj/gl_rmisc.o \
	$(OBJ_DIR)/gl_obj/gl_rsurf.o \
	$(OBJ_DIR)/gl_obj/gl_screen.o \
	$(OBJ_DIR)/gl_obj/gl_warp.o \
	\
	$(OBJ_DIR)/gl_obj/math.o \
	$(OBJ_DIR)/gl_obj/snd_mixa.o \
	$(OBJ_DIR)/gl_obj/sys_dosa.o
	
GL_SVGA_OBJS = $(OBJ_DIR)/gl_obj/gl_vidlinux.o
GL_X11_OBJS = $(OBJ_DIR)/gl_obj/gl_vidlinuxglx.o

$(OBJ_DIR)/qw-client-glide:	$(GL_OBJS) $(GL_SVGA_OBJS)
	$(CC) $(CFLAGS) -o $@ $(GL_OBJS) $(GL_SVGA_OBJS) $(LDFLAGS) $(GL_SVGA_LDFLAGS)

$(OBJ_DIR)/qw-client-gl:	$(GL_OBJS) $(GL_X11_OBJS)
	$(CC) $(CFLAGS) -o $@ $(GL_OBJS) $(GL_X11_OBJS) $(LDFLAGS) $(GL_X11_LDFLAGS)

$(OBJ_DIR)/gl_obj/cl_demo.o:	$(CLIENT_DIR)/cl_demo.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/cl_ents.o:	$(CLIENT_DIR)/cl_ents.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/cl_input.o:	$(CLIENT_DIR)/cl_input.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/cl_main.o:	$(CLIENT_DIR)/cl_main.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/cl_parse.o:	$(CLIENT_DIR)/cl_parse.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/cl_pred.o:	$(CLIENT_DIR)/cl_pred.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/cl_tent.o:	$(CLIENT_DIR)/cl_tent.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/cl_cam.o:	$(CLIENT_DIR)/cl_cam.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/cmd.o:	$(QW_COMMON_DIR)/cmd.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/common.o:	$(QW_COMMON_DIR)/common.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/console.o:	$(QW_COMMON_DIR)/console.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/crc.o:	$(COMMON_DIR)/crc.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/cvar.o:	$(QW_COMMON_DIR)/cvar.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/keys.o:	$(CLIENT_DIR)/keys.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/mathlib.o:	$(COMMON_DIR)/mathlib.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/md4.o:	$(QW_COMMON_DIR)/md4.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/menu.o:	$(CLIENT_DIR)/menu.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/net_chan.o:	$(QW_COMMON_DIR)/net_chan.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/net_udp.o:	$(QW_COMMON_DIR)/net_udp.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/nonintel.o:	$(CLIENT_DIR)/nonintel.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/pmove.o:	$(QW_COMMON_DIR)/pmove.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/pmovetst.o:	$(QW_COMMON_DIR)/pmovetst.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/r_part.o:	$(CLIENT_DIR)/r_part.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/sbar.o:	$(CLIENT_DIR)/sbar.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/screen.o:	$(CLIENT_DIR)/screen.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/skin.o:	$(CLIENT_DIR)/skin.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/snd_dma.o:	$(COMMON_DIR)/snd_dma.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/snd_mem.o:	$(COMMON_DIR)/snd_mem.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/snd_mix.o:	$(COMMON_DIR)/snd_mix.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/view.o:	$(CLIENT_DIR)/view.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/wad.o:	$(COMMON_DIR)/wad.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/zone.o:	$(COMMON_DIR)/zone.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/cd_linux.o:	$(COMMON_DIR)/cd_linux.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/sys_linux.o:	$(CLIENT_DIR)/sys_linux.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/snd_linux.o:	$(COMMON_DIR)/snd_linux.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/gl_draw.o:	$(CLIENT_DIR)/gl_draw.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/gl_mesh.o:	$(CLIENT_DIR)/gl_mesh.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/gl_model.o:	$(CLIENT_DIR)/gl_model.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/gl_ngraph.o:	$(CLIENT_DIR)/gl_ngraph.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/gl_refrag.o:	$(CLIENT_DIR)/gl_refrag.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/gl_rlight.o:	$(CLIENT_DIR)/gl_rlight.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/gl_rmain.o:	$(CLIENT_DIR)/gl_rmain.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/gl_rmisc.o:	$(CLIENT_DIR)/gl_rmisc.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/gl_rsurf.o:	$(CLIENT_DIR)/gl_rsurf.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/gl_screen.o:	$(CLIENT_DIR)/gl_screen.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/gl_vidlinux.o: $(CLIENT_DIR)/gl_vidlinux.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/gl_vidlinuxglx.o: $(COMMON_DIR)/gl_vidlinuxglx.c
	$(DO_GL_CC)

$(OBJ_DIR)/gl_obj/gl_warp.o:	$(CLIENT_DIR)/gl_warp.c
	$(DO_GL_CC)
	
$(OBJ_DIR)/gl_obj/sys_dosa.o:	$(CLIENT_DIR)/sys_dosa.s
	$(DO_GL_AS)

$(OBJ_DIR)/gl_obj/math.o:	$(COMMON_DIR)/math.s
	$(DO_GL_AS)

$(OBJ_DIR)/gl_obj/snd_mixa.o:	$(COMMON_DIR)/snd_mixa.s
	$(DO_GL_AS)

