#
# Half-Life Full SDK 2.3 hl_i386.so Makefile for x86 Linux
#
# October 2002 by Leon Hartwig (hartwig@valvesoftware.com)
#

DLLNAME=hl

ARCH=i386

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

DLL_SRCDIR=.
ENGINE_SRCDIR=../engine
COMMON_SRCDIR=../common
PM_SHARED_SRCDIR=../pm_shared
GAME_SHARED_SRCDIR=../game_shared
BOT_SRCDIR = ../bot

DLL_OBJDIR=$(DLL_SRCDIR)/obj
PM_SHARED_OBJDIR=$(PM_SHARED_SRCDIR)/obj
GAME_SHARED_OBJDIR=$(GAME_SHARED_SRCDIR)/obj
BOT_OBJDIR=$(BOT_SRCDIR)/obj

BASE_CFLAGS=	-Dstricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp -D__linux__

#safe optimization
#CFLAGS=$(BASE_CFLAGS) -w -march=i486 -O1

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

#use these when debugging 
CFLAGS=$(BASE_CFLAGS) -g

INCLUDEDIRS=-I. -I$(ENGINE_SRCDIR) -I$(COMMON_SRCDIR) -I$(PM_SHARED_SRCDIR) -I$(GAME_SHARED_SRCDIR)

LDFLAGS=

SHLIBEXT=so
SHLIBCFLAGS=-fPIC
SHLIBLDFLAGS=-shared

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

#############################################################################
# SETUP AND BUILD
# GAME
#############################################################################

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

$(BOT_OBJDIR)/%.o: $(BOT_SRCDIR)/%.cpp
	$(DO_CC)

$(WPN_SHARED_OBJDIR)/%.o: $(WPN_SHARED_SRCDIR)/%.cpp
	$(DO_CC)

$(GAME_SHARED_OBJDIR)/%.o: $(GAME_SHARED_SRCDIR)/%.cpp
	$(DO_CC)

$(PM_SHARED_OBJDIR)/%.o: $(PM_SHARED_SRCDIR)/%.c
	$(DO_CC)

