DIR_TOP = ../..
DIR_INC = $(DIR_TOP)/inc
DIR_SRC = $(DIR_TOP)/src
DIR_APP = $(DIR_TOP)/app
DIR_LIB = $(DIR_TOP)/lib
DIR_BIN = $(DIR_TOP)/bin

CC = gcc
AR = ar
LD = ld

MKDIR = mkdir -p
RM = rm -rf

CFLAGS  = -g -O3 -fomit-frame-pointer -Wall -Wno-unused-function -Wno-unused-but-set-variable -Wno-unused-variable -Wno-attributes -Werror -Wno-strict-overflow  -std=c99
CFLAGS += -DLINUX -DX86_64 -msse4.2
CFLAGS += -I$(DIR_INC) -DIFVC_TRACE=0 -DIFVC_ASSERT=1

LDFLAGS = -L$(DIR_LIB) -lifvc -lm -lstdc++
ARFLAGS = r

CSRCS = $(DIR_SRC)/ifvc.c \
		$(DIR_SRC)/ifvc_img.c \
		$(DIR_SRC)/ifvc_ipred.c \
		$(DIR_SRC)/ifvc_mc.c \
		$(DIR_SRC)/ifvc_recon.c \
		$(DIR_SRC)/ifvc_tbl.c \
		$(DIR_SRC)/ifvc_util.c \
		$(DIR_SRC)/ifvc_itdq.c \
		$(DIR_SRC)/ifvc_df.c \
		$(DIR_SRC)/ifvc_picman.c \
		$(DIR_SRC)/ifvcd.c \
		$(DIR_SRC)/ifvcd_eco.c \
		$(DIR_SRC)/ifvcd_util.c \
		$(DIR_SRC)/ifvcd_bsr.c \
		$(DIR_SRC)/ifvce.c \
		$(DIR_SRC)/ifvce_eco.c \
		$(DIR_SRC)/ifvce_mode.c \
		$(DIR_SRC)/ifvce_pinter.c \
		$(DIR_SRC)/ifvce_pintra.c \
		$(DIR_SRC)/ifvce_tq.c \
		$(DIR_SRC)/ifvce_util.c \
		$(DIR_SRC)/ifvce_tbl.c \
		$(DIR_SRC)/ifvce_bsw.c \
		$(DIR_SRC)/ifvce_sad.c \

CSRCS_APP =	$(DIR_APP)/ifvca_encoder.c \
			$(DIR_APP)/ifvca_decoder.c \
			$(DIR_APP)/ifvca_bitstream_merge.c

OBJS = $(CSRCS:.c=.o)

all: RELEASE

# target for release mode
RELEASE: depend $(OBJS)
	$(MKDIR) $(DIR_LIB)
	$(AR) $(ARFLAGS) $(DIR_LIB)/libifvc.a $(OBJS)
	$(MKDIR) $(DIR_BIN)
	$(CC) -o $(DIR_BIN)/ifvca_encoder $(CFLAGS) $(DIR_APP)/ifvca_encoder.c $(LDFLAGS)
	$(CC) -o $(DIR_BIN)/ifvca_decoder $(CFLAGS) $(DIR_APP)/ifvca_decoder.c $(LDFLAGS)
	$(CC) -o $(DIR_BIN)/ifvca_bitstream_merge $(CFLAGS) $(DIR_APP)/ifvca_bitstream_merge.c $(LDFLAGS)

depend: Makefile $(CSRCS) $(CSRCS_APP)
	$(CC) -M $(CFLAGS) $(CSRCS) $(CSRCS_APP) > .$@

clean:
	$(RM) $(OBJS) $(DIR_LIB) $(DIR_BIN) .depend

%.o: %.c
	$(CC) -c -o $@ $(CFLAGS) $<

-include .depend

