include ./config.mk
BIN=p1905_managerd
CTRL_EXEC = 1905ctrl
OBJPATH=obj
SRCPATH=src
INCPATH=inc
LIBPATH=../wappd
INCLUDES = -I$(INCPATH) 
EXPORT_LIB = lib_export/lib1905_interface.a
ETH_OPS_LIB_DIR = ethernet

CFLAGS += -fPIC -lpthread $(INCLUDES) -Isrc/chips -Iethernet -g -Ilib_export -Ilib_wapp -Ilib -Wall -Werror -MMD -O2 -DVERSION=\"$(VERSION)\"

CFLAGS += -I$(ROOTDIR)/$(LINUXDIR)

ifeq ($(CONFIG_DEFAULTS_KERNEL_4_4),y)
CFLAGS += -I$(ROOTDIR)/$(LINUXDIR)/drivers/net/ethernet/raeth
CFLAGS += -I$(ROOTDIR)/kernel_headers/include
else
CFLAGS += -I$(ROOTDIR)/$(LINUXDIR)/drivers/net/raeth -Werror
CFLAGS += -I$(ROOTDIR)/kernel_headers/include
endif

ifeq ($(BACKTRACE_SUPPORT),y)
EXTRA_CFLAGS += -DSUPPORT_BACKTRACE
CFLAGS += -funwind-tables -fasynchronous-unwind-tables
LDFLAGS = -rdynamic -ldl
endif
LDFLAGS += -lpthread
ifeq ($(COREDUMP_SUPPORT),y)
EXTRA_CFLAGS += -DSUPPORT_COREDUMP
endif

#################################################################################
#support interface
#################################################################################
ifeq ($(WIFI_SUPPORT),y)
EXTRA_CFLAGS+= -DSUPPORT_WIFI
endif
ifeq ($(ETH_SUPPORT),y)
EXTRA_CFLAGS+= -DSUPPORT_ETH
endif
ifeq ($(WIFI_STATION_SUPPORT),y)
EXTRA_CFLAGS+= -DSUPPORT_WIFI_STATION
endif
#################################################################################
#support 1905.1 function
#################################################################################
ifeq ($(PBC_SUPPORT),y)
EXTRA_CFLAGS+= -DSUPPORT_PBC
endif

ifeq ($(CONTROL_SOCKET_SUPPORT),y)
EXTRA_CFLAGS+= -DSUPPORT_CONTROL_SOCKET
endif

EXTRA_CFLAGS+= -DSUPPORT_AP_AUTO_CONFIG
EXTRA_CFLAGS+= -DSUPPORT_CMDU_RELIABLE

#################################################################################
#support wifi chips
#################################################################################


#################################################################################
#below is for source code include
#################################################################################
SRCS=cmdu.c cmdu_fragment.c cmdu_message.c cmdu_message_parse.c cmdu_tlv.c cmdu_tlv_parse.c \
     common.c lldp.c lldp_message.c lldp_message_parse.c p1905_managerd.c p1905_utils.c \
     wapp_usr_intf.c wapp_io.c multi_ap.c debug.c cmdu_retry_message.c message_wait_queue.c\
     crypt_aes.c crypt_biginterger.c crypt_dh.c crypt_hmac.c crypt_sha2.c file_io.c \
     _1905_interface.c _1905_lib_io.c topology.c eloop.c ethernet_layer.c netlink_event.c worker_task.c \
     mapfilter_if.c

ifeq ($(WIFI_SUPPORT),y)
SRCS+=wifi_utils.c
endif

ifeq ($(AP_AUTO_CONFIG_SUPPORT),y)
SRCS+=wsc_attr_tlv.c
SRCS+=wsc_message.c
SRCS+=p1905_ap_autoconfig.c
endif

ifeq ($(RETRY_MESSAGE_SUPPORT),y)
SRCS+=cmdu_retry_message.c
endif

ifeq ($(MAP_R2_SUPPORT),y)
EXTRA_CFLAGS += -DMAP_R2
endif


#################################################################################
#below is for build
#################################################################################


OBJS=$(addprefix $(OBJPATH)/,$(SRCS:.c=.o))
DEPS=$(patsubst %o,%d,$(OBJS))
CTRL_OBJS = src/1905_ctrl/1905_cli.o src/1905_ctrl/1905_ctrl.o
CTRL_DEPS_OBJS = src/1905_ctrl/1905_cli.d src/1905_ctrl/1905_ctrl.d
LIB_OBJS = obj/_1905_interface_ctrl.o obj/os_internal.o
DEPS_OBJS = obj/_1905_interface_ctrl.d obj/os_internal.d

all: $(ETH_OPS_LIB_DIR) wapp_lib $(BIN) $(EXPORT_LIB) $(CTRL_EXEC)

eth_ops_lib:
	cd $(ETH_OPS_LIB_DIR) && $(MAKE) clean
	make -C $(ETH_OPS_LIB_DIR)

wapp_lib:
	cd $(LIBPATH) && $(MAKE)

$(BIN): $(OBJS) wapp_lib eth_ops_lib
	$(CC) $(LDFLAGS) $(CFLAGS)  -g -o $@ $(OBJS) -L ./ethernet -leth_1905ops $(LDLIBS) $(LIBPATH)/libwapp_usr_intf_client.a 
	
$(OBJPATH)/%.o: $(SRCPATH)/%.c eth_ops_lib
	$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(EXTRA_CFLAGS_AGT)  -o $@  -L ./ethernet -leth_1905ops -c $< 
	
$(EXPORT_LIB) : $(LIB_OBJS) inc/_1905_interface.h inc/os.h lib_export/interface.h lib_export/data_def.h
	ar r $(EXPORT_LIB) $(LIB_OBJS)

$(CTRL_EXEC): $(CTRL_OBJS)
	$(CC) $(CFLAGS) -o $(CTRL_EXEC) $(CTRL_OBJS)

$(OBJS): $(OBJPATH)

$(OBJPATH):
	mkdir $(OBJPATH)


-include $(DEPS)

.PHONY: all clean

romfs:
	$(ROMFSINST) /sbin/$(BIN)
	$(ROMFSINST) /sbin/$(CTRL_EXEC)
clean:
	rm -f $(OBJS) $(LIB_OBJS) $(DEPS) $(DEPS_OBJS) $(BIN) $(EXPORT_LIB) $(CTRL_EXEC) $(CTRL_OBJS) $(CTRL_DEPS_OBJS) config.mk.tmp
	rmdir $(OBJPATH)
