# Common make definitions, customized for each platform

# Definitions required in all program directories to compile and link
# C programs using gcc.


ROOT = $(BUILD_ROOT)/..
OUT_DIR = $(ROOT)/out
LOCAL_PATH=.
HOME_DIR := $(shell echo ~)

ifneq ($(OPENWRT_SDK_BUILD),y)
#BUILD_TOOLCHAIN_DIR = $(ROOT)/toolchain/gcc-$(BUILD_GCC_VERSION)-$(BUILD_STD_LIBC)
BUILD_TOOLCHAIN_DIR = $(HOME_DIR)/openwrt_toolchains/gcc-$(BUILD_GCC_VERSION)-$(BUILD_STD_LIBC)

ifeq ($(BUILD_STD_LIBC), glibc)
CC=$(BUILD_TOOLCHAIN_DIR)/bin/arm-openwrt-linux-gnueabi-gcc
AR=$(BUILD_TOOLCHAIN_DIR)/bin/arm-openwrt-linux-gnueabi-ar
else
CC=$(BUILD_TOOLCHAIN_DIR)/bin/arm-openwrt-linux-muslgnueabi-gcc
AR=$(BUILD_TOOLCHAIN_DIR)/bin/arm-openwrt-linux-muslgnueabi-ar
endif

MAKE=make 

else
BUILD_TOOLCHAIN_DIR := $(SYSROOT_DIR)

AS	:= $(CROSS_COMPILE)as
CC	:= $(CROSS_COMPILE)gcc
CPP	:= $(CROSS_COMPILE)c++
AR	:= $(CROSS_COMPILE)ar rv
LD	:= $(CROSS_COMPILE)ld
STRIP	:= $(CROSS_COMPILE)strip
RANLIB  := $(CROSS_COMPILE)ranlib

OUT_DIR :=  $(OBJ_DIR)/..

MAKE=make -j1 OPENWRT_SDK_BUILD="$(OPENWRT_SDK_BUILD)" \
		MBTK_SOURCE_VERSION="$(MBTK_SOURCE_VERSION)" \
		BUILD_LIB_TYPE="$(BUILD_LIB_TYPE)" \
		CROSS_COMPILE="$(CROSS_COMPILE)" \
		EXTRA_CFLAGS="$(EXTRA_CFLAGS)" \
		LD_FLAGS="$(LD_FLAGS)" \
		INSTALL_DIR="$(INSTALL_DIR)" \
		SYSROOT_DIR="$(SYSROOT_DIR)" \
		OBJ_DIR="$(OBJ_DIR)"

MRVL_INC = \
	-isystem $(MRVLDIR)/services/ril/include \
	-isystem $(MRVLDIR)/services/audio/include \
	-isystem $(MRVLDIR)/services/audio_if/include \
	-isystem $(MRVLDIR)/services/audio/include/stub \
	-isystem $(MRVLDIR)/services/audio/tinyalsa/include \
	-isystem $(MRVLDIR)/services/audio/libaudio-apu \
	-isystem $(MRVLDIR)/lte-telephony/apps/aud_sw/vcm_ipc

endif

$(info BUILD_LIB_TYPE=$(BUILD_LIB_TYPE))
$(info BUILD_PLATFORM=$(BUILD_PLATFORM))
$(info BUILD_BRANCH=$(BUILD_BRANCH))
$(info BUILD_PROJECT=$(BUILD_PROJECT))
$(info ROOT=$(ROOT))
$(info CC=$(CC))
$(info AR=$(AR))

# -Werror=non-virtual-dtor
#CFLAGS= --sysroot=$(BUILD_TOOLCHAIN_DIR) -Os -pipe -rdynamic -march=armv7-a -mtune=cortex-a7 -mfpu=neon-vfpv4 -fno-caller-saves -fhonour-copts -Wno-error=unused-but-set-variable -mfloat-abi=hard -fno-exceptions -Wno-multichar -ffunction-sections -fdata-sections -funwind-tables -Wa,--noexecstack -fno-short-enums -no-canonical-prefixes -fno-canonical-system-headers -mfpu=neon -fno-builtin-sin -fno-strict-volatile-bitfields -Wno-psabi -mthumb-interwork -fmessage-length=0 -W -Wall -Wno-unused -Winit-self -Wpointer-arith  -g -Wstrict-aliasing=2 -fgcse-after-reload -frerun-cse-after-loop -frename-registers -mthumb -fomit-frame-pointer -fno-strict-aliasing -Werror=format-security -Werror=return-type -Werror=address -Werror=sequence-point -ffunction-sections -Wl,--gc-sections -Wl,--no-undefined -Wno-sign-compare -Wno-pointer-arith
CFLAGS = --sysroot=$(BUILD_TOOLCHAIN_DIR) -Os -pipe -rdynamic -march=armv7-a -mtune=cortex-a7 -mfpu=neon-vfpv4 -Wall -Werror -g -Wno-error=format

