#*****************************************************************************
#*****************************************************************************
#
#       Makefile for RendererFeeder  DirectShow sample
#       Makefile is defigned for MinGW compiller.
#
#*****************************************************************************
#*****************************************************************************

DEBUG := 0
ARCH := UNKNOWN

TARGET_NAME = RendererFeeder.exe

GCC=gcc
GXX=g++

OBJ=.o


ifeq ($(ARCH),UNKNOWN)
ifeq ($(MSYSTEM),MINGW64)
ARCH := win64
endif
ifeq ($(MSYSTEM),MINGW32)
ARCH := win32
endif
endif


ifeq ($(ARCH),win64)

WIN_SYS_DIR := C:/Windows/System32
WIDL_FLAGS := --win64
ifeq ($(DEBUG),0)	# release build
TARGET_DIR = ./bin
FLAGS+=-O2
LIBS=../../../baseclasses/lib/bin/baseclasses.a 
else
TARGET_DIR = ./bind
FLAGS+=-O0 -g -ggdb
LIBS=../../../baseclasses/lib/bind/baseclasses.a 
endif

else

WIN_SYS_DIR := C:/Windows/SysWOW64
WIDL_FLAGS := --win32
ifeq ($(DEBUG),0)	# release build
TARGET_DIR = ./bin32
FLAGS+=-O2
LIBS=../../../baseclasses/lib/bin32/baseclasses.a 
else
TARGET_DIR = ./bind32
FLAGS+=-O0 -g -ggdb
LIBS=../../../baseclasses/lib/bind32/baseclasses.a 
endif

endif



FLAGS=-Wall -I ./ -I ../../../baseclasses/lib/ -I $(TARGET_DIR)
GXXFLAGS=-fpermissive
PATCHES=-D__AMVIDEO__ -D__in="" -D__out="" -D__inout="" -D__deref_in="" -D__deref_inout_opt="" -DAM_NOVTABLE="" -D__out_opt="" -D'__in_bcount_opt(__x)=' -D'__in_ecount_opt(__x)=' -D'__field_ecount_opt(__x)='
PATCHES+=-D'__deref_out_range(_A,_B)=' -D'__control_entrypoint(_A)=' -D'__success(_A)=' -D'__control_entrypoint(_A)=' -D'__out_range(_A,_B)='
#PATCHES=-D'min(_a,_b)=((_a<_b)?(_a):(_b))' -D'max(_a,_b)=((_a>_b)?(_a):(_b))'
LDFLAGS=-lmfuuid -lstrmiids -mconsole -lole32 -loleaut32 -lwinmm -lwindowsapp -lmincore -luuid
LDFLAGS+=$(WIN_SYS_DIR)/oleaut32.dll $(WIN_SYS_DIR)/ole32.dll $(WIN_SYS_DIR)/Winmm.dll $(WIN_SYS_DIR)/Gdi32.dll


MODULES=fFrameBuffer
MODULES+=FrameBuffer
MODULES+=ConsumerFeedGraphN
MODULES+=GUIDsForMinGW


OBJS := $(addprefix $(TARGET_DIR)/, $(addsuffix $(OBJ), $(MODULES)))


.SUFFIXES: .c .cc .cpp $(OBJ) .exe .a .idl
.PHONY: all default distclean generic clean


all:     $(TARGET_DIR)/$(TARGET_NAME)
#	cp -f strings/*.h include/*.h
#	cp -f sets/*.h include/*.h


default: $(TARGET_DIR)/$(TARGET_NAME)

clean:
	-rm -f $(TARGET_DIR)/*$(OBJ) $(TARGET_DIR)/$(TARGET_NAME)


$(TARGET_DIR):
	mkdir $@


$(TARGET_DIR)/FG4iface.h: ../../shared/FG4iface.idl | $(TARGET_DIR)
	cd $(TARGET_DIR) && widl -h -c $(WIDL_FLAGS) ../../../shared/FG4iface.idl

#-o $(TARGET_DIR)/FG4iface.h


$(TARGET_DIR)/%$(OBJ): %.cpp *.h $(TARGET_DIR)/FG4iface.h $(MAKEFILE_LIST) | $(TARGET_DIR)
	$(GXX) $(FLAGS) $(GXXFLAGS) $(DEBUGFLAGS) $(PATCHES) -c $*.cpp $(ERROR) -o $(TARGET_DIR)/$*$(OBJ)

$(TARGET_DIR)/%$(OBJ): %.cc *.h $(TARGET_DIR)/FG4iface.h $(MAKEFILE_LIST) | $(TARGET_DIR)
	$(GXX) $(FLAGS) $(GXXFLAGS) $(DEBUGFLAGS) $(PATCHES) -c $*.cc $(ERROR) -o $(TARGET_DIR)/$*$(OBJ)

$(TARGET_DIR)/%$(OBJ): %.c *.h $(TARGET_DIR)/FG4iface.h $(MAKEFILE_LIST) | $(TARGET_DIR)
	$(GCC) $(FLAGS) $(DEBUGFLAGS) $(PATCHES) -c $*.c $(ERROR) -o $(TARGET_DIR)/$*$(OBJ)


$(TARGET_DIR)/$(TARGET_NAME): $(OBJS) | $(TARGET_DIR)
	$(GXX) -o $(TARGET_DIR)/$(TARGET_NAME) $(LDFLAGS) $(OBJS) $(LIBS) $(ERROR)

