TARGET = chat

BIN = ../bin
GCC_PREFIX = 

# 确定 CPU 架构
BRTC_CPU_ARCH ?= $(shell uname -m)

ifeq ($(BRTC_CPU_ARCH), aarch64)
BRTC_BUILD_ARCH = arm64
endif

ifeq ($(BRTC_BUILD_ARCH), armv7-softfp)
BRTC_CPU_ARCH = armv7-softfp
GCC_PREFIX = arm-linux-gnueabi-
else ifeq ($(BRTC_BUILD_ARCH), armv7)
BRTC_CPU_ARCH = armv7
GCC_PREFIX = arm-linux-gnueabihf-
else ifeq ($(BRTC_BUILD_ARCH), arm64)
BRTC_CPU_ARCH = arm64
GCC_PREFIX = aarch64-linux-gnu-
else ifeq ($(BRTC_BUILD_ARCH), armv7-softfp-uclibc)
BRTC_CPU_ARCH = armv7-softfp-uclibc
GCC_PREFIX = arm-hisiv500-linux-uclibcgnueabi-
else ifeq ($(BRTC_BUILD_ARCH), armv7-soft-uclibc)
BRTC_CPU_ARCH = armv7-soft-uclibc
GCC_PREFIX = arm-hisiv500-linux-uclibcgnueabi-
else ifeq ($(BRTC_BUILD_ARCH), qnx-arm64)
BRTC_CPU_ARCH = qnx-arm64
GCC_PREFIX = aarch64-unknown-nto-qnx7.0.0-
IS_QNX = yes
else ifeq ($(BRTC_BUILD_ARCH), qnx-armv7)
BRTC_CPU_ARCH = qnx-armv7
GCC_PREFIX = arm-unknown-nto-qnx7.0.0eabi-
IS_QNX = yes
else ifeq ($(BRTC_BUILD_ARCH), qnx-x86)
BRTC_CPU_ARCH = qnx-x86
GCC_PREFIX = i586-pc-nto-qnx7.0.0-
IS_QNX = yes
else ifeq ($(BRTC_BUILD_ARCH), qnx-x86_64)
BRTC_CPU_ARCH = qnx-x86_64
GCC_PREFIX = x86_64-pc-nto-qnx7.0.0-
IS_QNX = yes
endif

# 构建目录
BUILD_DIR = ./build/$(BRTC_CPU_ARCH)

ifndef DESTDIR
LIBDIR = ../lib
INCDIR = ../include
else
LIBDIR = $(DESTDIR)/usr/lib
INCDIR = $(DESTDIR)/usr/include
endif

LIBS = -static-libstdc++ -static-libgcc -ldl -lpthread -l:libtinyalsa.a -lturbojpeg -L$(LIBDIR)
CC = $(GCC_PREFIX)gcc
CFLAGS += -O3 -fPIC -g -O0 -I.. -Wformat-security -s
CPPFLAGS += -O3 -fPIC -g -O0 -std=c++11 -I.. -fpermissive -Wformat-security -fno-rtti -s
GPP = $(GCC_PREFIX)g++
STRIP = $(GCC_PREFIX)strip
MAKE = make

CFLAGS	+= -Iinclude -I$(INCDIR)
CPPFLAGS += -Iinclude -I$(INCDIR)

ifeq ($(IS_QNX), yes)
LIBS = -static-libstdc++ -static-libgcc -lsocket
endif

ifeq (armv7l,$(BRTC_CPU_ARCH))
ifeq (../armv7, $(wildcard ../armv7))
BIN = ../armv7/bin
endif
endif

ifeq (aarch64,$(BRTC_CPU_ARCH))
ifeq (../arm64, $(wildcard ../arm64))
BIN = ../arm64/bin
endif
endif

DESTBIN = $(DESTDIR)/usr/bin/$(BIN)

ifndef DESTDIR
DESTBIN = ../bin
DESTLIB = ../lib
else
DESTBIN = $(DESTDIR)/usr/bin/$(BIN)
DESTLIB = $(DESTDIR)/usr/lib
endif

# 创建构建目录
$(shell mkdir -p $(BUILD_DIR))

default: $(TARGET) release

OBJECTS = $(BUILD_DIR)/chat.o
HEADERS = $(wildcard *.h)

$(BUILD_DIR)/%.o: %.cpp $(HEADERS) | $(BUILD_DIR)
	$(GPP) $(CPPFLAGS) -c $< -o $@

