Makefile 在实际项目中(chiplevel CPM)的应用- build-test

本文介绍了一个用于8051微控制器的系统运行时支持库的Makefile脚本。该脚本由Michael Kang发布,主要用于管理8051 MCU项目的源文件编译、链接及资源组织工作流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

# 
# 8051 Example System run-time support library make script
# Issued by Michael Kang
#
INFO = \#\#\#(info) make lib.mk 
ERROR = \#\#\#(error) make lib.mk

## directories
TEST_DIR  = ../tests/${testcase}/mcu
RTE_DIR = ../rte/mcu
LIB_DIR = ${RTE_DIR}/lib
INC_DIR = ${RTE_DIR}/inc

SRC_DIR = ${TEST_DIR}/src
WRK_DIR = ${TEST_DIR}/work
OBJ_DIR = ${WRK_DIR}/obj

PROG_MEM_DIR = ./log/memory/mcu
PROG_MEM = ${PROG_MEM_DIR}/intram.dat


## Compilor Global Variable 
CC = sdcc
AS = asx8051 
AR = sdcclib

CCFLAGS = --opt-code-size --model-small -c -I ${INC_DIR}
ASFLAGS = -losg 
LKFLAGS = --xram-loc 0x4000 --code-loc 0xC000 --stack-loc 0x20  --idata-loc 0x80
# whether the file exists
ifeq ($(wildcard ${SRC_DIR}/testshell.asmc),)
    TESTSHELL:= ${RTE_DIR}/src/testshell.asmc 
else
    TESTSHELL:= ${SRC_DIR}/testshell.asmc 
endif

vpath %.c ${SRC_DIR}
vpath %.asm ${SRC_DIR}

CSRC := $(wildcard ${SRC_DIR}/*.c)
COBJ := $(notdir $(patsubst %.c, %.rel, ${CSRC}))
COBJ := $(addprefix ${OBJ_DIR}/, ${COBJ})

ASRC := $(wildcard ${SRC_DIR}/*.asm)
AOBJ := $(notdir $(patsubst %.asm, %.rel, ${ASRC}))
AOBJ := $(addprefix ${OBJ_DIR}/, ${AOBJ})

HEADERS := $(wildcard ${INC_DIR}/*.h)

.PHONY: all checkdir hex clean
all: checkdir ${OBJ_DIR}/main.hex 

checkdir:
	@if [ ! -d $(SRC_DIR) ]; then \
	   echo "${ERROR}: No test source directory $(SRC_DIR) found - exiting" ; \
	   exit 1; \
	fi;
	@if [ ! -d $(OBJ_DIR) ]; then \
		echo "${INFO}: Creating $(OBJ_DIR)"; \
	    mkdir -p $(OBJ_DIR);\
	fi;
	@if [ ! -d $(PROG_MEM_DIR) ]; then \
		echo "${INFO}: Creating $(PROG_MEM_DIR)"; \
	    mkdir -p $(PROG_MEM_DIR);\
	fi;

${OBJ_DIR}/testshell.rel: ${TESTSHELL}
	$(AS) $(ASFLAGS) {1}lt;
	mv $(patsubst %.asmc, %.rel, {1}lt;) ${OBJ_DIR}/
	mv $(patsubst %.asmc, %.lst, {1}lt;) ${OBJ_DIR}/
	mv $(patsubst %.asmc, %.sym, {1}lt;) ${OBJ_DIR}/

${OBJ_DIR}/%.rel: ${SRC_DIR}/%.c ${HEADERS} 
	$(CC) $(CCFLAGS) -o $@ {1}lt;

${OBJ_DIR}/%.rel: ${SRC_DIR}/%.asm
	$(AS) $(ASFLAGS) {1}lt;
	mv $(patsubst %.asm, %.rel, {1}lt;) ${OBJ_DIR}/
	mv $(patsubst %.asm, %.lst, {1}lt;) ${OBJ_DIR}/
	mv $(patsubst %.asm, %.sym, {1}lt;) ${OBJ_DIR}/


${OBJ_DIR}/main.hex: $(COBJ) $(AOBJ) ${OBJ_DIR}/testshell.rel ${LIB_DIR}/bell.lib
	$(CC) -l ${LIB_DIR}/bell.lib ${LKFLAGS} -o ${OBJ_DIR}/main.ihx $(filter %.rel,$^)
	packihx ${OBJ_DIR}/main.ihx > ${OBJ_DIR}/main.hex 
	perl ../scr/ihex2mem.pl ${OBJ_DIR}/main.hex
	cp ${OBJ_DIR}/main.mem ${PROG_MEM}
	perl ../scr/splitmem.pl

clean:
	-rm -rf ${OBJ_DIR}
	-rm -rf ${PROG_MEM_DIR}

debug:
	echo "COBJ is ${COBJ}"
	echo "AOBJ is ${AOBJ}"
	echo "HEADERS is ${HEADERS}"
	echo "TESTSHELL is ${TESTSHELL}"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值