OBJ = \
	$(DLL_OBJDIR)/a18.o \
	$(DLL_OBJDIR)/animating.o \
	$(DLL_OBJDIR)/animation.o \
	$(DLL_OBJDIR)/aura.o \
	$(DLL_OBJDIR)/auth_check.o \
	$(DLL_OBJDIR)/beamattack.o \
	$(DLL_OBJDIR)/bigbang.o \
	$(DLL_OBJDIR)/bmodels.o \
	$(DLL_OBJDIR)/bodypart.o \
	$(DLL_OBJDIR)/buddy.o \
	$(DLL_OBJDIR)/buddy_aura.o \
	$(DLL_OBJDIR)/buddy_classes.o \
	$(DLL_OBJDIR)/buddy_melee.o \
	$(DLL_OBJDIR)/buddy_tasks.o \
	$(DLL_OBJDIR)/buddy_task_home.o \
	$(DLL_OBJDIR)/buddy_weapons.o \
	$(DLL_OBJDIR)/burningattack.o \
	$(DLL_OBJDIR)/buttons.o \
	$(DLL_OBJDIR)/buu.o \
	$(DLL_OBJDIR)/candy.o \
	$(DLL_OBJDIR)/candyattack.o \
	$(DLL_OBJDIR)/capturethedragonballs_gamerules.o \
	$(DLL_OBJDIR)/cbase.o \
	$(DLL_OBJDIR)/cell.o \
	$(DLL_OBJDIR)/chargedattack.o \
	$(DLL_OBJDIR)/chargedturbo.o \
	$(DLL_OBJDIR)/classes.o \
	$(DLL_OBJDIR)/client.o \
	$(DLL_OBJDIR)/combat.o \
	$(DLL_OBJDIR)/controlledweapon.o \
	$(DLL_OBJDIR)/deathball.o \
	$(DLL_OBJDIR)/defaultai.o \
	$(DLL_OBJDIR)/delayeddamage.o \
	$(DLL_OBJDIR)/destructodisc.o \
	$(DLL_OBJDIR)/discattack.o \
	$(DLL_OBJDIR)/doors.o \
	$(DLL_OBJDIR)/dragonball.o \
	$(DLL_OBJDIR)/effects.o \
	$(DLL_OBJDIR)/envmodel.o \
	$(DLL_OBJDIR)/explode.o \
	$(DLL_OBJDIR)/explodingattack.o \
	$(DLL_OBJDIR)/eyelaser.o \
	$(DLL_OBJDIR)/finalflash.o \
	$(DLL_OBJDIR)/fingerlaser.o \
	$(DLL_OBJDIR)/finishingbuster.o \
	$(DLL_OBJDIR)/flamethrower.o \
	$(DLL_OBJDIR)/fog.o \
	$(DLL_OBJDIR)/frieza.o \
	$(DLL_OBJDIR)/friezadisc.o \
	$(DLL_OBJDIR)/func_break.o \
	$(DLL_OBJDIR)/gallitgun.o \
	$(DLL_OBJDIR)/game.o \
	$(DLL_OBJDIR)/gamerules.o \
	$(DLL_OBJDIR)/genericbeam.o \
	$(DLL_OBJDIR)/genericmonster.o \
	$(DLL_OBJDIR)/ginyu.o \
	$(DLL_OBJDIR)/globals.o \
	$(DLL_OBJDIR)/gohan.o \
	$(DLL_OBJDIR)/goku.o \
	$(DLL_OBJDIR)/guidedattack.o \
	$(DLL_OBJDIR)/h_ai.o \
	$(DLL_OBJDIR)/h_export.o \
	$(DLL_OBJDIR)/items.o \
	$(DLL_OBJDIR)/kamehameha.o \
	$(DLL_OBJDIR)/kametorpedo.o \
	$(DLL_OBJDIR)/kiattack.o \
	$(DLL_OBJDIR)/kiblast.o \
	$(DLL_OBJDIR)/kidrain.o \
	$(DLL_OBJDIR)/krillin.o \
	$(DLL_OBJDIR)/lights.o \
	$(DLL_OBJDIR)/magicattack.o \
	$(DLL_OBJDIR)/makosen.o \
	$(DLL_OBJDIR)/maprules.o \
	$(DLL_OBJDIR)/masenko.o \
	$(DLL_OBJDIR)/melee.o \
	$(DLL_OBJDIR)/monstermaker.o \
	$(DLL_OBJDIR)/monsters.o \
	$(DLL_OBJDIR)/monsterstate.o \
	$(DLL_OBJDIR)/mouthblast.o \
	$(DLL_OBJDIR)/multiplay_gamerules.o \
	$(DLL_OBJDIR)/nodes.o \
	$(DLL_OBJDIR)/pathcorner.o \
	$(DLL_OBJDIR)/piccolo.o \
	$(DLL_OBJDIR)/plane.o \
	$(DLL_OBJDIR)/plats.o \
	$(DLL_OBJDIR)/player.o \
	$(DLL_OBJDIR)/playermelee.o \
	$(DLL_OBJDIR)/playermonster.o \
	$(DLL_OBJDIR)/powerbeam.o \
	$(DLL_OBJDIR)/powerstruggle.o \
	$(DLL_OBJDIR)/purpleball.o \
	$(DLL_OBJDIR)/regeneration.o \
	$(DLL_OBJDIR)/renzoku.o \
	$(DLL_OBJDIR)/scatterbeam.o \
	$(DLL_OBJDIR)/scattershot.o \
	$(DLL_OBJDIR)/schedule.o \
	$(DLL_OBJDIR)/scripted.o \
	$(DLL_OBJDIR)/sensubean.o \
	$(DLL_OBJDIR)/shenlong.o \
	$(DLL_OBJDIR)/shield.o \
	$(DLL_OBJDIR)/skill.o \
	$(DLL_OBJDIR)/solarflare.o \
	$(DLL_OBJDIR)/sound.o \
	$(DLL_OBJDIR)/soundent.o \
	$(DLL_OBJDIR)/specialbeamcannon.o \
	$(DLL_OBJDIR)/spectator.o \
	$(DLL_OBJDIR)/spiritbomb.o \
	$(DLL_OBJDIR)/subs.o \
	$(DLL_OBJDIR)/swoop.o \
	$(DLL_OBJDIR)/sword.o \
	$(DLL_OBJDIR)/talkmonster.o \
	$(DLL_OBJDIR)/teamplay_gamerules.o \
	$(DLL_OBJDIR)/telekinesis.o \
	$(DLL_OBJDIR)/triggers.o \
	$(DLL_OBJDIR)/trunks.o \
	$(DLL_OBJDIR)/util.o \
	$(DLL_OBJDIR)/vegeta.o \
	$(DLL_OBJDIR)/weapons.o \
	$(DLL_OBJDIR)/world.o \
	$(BOT_OBJDIR)/bot.o \
	$(BOT_OBJDIR)/bot_chat.o \
	$(BOT_OBJDIR)/bot_combat.o \
	$(BOT_OBJDIR)/bot_combo.o \
	$(BOT_OBJDIR)/bot_commands.o \
	$(BOT_OBJDIR)/bot_db.o \
	$(BOT_OBJDIR)/bot_ent.o \
	$(BOT_OBJDIR)/bot_io.o \
	$(BOT_OBJDIR)/bot_menu.o \
	$(BOT_OBJDIR)/bot_move.o \
	$(BOT_OBJDIR)/bot_personality.o \
	$(BOT_OBJDIR)/bot_sense.o \
	$(BOT_OBJDIR)/bot_sp.o \
	$(BOT_OBJDIR)/bot_util.o \
	$(BOT_OBJDIR)/tasks.o \
	$(BOT_OBJDIR)/teacher_tasks.o \
	$(BOT_OBJDIR)/waypoint.o \
	$(GAME_SHARED_OBJDIR)/voice_gamemgr.o \
	$(PM_SHARED_OBJDIR)/pm_debug.o \
	$(PM_SHARED_OBJDIR)/pm_math.o \
	$(PM_SHARED_OBJDIR)/pm_shared.o

$(DLLNAME)_$(ARCH).$(SHLIBEXT) : neat $(OBJ)
	$(CC) $(CFLAGS) $(SHLIBLDFLAGS) $(LDFLAGS) -o $@ $(OBJ)

neat:
	-mkdir $(DLL_OBJDIR)
	-mkdir $(BOT_OBJDIR)
	-mkdir $(GAME_SHARED_OBJDIR)
	-mkdir $(PM_SHARED_OBJDIR)
clean:
	-rm -f $(OBJ)	
	-rm -f $(DLLNAME)_$(ARCH).$(SHLIBEXT)
spotless: clean
	-rm -r $(DLL_OBJDIR)
	-rm -r $(GAME_SHARED_OBJDIR)
	-rm -r $(PM_SHARED_OBJDIR)
	-rm -r $(BOT_OBJDIR)