CFLAGS_TEST = --sysroot=$(BUILD_TOOLCHAIN_DIR) -Os -pipe -rdynamic -march=armv7-a -mtune=cortex-a7 -mfpu=neon-vfpv4 -fno-caller-saves -fhonour-copts -Wno-error=unused-but-set-variable -mfloat-abi=hard -fno-exceptions -Wno-multichar -ffunction-sections -fdata-sections -funwind-tables -Wa,--noexecstack -fno-short-enums -no-canonical-prefixes -fno-canonical-system-headers -mfpu=neon -fno-builtin-sin -fno-strict-volatile-bitfields -Wno-psabi -mthumb-interwork -fmessage-length=0 -W -Wall -Wno-unused -Winit-self -Wpointer-arith  -g -Wstrict-aliasing=2 -fgcse-after-reload -frerun-cse-after-loop -frename-registers -mthumb -fomit-frame-pointer -fno-strict-aliasing -Werror=format-security -Werror=return-type -Werror=address -Werror=sequence-point -ffunction-sections -Wl,--gc-sections -Wl,--no-undefined -Wno-sign-compare -Wno-pointer-arith

AWK=awk

#CFLAGS += -Wno-error=format-truncation -Wno-error=format-overflow= -Wno-error=stringop-overread -Wno-error=deprecated-declarations

INC_DIR = \
	-I$(LOCAL_PATH)/ \
	-I$(LOCAL_PATH)/inc \
	-I$(BUILD_ROOT)/include \
	-I$(BUILD_ROOT)/include/mbtk \
	-I$(BUILD_ROOT)/include/lynq \
	-I$(BUILD_ROOT)/include/mqtt \
	-I$(BUILD_ROOT)/include/ql

# -DCONFIG_AB_SYSTEM
# 	-DMBTK_DUMP_SUPPORT
DEFINE = \
	$(MRVL_INC) \
	-DMBTK_SUPPORT \
	-DMARVELL_EXTENDED \
	-DPXA1826_AUDIO \
	-D__USE_GNU \
	-DNOT_DROPPED_FLAGS_TEST \
	-DNDEBUG \
	-UDEBUG \
	-D_FORTIFY_SOURCE=2 \
	-D_GNU_SOURCE \
	-DMBTK_BUILD_TIME=\""$(shell date +%Y/%m/%d\ %H:%M:%S)\"" \
	-DMBTK_BUILD_GIT=\""$(shell git log | grep commit | head -1 | cut -d ' ' -f 2)\""

#MBTK_BUILD_GIT="$(shell git log | grep commit | head -1 | cut -d ' ' -f 2)"
#$(info MBTK_BUILD_GIT=$(MBTK_BUILD_GIT))

#$(info TOPDIR=$(TOPDIR))
# BUILD_PROJECT=$(shell cat $(ROOT)/../build_version | grep PROJECT | cut -d '=' -f 2)
#$(info BUILD_PROJECT=$(BUILD_PROJECT))
#BUILD_PROJECT_X=$(shell ${BUILD_PROJECT:0:4})
#BUILD_PROJECT_X=$(shell echo $(BUILD_PROJECT) | cut -c 1-4)
#$(info BUILD_PROJECT_X=$(BUILD_PROJECT_X))

DEFINE += -DMBTK_ALL_CID_SUPPORT

ifeq ($(MBTK_SOURCE_VERSION), 2)
DEFINE += -DMBTK_SOURCE_VERSION_2
endif

#ifeq ($(MBTK_DEV_INFO_VERSION), 2)
#DEFINE += -DMBTK_DEV_INFO_VERSION_2
#endif

ifeq ($(CONFIG_MBTK_5G_SUPPORT), Y)
DEFINE += -DMBTK_5G_SUPPORT
endif

LIB_DIR = \
	-L$(OUT_DIR)/lib

LIBS = -lpthread -lstdc++

# Common temp files to delete from each directory.
TEMPFILES=core core.* *.o temp.* *.out
