
#########
#linux x86 and linux x64
# sudo apt-get install build-essential
# sudo apt-get install libx11-dev
# sudo apt-get install libglu1-mesa-dev mesa-common-dev

TARGET_OS = $(shell uname)
TARGET_ARCH = $(shell uname -m)
#supported are
#TARGET_OS = Linux     //linux OS
#TARGET_ARCH = x86_64  //64 bit x86
#TARGET_ARCH = i686    //32 bit x86

#########
#setup

CC = g++
COMPILERFLAGS = -Wall
SOUND_SUPPORT_FMOD = 0
SOUND_SUPPORT_PORTA = 1

ifeq ($(TARGET_OS),Linux)
 LDFLAGS_PLAIN = -lpthread
 LDFLAGS_GFX = -L/usr/X11R6/lib -lX11
 ifeq ($(TARGET_ARCH),x86_64)
  ifeq ($(SOUND_SUPPORT_FMOD),1)
   LDFLAGS_AUDIO = -L../../lib/linux_x64 -lfmodex64 '-Wl,-R,$$ORIGIN/.'
   SOUND_LIB_FILE = ../../lib/linux_x86/libfmodex64.so
  endif
  ifeq ($(SOUND_SUPPORT_PORTA),1)
   LDFLAGS_AUDIO = -L../../lib/linux_x64 -lportaudio '-Wl,-R,$$ORIGIN/.'
   SOUND_LIB_FILE = ../../lib/linux_x64/libportaudio.so
   COMPILERFLAGS += -D_PA_SOUND_=1
  endif
  EXE_PATH = ../../exe/linux_x64/
  LDFLAGS_GFX += -lGL
 else ifeq ($(TARGET_ARCH),i686)
  ifeq ($(SOUND_SUPPORT_FMOD),1)
   LDFLAGS_AUDIO = -L../../lib/linux_x86 -lfmodex '-Wl,-R,$$ORIGIN/.'
   SOUND_LIB_FILE = ../../lib/linux_x86/libfmodex.so
  endif
  ifeq ($(SOUND_SUPPORT_PORTA),1)
   LDFLAGS_AUDIO = -L../../lib/linux_x86 -lportaudio '-Wl,-R,$$ORIGIN/.'
   SOUND_LIB_FILE = ../../lib/linux_x86/libportaudio.so
   COMPILERFLAGS += -D_PA_SOUND_=1
  endif
  EXE_PATH = ../../exe/linux_x86/
  LDFLAGS_GFX += -lGL
 else
  EXE_PATH = ../../exe/linux/
  SOUND_SUPPORT_FMOD = 0
  SOUND_SUPPORT_PORTA = 0
  COMPILERFLAGS += -D_NO_SOUND_=1
  LDFLAGS_GFX += -lGL
 endif
 CFLAGS = $(COMPILERFLAGS) -I../../src/common -I../../src/galaxyv2 -I../../src/graph -I../../ext_include/linux
endif

#########
#objects

GRAPH_OBJECTS = ../../src/graph/bmp.o ../../src/graph/targa.o ../../src/graph/jpeg.o ../../src/graph/converter.o \
	../../src/graph/image.o ../../src/graph/font.o ../../src/graph/glgraph.o ../../src/graph/imagediskop.o

GALAXYV2_OBJECTS = ../../src/galaxyv2/galaxy.o ../../src/galaxyv2/bullet.o ../../src/galaxyv2/gameview2.o ../../src/galaxyv2/http_util.o \
	../../src/galaxyv2/settings.o ../../src/galaxyv2/gui.o ../../src/galaxyv2/ingamechat.o ../../src/galaxyv2/mapobjects.o \
	../../src/galaxyv2/netmsg.o ../../src/galaxyv2/netmsgserver.o ../../src/galaxyv2/object.o ../../src/galaxyv2/environment_defaults.o \
	../../src/galaxyv2/player.o ../../src/galaxyv2/showhiscore.o ../../src/galaxyv2/tilemap.o ../../src/galaxyv2/viewport.o \
	../../src/galaxyv2/global_hiscore.o ../../src/galaxyv2/replay.o ../../src/galaxyv2/image_utils.o ../../src/galaxyv2/pathfind.o \
	../../src/galaxyv2/AISteering.o ../../src/galaxyv2/FineGrainedPathFinder.o ../../src/galaxyv2/PathFinderSettings.o \
	../../src/galaxyv2/GameAI.o ../../src/galaxyv2/StandardRaceAI.o ../../src/galaxyv2/AIWorkerThread.o ../../src/galaxyv2/ShipState.o \
	../../src/galaxyv2/RaceAITasks.o \
	../../src/common/global.o ../../src/common/fileresource.o ../../src/common/timer.o ../../src/common/common.o ../../src/common/logger.o \
	../../src/common/socket_2.o ../../src/common/input.o ../../src/common/soundfx.o ../../src/common/moviemaker.o \
	$(GRAPH_OBJECTS)
ifeq ($(SOUND_SUPPORT_PORTA),1)
GALAXYV2_OBJECTS += ../../ext_include/linux/stb_vorbis.o
GALAXYV2_OBJECTS += ../../ext_include/linux/pa_ringbuffer.o
endif
SERVER_OBJECTS   = ../../src/server/server.o ../../src/server/s_player.o ../../src/server/s_game.o ../../src/server/s_manager.o \
	../../src/server/hiscorelist.o ../../src/galaxyv2/netmsgserver.o ../../src/galaxyv2/replay.o ../../src/galaxyv2/settings.o \
	../../src/common/global.o ../../src/common/fileresource.o ../../src/common/timer.o ../../src/common/common.o ../../src/common/logger.o \
	../../src/common/socket_2.o
