# Copyright (c) Microsoft Corporation.  All Rights Reserved.
CFLAGS=
STLPORT_LINK=
STLPORT_INLCUDE=
#VC compiler
ifeq ($(COMPILER), msvc)
CC=cl
BOOST_INCLUDE = c:\usr\src\boost\boost_1_32_0
COMPILER_BOOST_THREAD_LIB = C:\usr\src\boost\boost_1_32_0\bin\boost\libs\thread\build\libboost_thread.lib\vc-7_1\release\runtime-link-static\threading-multi\libboost_thread-vc71-mt-s-1_32.lib
CFLAGS := $(CFLAGS) /EHsc /Ox /DNDEBUG
OBJOUTPUTFLAG = /Fo
EXEOUTPUTFLAG = /Fe
COMPILE_ONLY_FLAG = /c
PERF_LINK = psapi.lib
LINKER_FLAG = /link
#STLPORT_LINK = /link stlport_vc71.lib /nodefaultlib:libcmt
ifeq ($(STLTYPE), STLPORT)
	STLPORT_LINK = $(LINKER_FLAG) stlport_vc71_static.lib /NODEFAULTLIB:libcmt
	STLPORT_INCLUDE = /I c:\usr\src\STLport-4.6.2\stlport
else
	STLTYPE=DEFAULT_STL
endif

DEL_CMD = del
else
#gcc compiler
COMPILER_BOOST_THREAD_LIB = /cygdrive/c/usr/src/boost/boost_1_32_0/bin/boost/libs/thread/build/libboost_thread.lib/gcc/release/runtime-link-static/threading-multi/libboost_thread-gcc-mt-s-1_32.lib
CFLAGS := -O3 -Wall -DNDEBUG
COMPILER=gcc
CC = g++
BOOST_INCLUDE = /cygdrive/c/usr/src/boost/boost_1_32_0
OBJOUTPUTFLAG= -o
EXEOUTPUTFLAG = -o
COMPILE_ONLY_FLAG = -c
LINKER_FLAG = -l
ifeq ($(STLTYPE), STLPORT)
	STLPORT_INCLUDE = -I /cygdrive/c/usr/src/STLport-4.6.2/stlport
	STLPORT_LINK = $(LINKER_FLAG) stlport_cygwin -L /usr/local/lib
else
	STLTYPE=DEFAULT_STL
endif
DEL_CMD = rm
endif

#STLPORT?
ifeq ($(STLTYPE), STLPORT)
#	STL_LIB = /usr/local/lib/libstlport_cygwin.a
#	CFLAGS := $(CFLAGS) -I../stls/STLport-4.6.2/stlport -L/usr/local/lib -lstlport_cygwin

else
	STLTYPE=DEFAULT_STL
endif

#PROFILE (gcc only)?
PROFILED=
ifdef PROFILE
	CFLAGS := $(CFLAGS) -pg
	PROFILED = profiled
	
endif

#Single vs. multi-threading
ifeq ($(THREADTYPE), MULTI)
	BOOST_THREAD_LIB = $(COMPILER_BOOST_THREAD_LIB)
	CFLAGS := $(CFLAGS) -DMULTITHREADED
	ifdef PTHREADS
		CFLAGS := $(CFLAGS) -pthread
	endif
else
	THREADTYPE = SINGLE
endif

#Debug flag for gcc
ifeq ($(BUILDTYPE), DEBUG)
	CFLAGS := $(CFLAGS) -g
endif

#General flags
CFLAGS := $(CFLAGS) -I $(BOOST_INCLUDE)

all: alloc_test playback

alloc_test: alloc_test.o
	$(CC) $(CFLAGS) alloc_test.o $(EXEOUTPUTFLAG)alloc_test_$(COMPILER)_$(THREADTYPE)_$(STLTYPE)_$(PROFILED).exe $(STLPORT_LINK) 
#	$(CC) $(CFLAGS) alloc_test.o $(EXEOUTPUTFLAG)alloc_test_$(COMPILER)_$(THREADTYPE)_$(STLTYPE).exe 

alloc_test.o: alloc_test.cpp
	$(CC) $(CFLAGS) $(STLPORT_INCLUDE) $(COMPILE_ONLY_FLAG) alloc_test.cpp $(OBJOUTPUTFLAG)alloc_test.o

playback: playback_bounded.o perf_info.o
	$(CC) $(CFLAGS) playback_bounded.o perf_info.o $(BOOST_THREAD_LIB) $(EXEOUTPUTFLAG)playback_bounded_$(COMPILER)_$(THREADTYPE)_$(STLTYPE)_$(PROFILED).exe $(STLPORT_LINK) $(PERF_LINK) 

playback_bounded.o: playback_bounded.cpp
	$(CC) $(CFLAGS) $(STLPORT_INCLUDE) $(COMPILE_ONLY_FLAG) playback_bounded.cpp $(OBJOUTPUTFLAG)playback_bounded.o
 	
perf_info.o: perf_info.cpp
	$(CC) $(CFLAGS) $(STLPORT_INCLUDE) $(COMPILE_ONLY_FLAG) perf_info.cpp $(OBJOUTPUTFLAG)perf_info.o
	
clean:
	$(DEL_CMD) *.o
