#
# MiniRacer for Linux Makefile
#
# GNU Make required
#
# ELF only
#

MAINDIR=.

BUILDDIR=obj

CC=gcc
DEFS=-DVIDMODEXT_GAMMA_RAMP -DSOUND
INCLUDES= -I. -I/usr/X11R6/include -I/usr/include/SDL
CFLAGS=$(DEFS) $(INCLUDES) -O3 -march=i486 -ffast-math -fexpensive-optimizations

GL_LDFLAGS=-L/usr/X11R6/lib -lGL -lXxf86dga -lXxf86vm -lX11 -lXext -lm
LDFLAGS=$(GL_LDFLAGS) -ldl -lSDL -lSDL_mixer -lpthread

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

build: all

all: dirs build_release

new: clean dirs build_release

dirs:
	@-mkdir $(BUILDDIR) \
	        $(BUILDDIR)/client \
		$(BUILDDIR)/host \
		$(BUILDDIR)/console \
		$(BUILDDIR)/misc \
		$(BUILDDIR)/network \
		$(BUILDDIR)/opengl \
		$(BUILDDIR)/server \
		$(BUILDDIR)/sound \
		$(BUILDDIR)/game

build_release: engine.glx

install:
	install -d $(DESTDIR)/usr/bin
	install -d $(DESTDIR)/usr/share/man/man6
	install -d $(DESTDIR)/usr/share/games/MiniRacer
	install -d $(DESTDIR)/usr/share/games/MiniRacer/data
	install -d $(DESTDIR)/usr/share/games/MiniRacer/data/maps
	install -m 755 engine.glx $(DESTDIR)/usr/share/games/MiniRacer
	install -m 644 data/pak0.pak $(DESTDIR)/usr/share/games/MiniRacer/data
	install -m 644 data/config.cfg $(DESTDIR)/usr/share/games/MiniRacer/data
	install -m 755 miniracer $(DESTDIR)/usr/bin/miniracer
	install -m 644 miniracer.6 $(DESTDIR)/usr/share/man/man6
	install -m 644 data/maps/*.bsp $(DESTDIR)/usr/share/games/MiniRacer/data/maps
	install -m 644 data/maps/maps1.lst $(DESTDIR)/usr/share/games/MiniRacer/data/maps

#############################################################################
# GL MiniRacer
#############################################################################
GLMR_OBJS = \
	$(BUILDDIR)/misc/sys_linux.o \
	$(BUILDDIR)/sound/sound.o \
	$(BUILDDIR)/sound/sound_sdl.o \
	$(BUILDDIR)/sound/soundfx.o \
	$(BUILDDIR)/network/net_bsd.o \
	$(BUILDDIR)/network/net_dgrm.o \
	$(BUILDDIR)/network/net_loop.o \
	$(BUILDDIR)/network/net_main.o \
	$(BUILDDIR)/network/net_vcr.o \
	$(BUILDDIR)/network/net_udp.o \
	$(BUILDDIR)/host/host.o \
	$(BUILDDIR)/host/host_cmd.o \
	$(BUILDDIR)/server/sv_edict.o \
	$(BUILDDIR)/server/sv_main.o \
	$(BUILDDIR)/server/sv_phys.o \
	$(BUILDDIR)/server/sv_user.o \
	$(BUILDDIR)/client/cl_demo.o \
	$(BUILDDIR)/client/cl_input.o \
	$(BUILDDIR)/client/cl_main.o \
	$(BUILDDIR)/client/cl_parse.o \
	$(BUILDDIR)/console/console.o \
	$(BUILDDIR)/misc/camera.o \
	$(BUILDDIR)/misc/cmd.o \
	$(BUILDDIR)/misc/common.o \
	$(BUILDDIR)/misc/crc.o \
	$(BUILDDIR)/misc/cvar.o \
	$(BUILDDIR)/misc/gamma.o \
	$(BUILDDIR)/misc/keys.o \
	$(BUILDDIR)/misc/load.o \
	$(BUILDDIR)/misc/mathlib.o \
	$(BUILDDIR)/misc/menu.o \
	$(BUILDDIR)/misc/records.o \
	$(BUILDDIR)/misc/times.o \
	$(BUILDDIR)/misc/world.o \
	$(BUILDDIR)/misc/zone.o \
	$(BUILDDIR)/opengl/gl_car.o \
	$(BUILDDIR)/opengl/gl_dashboard.o \
	$(BUILDDIR)/opengl/gl_draw.o \
	$(BUILDDIR)/opengl/gl_gentex.o \
	$(BUILDDIR)/opengl/gl_model.o \
	$(BUILDDIR)/opengl/gl_rlight.o \
	$(BUILDDIR)/opengl/gl_rmain.o \
	$(BUILDDIR)/opengl/gl_rmisc.o \
	$(BUILDDIR)/opengl/gl_rsurf.o \
	$(BUILDDIR)/opengl/gl_screen.o \
	$(BUILDDIR)/opengl/gl_skids.o \
	$(BUILDDIR)/opengl/gl_smoke.o \
	$(BUILDDIR)/opengl/gl_vidlinuxglx.o \
	$(BUILDDIR)/opengl/gl_warp.o \
	$(BUILDDIR)/game/game_bot.o \
	$(BUILDDIR)/game/game_bots.o \
	$(BUILDDIR)/game/game_client.o \
	$(BUILDDIR)/game/game_funcs.o \
	$(BUILDDIR)/game/game_main.o \
	$(BUILDDIR)/game/game_precache.o \
	$(BUILDDIR)/game/game_triggers.o

$(BUILDDIR)/host/%.o: $(MAINDIR)/host/%.c
	$(CC) $(CFLAGS) $(GLCFLAGS) -o $@ -c $<

$(BUILDDIR)/client/%.o: $(MAINDIR)/client/%.c
	$(CC) $(CFLAGS) $(GLCFLAGS) -o $@ -c $<

$(BUILDDIR)/console/%.o: $(MAINDIR)/console/%.c
	$(CC) $(CFLAGS) $(GLCFLAGS) -o $@ -c $<

$(BUILDDIR)/misc/%.o: $(MAINDIR)/misc/%.c
	$(CC) $(CFLAGS) $(GLCFLAGS) -o $@ -c $<

$(BUILDDIR)/network/%.o: $(MAINDIR)/network/%.c
	$(CC) $(CFLAGS) $(GLCFLAGS) -o $@ -c $<

$(BUILDDIR)/opengl/%.o: $(MAINDIR)/opengl/%.c
	$(CC) $(CFLAGS) $(GLCFLAGS) -o $@ -c $<

$(BUILDDIR)/server/%.o: $(MAINDIR)/server/%.c
	$(CC) $(CFLAGS) $(GLCFLAGS) -o $@ -c $<

$(BUILDDIR)/sound/%.o: $(MAINDIR)/sound/%.c
	$(CC) $(CFLAGS) $(GLCFLAGS) -o $@ -c $<

$(BUILDDIR)/game/%.o: $(MAINDIR)/game/%.c
	$(CC) $(CFLAGS) $(GLCFLAGS) -o $@ -c $<

engine.glx : $(GLMR_OBJS)
	$(CC) $(CFLAGS) -o $@ $(GLMR_OBJS) $(LDFLAGS)

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

clean:
	rm -rf engine.glx $(BUILDDIR)
