TARGET = chat

BIN = ../bin
GCC_PREFIX = 

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

ifeq ($(BRTC_BUILD_ARCH), armv7-softfp)
BRTC_BUILD_ARM_EABI_SOFTFP = yes
else ifeq ($(BRTC_BUILD_ARCH), armv7)
BRTC_BUILD_ARM = yes
else ifeq ($(BRTC_BUILD_ARCH), arm64)
BRTC_BUILD_ARM64 = yes
else ifeq ($(BRTC_BUILD_ARCH), armv7-softfp-uclibc)
BRTC_BUILD_ARM_EABI_SOFTFP_UCLIBC = yes
else ifeq ($(BRTC_BUILD_ARCH), armv7-soft-uclibc)
BRTC_BUILD_ARM_EABI_SOFT_UCLIBC = yes
else ifeq ($(BRTC_BUILD_ARCH), qnx-arm64)
BRTC_BUILD_QNX_ARM64 = yes
else ifeq ($(BRTC_BUILD_ARCH), qnx-armv7)
BRTC_BUILD_QNX_ARM = yes
else ifeq ($(BRTC_BUILD_ARCH), qnx-x86)
BRTC_BUILD_QNX_X86 = yes
else ifeq ($(BRTC_BUILD_ARCH), qnx-x86_64)
BRTC_BUILD_QNX_X86_64 = yes
endif

ifeq ($(BRTC_BUILD_ARM_EABI_SOFTFP), yes)
GCC_PREFIX = arm-linux-gnueabi-
endif

ifeq ($(BRTC_BUILD_ARM), yes)
GCC_PREFIX = arm-linux-gnueabihf-
endif

ifeq ($(BRTC_BUILD_ARM64), yes)
GCC_PREFIX = aarch64-linux-gnu-
endif

ifeq ($(BRTC_BUILD_MIPSEL), yes)
GCC_PREFIX = mipsel-linux-gnu-
endif

ifeq ($(BRTC_BUILD_MIPS), yes)
GCC_PREFIX = mips-linux-gnu-
endif

ifeq ($(BRTC_BUILD_ARM_EABI_SOFTFP_UCLIBC), yes)
GCC_PREFIX = arm-hisiv500-linux-uclibcgnueabi-
# CFLAGS += -mcpu=cortex-a7 -mfloat-abi=softfp -mfpu=neon-vfpv4 -mno-unaligned-access -fno-aggressive-loop-optimizations
# CPPFLAGS += -mcpu=cortex-a7 -mfloat-abi=softfp -mfpu=neon-vfpv4 -mno-unaligned-access -fno-aggressive-loop-optimizations
endif

ifeq ($(BRTC_BUILD_ARM_EABI_SOFT_UCLIBC), yes)
GCC_PREFIX = arm-hisiv500-linux-uclibcgnueabi-
# CFLAGS += -mcpu=cortex-a7 -mfloat-abi=soft -mno-unaligned-access -fno-aggressive-loop-optimizations
# CPPFLAGS += -mcpu=cortex-a7 -mfloat-abi=soft -mno-unaligned-access -fno-aggressive-loop-optimizations
endif

ifeq ($(BRTC_BUILD_QNX_ARM64), yes)
GCC_PREFIX = aarch64-unknown-nto-qnx7.0.0-
IS_QNX = yes
else ifeq ($(BRTC_BUILD_QNX_ARM), yes)
GCC_PREFIX = arm-unknown-nto-qnx7.0.0eabi-
IS_QNX = yes
else ifeq ($(BRTC_BUILD_QNX_X86), yes)
GCC_PREFIX = i586-pc-nto-qnx7.0.0-
IS_QNX = yes
else ifeq ($(BRTC_BUILD_QNX_X86_64), yes)
GCC_PREFIX = x86_64-pc-nto-qnx7.0.0-
IS_QNX = yes
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,$(shell uname -m ))
ifeq (../armv7, $(wildcard ../armv7))
BIN = ../armv7/bin
endif
endif

ifeq (aarch64,$(shell uname -m ))
ifeq (../arm64, $(wildcard ../arm64))
BIN = ../arm64/bin
endif
endif

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

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

default: $(TARGET) release

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

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

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

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

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

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

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

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

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

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

all: default

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

clean:
	rm -rf *.o

test:
	LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):$(DESTDIR)/usr/lib $(DESTBIN)/$(TARGET) $(APPID_GET_FROM_BAIDU)
