
###############################################################
# SETUP the path for build tool here
###############################################################

# arm32 hard-float                                          
ARM32_BUILD_PATH_BIN := $(HOME)/toolchain/arm32/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf/bin/arm-none-linux-gnueabihf-gcc
ARM32_BUILD_PATH_INCLUDE := $(HOME)/arm32/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf/arm-none-linux-gnueabihf/libc/usr/include
ARM32_BUILD_PATH_LIB := $(HOME)/toolchain/arm32/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf/lib/gcc/arm-none-linux-gnueabihf/10.3.1

# arm64
ARM64_BUILD_PATH_BIN := $(HOME)/toolchain/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc

# arm64 linaro 
ARM64_LINARO_BUILD_PATH_BIN := $(HOME)/toolchain/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc
ARM64_LINARO_BUILD_PATH_INCLUDE := $(HOME)/toolchain/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/libc/usr/include
ARM64_LINARO_BUILD_PATH_LIB := $(HOME)/toolchain/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/lib/gcc/aarch64-linux-gnu/7.5.0/

# rpi (raspberry pi)
ARM_RASP_BUILD_PATH_BIN := $(HOME)/toolchain/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-gcc-4.8.3
ARM_RASP_BUILD_PATH_INCLUDE := $(HOME)/toolchain/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/arm-linux-gnueabihf/libc/usr/include
ARM_RASP_BUILD_PATH_LIB := $(HOME)/toolchain/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/lib/gcc/arm-linux-gnueabihf/4.8.3/

# i686
I686_BUILD_PATH_BIN := $(HOME)/toolchain/i686/x86-i686--glibc--stable-2021.11-1/bin/i686-linux-gcc
I686_BUILD_PATH_INCLUDE := $(HOME)/toolchain/i686/i686-buildroot-linux-gnu/sysroot/usr/include
I686_BUILD_PATH_LIB := $(HOME)/toolchain/i686/x86-i686--glibc--stable-2021.11-1/lib/gcc/i686-buildroot-linux-gnu/10.3.0/

# mips big endian
MIPSEB_BUILD_PATH_BIN := /usr/bin/mips-linux-gnu-gcc

# mips little endian
MIPSEL_BUILD_PATH_BIN := /usr/bin/mipsel-linux-gnu-gcc

###############################################################
# Main program which called by script
###############################################################
MAIN_BIN = RC71x0-logger

###############################################################
# setup build path and the definition of CPU build option
###############################################################
TOOLCHAIN_PATH := $(HOME)/toolchain
BUILD_CPU_OPTION  ?= HOST_$(shell uname -m)
BUILD_TOOL_BIN := gcc -g
INC_PATH := ./inc/
SRC_PATH := ./src/
###OUTPUT_PATH := ./
OUTPUT_PATH := bin/

###############################################################
# Complier option to setup BIN, INCLUDE, LIB
###############################################################

ifeq ($(BUILD_CPU_OPTION),HOST_X86_64)
  C_COMPILER_OPTION += -m64
  LIB_PATH += -m64
endif

ifeq ($(BUILD_CPU_OPTION),HOST_i686)
  C_COMPILER_OPTION += -m32 
  LIB_PATH += -m32
  BUILD_TOOL_BIN := $(I686_BUILD_PATH_BIN)
  INCLUDE += -I$(I686_BUILD_PATH_INCLUDE)
  LIB_PATH += -L$(I686_BUILD_PATH_LIB)
endif


ifeq ($(BUILD_CPU_OPTION),ARM32)
  C_COMPILER_OPTION := -D EVENT_FD_UNSUPPORTED -D_GNU_SOURCE -Wno-missing-field-initializers
  BUILD_TOOL_BIN := $(ARM32_BUILD_PATH_BIN)
  ARM_INCLUDE_PATH := -I$(ARM32_BUILD_PATH_INCLUDE)
  LIB_PATH := -L$(ARM32_BUILD_PATH_LIB)
  C_COMPILER_OPTION += -march=armv5te -marm
endif

ifeq ($(BUILD_CPU_OPTION),ANDROID)
  BUILD_TOOL_BIN := /$(ARM64_BUILD_PATH_BIN)
  C_COMPILER_OPTION += -DANDROID_VERSION
endif

ifeq ($(BUILD_CPU_OPTION),ARM64)
  BUILD_TOOL_BIN := /$(ARM64_BUILD_PATH_BIN)
endif

ifeq ($(BUILD_CPU_OPTION),ARM64_LINARO)
  C_COMPILER_OPTION  := -c -D ARM64
  BUILD_TOOL_BIN := $(ARM64_LINARO_BUILD_PATH_BIN)
  ARM_INCLUDE_PATH := -I$(ARM64_LINARO_BUILD_PATH_INCLUDE)
  LIB_PATH := -L$(ARM64_LINARO_BUILD_PATH_LIB)
endif

ifeq ($(BUILD_CPU_OPTION),ARM_RPI)
  C_COMPILER_OPTION  := -c -D ARM
  BUILD_TOOL_BIN := $(ARM_RASP_BUILD_PATH_BIN)
  ARM_INCLUDE_PATH := -I$(ARM_RASP_BUILD_PATH_INCLUDE)
  LIB_PATH := -L$(ARM_RASP_BUILD_PATH_LIB)
endif


ifeq ($(BUILD_CPU_OPTION),MIPSEB)
  CC := $(MIPSEB_BUILD_PATH_BIN)
  C_COMPILER_OPTION += -D NO_BACKTRACE -D OS_NO_SSCANF
endif

ifeq ($(BUILD_CPU_OPTION),MIPSEL)
  CC := $(MIPSEL_BUILD_PATH_BIN)
  C_COMPILER_OPTION += -D NO_BACKTRACE -D OS_NO_SSCANF
endif
###OBJ_PATH    := ./obj/
OBJ_PATH    := ./obj/$(BUILD_CPU_OPTION)/
C_COMPILER_OPTION  := -Wno-format -D__LINUX__ -DDEBUG $(C_COMPILER_OPTION) $(ARM_INCLUDE_PATH) $(PPCIDIR)
LIB_FULL_PATH := ../../build/lib/$(BUILD_CPU_OPTION)/ $(LIB_PATH)
LIBS :=  $(WLIBS) -static -L $(LIB_FULL_PATH) -lpthread -lrt -lm 

###############################################################
# define all source file to compiler as object
###############################################################
_OBJ := MdLogger.o $(_OBJ)
OBJ  := $(patsubst %, $(OBJ_PATH)%, $(_OBJ))

$(OBJ_PATH)%.o:	$(SRC_PATH)%.c
	mkdir -p $(OBJ_PATH)
	$(BUILD_TOOL_BIN) -c -o $@ $< $(C_COMPILER_OPTION) -I $(INC_PATH)

###############################################################
# define all librarys file to line as main binarary
###############################################################
###$(OUTPUT_PATH)$(MAIN_BIN): $(OBJ)
$(OUTPUT_PATH)$(MAIN_BIN)$(BUILD_CPU_OPTION): $(OBJ)
	mkdir -p $(OUTPUT_PATH);\
	$(BUILD_TOOL_BIN) -o $@ $^ $(LIB_PATH) $(LIBS)

###############################################################
# define make clean to remove exist folder and files
###############################################################
.PHONY clean:
###	rm -f $(OBJ_PATH)*.o *~ $(OUTPUT_PATH)$(MAIN_BIN)
	rm -f $(OBJ_PATH)*.o *~ $(OUTPUT_PATH)$(MAIN_BIN)$(BUILD_CPU_OPTION)
	rm -d $(OBJ_PATH)




