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
|
|
|
|
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
|
|
|
|
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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;\
|
|
|
|
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
|
|
|
|
|
|
|
|
|