PROJECT = xa-003
EXEC = $(PROJECT)
CPPC = g++ 

# Compile flags ----------------------------------------------------------------
#FLAGS = -g -Wall
FLAGS = -O3 -s -Wall
#FLAGS = -Os -s

# DEBUG ------------------------------------------------------------------------
#DEBUG = -DDEBUG

# Don't use switch texes (For debug, should not be used) -----------------------
#NO_STEX = -DNO_STEX

# GUI --------------------------------------------------------------------------
GUIOPT = -DUSE_GUI
GUICODE = base/xdl.o
GUILIB = `pkg-config --libs gtk+-2.0`

# Library and include flags ----------------------------------------------------
LIB = `sdl-config --libs` -lpng $(GUILIB) -lSDL_mixer
INC = `sdl-config --cflags` $(GUIOPT) $(DEBUG) $(FPSLOCK) $(NO_STEX)

# Targets ----------------------------------------------------------------------
OBASE = base/main.o $(GUICODE) base/xdm.o base/xio.o base/xs.o
SC = scene/scene_
GFX = gfx/gfx_
OSCENE = $(SC)intro.o $(SC)rollingcube.o $(SC)end.o $(SC)greets.o
OGFX = $(GFX)cube.o $(GFX)plasma.o $(GFX)font.o $(GFX)anim.o $(GFX)noice.o $(GFX)sort.o
OBJECTS = $(OBASE) $(OSCENE) $(OGFX)

all: $(OBJECTS)
	$(CPPC) $(FLAGS) $(OBJECTS) -o $(EXEC) $(LIB)
#	@strip --remove-section=".comment" $(EXEC)
#	@strip --remove-section=".note" $(EXEC)
#	@gzexe $(EXEC)
	@rm -f $(EXEC)~
	@wc -c $(EXEC)

sstrip: $(OBJECTS)
#	http://www.muppetlabs.com/~breadbox/software/elfkickers.html
#	Use FLAGS = -Os -s
	@$(CPPC) $(FLAGS) $(OBJECTS) -o $(EXEC) $(LIB)
	@sstrip $(EXEC)
	@upx -q $(EXEC)
	@rm -f $(EXEC)~
	@wc -c $(EXEC)

upx: $(OBJECTS)
#	Use FLAGS = -Os -s
	@$(CPPC) $(FLAGS) $(OBJECTS) -o $(EXEC) $(LIB)
	@upx -q $(EXEC)
	@rm -f $(EXEC)~
	@wc -c $(EXEC)

dist:
	@make clean
	@echo -n "Creating $(PROJECT)-`date +%Y%m%d`.tar.gz..."
	@cd ../.. && tar cfz $(PROJECT)-`date +%Y%m%d`.tar.gz $(PROJECT)
	@echo "Done."

clean:
	@echo -n Cleaning up...
	@rm -f $(EXEC) base/*.o scene/*.o gfx/*.o &> /dev/null
	@echo Done.

# Object dependencys -----------------------------------------------------------
base/main.o: base/main.cpp
	$(CPPC) $(FLAGS) -c base/main.cpp -o base/main.o $(INC)
base/xdl.o: base/xdl.cpp
	$(CPPC) $(FLAGS) -c base/xdl.cpp -o base/xdl.o $(INC) `pkg-config --cflags gtk+-2.0`
base/xdm.o: base/xdm.cpp
	$(CPPC) $(FLAGS) -c base/xdm.cpp -o base/xdm.o $(INC)
base/xio.o: base/xio.cpp
	$(CPPC) $(FLAGS) -c base/xio.cpp -o base/xio.o $(INC)
base/xs.o: base/xs.cpp
	$(CPPC) $(FLAGS) -c base/xs.cpp -o base/xs.o $(INC)
# Scene
$(SC)intro.o: $(SC)intro.cpp
	$(CPPC) $(FLAGS) -c $(SC)intro.cpp -o $(SC)intro.o $(INC)
$(SC)rollingcube.o: $(SC)rollingcube.cpp
	$(CPPC) $(FLAGS) -c $(SC)rollingcube.cpp -o $(SC)rollingcube.o $(INC)
$(SC)end.o: $(SC)end.cpp
	$(CPPC) $(FLAGS) -c $(SC)end.cpp -o $(SC)end.o $(INC)
$(SC)greets.o: $(SC)greets.cpp
	$(CPPC) $(FLAGS) -c $(SC)greets.cpp -o $(SC)greets.o $(INC)
# Gfx
$(GFX)cube.o: $(GFX)cube.cpp
	$(CPPC) $(FLAGS) -c $(GFX)cube.cpp -o $(GFX)cube.o $(INC)
$(GFX)plasma.o: $(GFX)plasma.cpp
	$(CPPC) $(FLAGS) -c $(GFX)plasma.cpp -o $(GFX)plasma.o $(INC)
$(GFX)font.o: $(GFX)font.cpp
	$(CPPC) $(FLAGS) -c $(GFX)font.cpp -o $(GFX)font.o $(INC)
$(GFX)anim.o: $(GFX)anim.cpp
	$(CPPC) $(FLAGS) -c $(GFX)anim.cpp -o $(GFX)anim.o $(INC)
$(GFX)noice.o: $(GFX)noice.cpp
	$(CPPC) $(FLAGS) -c $(GFX)noice.cpp -o $(GFX)noice.o $(INC)
$(GFX)sort.o: $(GFX)sort.cpp
	$(CPPC) $(FLAGS) -c $(GFX)sort.cpp -o $(GFX)sort.o $(INC)
