#create:2018-10-12
#auther:zsl,wb

#Ķļ֪ʶ
#(1)ַ'\'ʾ
#(2)Ŀĵһָǰһtab4ո
#(3)$@  ʾĿļ
#   $^  ʾеļ
#   $<  ʾһļ
#   $?  ʾĿ껹Ҫµļб

#屾ļʹõıʵҪ޸ġ
#̨·
printf    := echo

#.Cļļ
SRC_C := ./srcc
#.Sļļ
SRC_S := ./srcs
#.oļĿ¼
D_OBJ := ./obj
#.dļĿ¼
D_MK  := ./dmk
#.Cļб
SRC_CList := $(wildcard ./srcc/*.c)
#.CPPļб
#20200305 1/8 &Ʋ .cppļб.cļб
SRC_CPPList := $(wildcard ./srcc/*.cpp)
#.sļб
#20200305 2/8 &Ʋ .Sļбԭ.s.S
SRC_sList := $(wildcard ./srcs/*.s)
#.Sļб
SRC_SList := $(wildcard ./srcs/*.S)

#ļ(.ld)Ĵ洢·
linkFile := "C:\Users\sumcu\Desktop\KANKAN\AHL-CH32V307-20220127\04-Software\CH06\UART-CH32V307-Sent-20220127\03_MCU\Linker_file\CH32V307.ld"
#ɵļ
finalGoal := UART-CH32V307-Sent-20220127
#ͷļڵ·
include := -I"C:\Users\sumcu\Desktop\KANKAN\AHL-CH32V307-20220127\04-Software\CH06\UART-CH32V307-Sent-20220127\.settings" -I"C:\Users\sumcu\Desktop\KANKAN\AHL-CH32V307-20220127\04-Software\CH06\UART-CH32V307-Sent-20220127\01_Doc" -I"C:\Users\sumcu\Desktop\KANKAN\AHL-CH32V307-20220127\04-Software\CH06\UART-CH32V307-Sent-20220127\02_CPU" -I"C:\Users\sumcu\Desktop\KANKAN\AHL-CH32V307-20220127\04-Software\CH06\UART-CH32V307-Sent-20220127\03_MCU" -I"C:\Users\sumcu\Desktop\KANKAN\AHL-CH32V307-20220127\04-Software\CH06\UART-CH32V307-Sent-20220127\04_GEC" -I"C:\Users\sumcu\Desktop\KANKAN\AHL-CH32V307-20220127\04-Software\CH06\UART-CH32V307-Sent-20220127\05_UserBoard" -I"C:\Users\sumcu\Desktop\KANKAN\AHL-CH32V307-20220127\04-Software\CH06\UART-CH32V307-Sent-20220127\06_SoftComponent" -I"C:\Users\sumcu\Desktop\KANKAN\AHL-CH32V307-20220127\04-Software\CH06\UART-CH32V307-Sent-20220127\07_AppPrg" -I"C:\Users\sumcu\Desktop\KANKAN\AHL-CH32V307-20220127\04-Software\CH06\UART-CH32V307-Sent-20220127\Debug" -I"C:\Users\sumcu\Desktop\KANKAN\AHL-CH32V307-20220127\04-Software\CH06\UART-CH32V307-Sent-20220127\03_MCU\Linker_file" -I"C:\Users\sumcu\Desktop\KANKAN\AHL-CH32V307-20220127\04-Software\CH06\UART-CH32V307-Sent-20220127\03_MCU\MCU_drivers" -I"C:\Users\sumcu\Desktop\KANKAN\AHL-CH32V307-20220127\04-Software\CH06\UART-CH32V307-Sent-20220127\03_MCU\startup" -I"C:\Users\sumcu\Desktop\KANKAN\AHL-CH32V307-20220127\04-Software\CH06\UART-CH32V307-Sent-20220127\Debug\obj" -I"C:\Users\sumcu\Desktop\KANKAN\AHL-CH32V307-20220127\04-Software\CH06\UART-CH32V307-Sent-20220127\Debug\srcc" -I"C:\Users\sumcu\Desktop\KANKAN\AHL-CH32V307-20220127\04-Software\CH06\UART-CH32V307-Sent-20220127\Debug\srcs"

#Ż𡣹O0O1O2OsOgĬʹOg
opt := Og
#.oļб
#20200305 3/8 &Ʋ ԭOBJ_CΪOBJ-CS.S.oļ

#.cļ滻Ϊ.oļ
OBJ_CS := $(addprefix $(D_OBJ)/,$(patsubst %.c,%.o,$(notdir $(SRC_CList))))
#.cppļ滻Ϊ.oļ
OBJ_CS += $(addprefix $(D_OBJ)/,$(patsubst %.cpp,%.o,$(notdir $(SRC_CPPList))))
#.sļ滻Ϊ.oļ  
OBJ_CS += $(addprefix $(D_OBJ)/,$(patsubst %.s,%.o,$(notdir $(SRC_sList))))
#.Sļ滻Ϊ.oļ  
OBJ_CS += $(addprefix $(D_OBJ)/,$(patsubst %.S,%.o,$(notdir $(SRC_SList))))

#.dļб
#20200305 4/8 &Ʋ .S.dļ

#.cļ滻Ϊ.dļ
SRC_MK := $(addprefix $(D_OBJ)/, $(patsubst %.c,%.d,$(notdir $(SRC_CList))))
#.cppļ滻Ϊ.dļ
SRC_MK += $(addprefix $(D_OBJ)/, $(patsubst %.cpp,%.d,$(notdir $(SRC_CPPList))))
#.sļ滻Ϊ.dļ
SRC_MK += $(addprefix $(D_OBJ)/, $(patsubst %.s,%.d,$(notdir $(SRC_sList))))
#.Sļ滻Ϊ.dļ  
SRC_MK += $(addprefix $(D_OBJ)/, $(patsubst %.S,%.d,$(notdir $(SRC_SList))))


$(D_OBJ)/%.o:$(SRC_C)/%.c
	@echo 'Building file: $<'
	@echo 'Invoking: GNU RISC-V Cross C Compiler'
	riscv-none-embed-gcc -march=rv32imac -mabi=ilp32 -msmall-data-limit=8 -mno-save-restore -$(opt)\
 -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -Wunused -Wuninitialized -g $(include)\
 -std=gnu99 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -c -o "$@" "$<"
	@echo 'Finished building: $<'
	@
	

$(D_OBJ)/%.o:$(SRC_S)/%.S
	@echo 'Building file: $<'
	@echo 'Invoking: GNU RISC-V Cross Assembler'
	riscv-none-embed-gcc -march=rv32imac -mabi=ilp32 -msmall-data-limit=8 -mno-save-restore -$(opt)\
 -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -Wunused -Wuninitialized -g\
 -x assembler -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -c -o "$@" "$<"
	@echo 'Finished building: $<'
	@


# ļеĿꡣĿΪϣɵļСall͡cleanΪαĿ
all:$(finalGoal).siz $(finalGoal).lst $(finalGoal).hex


$(finalGoal).elf: $(OBJ_CS)
	@echo 'Building target: $@'
	@echo 'Invoking: GNU RISC-V Cross C Linker'
	riscv-none-embed-gcc -march=rv32imac -mabi=ilp32 -msmall-data-limit=8 -mno-save-restore -$(opt)\
 -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -Wunused -Wuninitialized\
 -g -T $(linkFile) -nostartfiles -Xlinker --gc-sections -Wl,-Map,"$(finalGoal).map"\
 --specs=nano.specs --specs=nosys.specs -o "$(finalGoal).elf" $(OBJ_CS)
	@echo 'Finished building target: $@'
	@

$(finalGoal).hex: $(finalGoal).elf
	@echo 'Invoking: GNU RISC-V Cross Create Flash Image'
	riscv-none-embed-objcopy -O ihex "$(finalGoal).elf"  "$(finalGoal).hex"
	@echo 'Finished building: $@'
	@

$(finalGoal).lst: $(finalGoal).elf
	@echo 'Invoking: GNU RISC-V Cross Create Listing'
	riscv-none-embed-objdump --source --all-headers --demangle --line-numbers --wide "$(finalGoal).elf" > "$(finalGoal).lst"
	@echo 'Finished building: $@'
	@

$(finalGoal).siz: $(finalGoal).elf
	@echo 'Invoking: GNU RISC-V Cross Print Size'
	riscv-none-embed-size --format=berkeley "$(finalGoal).elf"
	@echo 'Finished building: $@'
	@

#ռαĿ
#ɾĿļļδ䶯򲻱룬߱ٶ
fastClean:
	rm -rf "$(finalGoal).elf" "$(finalGoal).hex" "$(finalGoal).map"
	-@$(printf) 'make: fast clean has be done'
	-@$(printf) ' '
	
#ɾмļĿļȫ±	
clean:
	-$(RM)  "$(finalGoal).elf" "$(finalGoal).hex" "$(finalGoal).map" "$(finalGoal).lst" "$(finalGoal).hex" $(OBJ_C) $(SRC_MK)
	@echo 'make: clean has be done'
	-@

#ָЩĿΪαĿ
.PHONY: all clean fastClean test


