########################################################################
# Quake Makefile for Elate
########################################################################
# Modified by profj (profj@bigfoot.com) - It now compiles! :-)

MOUNT_DIR=.

BUILD_DEBUG_DIR=debug
BUILD_RELEASE_DIR=bin

CC=vpcc

BASE_CFLAGS=
RELEASE_CFLAGS=$(BASE_CFLAGS) -O3
DEBUG_CFLAGS=$(BASE_CFLAGS) -g -Wall
LDFLAGS=

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

########################################################################
# Setup and build
########################################################################

TARGETS=$(BUILDDIR)/avequake.00
#	$(BUILDDIR)/grfquake.00

build_release:
	mkdir -p $(BUILD_RELEASE_DIR)/grfquake $(BUILD_RELEASE_DIR)/avequake
	$(MAKE) targets {BUILDDIR=$(BUILD_RELEASE_DIR)} {CFLAGS=$(RELEASE_CFLAGS)}

build_debug:
	mkdir -p $(BUILD_DEBUG_DIR)/grfquake $(BUILD_DEBUG_DIR)/avequake
	$(MAKE) targets {BUILDDIR=$(BUILD_DEBUG_DIR)} {CFLAGS=$(DEBUG_CFLAGS)}

all: build_debug build_release

targets: $(TARGETS)

QUAKE_OBJS = cl_demo.o cl_input.o \
 cl_main.o \
 cl_parse.o \
 cl_tent.o \
 chase.o \
 cmd.o \
 common.o \
 console.o \
 crc.o \
 cvar.o \
 draw.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 \
 host.o \
 host_cmd.o \
 keys.o \
 menu.o \
 mathlib.o \
 model.o \
 net_loop.o \
 net_main.o \
 net_vcr.o \
 net_none.o \
 nonintel.o \
 pr_cmds.o \
 pr_edict.o \
 pr_exec.o \
 r_aclip.o \
 r_alias.o \
 r_bsp.o \
 r_light.o \
 r_draw.o \
 r_efrag.o \
 r_edge.o \
 r_misc.o \
 r_main.o \
 r_sky.o \
 r_sprite.o \
 r_surf.o \
 r_part.o \
 r_vars.o \
 screen.o \
 sbar.o \
 sv_main.o \
 sv_phys.o \
 sv_move.o \
 sv_user.o \
 zone.o \
 view.o \
 wad.o \
 world.o \
 cd_null.o \
 sys_elate.o \
 snd_null.o \
 in_null.o

$(BUILDDIR)/%.o : $(MOUNT_DIR)/%.c
	$(DO_CC)

# $(BUILDDIR)/common.o : $(MOUNT_DIR)/common.c
#	$(DO_DEBUG_CC)

########################################################################
# GRF Quake
########################################################################

GRFQUAKE_OBJS = $(QUAKE_OBJS:%=$(BUILDDIR)/%) $(BUILDDIR)/grfquake/vid_elate.o

$(BUILDDIR)/grfquake.00 : $(GRFQUAKE_OBJS)
	$(CC) $(CFLAGS) -o $@ $(GRFQUAKE_OBJS) $(LDFLAGS)

$(BUILDDIR)/grfquake/vid_elate.o : $(MOUNT_DIR)/vid_elate.c
	$(DO_O_CC)

########################################################################
# AVE Quake
########################################################################

AVEQUAKE_OBJS = $(QUAKE_OBJS:%=$(BUILDDIR)/%) $(BUILDDIR)/avequake/vid_elate.o

$(BUILDDIR)/avequake.00 : $(AVEQUAKE_OBJS)
	$(CC) $(CFLAGS) -o $@ $(AVEQUAKE_OBJS) $(XLDFLAGS) $(LDFLAGS)

$(BUILDDIR)/avequake/vid_elate.o : $(MOUNT_DIR)/vid_elate.c
	$(DO_O_CC) -DAVE

########################################################################
# Misc
########################################################################

clean:
	rm -Rf $(BUILD_DEBUG_DIR) $(BUILD_RELEASE_DIR)
#	rm -f $(GRFQUAKE_OBJS) $(AVEQUAKE_OBJS)
##	$(MAKE) do_clean {BUILDDIR=$(BUILD_DEBUG_DIR)}
##	$(MAKE) do_clean {BUILDDIR=$(BUILD_RELEASE_DIR)} 
#
#do_clean:

