#CC = gcc
#CXX = g++
#AR = ar

CXXFLAGS += -std=c++11 -Wall -O2 -g -fPIC
CFLAGS += -O2 -g -fPIC
LDFLAGS += "-Wl,--hash-style=gnu"
################################################################################
NA_UTILS_SRC_DIR = libnetagent/nautils/common
NA_UTILS_INCLUDE_DIR = libnetagent/nautils/include

CCCI_UTILS_SRC_DIR = $(NA_UTILS_SRC_DIR)/ccciutils
CCCI_UTILS_INCLUDE_DIR = $(NA_UTILS_INCLUDE_DIR)/ccciutils
CCCI_UTILS_OBJS = cccilib.o

IO_UTILS_SRC_DIR = $(NA_UTILS_SRC_DIR)/ioutils
IO_UTILS_INCLUDE_DIR = $(NA_UTILS_INCLUDE_DIR)/ioutils
IO_UTILS_OBJS = atch.o atapi.o netagent_io.o

NET_UTILS_SRC_DIR = $(NA_UTILS_SRC_DIR)/netutils
NET_UTILS_INCLUDE_DIR = $(NA_UTILS_INCLUDE_DIR)/netutils
NET_UTILS_OBJS = ifc_utils.o

SYS_UTILS_SRC_DIR = $(NA_UTILS_SRC_DIR)/sysutils
SYS_UTILS_INCLUDE_DIR = $(NA_UTILS_INCLUDE_DIR)/sysutils
SYS_UTILS_OBJS = SocketClient.o SocketListener.o NetlinkEvent.o NetlinkListener.o

NA_UTILS_OBJS = $(IO_UTILS_OBJS) $(NET_UTILS_OBJS) $(CCCI_UTILS_OBJS) $(SYS_UTILS_OBJS)

################################################################################
MIPC_TEST_MSG_CFLAGS =  $(CFLAGS) ${TARGET_CFLAGS} -Iinclude/common -Iinclude/msg -lubus -lubox -lmipc_msg

################################################################################
ALL = mtk_ia
ALL += mtk_act_data_call
ALL += mtk_deact_data_call
ALL += libnetagent.so
################################################################################
all: $(ALL)

mtk_netagent: libnetagent.so
	$(CXX) $(CXXFLAGS) $(TARGET_CFLAGS) -g3 -Ilibnetagent -lubus -lubox -lmipc_msg -llog -luci *.cpp $< -o $@

clean:
	rm -f mtk_netagent
	rm -f mtk_ia
	rm -f mtk_act_data_call
	rm -f mtk_deact_data_call

################################################################################
libnetagent.so: ${NA_UTILS_OBJS} NetAgentWrapper.o MdEventHandler.o NetAgentService.o NetlinkEventHandler.o
	$(CXX) -shared $(LDFLAGS) -o $@ NetAgentWrapper.o MdEventHandler.o NetAgentService.o NetlinkEventHandler.o ${NA_UTILS_OBJS}

NetlinkEventHandler.o:
	$(CXX) $(CXXFLAGS) -I$(NA_UTILS_INCLUDE_DIR) -Ilibnetagent -c libnetagent/NetlinkEventHandler.cpp

NetAgentService.o:
	$(CXX) $(CXXFLAGS) -I$(NA_UTILS_INCLUDE_DIR) -Ilibnetagent -c libnetagent/NetAgentService.cpp

NetAgentWrapper.o:
	$(CXX) $(CXXFLAGS) -I$(NA_UTILS_INCLUDE_DIR) -Ilibnetagent -c libnetagent/NetAgentWrapper.cpp

MdEventHandler.o:
	$(CC) $(CFLAGS) -I$(NA_UTILS_INCLUDE_DIR) -Ilibnetagent -lmipc_msg -c libnetagent/MdEventHandler.c

################################################################################
atch.o:
	$(CC) $(CFLAGS) -I$(IO_UTILS_INCLUDE_DIR) -c $(IO_UTILS_SRC_DIR)/atch.c

atapi.o:
	$(CC) $(CFLAGS) -I$(IO_UTILS_INCLUDE_DIR) -c $(IO_UTILS_SRC_DIR)/atapi.c

netagent_io.o:
	$(CC) $(CFLAGS) -I$(IO_UTILS_INCLUDE_DIR) -c $(IO_UTILS_SRC_DIR)/netagent_io.c

#libioutils.a: atch.o atapi.o netagent_io.o
#	$(AR) rcs ioutils.a atch.o atapi.o netagent_io.o

################################################################################
ifc_utils.o:
	$(CC) $(CFLAGS) -I$(NET_UTILS_INCLUDE_DIR) -c $(NET_UTILS_SRC_DIR)/ifc_utils.c

#libnetutils.a: ifc_utils.o
#	$(AR) rcs libnetutils.a ifc_utils.o

################################################################################
cccilib.o:
	$(CC) $(CFLAGS) -I$(CCCI_UTILS_INCLUDE_DIR) -c $(CCCI_UTILS_SRC_DIR)/cccilib.c

################################################################################
NetlinkEvent.o:
	$(CXX) $(CXXFLAGS) -I$(SYS_UTILS_INCLUDE_DIR) -c $(SYS_UTILS_SRC_DIR)/NetlinkEvent.cpp

NetlinkListener.o:
	$(CXX) $(CXXFLAGS) -I$(SYS_UTILS_INCLUDE_DIR) -c $(SYS_UTILS_SRC_DIR)/NetlinkListener.cpp

SocketClient.o:
	$(CXX) $(CXXFLAGS) -I$(SYS_UTILS_INCLUDE_DIR) -c $(SYS_UTILS_SRC_DIR)/SocketClient.cpp

SocketListener.o:
	$(CXX) $(CXXFLAGS) -I$(SYS_UTILS_INCLUDE_DIR) -c $(SYS_UTILS_SRC_DIR)/SocketListener.cpp

#libsysutils.a: NetlinkEvent.o NetlinkListener.o SocketClient.o SocketListener.o
#	$(AR) rcs libsysutils.a NetlinkEvent.o NetlinkListener.o SocketClient.o SocketListener.o

################################################################################
mtk_ia: test/mtk_ia.c
	@${CC} ${MIPC_TEST_MSG_CFLAGS} -o $@ $<
mtk_deact_data_call: test/mtk_deact_data_call.c
	@${CC} ${MIPC_TEST_MSG_CFLAGS} -o $@ $<
mtk_act_data_call: test/mtk_act_data_call.c
	@${CC} ${MIPC_TEST_MSG_CFLAGS} -o $@ $<
