TARGET = sdkdemo
PULLDEMO = pull_demo
PUSHDEMO = push_demo
DEVICEDEMO = devicetoken_demo
VIDEOCALLDEMO = videocall_demo
BRTCDHADEMO = brtcdha_demo
BRTCPROXYDEMO = brtcproxy_demo

BIN = ../bin
GCC_PREFIX = 

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)
BIN = ../armv7-softfp/bin
GCC_PREFIX = arm-linux-gnueabi-
endif

ifeq ($(BRTC_BUILD_ARM), yes)
BIN = ../armv7/bin
GCC_PREFIX = arm-linux-gnueabihf-
endif

ifeq ($(BRTC_BUILD_ARM64), yes)
BIN = ../arm64/bin
GCC_PREFIX = aarch64-linux-gnu-
endif

ifeq ($(BRTC_BUILD_MIPSEL), yes)
BIN = ../mipsel/bin
GCC_PREFIX = mipsel-linux-gnu-
endif

ifeq ($(BRTC_BUILD_MIPS), yes)
BIN = ../mips/bin
GCC_PREFIX = mips-linux-gnu-
endif

ifeq ($(BRTC_BUILD_ARM_EABI_SOFTFP_UCLIBC), yes)
BIN = ../armv7-softfp-uclibc/bin
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)
BIN = ../armv7-soft-uclibc/bin
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)
BIN = ../qnx/arm64/bin
GCC_PREFIX = aarch64-unknown-nto-qnx7.0.0-
IS_QNX = yes
else ifeq ($(BRTC_BUILD_QNX_ARM), yes)
BIN = ../qnx/armv7/bin
GCC_PREFIX = arm-unknown-nto-qnx7.0.0eabi-
IS_QNX = yes
else ifeq ($(BRTC_BUILD_QNX_X86), yes)
BIN = ../qnx/x86/bin
GCC_PREFIX = i586-pc-nto-qnx7.0.0-
IS_QNX = yes
else ifeq ($(BRTC_BUILD_QNX_X86_64), yes)
BIN = ../qnx/x86_64/bin
GCC_PREFIX = x86_64-pc-nto-qnx7.0.0-
IS_QNX = yes
endif

LIBS = -static-libstdc++ -static-libgcc -ldl -lpthread
GRPC_LIBS = `pkg-config --libs protobuf grpc++ grpc` -Wl,--no-as-needed -lgrpc++_reflection -Wl,--as-needed
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

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

default: $(TARGET) $(PULLDEMO) $(PUSHDEMO) $(BRTCPROXYDEMO) $(VIDEOCALLDEMO) $(DEVICEDEMO)

OBJECTS = y4m.o videoroom_main.o
HEADERS = $(wildcard *.h)
BRTCDHA_OBJECTS = ./brtcdha/brtcdha.pb.o ./brtcdha/brtcdha.grpc.pb.o ./brtcdha/brtcdha_client.o

BRTCPROXY_OBJECTS = ./ue4/UE4Connection.o

./ue4/UE4Connection.o: ue4/UE4Connection.cpp
	$(GPP) $(CPPFLAGS) -c $< -o $@

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

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

$(PULLDEMO): pull_demo.o
	$(GPP) pull_demo.o $(LIBS)  -o $(BIN)/$@

$(PUSHDEMO): push_demo.o
	$(GPP) push_demo.o $(LIBS)  -o $(BIN)/$@

$(DEVICEDEMO): devicetoken_demo.o
	$(GPP) devicetoken_demo.o $(LIBS)  -o $(BIN)/$@

$(VIDEOCALLDEMO): videocall_demo.o
	$(GPP) videocall_demo.o $(LIBS)  -o $(BIN)/$@

$(BRTCDHADEMO): brtcdha_demo.o cmdline.o
	$(MAKE) -C brtcdha
	$(GPP) brtcdha_demo.o cmdline.o $(BRTCDHA_OBJECTS) $(LIBS) $(GRPC_LIBS) -o $(BIN)/$@

$(BRTCPROXYDEMO): brtcproxy_demo.o cmdline.o ./ue4/UE4Connection.o
	$(GPP) brtcproxy_demo.o cmdline.o $(BRTCPROXY_OBJECTS) $(LIBS) -o $(BIN)/$@

all: default

release:
	$(STRIP) $(BIN)/$(TARGET) $(BIN)/$(PULLDEMO) $(BIN)/$(PUSHDEMO) $(BIN)/$(BRTCPROXYDEMO) $(BIN)/$(VIDEOCALLDEMO) $(BIN)/$(DEVICEDEMO)

clean:
	rm -rf *.o ./ue4/UE4Connection.o

test:
	LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(BIN)  $(BIN)/$(TARGET) $(APPID_GET_FROM_BAIDU) $(UE4_HOST) -UE4=$(UE4_HOST) -RTC=wss://rtc.exp.bcelive.com/janus -APPID=$(APPID_GET_FROM_BAIDU) -TOKEN=notoken -UID=10086009 -ROOMNAME=2131 -CER=$(BIN)/a.cer -UE4_DRC=0:1500:1080x1440:15,10:1000:600x800:15,20:500:600x800:15 -KILLSELF_WHEN_OTHERS_LEAVING -AUDIO_IN_SAMPLE_RATE=16000 -AUDIO_IN_CHANNELS=1

testdha:
	LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(BIN)  $(BIN)/$(BRTCDHADEMO) -RTC=wss://rtc.exp.bcelive.com/janus -APPID=$(APPID_GET_FROM_BAIDU) -TOKEN=token -UID=10086009 -ROOMNAME=2131 -CER=$(BIN)/a.cer -FEEDID=999999 -DHA="127.0.0.1:8090" -DHA_AUDIO_OUT_SAMPLE_RATE=16000 -KILLSELF_WHEN_OTHERS_LEAVING

testpull:
	LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(BIN)  $(BIN)/$(PULLDEMO) $(APPID_GET_FROM_BAIDU)

testpush:
	LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(BIN)  $(BIN)/$(PUSHDEMO) $(APPID_GET_FROM_BAIDU) wss://rtc.exp.bcelive.com/janus $(ROOMNAME)

testwanos:
	LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(BIN)  $(BIN)/$(PUSHDEMO) $(APPID_GET_FROM_BAIDU) ws://182.61.201.220:8188/janus

testdevice:
	LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(BIN)  $(BIN)/$(DEVICEDEMO) $(APPID_GET_FROM_BAIDU) wss://rtc.exp.bcelive.com/janus $(DEVICE_ID_GET_FROM_BAIDU) myDeivce01 "$(DEVICE_TOKEN_GET_FROM_BAIDU)"

testcall:
	LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(BIN)  $(BIN)/$(VIDEOCALLDEMO) $(APPID_GET_FROM_BAIDU)

testproxy:
	LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(BIN)  $(BIN)/$(BRTCPROXYDEMO) -UE4=$(UE4_HOST) -RTC=wss://rtc.exp.bcelive.com/janus -APPID=$(APPID_GET_FROM_BAIDU) -TOKEN=notoken -UID=10086009 -ROOMNAME=$(ROOMNAME) -CER=../bin/a.cer -UE4_DRC=0:1500:1080x1440:15 -noKILLSELF_WHEN_OTHERS_LEAVING -AUDIO_IN_SAMPLE_RATE=16000 -AUDIO_IN_CHANNELS=1 -MEDIASERVERIP=$(MEDIASERVERIP)