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

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

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${OUTPUT_HBROOTFS_DIR}/include/canhal/ -I${OUTPUT_HBROOTFS_DIR}/usr/hobot/include/canhal/ -I${OUTPUT_HBROOTFS_DIR}/include/ ${INCS}
INCS += -I/usr/hobot/include/
LIBS += -lhbcanhal -lpthread -lalog

build: ${OBJECT}

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

${OUT_DIR}/%.o: %.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 $@

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)"
