# vim: set tw=75 :

# MetaMOD makefile
# by Will Day, based on the Valve SDK 2.1 Makefile as well as the Makefile
# in adminmod by Alfred Reynolds

#! Half-Life StandardSDK 2.0 mp_i386.so Makefile for i386 Linux
#
#! April 2000 by Leon Hartwig (jehannum@planethalflife.com)
#
# From SDK 2.1 dlls/Makefile

# NOTE: This is a generic Makefile for metamod and the bundled plugins, and
# is symlinked into each subdir.  Per-module config statements are in
# Config.mak in each subdir.

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

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

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

include Config.mak

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

ARCH=i386

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

DLL_SRCDIR=.

DLL_OBJDIR=$(DLL_SRCDIR)/obj

CFLAGS=-Dstricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp -Dstrcmpi=strcasecmp \
	-march=i686 -Wall -Wno-unused -Wno-unknown-pragmas

# original safe optimization, from valve Makefile
#CFLAGS+= -O2 -ffast-math -funroll-loops \
#	-fomit-frame-pointer -fexpensive-optimizations -malign-loops=2 \
#	-malign-jumps=2 -malign-functions=2

# safe optimization, adapted from adminmod Makefile
#CFLAGS+= -m486 -O6 -ffast-math -funroll-loops \
# -fexpensive-optimizations -malign-loops=2  -malign-jumps=2 \
# -malign-functions=2 -Wall

# full optimization, adapted from adminmod Makefile
# "WONT WORK WITH omit-frame-pointer"?
#CFLAGS+= -m486 -O6 -ffast-math -funroll-loops \
#	-fomit-frame-pointer -fexpensive-optimizations -malign-loops=2 \
#	-malign-jumps=2 -malign-functions=2 -s

#! use these when debugging 
CFLAGS+= -ggdb3

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

LDFLAGS=-ldl

SHLIBEXT=so
SHLIBCFLAGS=-fPIC
SHLIBLDFLAGS=-shared

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

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

$(DLL_OBJDIR)/%.o: $(DLL_SRCDIR)/%.cpp
	$(DO_CC)

SRC = $(DLLSRC)

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

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

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

FILES_ALL = *.cpp *.h [A-Z]*

#############################################################################
#! 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) $(DLL_OBJDIR)/*.o $(DLL_OBJDIR)/*.so

spotless: clean
	-rm -r $(DLL_OBJDIR)

distclean:	clean
	rm Rules.depend

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

test: $(TEST_DIR)/$(LIBSHARED)

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

snap:	.snap

.snap: $(FILES_ALL)
	mkdir -p snapshots
	tar zcvf snapshots/`date '+%m%d-%H%M'`.tgz $(FILES_ALL)
	touch .snap
	
depend: Rules.depend

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

include Rules.depend