EDITOR_OBJECTS   = ../../src/editor/mapedit.o ../../src/editor/mapbuilder.o ../../src/editor/e_object.o ../../src/editor/e_tilemap.o \
	../../src/common/global.o ../../src/common/fileresource.o ../../src/common/timer.o ../../src/common/input.o \
	$(GRAPH_OBJECTS)
RES_COMP_OBJECTS = ../../other/res_comp/res_comp.o ../../src/common/fileresource.o
IMG_CUT_OBJECTS  = ../../other/img_cut/img_cut.o   ../../src/common/fileresource.o $(GRAPH_OBJECTS)
FNT_COMP_OBJECTS = ../../other/fnt_comp/fnt_comp.o ../../src/common/fileresource.o $(GRAPH_OBJECTS) ../../src/graph/glfont.o

#########
#this will build a .cpp into .o
# make a .d dependency file
# fix so that a new or renamed .h file will cause a rebuild
# and finally fix paths in the .d file
%.o: %.cpp
	$(CC) -c $(CFLAGS) $*.cpp -o $*.o
	$(CC) -MM $(CFLAGS) $*.cpp > $*.d
	@mv -f $*.d $*.d.tmp
	@sed -e 's|.*:|$*.o:|' < $*.d.tmp > $*.d
	@sed -e 's/.*://' -e 's/\\$$//' < $*.d.tmp | fmt -1 | sed -e 's/^ *//' -e 's/$$/:/' >> $*.d
	@rm -f $*.d.tmp

%.o: %.c
	$(CC) -c $(CFLAGS) $*.c -o $*.o
	$(CC) -MM $(CFLAGS) $*.c > $*.d
	@mv -f $*.d $*.d.tmp
	@sed -e 's|.*:|$*.o:|' < $*.d.tmp > $*.d
	@sed -e 's/.*://' -e 's/\\$$//' < $*.d.tmp | fmt -1 | sed -e 's/^ *//' -e 's/$$/:/' >> $*.d
	@rm -f $*.d.tmp

#########
#targets
all: galaxyv2 server mapeditor ../../other/res_comp/res_comp ../../other/img_cut/img_cut ../../other/fnt_comp/fnt_comp install

game: galaxyv2 server mapeditor install

utils: ../../other/res_comp/res_comp ../../other/fnt_comp/fnt_comp ../../other/img_cut/img_cut

clean:
	rm -f ../../ext_include/linux/*.o ../../ext_include/linux/*.d
	rm -f ../../src/common/*.o ../../src/common/*.d
	rm -f ../../src/graph/*.o ../../src/graph/*.d
	rm -f ../../src/galaxyv2/*.o ../../src/galaxyv2/*.d
	rm -f ../../src/server/*.o ../../src/server/*.d
	rm -f ../../src/editor/*.o ../../src/editor/*.d
	rm -f ../../other/res_comp/*.o ../../other/res_comp/*.d
	rm -f ../../other/fnt_comp/*.o ../../other/fnt_comp/*.d
	rm -f ../../other/img_cut/*.o ../../other/img_cut/*.d
	rm -f ./galaxyv2
	rm -f ./server
	rm -f ./mapeditor
	rm -f ../../other/res_comp/res_comp
	rm -f ../../other/fnt_comp/fnt_comp
	rm -f ../../other/img_cut/img_cut

#########
#private

install:
	mkdir -p $(EXE_PATH)
ifeq ($(SOUND_SUPPORT_FMOD),1)
	cp $(SOUND_LIB_FILE) $(EXE_PATH)
endif
ifeq ($(SOUND_SUPPORT_PORTA),1)
	cp $(SOUND_LIB_FILE) $(EXE_PATH)
endif
	cp ./server     $(EXE_PATH)
	cp ./galaxyv2   $(EXE_PATH)
	cp ./mapeditor  $(EXE_PATH)

galaxyv2: $(GALAXYV2_OBJECTS)
	$(CC) -o ./galaxyv2 $(GALAXYV2_OBJECTS) $(LDFLAGS_PLAIN) $(LDFLAGS_GFX) $(LDFLAGS_AUDIO)
-include $(GALAXYV2_OBJECTS:.o=.d)

server: $(SERVER_OBJECTS)
	$(CC) -o ./server $(SERVER_OBJECTS) $(LDFLAGS_PLAIN)
-include $(SERVER_OBJECTS:.o=.d)

mapeditor: $(EDITOR_OBJECTS)
	$(CC) -o ./mapeditor $(EDITOR_OBJECTS) $(LDFLAGS_PLAIN) $(LDFLAGS_GFX)
-include $(EDITOR_OBJECTS:.o=.d)

../../other/res_comp/res_comp: $(RES_COMP_OBJECTS)
	$(CC) -o ../../other/res_comp/res_comp $(RES_COMP_OBJECTS) $(LDFLAGS_PLAIN)
-include $(RES_COMP_OBJECTS:.o=.d)

../../other/img_cut/img_cut: $(IMG_CUT_OBJECTS)
	$(CC) -o ../../other/img_cut/img_cut $(IMG_CUT_OBJECTS) $(LDFLAGS_PLAIN) $(LDFLAGS_GFX)
-include $(IMG_CUT_OBJECTS:.o=.d)

../../other/fnt_comp/fnt_comp: $(FNT_COMP_OBJECTS)
	$(CC) -o ../../other/fnt_comp/fnt_comp $(FNT_COMP_OBJECTS) $(LDFLAGS_PLAIN) $(LDFLAGS_GFX)
-include $(FNT_COMP_OBJECTS:.o=.d)
