#
#! Half-Life StandardSDK 2.0 mp_i386.so Makefile for i386 Linux
#
#! April 2000 by Leon Hartwig (jehannum@planethalflife.com)
#
# From SDK dlls/Makefile
#
# example MetaMOD plugin
# Modified by Will Day, with some changes from the Makefile in adminmod by Alfred Reynolds

#############################################################################
# CONFIGURATION
#############################################################################

SDKDIR=$(HOME)/src/hl/hlsdk-2.1
SDKSRC=$(SDKDIR)/SourceCode
METADIR=$(HOME)/src/hl/metamod

INST_DIR=$(HOME)/half-life/cstrike/dlls
TEST_DIR=$(HOME)/test/cstrike/dlls

#############################################################################
# STUFF
#############################################################################

DLLNAME=mm_test

ARCH=i386

#! make sure this is the correct compiler for your system
CC=gcc

DLL_SRCDIR=.

DLL_OBJDIR=$(DLL_SRCDIR)/obj

BASE_CFLAGS=-Dstricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp -Dstrcmpi=strcasecmp \
	-m486 -Wall -Wno-unused -Wno-unknown-pragmas

#! safe optimization
CFLAGS=$(BASE_CFLAGS) -O1

#! full optimization
#CFLAGS=$(BASE_CFLAGS) -O2 -ffast-math -funroll-loops \
#	-fomit-frame-pointer -fexpensive-optimizations -malign-loops=2 \
#	-malign-jumps=2 -malign-functions=2

#! use these when debugging 
CFLAGS+= -g3 #-Wall

INCLUDEDIRS=-I. -I$(METADIR) -I$(SDKSRC)/engine -I$(SDKSRC)/common -I$(SDKSRC)/pm_shared -I$(SDKSRC)/dlls -I$(SDKSRC)

LDFLAGS=

SHLIBEXT=so
SHLIBCFLAGS=-fPIC
SHLIBLDFLAGS=-shared

DO_CC=$(CC) $(CFLAGS) $(SHLIBCFLAGS) $(INCLUDEDIRS) -o $@ -c $<

#############################################################################
#! SETUP
#############################################################################

$(DLL_OBJDIR)/%.o: $(DLL_SRCDIR)/%.cpp
	$(DO_CC)
SRC = dllapi.cpp dllapi_post.cpp h_export.cpp engine_api.cpp engine_api_post.cpp meta_api.cpp debug_levels.cpp log_mtest.cpp sdk_util.cpp

OBJ := $(SRC:%.cpp=$(DLL_OBJDIR)/%.o)

#$(DLL_OBJDIR)/sdk_util.o: CFLAGS += -w

LIBSHARED = $(DLLNAME)_$(ARCH).$(SHLIBEXT)
LIB_TARGET = $(DLL_OBJDIR)/$(LIBSHARED)

#############################################################################
#! BUILD RULES FOR GAME
#############################################################################

all: $(LIB_TARGET)

$(LIB_TARGET): neat $(OBJ) tags
	$(CC) $(CFLAGS) $(SHLIBLDFLAGS) $(LDFLAGS) -o $@ $(OBJ)

neat:
	test -d $(DLL_OBJDIR) || mkdir $(DLL_OBJDIR)

clean:
	-rm -f $(OBJ) $(DLLNAME)_$(ARCH).$(SHLIBEXT)

spotless: clean
	-rm -r $(DLL_OBJDIR)

tags: $(SRC)
	ctags -i=cdegfmstuvS *.h *.cpp

test: $(TEST_DIR)/$(LIBSHARED)

$(TEST_DIR)/$(LIBSHARED): $(LIB_TARGET)
	install -m 644 $(LIB_TARGET) $@

snap:
	mkdir -p snapshots
	tar zcvf snapshots/`date '+%m%d-%H%M'`.tgz Makefile *.cpp *.h
	
depend: Rules.depend

Rules.depend: $(SRC)
	$(CC) -MM $(INCLUDEDIRS) $(SRC) | sed "s:^[^ 	]:$(DLL_OBJDIR)/&:" > Rules.depend

include Rules.depend
