SOURCE_DIR  ?= .
#BINPATH     ?= ~/gcc-arm-none-eabi/bin
BINPATH     ?= /proj/mtk60451/yinli_git/ao_geneva-mp-mt28_mp1_1/mcu/tools/gcc/linux/gcc-arm-none-eabi/bin
# Product Configs
PRODUCT_VERSION := 2811
SONY_HEAP_TRACE := y

# ###
AR      = $(BINPATH)/arm-none-eabi-ar
CC      = $(CCACHE) $(BINPATH)/arm-none-eabi-gcc
CXX     = $(CCACHE) $(BINPATH)/arm-none-eabi-g++
OBJCOPY = $(BINPATH)/arm-none-eabi-objcopy
SIZE    = $(BINPATH)/arm-none-eabi-size
OBJDUMP = $(BINPATH)/arm-none-eabi-objdump
NM      = $(BINPATH)/arm-none-eabi-nm

ALLFLAGS = -mlittle-endian -mthumb -mcpu=cortex-m4
FPUFLAGS = -Wdouble-promotion -mfpu=fpv4-sp-d16 -mfloat-abi=hard
COM_CFLAGS += $(ALLFLAGS) $(FPUFLAGS) -ffunction-sections -fdata-sections -fno-builtin -Wimplicit-function-declaration
COM_CFLAGS += -gdwarf-2 -Os -Wall -fno-strict-aliasing -fno-common
COM_CFLAGS += -Wall -Wimplicit-function-declaration -Werror=uninitialized -Wno-error=maybe-uninitialized -Werror=return-type
COM_CFLAGS += -DPCFG_OS=2 -D_REENT_SMALL -Wno-error -Wno-switch
COM_CFLAGS += -DPRODUCT_VERSION=$(PRODUCT_VERSION)
COM_CFLAGS += -DCORE_CM4
COM_CFLAGS += -D$(TARGET)_BOOTING

LDFLAGS += -Wl,--gc-sections -Wl,-wrap=printf
LDFLAGS += -u _printf_float

###############################################################################
CFLAGS     += -std=gnu99 $(COM_CFLAGS)
CXXFLAGS   += -std=c++11 $(COM_CFLAGS)

# Project name
TARGET_LIB=librtos

BUILD_DIR = Build
OUTPATH = Build
BUILD_LOG := $(BUILD_DIR)/build.log
ERR_LOG := $(BUILD_DIR)/err.log

# suppress all building warning in this module
CFLAGS += -w

# Sources
include module_lib.mk

C_OBJS = $(C_FILES:%.c=$(BUILD_DIR)/%.o)

.PHONY: all clean clean_logs

all: clean_logs $(TARGET_LIB).a
	@echo Build $< Done

$(TARGET_LIB).a: $(C_OBJS)
	@echo Gen $(TARGET_LIB).a
	@echo Gen $(TARGET_LIB).a >>$(BUILD_LOG)
	@$(Q)if [ -e "$(OUTPATH)/$@" ]; then rm -f "$(OUTPATH)/$@"; fi
	@$(Q)if [ -e "$(OUTPATH)/lib/$@" ]; then rm -f "$(OUTPATH)/lib/$@"; fi
	@$(Q)$(M)$(AR) -r $(OUTPATH)/$@ $(C_OBJS) $(CXX_OBJS) $(S_OBJS) >>$(BUILD_LOG) 2>>$(ERR_LOG); \
	if [ "$$?" != "0" ]; then \
		echo "MODULE BUILD $@ FAIL"; \
		echo "MODULE BUILD $@ FAIL" >> $(BUILD_LOG); \
		exit 1;\
	else \
		echo "MODULE BUILD $@ PASS"; \
		echo "MODULE BUILD $@ PASS" >> $(BUILD_LOG); \
	fi;

$(BUILD_DIR)/%.o: $(SOURCE_DIR)/%.c
	@mkdir -p $(dir $@)
	@echo Build... $$(basename $@)
	@echo Build... $@ >> $(BUILD_LOG)
	@if [ -e "$@" ]; then rm -f "$@"; fi
	@if [ -n "$(OVERRIDE_CFLAGS)" ]; then \
		echo $(CC) $(OVERRIDE_CFLAGS) $@ >> $(BUILD_LOG); \
		$(CC) $(OVERRIDE_CFLAGS) -c $< -o $@ 2>>$(ERR_LOG); \
	else \
		echo $(CC) $(CFLAGS) $@ >> $(BUILD_LOG); \
		$(CC) $(CFLAGS) -c $< -o $@ 2>>$(ERR_LOG); \
	fi; \
	if [ "$$?" != "0" ]; then \
		echo "Build... $$(basename $@) FAIL"; \
		echo "Build... $@ FAIL" >> $(BUILD_LOG); \
	else \
		echo "Build... $$(basename $@) PASS"; \
		echo "Build... $@ PASS" >> $(BUILD_LOG); \
	fi;

$(BUILD_DIR)/%.d: $(SOURCE_DIR)/%.c
	@mkdir -p $(dir $@)
	@set -e; rm -f $@; \
	export D_FILE="$@"; \
	export B_NAME=`echo $$D_FILE | sed 's/\.d//g'`; \
	if [ -n "$(OVERRIDE_CFLAGS)" ]; then \
		$(CC) -MM $(OVERRIDE_CFLAGS) $< > $@.$$$$; \
	else \
		$(CC) -MM $(CFLAGS) $< > $@.$$$$; \
	fi; \
	sed 's@\(.*\)\.o@'"$$B_NAME\.o $$B_NAME\.d"'@g' < $@.$$$$ > $@; \
	rm -f $@.$$$$

clean:
	rm -rf $(OUTPATH)/$(TARGET_LIB).a
	rm -rf $(BUILD_DIR)

clean_logs:
	rm -f $(BUILD_LOG)
	rm -f $(ERR_LOG)

