ROOT_DIR := ./
TARGET = downloadfile
BUILD_DIR =  ./build/
PREFIX = 
 
CC = $(PREFIX)sdcc 
AS = $(PREFIX)sdas8051 #sdc51

 
RM = -rm -rf
MAKE = make 
 
# 小内存 code-代码 iram-内部RAM xram-外部RAM
MCU_MODEL = -mmcs51
MODEL  = --model-large
CODE_SIZE = --code-size 65536  # 64KB 的 Flash 存储器
IRAM_SIZE = --iram-size 2048    # 2KB 的内部 SRAM
XRAM_SIZE = --xram-size 32768   # 32KB 的内部扩展 RAM
 
# MODEL  = --model-small
# CODE_SIZE = --code-size 16384
# IRAM_SIZE = --iram-size 256
# XRAM_SIZE = --xram-size 1024

AS_DEFS = 
C_DEFS = 
 
# includes,头文件必须包含在以下文件中
#-IC:/Keil_v5/C51/INC 
AS_INCLUDES = 
INC_PATHS =  \
-I$(ROOT_DIR)App \
-I$(ROOT_DIR)App/inc \
-I$(ROOT_DIR)board \
-I$(ROOT_DIR)board/inc \
-I$(ROOT_DIR)Driver/inc \
-I$(ROOT_DIR)User \
-I$(ROOT_DIR)inc \
-I$(ROOT_DIR)/../comm \
-I$(ROOT_DIR) \
-I$(ROOT_DIR)/src \
-I$(ROOT_DIR)/Sources/inc \
-I$(ROOT_DIR)/Sources/src \
-I$(ROOT_DIR)/../font \
-I$(ROOT_DIR)/../GUI \
-I$(ROOT_DIR)/../LCD \
-I$(ROOT_DIR)/../sys \
-I$(ROOT_DIR)/../touch \
-I$(ROOT_DIR)/../USER \
-I$(abspath $(CURDIR))
 
# libraries
#-lstc_usb_cdc_8h_xdata
LIBS = 
#-L$(ROOT_DIR)Library
LIBDIRS = 

LIB_SRC = 
USER_SRC =  $(ROOT_DIR)
#board/src/*.c  Driver/src/*.c  Driver/isr/*.c
C_SOURCES := $(wildcard   $(ROOT_DIR)/*.c)
C_SOURCES += $(wildcard   $(ROOT_DIR)/src/*.c)
C_SOURCES += $(wildcard   $(ROOT_DIR)/Sources/isr/*.c)
C_SOURCES += $(wildcard   $(ROOT_DIR)/Sources/src/*.c)
C_SOURCES += $(wildcard   $(ROOT_DIR)/../font/*.c)
C_SOURCES += $(wildcard   $(ROOT_DIR)/../GUI/*.c)
C_SOURCES += $(wildcard   $(ROOT_DIR)/../LCD/*.c)
C_SOURCES += $(wildcard   $(ROOT_DIR)/../sys/*.c)
C_SOURCES += $(wildcard   $(ROOT_DIR)/../touch/*.c)
C_SOURCES += $(wildcard   $(ROOT_DIR)/../USER/*.c)

#C_SOURCES += $(USER_SRC)/Main.c

ASM_SOURCES = 
 # 对象文件
C_OBJECTS := $(patsubst %.c, $(BUILD_DIR)/%.rel, $(C_SOURCES))
ASM_OBJECTS := $(patsubst %.asm, $(BUILD_DIR)/%.rel, $(ASM_SOURCES))

# 最终目标文件
ALL_OBJECTS := $(C_OBJECTS) $(ASM_OBJECTS)


# 链接选项
LDFLAGS =  $(LIBDIRS) $(LIBS) # 删除未使用的段

# 规则
.PHONY: all clean mk

# 主要目标
all: $(BUILD_DIR)/$(TARGET).hex

# 清理
clean:
	-rm -rf $(BUILD_DIR)/*
# 编译规则
$(BUILD_DIR)/%.rel: %.c
	@echo "Compiling $< into $(dir $@)"
	mkdir -p $(dir $@) | $(CC) -c -o $@ $(MCU_MODEL) $(INC_PATHS) $(MODEL) --nogcse --noinvariant --noinduction  --noloopreverse --no-peep --nooverlay --debug --out-fmt-ihx --debug $<


$(BUILD_DIR)/%.rel: %.asm
	@echo "Compiling $< into $(dir $@)"
	mkdir -p $(dir $@) | $(AS) -o $(INC_PATHS) $@ $<

# 链接规则
$(BUILD_DIR)/$(TARGET).hex: $(ALL_OBJECTS)
	@echo "Compiling $^ into $(dir $@)"
	mkdir -p $(dir $@) | $(CC) -o $@ $(MCU_MODEL) $(INC_PATHS) $(MODEL) $(CODE_SIZE) $(IRAM_SIZE) $(XRAM_SIZE) $(LDFLAGS) --out-fmt-ihx $^


# 删除构建目录
clean-build-dir:
	rm -rf $(BUILD_DIR)