BUILD_OUT_IMG_DIR ?= $(ROOT_DIR)/out/$(CONFIG_CHIP)/img
BUILD_OUT_OBJ_DIR ?= $(ROOT_DIR)/out/$(CONFIG_CHIP)/obj



LD_FLAG = -EL -nostdlib -Wl,--gc-sections -mips32r3
C_DEF_FLAG =

C_COMPILE_FLAG = -EL -mips32r3 -mabi=32 -mmt -march=mips32r3 -ffunction-sections -fdata-sections -G0   #mips parameter
C_COMPILE_FLAG += -Wall -Werror -Wno-unused-variable -Wno-unused-function -Wno-pointer-sign -Wno-format -Wno-unused-but-set-variable -Wno-strict-aliasing -Wno-misleading-indentation  #gcc parameter
C_COMPILE_FLAG += -D__FILENAME__='"$(subst $(dir $<),,$<)"' #self def parameter
C_COMPILE_FLAG += -fdebug-prefix-map=$(CONFIG_CODE_PATH)/=./

ifeq ($(CONFIG_HARD_FLOAT),yes)
  C_COMPILE_FLAG += -mhard-float
  LD_FLAG += -mhard-float
  C_DEF_FLAG += -DHV_CONFIG_HARD_FLOAT
else
  C_COMPILE_FLAG += -msoft-float
  LD_FLAG += -msoft-float
endif

ifeq ($(CONFIG_PRINT),yes)
  C_DEF_FLAG += -DHV_CONFIG_ENABLE_PRINT
endif

C_DEF_FLAG += -DHV_CONFIG_CHIP_$(shell echo $(CONFIG_CHIP) | tr '[:lower:]' '[:upper:]')
C_DEF_FLAG += -DHV_CONFIG_ENDIAN_$(shell echo $(CONFIG_ENDIAN) | tr '[:lower:]' '[:upper:]')
C_DEF_FLAG += -DHV_CONFIG_ARCH_$(shell echo $(CONFIG_ARCH) | tr '[:lower:]' '[:upper:]')


USER_CONFIG_FILE := $(ROOT_DIR)/user/$(CONFIG_VENDOR)/$(CONFIG_PROJECT)/property.config

CONFIG_USER_DEFINE := $(shell cat $(USER_CONFIG_FILE) | grep "?=" | awk '{print " -DCONFIG_USER_"$$3}')
C_DEF_FLAG += $(CONFIG_USER_DEFINE)

#ASM_COMPILE_FLAG = -EL -mips32r3 -mabi=32 -mmt -march=mips32r3 -ffunction-sections -fdata-sections -G0
#ASM_COMPILE_FLAG += -Wall -Werror -Wno-unused-variable -Wno-unused-function -Wno-pointer-sign -Wno-format -Wno-unused-but-set-variable -Wno-strict-aliasing -Wno-misleading-indentation

#ifeq ($(CONFIG_HARD_FLOAT),yes)
#  ASM_COMPILE_FLAG += -mhard-float
#else
#  ASM_COMPILE_FLAG += -msoft-float
#endif

LINK_SCRIPT_DIR ?= $(ROOT_DIR)/build/scripts/ldscript/$(CONFIG_CHIP)
FILE_INC_CONFIG += -include $(ROOT_DIR)/user/$(CONFIG_VENDOR)/$(CONFIG_PROJECT)/BoardConfig.h
FILE_INC_CONFIG += -include $(ROOT_DIR)/user/$(CONFIG_VENDOR)/$(CONFIG_PROJECT)/ProjectConfig.h
FILE_INC_CONFIG += -include $(ROOT_DIR)/user/$(CONFIG_VENDOR)/$(CONFIG_PROJECT)/OSD/OsdConfig.h

MAKE=make
CC=mips-mti-elf-gcc
LD=mips-mti-elf-ld
AR=mips-mti-elf-ar
RANLIB=mips-mti-elf-ranlib
OBJCOPY=mips-mti-elf-objcopy
OBJDUMP=mips-mti-elf-objdump
GDB=mips-mti-elf-gdb

ifeq ($(COMPILE_MODE),release)
  C_COMPILE_FLAG += -O2
  #ASM_COMPILE_FLAG += -O0
  C_DEF_FLAG += -DRELEASE_VERSION
  HEADER=@
endif

ifeq ($(COMPILE_MODE),debug)
  C_COMPILE_FLAG += -g -O2
  #ASM_COMPILE_FLAG += -g
  C_DEF_FLAG += -DHV_SCALER_DEBUG_VERSION
  C_DEF_FLAG += -DCOMPILE_USERNAME=\"$(shell whoami)\"
  C_DEF_FLAG += -DCOMPILE_HOSTNAME=\"$(shell hostname)\"
  HEADER=@
endif

ASM_DEF_FLAG = $(C_DEF_FLAG)
ASM_COMPILE_FLAG=$(C_COMPILE_FLAG)

#@if [ $(COMPILE_MODE) = "release" ] ; then echo "$1" ; else echo ""; fi;
define ASM_COMPILE_RULE
 $(HEADER)$(CC) $(INCLUDES) $(ASM_COMPILE_FLAG) $(ASM_DEF_FLAG)  $(FILE_INC_CONFIG) -o $(BUILD_OUT_OBJ_DIR)/$1 -c $2
 @if [ $(COMPILE_MODE) = "release" ] ; then echo "$1" ;  fi;
 @if [ $(COMPILE_MODE) = "debug" ] ; then echo "$1" ;  fi;
endef
define C_COMPILE_RULE
 $(HEADER)$(CC) $(INCLUDES) $(C_COMPILE_FLAG) $(C_DEF_FLAG)   $(FILE_INC_CONFIG) -o $(BUILD_OUT_OBJ_DIR)/$1 -c $2
 @if [ $(COMPILE_MODE) = "release" ] ; then echo "$1" ;  fi;
 @if [ $(COMPILE_MODE) = "debug" ] ; then echo "$1" ;  fi;
endef

%.o : %.S
	$(call ASM_COMPILE_RULE,$@,$<)
%.o : %.c
	$(call C_COMPILE_RULE,$@,$<)