OUT_DIR = $(PWD)
.PHONY: build install clean

BIN_NAME = ipcbox_uart
SRCS = $(wildcard *.c *.cpp)
COMMON_SRCS = $(wildcard common/*.c common/*.cpp)
COMMON_OBJS = $(addprefix ${OUT_DIR}/, $(patsubst %.c, %.o, $(COMMON_SRCS:.cpp=.o)))
OBJS = $(addprefix ${OUT_DIR}/, $(patsubst %.c, %.o, $(SRCS:.cpp=.o))) $(COMMON_OBJS)

OBJECT = ${OUT_DIR}/${BIN_NAME}

USER_API_VERSION_MAJOR := 1
USER_API_VERSION_MINOR := 0
USER_API_VERSION_PATCH := 0
DEFINES += -DUSER_API_VERSION_MAJOR=${USER_API_VERSION_MAJOR}
DEFINES += -DUSER_API_VERSION_MINOR=${USER_API_VERSION_MINOR}
DEFINES += -DUSER_API_VERSION_PATCH=${USER_API_VERSION_PATCH}

CFLAGS += -Wall -std=gnu11
CFLAGS += $(DEFINES)
CFLAGS += -Wno-int-to-pointer-cast -Wno-pointer-to-int-cast -Wno-sizeof-pointer-memaccess

CXXFLAGS += -Wall -std=c++11
CXXFLAGS += $(DEFINES)

LDFLAGS := -L${OUTPUT_HBROOTFS_DIR}/usr/hobot/lib/ -L${OUT_DIR} ${LDFLAGS} -pthread
INCS := -I $(INCS) /usr/hobot/include/
LIBS += -lhbipcfhal -lpthread

build: ${OBJECT}

$(OBJECT): $(OBJS)
	$(Q)mkdir -p $(abspath $(dir $@))
	$(Q)echo LINK $@
	$(CXX) $(CXXFLAGS) $(INCS) $^ $(LDFLAGS) $(LIBS) -o $@

${OUT_DIR}/%.o: common/%.cpp
	$(Q)mkdir -p $(abspath $(dir $@))
	$(Q)echo CXX $@
	$(CXX) $(CXXFLAGS) $(INCS) -c $< -o $@

${OUT_DIR}/%.o: common/%.c
	$(Q)mkdir -p $(abspath $(dir $@))
	$(Q)echo CC $@
	$(CC) $(CFLAGS) $(INCS) -c $< -o $@

${OUT_DIR}/%.o: %.cpp
	$(Q)mkdir -p $(abspath $(dir $@))
	$(Q)echo CXX $@
	$(CXX) $(CXXFLAGS) $(INCS) -c $< -o $@

${OUT_DIR}/%.o: %.c
	$(Q)mkdir -p $(abspath $(dir $@))
	$(Q)echo CC $@
	$(CC) $(CFLAGS) $(INCS) -c $< -o $@


clean:
	rm -rf *.o $(OBJECT)

# install: build
# 	@mkdir -p /userdata/local/bin
# 	@cp $(OBJECT) /userdata/local/bin/$(BIN_NAME)
# 	@echo "Installed to /userdata/local/bin/$(BIN_NAME)"
