
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

INCLUDE_DIRS = -I$(SYS_ROOT)/usr/include \
                -I$(SYS_ROOT)/usr/include/dbus-1.0 \
                -I$(SYS_ROOT)/usr/lib/dbus-1.0/include \
                -I./include/

INCLUDE_DIRS += -I $(CUR_DIR)

ifeq ($(MAKECMDGOALS), ubuntu)
INCLUDE_DIRS += -I /usr/lib/aarch64-linux-gnu/dbus-1.0/include/
endif

CXXFLAGS = -Wall -g -O -fPIC -std=c++11 -DBUILD_ON_YOCTO $(INCLUDE_DIRS)

LIBS = -lglib-2.0 -ldbus-1 -lpthread

OUT_DIR = $(CUR_DIR)/out
OBJ_DIR = $(OUT_DIR)/obj
LIB_DIR = $(OUT_DIR)/lib

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

TARGET = $(LIB_DIR)/libudbus.so

all: DIRS $(TARGET)

ubuntu: all
	cp $(TARGET) /usr/lib
	mkdir -m 0644 -p /usr/include/libudbus/
	cp $(CUR_DIR)/include/*.h /usr/include/libudbus/
	cp $(CUR_DIR)/*.h /usr/include/libudbus/

$(TARGET):$(OBJS_WITH_DIR)
	$(CXX) -shared -fPIC -o $(TARGET) $(OBJS_WITH_DIR) $(LIBPATH) $(LIBS)

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

install:
	cp $(BIN_DIR)/$(TARGET) $(INSTALL_MOD_PATH)/usr/lib

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
