#
# 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}"