| 
									
										
										
										
											2024-09-28 14:24:04 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | SHELL = /bin/bash | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ## compiler ### | 
					
						
							|  |  |  | ifeq ($(gcc), arm) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | CC		    = arm-none-eabi-gcc | 
					
						
							|  |  |  | GLOBAL_MACRO  = CM3 | 
					
						
							|  |  |  | else | 
					
						
							|  |  |  |     ifeq ($(target), kunlun2) | 
					
						
							|  |  |  |         CC          = riscv64-unknown-elf-gcc | 
					
						
							|  |  |  |         ifeq ($(soft_float_enable), 1) | 
					
						
							|  |  |  |             ISA     = rv32imc | 
					
						
							|  |  |  |             ABI     = ilp32 | 
					
						
							|  |  |  |         else | 
					
						
							|  |  |  |             ISA     = rv32imafc | 
					
						
							|  |  |  |             ABI     = ilp32f | 
					
						
							|  |  |  |         endif | 
					
						
							|  |  |  |         RISCV_VER   = riscv2 | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |         ifeq ($(target), kunlun3) | 
					
						
							|  |  |  |             CC          = riscv64-unknown-elf-gcc | 
					
						
							|  |  |  |             ifeq ($(soft_float_enable), 1) | 
					
						
							|  |  |  |                 ISA     = rv32imc | 
					
						
							|  |  |  |                 ABI     = ilp32 | 
					
						
							|  |  |  |             else | 
					
						
							|  |  |  |                 ISA     = rv32imafc | 
					
						
							|  |  |  |                 ABI     = ilp32f | 
					
						
							|  |  |  |             endif | 
					
						
							|  |  |  |             RISCV_VER   = riscv3 | 
					
						
							|  |  |  |         else | 
					
						
							|  |  |  |             CC          = riscv64-unknown-elf-gcc | 
					
						
							| 
									
										
										
										
											2024-11-03 11:22:45 +08:00
										 |  |  |             gcc_version=$(shell (${CC} -dumpversion | awk -F. '{print $1}')) | 
					
						
							|  |  |  |             # $(info "gcc version is " ${gcc_version}) | 
					
						
							|  |  |  |             ifeq ($(gcc_version), 15.0.0) | 
					
						
							|  |  |  |                 ISA         = rv32imc_zicsr | 
					
						
							|  |  |  |             else | 
					
						
							|  |  |  |                 ISA         = rv32imc | 
					
						
							|  |  |  |             endif | 
					
						
							| 
									
										
										
										
											2024-09-28 14:24:04 +08:00
										 |  |  |             ABI         = ilp32 | 
					
						
							|  |  |  |             RISCV_VER   = riscv | 
					
						
							|  |  |  |         endif | 
					
						
							|  |  |  |     endif | 
					
						
							|  |  |  | GLOBAL_MACRO  = RISCV | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | GDB_FLAG = -g | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ### shell command ### | 
					
						
							|  |  |  | RM		= rm -rf | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ifeq ($(target), kunlun3) | 
					
						
							|  |  |  | ifeq ($(build_amp_type), 1) | 
					
						
							|  |  |  | OUTDIR		= .output/cus | 
					
						
							|  |  |  | else | 
					
						
							|  |  |  | OUTDIR		= .output/plc | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | else | 
					
						
							|  |  |  | OUTDIR		= .output | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # obj output folder | 
					
						
							|  |  |  | BIN_DIR		= $(OUTDIR)/$(ASSIGNED_DIR)obj | 
					
						
							|  |  |  | # image output folder | 
					
						
							|  |  |  | OUTPUT_DIR	= $(OUTDIR)/lib | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | EXT_SRC ?= | 
					
						
							|  |  |  | ifneq ($(OUTPUT_TYPE), 0) | 
					
						
							|  |  |  | # .files to compile if need | 
					
						
							|  |  |  | GET_SRCS	= $(wildcard $(1)/*.c) $(wildcard $(1)/*.cpp) $(wildcard  $(1)/*.S) | 
					
						
							|  |  |  | # local .c | 
					
						
							|  |  |  | SRCS		+= $(call GET_SRCS, .) | 
					
						
							|  |  |  | # every sub dir's .c | 
					
						
							| 
									
										
										
										
											2025-01-13 11:19:08 +08:00
										 |  |  | # 如果子文件夹包含makefile文件 则不包含这个目录的源文件 | 
					
						
							|  |  |  | SRC_DIRS    = $(shell for dir in $(SUB_DIRS); do \ | 
					
						
							|  |  |  |                         if [ ! -f "$$dir/Makefile" ]; then \ | 
					
						
							|  |  |  |                           echo "$$dir"; \ | 
					
						
							|  |  |  |                         fi \ | 
					
						
							|  |  |  |                       done) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SRCS		+= $(foreach dirname, $(SRC_DIRS), $(call GET_SRCS, $(dirname))) | 
					
						
							| 
									
										
										
										
											2024-09-28 14:24:04 +08:00
										 |  |  | # ext src | 
					
						
							|  |  |  | SRCS        += $(EXT_SRC) | 
					
						
							|  |  |  | # all the obj names | 
					
						
							|  |  |  | OBJECTS	    = $(addprefix $(BIN_DIR)/, $(patsubst %.S, %.o, $(patsubst %.c, %.o, $(patsubst %.cpp, %.o, $(SRCS))))) | 
					
						
							| 
									
										
										
										
											2025-01-17 17:21:01 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-17 19:55:18 +08:00
										 |  |  | # $(shell echo $(SRCS) > "src_files.txt") | 
					
						
							|  |  |  | # $(shell echo $(ADD_INCLUDE) >> "src_files.txt") | 
					
						
							| 
									
										
										
										
											2024-09-28 14:24:04 +08:00
										 |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | PLATFORM    ?= FPGA | 
					
						
							|  |  |  | ifeq ($(PLATFORM), ) | 
					
						
							|  |  |  | GLOBAL_MACRO   = HW_PLATFORM=1 | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ifeq ($(PLATFORM), FPGA) | 
					
						
							|  |  |  | GLOBAL_MACRO   += HW_PLATFORM=1 | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ifeq ($(PLATFORM), CHIP) | 
					
						
							|  |  |  | GLOBAL_MACRO   += HW_PLATFORM=2 | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | HW_CHIP_ID    ?= HZ | 
					
						
							|  |  |  | ifeq ($(HW_CHIP_ID), HZ) | 
					
						
							|  |  |  | GLOBAL_MACRO   += HW_CHIP_ID=1 | 
					
						
							|  |  |  | else | 
					
						
							|  |  |  | ifeq ($(HW_CHIP_ID), WQ) | 
					
						
							|  |  |  | GLOBAL_MACRO   += HW_CHIP_ID=2 | 
					
						
							|  |  |  | else | 
					
						
							|  |  |  | GLOBAL_MACRO   += HW_CHIP_ID=3 | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ifeq ($(product_line), PLC) | 
					
						
							|  |  |  |     ifeq ($(APP), ) | 
					
						
							|  |  |  |         GLOBAL_MACRO += IOT_APP_SELECTION=0 | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |         GLOBAL_MACRO += IOT_APP_SELECTION=$(APP) | 
					
						
							|  |  |  |     endif | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #FLASH_SIZE=1 -> 1M. | 
					
						
							|  |  |  | ifeq ($(FLASH_SIZE), ) | 
					
						
							|  |  |  | GLOBAL_MACRO += IOT_FLASH_SIZE=1 | 
					
						
							|  |  |  | else | 
					
						
							|  |  |  | GLOBAL_MACRO += IOT_FLASH_SIZE=$(FLASH_SIZE) | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ifeq ($(PLC_SUPPORT_3_PHASE), ) | 
					
						
							|  |  |  |     ifeq ($(cco), 1) | 
					
						
							|  |  |  |         GLOBAL_MACRO += PLC_SUPPORT_3_PHASE=1 | 
					
						
							|  |  |  |     endif | 
					
						
							|  |  |  | else | 
					
						
							|  |  |  |     GLOBAL_MACRO += PLC_SUPPORT_3_PHASE=$(PLC_SUPPORT_3_PHASE) | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ifeq ($(RISCV_VER), riscv2) | 
					
						
							|  |  |  |     GLOBAL_MACRO += TARGET_VERSION=2 | 
					
						
							|  |  |  | else | 
					
						
							|  |  |  |     ifeq ($(RISCV_VER), riscv3) | 
					
						
							|  |  |  |         GLOBAL_MACRO += TARGET_VERSION=3 | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |         GLOBAL_MACRO += TARGET_VERSION=1 | 
					
						
							|  |  |  |     endif | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ifeq ($(smart_cco_sta), ) | 
					
						
							|  |  |  | smart_cco_sta = 0 | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ifeq ($(ckb), 1) | 
					
						
							|  |  |  |     MODE_TYPE=sta | 
					
						
							|  |  |  | else | 
					
						
							|  |  |  | ifneq ($(smart_cco_sta), 0) | 
					
						
							|  |  |  |     ifeq ($(cco), 1) | 
					
						
							|  |  |  |         MODE_TYPE=smart_cco | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |         MODE_TYPE=smart_sta | 
					
						
							|  |  |  |     endif | 
					
						
							|  |  |  | else | 
					
						
							|  |  |  |     ifeq ($(cco), 1) | 
					
						
							|  |  |  |         MODE_TYPE=cco | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |         MODE_TYPE=sta | 
					
						
							|  |  |  |     endif | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | BIN2HEX = $(TOPDIR)/tools/bin_tool/bin2hex | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # the variable needs to be exported to sub dirs by default | 
					
						
							|  |  |  | export ADD_INCLUDE PRE_MARCO OPT_FLAG | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ####################################################### | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | LD_SCRIPT ?= link.lds | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifeq ($LD_SCRIPT), ) | 
					
						
							|  |  |  | #LD_SCRIPT = link.lds | 
					
						
							|  |  |  | #endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ifeq ($(LD_ALL_SECTION), 1) | 
					
						
							|  |  |  | LD_SECTION_FLAG = -Wl,--whole-archive | 
					
						
							|  |  |  | LD_SECTION_FLAG2 = -Wl,--no-whole-archive | 
					
						
							|  |  |  | else | 
					
						
							|  |  |  | LD_SECTION_FLAG = -Wl,--gc-sections | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ifeq ($(DISABLE_BACKTRACE), 1) | 
					
						
							|  |  |  |     OPT_FLAG = -Os $(EXTRA_OPT_FLAG) | 
					
						
							|  |  |  |     ifeq ($(psram_enable), 0) | 
					
						
							|  |  |  |         ifeq ($(flash_size), 1) | 
					
						
							|  |  |  |             OPT_FLAG = -Os -msave-restore | 
					
						
							|  |  |  |         else ifeq ($(flash_size), 2) | 
					
						
							|  |  |  |             OPT_FLAG = -Os -msave-restore | 
					
						
							|  |  |  |         endif | 
					
						
							|  |  |  |     endif | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # strip is to remove the space on the head and tail | 
					
						
							|  |  |  | OUTPUT_FULL_NAME =\ | 
					
						
							|  |  |  | $(strip $(OUTPUT_DIR))/$(shell if [ 2 -eq $(OUTPUT_TYPE) -o 3 -eq $(OUTPUT_TYPE) ];then echo -n "lib";fi)$(strip $(OUTPUT_NAME)).$(shell if [ 1 -eq $(OUTPUT_TYPE) ];then echo -n "out";elif [ 2 -eq $(OUTPUT_TYPE) ];then echo -n "a";elif [ 3 -eq $(OUTPUT_TYPE) ];then echo -n "so";fi) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | LIBDIRS =\ | 
					
						
							|  |  |  | $(foreach lib_dir, $(ADD_LIBDIR), $(addprefix -L, $(lib_dir)/$(OUTPUT_DIR))) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | OUTPUT_MAP = $(OUTPUT_FULL_NAME:.out=.map) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ################################ | 
					
						
							|  |  |  | # consider the multiple compiler | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # if GCC | 
					
						
							|  |  |  | ifeq ($(CC), gcc) | 
					
						
							|  |  |  | AR		= ar | 
					
						
							|  |  |  | SIZE	= size | 
					
						
							|  |  |  | OBJCOPY	= objcopy | 
					
						
							|  |  |  | STRIP   = strip | 
					
						
							|  |  |  | MAKEDEP = -MM | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | FLAGS		=  -Wall -g $(OPT_FLAG) -std=c99\ | 
					
						
							|  |  |  |  -fmessage-length=0 -fsigned-char -ffreestanding -fno-move-loop-invariants\ | 
					
						
							|  |  |  |  $(addprefix -D, $(PRE_MARCO))\ | 
					
						
							|  |  |  |  $(addprefix -D, $(GLOBAL_MACRO))\ | 
					
						
							|  |  |  |  $(addprefix -I, $(ADD_INCLUDE)) | 
					
						
							|  |  |  | FLAGS_LINK	= $(FLAGS) $(LIBDIRS)\ | 
					
						
							|  |  |  |  $(addprefix -l, $(ADD_LIB))\ | 
					
						
							|  |  |  |   -Wl,--gc-sections -Wall -Wextra  -nostartfiles  -Wl,-Map,"$(OUTPUT_MAP)" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # if arm GCC | 
					
						
							|  |  |  | ifeq ($(CC), arm-none-eabi-gcc) | 
					
						
							|  |  |  | AR		= arm-none-eabi-ar | 
					
						
							|  |  |  | SIZE	= arm-none-eabi-size | 
					
						
							|  |  |  | OBJCOPY = arm-none-eabi-objcopy | 
					
						
							|  |  |  | STRIP   = arm-none-eabi-strip | 
					
						
							| 
									
										
										
										
											2025-03-31 14:33:42 +08:00
										 |  |  | OBJDUMP = arm-none-eabi-objdump | 
					
						
							| 
									
										
										
										
											2024-09-28 14:24:04 +08:00
										 |  |  | MAKEDEP = -MM | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | FLAGS		= -mcpu=cortex-m3 -mthumb -Wall -Werror -g $(OPT_FLAG) \ | 
					
						
							|  |  |  |  -fmessage-length=0 -fsigned-char -ffreestanding -fno-move-loop-invariants\ | 
					
						
							|  |  |  |  $(addprefix -D, $(PRE_MARCO))\ | 
					
						
							|  |  |  |  $(addprefix -D, $(GLOBAL_MACRO))\ | 
					
						
							|  |  |  |  $(addprefix -I, $(ADD_INCLUDE)) | 
					
						
							|  |  |  | FLAGS_LINK	= $(FLAGS) $(LIBDIRS)\ | 
					
						
							|  |  |  |  $(addprefix -l, $(ADD_LIB))\ | 
					
						
							|  |  |  |  -T$(LD_SCRIPT) -Wl,--gc-sections -Wall -Wextra  -nostartfiles -L"$(TOPDIR)/startup/ldscripts/cm3" -Wl,-Map,"$(OUTPUT_MAP)" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # if ARMCC | 
					
						
							|  |  |  | ifeq ($(CC), armcc) | 
					
						
							|  |  |  | AR		= arm-none-eabi-ar | 
					
						
							|  |  |  | SIZE	= arm-none-eabi-size | 
					
						
							|  |  |  | STRIP	= arm-none-eabi-strip | 
					
						
							|  |  |  | MAKEDEP = -M -c | 
					
						
							|  |  |  | OBJCOPY	= arm-none-eabi-objcopy | 
					
						
							| 
									
										
										
										
											2025-03-31 14:33:42 +08:00
										 |  |  | OBJDUMP = arm-none-eabi-objdump | 
					
						
							| 
									
										
										
										
											2024-09-28 14:24:04 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | FLAGS		= \ | 
					
						
							|  |  |  |  --cpu=Cortex-M3 --thumb --fpmode=std --fpu=vfpv4_d16 -g $(OPT_FLAG)\ | 
					
						
							|  |  |  |  $(addprefix -D, $(PRE_MARCO))\ | 
					
						
							|  |  |  |  $(addprefix -D, $(GLOBAL_MACRO))\ | 
					
						
							|  |  |  |  $(addprefix -I, $(ADD_INCLUDE)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | FLAGS_LINK	= $(FLAGS) $(LIBDIRS)\ | 
					
						
							|  |  |  |  $(addprefix -l, $(ADD_LIB)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # if MSC | 
					
						
							|  |  |  | ifeq ($(CC), cl) | 
					
						
							|  |  |  | AR      = | 
					
						
							|  |  |  | FLAGS   = | 
					
						
							|  |  |  | FLAGS_LINK = | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # if risc-v | 
					
						
							|  |  |  | ifeq ($(CC), riscv32-unknown-elf-gcc) | 
					
						
							|  |  |  | AR      = riscv32-unknown-elf-ar | 
					
						
							|  |  |  | SIZE	= riscv32-unknown-elf-size | 
					
						
							|  |  |  | OBJCOPY	= riscv32-unknown-elf-objcopy | 
					
						
							|  |  |  | STRIP   = riscv32-unknown-elf-strip | 
					
						
							| 
									
										
										
										
											2025-03-31 14:33:42 +08:00
										 |  |  | OBJDUMP = riscv32-unknown-elf-objdump | 
					
						
							| 
									
										
										
										
											2024-09-28 14:24:04 +08:00
										 |  |  | MAKEDEP = -MM | 
					
						
							|  |  |  | FLAGS   = -march=$(ISA) -mabi=ilp32 -ffunction-sections -fdata-sections -ffast-math -fno-common -fno-builtin-printf -Wall -Werror $(GDB_FLAG) $(OPT_FLAG)\ | 
					
						
							|  |  |  |  $(addprefix -D, $(PRE_MARCO))\ | 
					
						
							|  |  |  |  $(addprefix -D, $(GLOBAL_MACRO))\ | 
					
						
							|  |  |  |  $(addprefix -I, $(ADD_INCLUDE)) | 
					
						
							|  |  |  | FLAGS_LINK = $(FLAGS) $(LIBDIRS)\ | 
					
						
							|  |  |  |  $(ADD_OBJ) \ | 
					
						
							|  |  |  |  $(LD_SECTION_FLAG) \ | 
					
						
							|  |  |  |  $(addprefix -l, $(ADD_LIB))\ | 
					
						
							|  |  |  |  $(LD_SECTION_FLAG2) \ | 
					
						
							|  |  |  |  -T$(LD_SCRIPT) -Wall -Wextra -nostartfiles -L$(TOPDIR)/startup/ldscripts/$(RISCV_VER) -Wl,-Map,"$(OUTPUT_MAP)" | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ifeq ($(CC), riscv64-unknown-elf-gcc) | 
					
						
							|  |  |  | AR      = riscv64-unknown-elf-ar | 
					
						
							|  |  |  | SIZE    = riscv64-unknown-elf-size | 
					
						
							|  |  |  | OBJCOPY = riscv64-unknown-elf-objcopy | 
					
						
							|  |  |  | STRIP   = riscv64-unknown-elf-strip | 
					
						
							| 
									
										
										
										
											2025-03-31 14:33:42 +08:00
										 |  |  | OBJDUMP = riscv64-unknown-elf-objdump | 
					
						
							| 
									
										
										
										
											2024-09-28 14:24:04 +08:00
										 |  |  | MAKEDEP = -MM | 
					
						
							| 
									
										
										
										
											2024-09-28 19:35:52 +08:00
										 |  |  | FLAGS   = -march=$(ISA) -mabi=$(ABI) -ffunction-sections -fdata-sections -ffast-math -fno-common -Wno-array-bounds -fno-builtin-printf -Wall $(GDB_FLAG) $(OPT_FLAG)\ | 
					
						
							| 
									
										
										
										
											2024-09-28 14:24:04 +08:00
										 |  |  |  $(addprefix -D, $(PRE_MARCO))\ | 
					
						
							|  |  |  |  $(addprefix -D, $(GLOBAL_MACRO))\ | 
					
						
							|  |  |  |  $(addprefix -I, $(ADD_INCLUDE)) | 
					
						
							|  |  |  | FLAGS_LINK = $(FLAGS) $(LIBDIRS)\ | 
					
						
							|  |  |  |  $(ADD_OBJ) \ | 
					
						
							|  |  |  |  $(LD_SECTION_FLAG) \ | 
					
						
							|  |  |  |  -Wl,--start-group \ | 
					
						
							|  |  |  |  $(addprefix -l, $(ADD_LIB))\ | 
					
						
							|  |  |  |  -Wl,--end-group \ | 
					
						
							|  |  |  |  $(LD_SECTION_FLAG2) \ | 
					
						
							|  |  |  |  -T$(LD_SCRIPT) -Wall -Wextra -nostartfiles -L$(TOPDIR)/startup/ldscripts/$(RISCV_VER) -Wl,-Map,"$(OUTPUT_MAP)" \ | 
					
						
							|  |  |  |  -Wl,-print-memory-usage | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ########################### | 
					
						
							|  |  |  | $(OUTPUT_FULL_NAME): $(OUTPUT_DIR) $(BIN_DIR)/.sub_dirs $(BIN_DIR)/.ext_src $(OBJECTS) | 
					
						
							|  |  |  | 	@echo '$(FLAGS)' >> $(TOPDIR)/make_flags.txt | 
					
						
							|  |  |  | 	@echo 'build $@' | 
					
						
							|  |  |  | 	@python3 $(TOPDIR)/praper_vscode.py $(TOPDIR)/make_flags.txt $@ >> $(TOPDIR)/python_script_log.log | 
					
						
							|  |  |  | 	@for d in $(SUB_DIRS); do\ | 
					
						
							|  |  |  | 		if [ -e "$$d/Makefile" ]; then\ | 
					
						
							| 
									
										
										
										
											2025-01-13 11:19:08 +08:00
										 |  |  | 			echo "enter $$d";\ | 
					
						
							| 
									
										
										
										
											2024-09-28 19:35:52 +08:00
										 |  |  | 			$(MAKE) -C $$d || exit 1;\ | 
					
						
							| 
									
										
										
										
											2024-09-28 14:24:04 +08:00
										 |  |  |             if [ 2 -eq $(OUTPUT_TYPE) ];then\ | 
					
						
							|  |  |  |                 if [ -e $(OUTPUT_FULL_NAME) ]; then \ | 
					
						
							|  |  |  |                 echo "open $(OUTPUT_FULL_NAME)">tmp.mri;\ | 
					
						
							|  |  |  |                 else echo "create $(OUTPUT_FULL_NAME)">tmp.mri;fi;\ | 
					
						
							|  |  |  |                 for a in `ls $$d/$(OUTPUT_DIR)/*.a 2>/dev/null`; do \ | 
					
						
							|  |  |  |                     $(AR) -t $$a | xargs $(AR) -d $(OUTPUT_FULL_NAME);\ | 
					
						
							|  |  |  |                     echo "addlib $$a" >> tmp.mri;\ | 
					
						
							|  |  |  |                 done;\ | 
					
						
							|  |  |  |                 echo "save" >> tmp.mri;\ | 
					
						
							|  |  |  |                 echo "end" >> tmp.mri;\ | 
					
						
							|  |  |  |                 $(AR) -M < tmp.mri;\ | 
					
						
							|  |  |  |                 $(RM) tmp.mri;\ | 
					
						
							|  |  |  |             fi;\ | 
					
						
							|  |  |  |         fi; \ | 
					
						
							|  |  |  |     done;\ | 
					
						
							|  |  |  |     if [ -n "$(OBJECTS)" -o -n "$(ADD_LIB)" ]; then \ | 
					
						
							|  |  |  |         if [ 0 -eq $(OUTPUT_TYPE) ]; then \ | 
					
						
							|  |  |  |             echo "";\ | 
					
						
							|  |  |  |         elif [ 1 -eq $(OUTPUT_TYPE) ]; then\ | 
					
						
							|  |  |  |             $(CC) -o $(OUTPUT_FULL_NAME) $(OBJECTS) $(FLAGS_LINK) || exit 1;\ | 
					
						
							|  |  |  |             $(SIZE) $(OUTPUT_FULL_NAME) ;\ | 
					
						
							|  |  |  |             $(OBJCOPY) -O binary  $(OUTPUT_FULL_NAME) $(OUTPUT_DIR)/$(OUTPUT_NAME).bin ;\ | 
					
						
							|  |  |  |             $(BIN2HEX) $(OUTPUT_DIR)/$(OUTPUT_NAME).bin $(OUTPUT_DIR)/$(OUTPUT_NAME).hex;\ | 
					
						
							| 
									
										
										
										
											2025-03-31 14:33:42 +08:00
										 |  |  |             $(OBJDUMP) -d $(OUTPUT_FULL_NAME) > $(OUTPUT_DIR)/$(OUTPUT_NAME).asm;\ | 
					
						
							| 
									
										
										
										
											2024-09-28 14:24:04 +08:00
										 |  |  |         elif [ 2 -eq $(OUTPUT_TYPE) ];then\ | 
					
						
							|  |  |  |             $(AR) -rc $(OUTPUT_FULL_NAME) $(OBJECTS) || exit 1;\ | 
					
						
							|  |  |  |         elif [ 3 -eq $(OUTPUT_TYPE) ];then\ | 
					
						
							|  |  |  |             $(CC) -fPIC -shared -o $(OUTPUT_FULL_NAME) $(OBJECTS) || exit 1;\ | 
					
						
							|  |  |  |         else\ | 
					
						
							|  |  |  |             echo "please input the correct OUTPUT_TYPE";\ | 
					
						
							|  |  |  |             exit 1;\ | 
					
						
							|  |  |  |         fi;\ | 
					
						
							|  |  |  |         `echo ${extra_work}`;\ | 
					
						
							|  |  |  |     fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # create the output folder | 
					
						
							|  |  |  | $(BIN_DIR)/.sub_dirs: $(BIN_DIR) | 
					
						
							|  |  |  | 	$(shell if [ -n "$(SUB_DIRS)" ];then \ | 
					
						
							|  |  |  | 		echo $(foreach dirname, $(SUB_DIRS), \ | 
					
						
							|  |  |  | 			$(shell if [ ! -e "$(addprefix $(BIN_DIR)/, $(dirname))" ];then \ | 
					
						
							|  |  |  | 			mkdir -p $(addprefix $(BIN_DIR)/, $(dirname)); fi )); \ | 
					
						
							|  |  |  | 	fi; touch $@) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $(BIN_DIR)/.ext_src: $(BIN_DIR) | 
					
						
							|  |  |  | 	$(shell if [ -n "$(EXT_SRC)" ];then \ | 
					
						
							|  |  |  | 		echo $(foreach dirname, $(EXT_SRC), \ | 
					
						
							|  |  |  | 			$(shell if [ ! -e "$(addprefix $(BIN_DIR)/, $(shell dirname $(dirname)))" ];then \ | 
					
						
							|  |  |  | 			mkdir -p $(addprefix $(BIN_DIR)/, $(shell dirname $(dirname))); fi )); \ | 
					
						
							|  |  |  | 	fi; touch $@) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $(OUTPUT_DIR): $(BIN_DIR) | 
					
						
							|  |  |  | 	$(shell if [ -n "$(OUTPUT_DIR)" -a ! -e "$(OUTPUT_DIR)" ];then mkdir -p $(OUTPUT_DIR); fi ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $(BIN_DIR): | 
					
						
							|  |  |  | 	$(shell if [ -n "$(BIN_DIR)" -a ! -e "$(BIN_DIR)" ];then mkdir -p $(BIN_DIR); fi) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # .d files handler | 
					
						
							|  |  |  | DEPS	= $(addprefix $(BIN_DIR)/, $(patsubst %.S, %.d, $(patsubst %.c, %.d, $(patsubst %.cpp, %.d, $(SRCS))))) | 
					
						
							|  |  |  | sinclude $(DEPS) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $(BIN_DIR)/%.d: %.c | 
					
						
							|  |  |  | 	$(shell if [ -n "$(BIN_DIR)" -a ! -e "$(BIN_DIR)" ];then mkdir -p $(BIN_DIR); fi) | 
					
						
							|  |  |  | 	$(shell if [ -n "$(SUB_DIRS)" ];then echo $(foreach dirname, $(SUB_DIRS), $(shell if [ ! -e "$(addprefix $(BIN_DIR)/, $(dirname))" ];then mkdir -p $(addprefix $(BIN_DIR)/, $(dirname)); fi )); fi ) | 
					
						
							|  |  |  | 	$(shell if [ -n "$(EXT_SRC)" ];then echo $(foreach dirname, $(EXT_SRC), $(shell if [ ! -e "$(addprefix $(BIN_DIR)/, $(shell dirname $(dirname)))" ];then mkdir -p $(addprefix $(BIN_DIR)/, $(shell dirname $(dirname))); fi )); fi ) | 
					
						
							|  |  |  | 	@set -e; rm -f $@; \ | 
					
						
							|  |  |  | 	$(CC) $(FLAGS) $(MAKEDEP)  $< > $@.$$$$; \ | 
					
						
							|  |  |  | 	sed 's,\($(notdir $*)\.o\)[: ]*,$(BIN_DIR)\/$*\.o : ,' < $@.$$$$ > $@; \ | 
					
						
							| 
									
										
										
										
											2024-09-28 19:35:52 +08:00
										 |  |  | 	echo -e -n "\t@echo 'build \x24<'\x0a" >> $@; \ | 
					
						
							| 
									
										
										
										
											2024-09-28 14:24:04 +08:00
										 |  |  | 	echo -e -n "\t@\x24(CC) \x24(FLAGS) -c \x24< -o \x24@" >> $@; \ | 
					
						
							|  |  |  | 	$(RM) $@.$$$$ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $(BIN_DIR)/%.d: %.S | 
					
						
							|  |  |  | 	$(shell if [ -n "$(BIN_DIR)" -a ! -e "$(BIN_DIR)" ];then mkdir -p $(BIN_DIR); fi) | 
					
						
							|  |  |  | 	$(shell if [ -n "$(SUB_DIRS)" ];then echo $(foreach dirname, $(SUB_DIRS), $(shell if [ ! -e "$(addprefix $(BIN_DIR)/, $(dirname))" ];then mkdir -p $(addprefix $(BIN_DIR)/, $(dirname)); fi )); fi ) | 
					
						
							|  |  |  | 	@set -e; rm -f $@; \ | 
					
						
							|  |  |  | 	$(CC) $(MAKEDEP) $(FLAGS) $< > $@.$$$$; \ | 
					
						
							|  |  |  | 	sed 's,\($(notdir $*)\.o\)[ : ]*,$(BIN_DIR)\/$*\.o : ,' < $@.$$$$ > $@; \ | 
					
						
							| 
									
										
										
										
											2024-09-28 19:35:52 +08:00
										 |  |  | 	echo -e -n "\t@echo 'build \x24<'\x0a" >> $@; \ | 
					
						
							| 
									
										
										
										
											2024-09-28 14:24:04 +08:00
										 |  |  | 	echo -e -n "\t@\x24(CC) \x24(FLAGS) -c \x24< -o \x24@" >> $@; \ | 
					
						
							|  |  |  |     $(RM) $@.$$$$ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # dummy object | 
					
						
							|  |  |  | .PHONY: clean clean_objs clobber $(OUTPUT_FULL_NAME) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # clean all | 
					
						
							|  |  |  | clean: | 
					
						
							|  |  |  | 	-$(RM) $(OUTPUT_FULL_NAME) $(OBJECTS) $(DEPS) $(BIN_DIR)/.sub_dirs $(BIN_DIR)/.ext_src | 
					
						
							|  |  |  | 	@for d in $(SUB_DIRS) ; do\ | 
					
						
							|  |  |  | 		if [ -e "$$d/Makefile" ]; then\ | 
					
						
							| 
									
										
										
										
											2025-01-13 11:19:08 +08:00
										 |  |  | 			echo "clean $$d";\ | 
					
						
							| 
									
										
										
										
											2024-09-28 19:35:52 +08:00
										 |  |  | 			$(MAKE) -C $$d $@ ;\ | 
					
						
							| 
									
										
										
										
											2024-09-28 14:24:04 +08:00
										 |  |  | 		fi;\ | 
					
						
							|  |  |  | 	done | 
					
						
							|  |  |  | 	-$(RM) $(OUTDIR) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | clobber: | 
					
						
							| 
									
										
										
										
											2025-01-13 11:19:08 +08:00
										 |  |  | 	@echo clobber | 
					
						
							| 
									
										
										
										
											2024-09-28 14:24:04 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-17 19:55:18 +08:00
										 |  |  | creat_src_file:src_files.txt | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | src_files.txt: | 
					
						
							|  |  |  | 	@echo $(SRCS) > "src_files.txt" | 
					
						
							|  |  |  | 	@echo $(ADD_INCLUDE) >> "src_files.txt" | 
					
						
							|  |  |  | 	@for d in $(SUB_DIRS) ; do\ | 
					
						
							|  |  |  | 		if [ -e "$$d/Makefile" ]; then\ | 
					
						
							|  |  |  | 			$(MAKE) -C $$d $@ ;\ | 
					
						
							|  |  |  | 		fi;\ | 
					
						
							|  |  |  | 	done | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-28 14:24:04 +08:00
										 |  |  | # clean obj files only | 
					
						
							|  |  |  | clean_objs: | 
					
						
							|  |  |  | 	-$(RM) $(OBJECTS) | 
					
						
							|  |  |  | 	@for d in $(SUB_DIRS); do\ | 
					
						
							|  |  |  | 		if [ -e "$$d/Makefile" ]; then\ | 
					
						
							| 
									
										
										
										
											2025-01-13 11:19:08 +08:00
										 |  |  | 			echo "clean_objs $$d";\ | 
					
						
							| 
									
										
										
										
											2024-09-28 19:35:52 +08:00
										 |  |  | 			$(MAKE) -C $$d $@ ;\ | 
					
						
							| 
									
										
										
										
											2024-09-28 14:24:04 +08:00
										 |  |  | 		fi;\ | 
					
						
							|  |  |  | 	done | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | install: | 
					
						
							|  |  |  | 	mkdir ./bin && \ | 
					
						
							|  |  |  |     cp $(OUTPUT_FULL_NAME) ./bin | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 |