MODNAME = wtf_amxx
SRCFILES = sdk/amxxmodule.cpp amxx_api.cpp dllapi.cpp usermsg.cpp util.cpp \
CAutomatic.cpp CPistol.cpp CPlayer.cpp CGameBase.cpp CGameCS.cpp CGameDoD.cpp \
weapons.cpp projectiles.cpp misc.cpp explosions.cpp snark.cpp generic.cpp \
CProjectile.cpp CEntity.cpp CExplosion.cpp CSnark.cpp logs.cpp
CSRCFILES = 

EXTRA_LIBS_LINUX =
EXTRA_LIBS_WIN32 =
EXTRA_LIBDIRS_LINUX = -Lextra/lib_linux
EXTRA_LIBDIRS_WIN32 = -Lextra/lib_win32

EXTRA_INCLUDEDIRS = -I. -I./sdk

EXTRA_FLAGS = -Dstrcmpi=strcasecmp -g3 -ggdb3

SDKTOP=../hlsdk
METADIR=../metamod/metamod


SDKSRC=$(SDKTOP)/SourceCode
OBJDIR_LINUX=./obj.linux
OBJDIR_WIN32=obj.win32
SRCDIR=.

ifdef windir
	OS=WIN32
else
	OS=LINUX
endif

CC_LINUX=gcc
ifeq "$(OS)" "WIN32"
	CC_WIN32=gcc
	LD_WINDLL=dllwrap
	DEFAULT=win32
	CLEAN=clean_win32
else
	CC_WIN32=/usr/local/cross-tools/i386-mingw32msvc/bin/gcc
	LD_WINDLL=/usr/local/cross-tools/bin/i386-mingw32msvc-dllwrap
	DEFAULT=linux win32
	CLEAN=clean_both
endif


#use this for AMD64
#LIBFILE_LINUX = $(MODNAME)_amd64.so
LIBFILE_LINUX = $(MODNAME)_i386.so
LIBFILE_LINUX_DEBUG = $(MODNAME)_debug.so
LIBFILE_WIN32 = $(MODNAME).dll
TARGET_LINUX_D = $(OBJDIR_LINUX)/$(LIBFILE_LINUX_DEBUG)
TARGET_LINUX = $(OBJDIR_LINUX)/$(LIBFILE_LINUX)
TARGET_WIN32 = $(OBJDIR_WIN32)/$(LIBFILE_WIN32)

FILES_ALL = *.cpp *.h [A-Z]* *.rc
ifeq "$(OS)" "LINUX"
	ASRCFILES := $(shell ls -t $(SRCFILES))
else
	ASRCFILES := $(shell dir /b)
endif
OBJ_LINUX := $(SRCFILES:%.cpp=$(OBJDIR_LINUX)/%.o)
OBJC_LINUX := $(CSRCFILES:%.c=$(OBJDIR_LINUX)/%.o)
OBJ_WIN32 := $(SRCFILES:%.cpp=$(OBJDIR_WIN32)/%.o)
OBJC_WIN32 := $(CSRCFILES:%.c=$(OBJDIR_WIN32)/%.o)

#use this for amd64
#CCOPT = -m64 -g -ggdb3 -DHAVE_I64 -DSMALL_CELL_SIZE=64
#CCOPT = -march=i386 -s -DNDEBUG -O2 -fomit-frame-pointer -fno-exceptions -fno-rtti -ffast-math
LINUX_DEBUG = -g -ggdb3 -DDOUT
#CCOPT = -g -ggdb3 -DDOUT
ifeq "$(DDOUT)" "1"
CCOPT = -g3 -DDOUT
else
CCOPT = -DOPT_TYPE=\"optimized\" 
endif
INCLUDEDIRS=-I$(SRCDIR) -I$(METADIR) -I$(SDKSRC)/engine -I$(SDKSRC)/common -I$(SDKSRC)/pm_shared -I$(SDKSRC)/dlls -I$(SDKSRC) $(EXTRA_INCLUDEDIRS)
CFLAGS=-Wall -Wno-unknown-pragmas
#ODEF = -DOPT_TYPE=\"optimized\"
CFLAGS:=$(CCOPT) $(CFLAGS) $(ODEF) $(EXTRA_FLAGS)

DO_CC_LINUX=$(CC_LINUX) $(CFLAGS) -fPIC $(INCLUDEDIRS) -o $@ -c $<
DO_CC_LINUX_DEBUG=$(CC_LINUX) $(CFLAGS) -fPIC $(INCLUDEDIRS) $(LINUX_DEBUG) -o $@ -c $<
LINK_LINUX_DEBUG=$(CC_LINUX) $(CFLAGS) -shared -ldl -lm $(OBJ_LINIX) $(EXTRA_LIBDIRS_LINUX) $(EXTRA_LIBS_LINUX) $(LINUX_DEBUG) -o $@
DO_CC_WIN32=$(CC_WIN32) $(CFLAGS) $(INCLUDEDIRS) -o $@ -c $<
LINK_LINUX=$(CC_LINUX) $(CFLAGS) -shared -ldl -lm $(OBJ_LINUX) $(OBJC_LINUX) $(EXTRA_LIBDIRS_LINUX) $(EXTRA_LIBS_LINUX) -o $@
LINK_WIN32=$(LD_WINDLL) -mwindows --def $(MODNAME).def --add-stdcall-alias $(OBJ_WIN32) $(OBJC_WIN32) $(EXTRA_LIBDIRS_WIN32) $(EXTRA_LIBS_WIN32) -o $@

$(OBJDIR_LINUX)/%.o: $(SRCDIR)/%.c
	$(DO_CC_LINUX)

$(OBJDIR_LINUX)/%.o: $(SRCDIR)/%.cpp
	$(DO_CC_LINUX)

$(OBJDIR_WIN32)/%.o: $(SRCDIR)/%.c
	$(DO_CC_WIN32)

$(OBJDIR_WIN32)/%.o: $(SRCDIR)/%.cpp
	$(DO_CC_WIN32)

$(OBJDIR_LINUX):
	-mkdir $@
	-mkdir $@/sdk

default: $(DEFAULT)

$(TARGET_LINUX): $(OBJDIR_LINUX) $(OBJ_LINUX) $(OBJC_LINUX)
	$(LINK_LINUX)

$(TARGET_WIN32): $(OBJDIR_WIN32) $(OBJ_WIN32) $(OBJC_WIN32)
	$(LINK_WIN32)

$(OBJDIR_WIN32):
	mkdir $@

win32: $(TARGET_WIN32)


linux: $(TARGET_LINUX)

debug: $(TARGET_LINUX_D)

clean: $(CLEAN)

clean_both:
	-rm -rf $(OBJDIR_LINUX)
	-rm -f $(OBJDIR_WIN32)

clean_win32:
	del /q $(OBJDIR_WIN32)

 