OBJECTS += $(BUILD_DIR)/http_client.o
$(BUILD_DIR)/http_client.o: http/http_client.cc | $(BUILD_DIR)
	$(GPP) $(CPPFLAGS) -c $< -o $@

OBJECTS += $(BUILD_DIR)/mongoose.o
$(BUILD_DIR)/mongoose.o: http/mongoose.c | $(BUILD_DIR)
	$(CC) $(CFLAGS) -c $< -o $@

OBJECTS += $(BUILD_DIR)/core_json.o
$(BUILD_DIR)/core_json.o: http/core_json.c | $(BUILD_DIR)
	$(GPP) $(CPPFLAGS) -c $< -o $@

OBJECTS += $(BUILD_DIR)/cJSON.o
$(BUILD_DIR)/cJSON.o: http/cJSON.c | $(BUILD_DIR)
	$(GPP) $(CPPFLAGS) -c $< -o $@

OBJECTS += $(BUILD_DIR)/takephoto.o
$(BUILD_DIR)/takephoto.o: camera/takephoto.c | $(BUILD_DIR)
	$(GPP) $(CPPFLAGS) -c $< -o $@

OBJECTS += $(BUILD_DIR)/isp_stub.o
$(BUILD_DIR)/isp_stub.o: camera/isp_stub.c | $(BUILD_DIR)
	$(CC) $(CFLAGS) -c $< -o $@

OBJECTS += $(BUILD_DIR)/duerwen_stub.o
$(BUILD_DIR)/duerwen_stub.o: mic/duerwen_stub.c | $(BUILD_DIR)
	$(CC) $(CFLAGS) -c $< -o $@

OBJECTS += $(BUILD_DIR)/wakeup.o
$(BUILD_DIR)/wakeup.o: mic/wakeup.c | $(BUILD_DIR)
	$(CC) $(CFLAGS) -c $< -o $@

OBJECTS += $(BUILD_DIR)/servo_stub.o
$(BUILD_DIR)/servo_stub.o: act/servo_stub.c | $(BUILD_DIR)
	$(CC) $(CFLAGS) -c $< -o $@

OBJECTS += $(BUILD_DIR)/led.o
$(BUILD_DIR)/led.o: act/led.c | $(BUILD_DIR)
	$(CC) $(CFLAGS) -c $< -o $@

OBJECTS += $(BUILD_DIR)/previewimg.o
$(BUILD_DIR)/previewimg.o: act/previewimg.c | $(BUILD_DIR)
	$(CC) $(CFLAGS) -c $< -o $@

OBJECTS += $(BUILD_DIR)/dancer.o
$(BUILD_DIR)/dancer.o: act/dancer.c | $(BUILD_DIR)
	$(CC) $(CFLAGS) -c $< -o $@

OBJECTS += $(BUILD_DIR)/music.o
$(BUILD_DIR)/music.o: act/music.c | $(BUILD_DIR)
	$(CC) $(CFLAGS) -c $< -o $@

OBJECTS += $(BUILD_DIR)/waveplayer.o
$(BUILD_DIR)/waveplayer.o: act/waveplayer.c | $(BUILD_DIR)
	$(CC) $(CFLAGS) -c $< -o $@

OBJECTS += $(BUILD_DIR)/gifdec.o
$(BUILD_DIR)/gifdec.o: act/gifdec.c | $(BUILD_DIR)
	$(CC) $(CFLAGS) -c $< -o $@

OBJECTS += $(BUILD_DIR)/emotion.o
$(BUILD_DIR)/emotion.o: act/emotion.c act/gifdec.h | $(BUILD_DIR)
	$(CC) $(CFLAGS) -c $< -o $@

OBJECTS += $(BUILD_DIR)/videocapture.o
$(BUILD_DIR)/videocapture.o: camera/videocapture.c | $(BUILD_DIR)
	$(GPP) $(CPPFLAGS) -c $< -o $@

$(TARGET): $(OBJECTS)
	$(GPP) $(OBJECTS) $(LIBS)  -o $(DESTBIN)/$@

all: default

release:
	$(STRIP) $(DESTBIN)/$(TARGET)
	cp -f ./a.cer $(DESTBIN)/

clean:
	rm -rf $(BUILD_DIR)

test:
	LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):$(DESTLIB) $(DESTBIN)/$(TARGET) $(APPID_GET_FROM_BAIDU)