########################################################################
# Quake Makefile for Elate
########################################################################

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:

