# Makefile for the MBSPC utility
# Copyright (C) 2012 Laszlo Menczel
# Platforms: Linux and Win32/MinGW

#--------------------------------------------------------------------
# Detection of platform and architecture
#--------------------------------------------------------------------

PLATFORM = $(shell uname|sed -e s/_.*//|tr '[:upper:]' '[:lower:]')

ifeq ($(PLATFORM),linux)
  ARCH = x86_64
  TMP = $(shell uname -a | grep x86_64)
ifeq (x$(TMP),x)
    ARCH = x86
endif
endif

ifeq ($(PLATFORM),mingw32)
  ARCH = x86
endif

#--------------------------------------------------------------------
# MNT_DIR = path to MBSPC source (e.g. "/home/somebody/src/mbspc")
#--------------------------------------------------------------------

ifeq ($(PLATFORM),linux)
  MNT_DIR = /root/Progdev/mbspc
  BLD_DIR = $(MNT_DIR)/build/linux
  OS_CFLAGS = -D__linux__
  LIBS = -ldl -lm
  BIN_EXT =
endif

ifeq ($(PLATFORM),mingw32)
  MNT_DIR = d:/Msys/home/menczel/mbspc
  BLD_DIR = $(MNT_DIR)/build/win32
  OS_CFLAGS = -D_WIN32
  LIBS = -lws2_32 -lwinmm
  BIN_EXT = .exe
endif

#--------------------------------------------------------------------
# Locations
#--------------------------------------------------------------------

BOT_DIR = $(MNT_DIR)/botlib
BSP_DIR = $(MNT_DIR)/mbspc
COM_DIR = $(MNT_DIR)/qcommon
OBJ_DIR = $(BLD_DIR)/obj

#--------------------------------------------------------------------
# Flags
#--------------------------------------------------------------------

BASE_CFLAGS = -c -O3 -Wall -Wstrict-prototypes -fno-strict-aliasing \
              -MMD -DNDEBUG -DBSPC -DBSPCINCLUDE

CFLAGS = $(BASE_CFLAGS) $(OS_CFLAGS)

#--------------------------------------------------------------------
# Compile commands
#--------------------------------------------------------------------

CC = gcc$(BIN_EXT)

$(OBJ_DIR)/%.o: $(BSP_DIR)/%.c
	$(CC) $(CFLAGS) -o $@ -c $<

$(OBJ_DIR)/%.o: $(BOT_DIR)/%.c
	$(CC) $(CFLAGS) -o $@ -c $<

$(OBJ_DIR)/%.o: $(COM_DIR)/%.c
	$(CC) $(CFLAGS) -o $@ -c $<

#--------------------------------------------------------------------
# Objects
#--------------------------------------------------------------------

BSP_OBJ = \
  $(OBJ_DIR)/aas_areamerging.o \
  $(OBJ_DIR)/aas_cfg.o \
  $(OBJ_DIR)/aas_create.o \
  $(OBJ_DIR)/aas_edgemelting.o \
  $(OBJ_DIR)/aas_facemerging.o \
  $(OBJ_DIR)/aas_file.o \
  $(OBJ_DIR)/aas_gsubdiv.o \
  $(OBJ_DIR)/aas_map.o \
  $(OBJ_DIR)/aas_prunenodes.o \
  $(OBJ_DIR)/aas_store.o \
  $(OBJ_DIR)/be_aas_bspc.o \
  $(OBJ_DIR)/brushbsp.o \
  $(OBJ_DIR)/bsp_ent.o \
  $(OBJ_DIR)/bsp_hl.o \
  $(OBJ_DIR)/bsp_q1.o \
  $(OBJ_DIR)/bsp_q2.o \
  $(OBJ_DIR)/bsp_q3.o \
  $(OBJ_DIR)/bsp_sin.o \
  $(OBJ_DIR)/bspc.o \
  $(OBJ_DIR)/bspcmd.o \
  $(OBJ_DIR)/csg.o \
  $(OBJ_DIR)/faces.o \
  $(OBJ_DIR)/glfile.o \
  $(OBJ_DIR)/leakfile.o \
  $(OBJ_DIR)/log.o \
  $(OBJ_DIR)/map.o \
  $(OBJ_DIR)/map_hl.o \
  $(OBJ_DIR)/map_q1.o \
  $(OBJ_DIR)/map_q2.o \
  $(OBJ_DIR)/map_q3.o \
  $(OBJ_DIR)/map_sin.o \
  $(OBJ_DIR)/math.o \
  $(OBJ_DIR)/mem.o \
  $(OBJ_DIR)/nodraw.o \
  $(OBJ_DIR)/poly.o \
  $(OBJ_DIR)/portals.o \
  $(OBJ_DIR)/prtfile.o \
  $(OBJ_DIR)/qfiles.o \
  $(OBJ_DIR)/textures.o \
  $(OBJ_DIR)/threads.o \
  $(OBJ_DIR)/tree.o \
  $(OBJ_DIR)/utils.o \
  $(OBJ_DIR)/writebsp.o \
  \
  $(OBJ_DIR)/be_aas_bspq3.o \
  $(OBJ_DIR)/be_aas_cluster.o \
  $(OBJ_DIR)/be_aas_move.o \
  $(OBJ_DIR)/be_aas_optimize.o \
  $(OBJ_DIR)/be_aas_reach.o \
  $(OBJ_DIR)/be_aas_sample.o \
  $(OBJ_DIR)/l_libvar.o \
  $(OBJ_DIR)/l_precomp.o \
  $(OBJ_DIR)/l_script.o \
  $(OBJ_DIR)/l_struct.o \
  \
  $(OBJ_DIR)/cm_load.o \
  $(OBJ_DIR)/cm_patch.o \
  $(OBJ_DIR)/cm_test.o \
  $(OBJ_DIR)/cm_trace.o \
  $(OBJ_DIR)/md4.o \
  $(OBJ_DIR)/unzip.o

#--------------------------------------------------------------------
# Targets
#--------------------------------------------------------------------

BSP_EXE = $(BLD_DIR)/mbspc$(BIN_EXT)

all: $(BSP_EXE)

clean:
	rm -f $(BSP_OBJ)
	rm -f $(BSP_EXE)


veryclean:
	rm -f $(BSP_OBJ)
	rm -f $(BSP_EXE)
	rm -f $(DEP_FILES)

cleandep:
	rm -f $(DEP_FILES)

#-------------------------------------------------------------------
# Build rules
#-------------------------------------------------------------------

$(BSP_EXE): $(BSP_OBJ)
	$(CC) $(BSP_LDFLAGS) -o $@ $(BSP_OBJ) $(LIBS)

#--------------------------------------------------------------------
# Dependencies
#--------------------------------------------------------------------

DEP_FILES = $(filter %.d,$(BSP_OBJ:%.o=%.d))

-include $(DEP_FILES)

.PHONY: all clean xclean cleandep
