include ./config
CUR_DIR  = $(shell pwd)

SRC_DIR = $(CUR_DIR)

SRCS = $(foreach dir,$(SRC_DIR),$(wildcard $(dir)/*.cpp))
OBJ_TEMP = $(patsubst %.cpp,%.o,$(SRCS))
OBJS = $(notdir $(OBJ_TEMP))

ifneq ($(MAKECMDGOALS), ubuntu)
    SYS_ROOT = $(WORKDIR)/recipe-sysroot
endif

ifeq ($(strip $(NETWORK_REMOVE_MODEM_FLAG)), true)
    CONFIG_TELEPHONY = n
endif

INCLUDE_DIRS = -I$(SYS_ROOT)/usr/include \
               -I$(SYS_ROOT)/usr/include/liblinenoise \
               -I$(SYS_ROOT)/usr/include/libnetcon \
               -I$(SYS_ROOT)/usr/include/libudbus \
               -I$(SYS_ROOT)/usr/include/dbus-1.0 \
               -I$(SYS_ROOT)/usr/lib/dbus-1.0/include \

INCLUDE_DIRS += -I $(CUR_DIR)

CXXFLAGS = -w -g -std=c++11 -O1 $(INCLUDE_DIRS) -DBUILD_ON_YOCTO
CXXFLAGS += -DNETCON_DEBUG

ifeq ($(MAKECMDGOALS), ubuntu)

INCLUDE_DIRS += -I /usr/lib/aarch64-linux-gnu/dbus-1.0/include/
CXXFLAGS += -DUBUNTU
endif

ifeq ($(CONFIG_WIFI),y)
CXXFLAGS += -DHAVE_WIFI
endif

ifeq ($(CONFIG_SOFTAP),y)
CXXFLAGS += -DHAVE_SOFTAP

endif


ifeq ($(CONFIG_TELEPHONY),y)
CXXFLAGS += -DHAVE_TELE
endif

ifeq ($(CONFIG_DIAL),y)
CXXFLAGS += -DHAVE_DIAL
endif

ifeq ($(CONFIG_ETHERNET),y)
CXXFLAGS += -DHAVE_ETH
endif

ifeq ($(CONFIG_SHAPERD),y)
CXXFLAGS += -DHAVE_SHAPERD
endif

ifeq ($(CONFIG_DNS),y)
CXXFLAGS += -DHAVE_DNS
endif

ifeq ($(CONFIG_TRAFFICSTATS),y)
CXXFLAGS += -DHAVE_TRAFFICSTATS
endif

ifeq ($(CONFIG_SLICE),y)
CXXFLAGS += -DHAVE_SLICE
endif

ifeq ($(CONFIG_TSN),y)
CXXFLAGS += -DHAVE_TSN
endif

ifeq ($(CONFIG_WIFI_SOFTAP_ONLY),y)
CXXFLAGS += -DCONFIG_WIFI_SOFTAP_ONLY
endif
CXXFLAGS += ${NETCON_DEBUG_FLAG}

LIBS = -lpthread -lrt -ldl -lstdc++ -ludbus -ldbus-1 -lnetcon -llinenoise

OUT_DIR = $(CUR_DIR)/out
OBJ_DIR = $(OUT_DIR)/obj
BIN_DIR = $(OUT_DIR)/bin

OBJS_WITH_DIR = $(addprefix $(OBJ_DIR)/,$(OBJS))

TARGET = $(BIN_DIR)/netctl

all: $(TARGET)

ubuntu: all
	cp $(TARGET) /usr/bin

$(TARGET):$(OBJS_WITH_DIR)
	$(CXX) $(CXXFLAGS) $^ -o $@ $(LIBS)

$(OBJ_DIR)/%.o:%.cpp DIRS
	@echo  $< -o $@
	$(CXX) $(CXXFLAGS) -c -fPIC $< -o $@

install:
	cp $(BIN_DIR)/$(TARGET) $(INSTALL_MOD_PATH)/bin

clean:
	rm -rf $(OBJ_DIR)	$(BIN_DIR)  $(LIB_DIR)

#################################################################
DIRS:
	@$(call CREATE_DIR,$(OUT_DIR))
	@$(call CREATE_DIR,$(OBJ_DIR))
	@$(call CREATE_DIR,$(BIN_DIR))
	@$(call CREATE_DIR,$(LIB_DIR))

define CREATE_DIR
    if [ ! -d $(1) ];\
        then\
        mkdir -p $(1);\
    fi
endef