gigatron/rom/Compilers/glcc/Makefile
2025-01-28 19:17:01 +03:00

183 lines
4.6 KiB
Makefile

SHELL=/bin/sh
TOP=
PREFIX=/usr/local
DESTDIR=
BUILDDIR=build
bindir=${DESTDIR}${PREFIX}/bin
libdir=${DESTDIR}${PREFIX}/lib/gigatron-lcc
INSTALL=${TOP}gigatron/install-sh
LN_S=ln -sf
B=${TOP}${BUILDDIR}/
G=${TOP}gigatron/
TARGET=gigatron
CFLAGS=-g -Wno-abi
LDFLAGS=-g
PYTHON=python3
HOSTFILE=${TOP}etc/gigatron-lcc.c
GLCC=${B}glcc
GTSIM=${B}gtsim
SUBDIRS=${G}runtime ${G}libc \
${G}map32k ${G}map64k ${G}mapsim ${G}mapconx \
${G}map128k ${G}map512k
GFILES=${B}glcc ${B}glink ${B}glink.py ${B}glccver.py ${B}interface.json \
${B}interface-dev.json ${B}roms.json ${GFILES_W}
ROMFILES=${wildcard ${G}roms/*.rom}
ROMS=${patsubst ${G}roms/%.rom,%,${ROMFILES}}
ifdef COMSPEC
E=.exe
GFILES_W=${B}glink.cmd ${B}glcc.cmd
else
E=
GFILES_W=
endif
default: all
all: build-dir lcc-all gigatron-all
${MAKE} subdirs-all
clean: lcc-clean gigatron-clean subdirs-clean build-dir-clean
install: all gigatron-install subdirs-install
ifdef MSYSTEM
echo "Calling Mingw post-installation script"
PREFIX="${PREFIX}" INSTALL="${INSTALL}" \
bindir="${bindir}" libdir="${libdir}" "${G}mingw-install-sh"
endif
test: all
@test -d ${B}tst || mkdir ${B}tst
@for rom in ${ROMS}; do \
printf "+----------------------------------+\n"; \
printf "| Compiling for rom: %-8s |\n" $$rom; \
printf "+----------------------------------+\n"; \
${MAKE} ROM=$$rom glcc-test subdirs-test || exit; \
wc -c ${B}tst/*.gt1 > ${B}tst/sizes-$$rom.txt; \
done
@echo "+----------------------------------+"
@echo "| Test sequence ran successfully! |"
@echo "+----------------------------------+"
build-dir: FORCE
-mkdir -p ${BUILDDIR}
build-dir-clean: FORCE
-rm -rf ${B}
lcc-%: FORCE
@${MAKE} -f makefile.lcc \
"PREFIX=${PREFIX}" \
"BUILDDIR=${BUILDDIR}" \
"HOSTFILE=${HOSTFILE}" \
"TARGET=${TARGET}" \
"CFLAGS=${CFLAGS}" \
"LDFLAGS=${LDFLAGS}" \
"E=${E}" \
`echo $@ | sed -e 's/^lcc-//'`
subdirs-%: FORCE
@for n in ${SUBDIRS} ; do \
${MAKE} -C $$n \
"PREFIX=${PREFIX}" \
"BUILDDIR=${BUILDDIR}" \
"DESTDIR=${DESTDIR}" \
"CFLAGS=${CFLAGS}" \
"LDFLAGS=${LDFLAGS}" \
"E=${E}" \
"ROM=${ROM}" \
`echo $@ | sed -e 's/^subdirs-//'` || exit; \
done
gigatron-all: gigatron-include ${GFILES}
gigatron-clean: FORCE
-rm -rf ${GFILES} ${B}include
-rm -rf ${B}tst[0-9]
gigatron-install: FORCE
${INSTALL} -d "${libdir}"
${INSTALL} -m 755 "${B}cpp${E}" "${libdir}/cpp${E}"
${INSTALL} -m 755 "${B}rcc${E}" "${libdir}/rcc${E}"
${INSTALL} -m 755 "${B}lcc${E}" "${libdir}/lcc${E}"
for n in ${GFILES}; do \
mode=644; test -x "$$n" && mode=755 ; \
${INSTALL} -m $$mode "$$n" "${libdir}/" ; done
test -r ${B}glink.pyc && \
${INSTALL} -m 644 ${B}glink.pyc "${libdir}/"
-${INSTALL} -d "${libdir}/include"
for n in "${B}include/"*.h ; do \
${INSTALL} -m 0644 "$$n" "${libdir}/include/" ; done
-${INSTALL} -d "${libdir}/include/gigatron"
for n in "${B}include/gigatron/"*.h ; do \
${INSTALL} -m 0644 "$$n" "${libdir}/include/gigatron/" ; done
ifndef MSYSTEM
-${INSTALL} -d "${bindir}"
${LN_S} "${libdir}/glcc" "${bindir}/glcc"
${LN_S} "${libdir}/glink" "${bindir}/glink"
endif
gigatron-include: FORCE
-mkdir -p ${B}include
cp -r ${TOP}include/gigatron/* ${B}/include/
${B}glink: ${G}glink
cp ${G}glink ${B}glink
chmod a+x ${B}glink
${B}glink.py: ${G}glink.py
cp ${G}glink.py ${B}glink.py
${PYTHON} -m compileall -b ${B}glink.py
${B}glcc: ${G}glcc
cp ${G}glcc ${B}glcc
chmod a+x ${B}glcc
${B}glcc.cmd ${B}glink.cmd: FORCE
echo '@py -3 "%~dp0\%~n0" %*' > $@
${B}glccver.py: FORCE
if [ -r "${G}glccver.py" ] ; then cp "${G}glccver.py" "$@" ; else\
id=`( test -d .git && which git > /dev/null && git describe --tags )\
|| echo 'GLCC-unknown-version'`; echo 'ver="'"$${id}"'"' > "$@" ; fi
${B}%: ${G}%
cp $< $@
GTSIMR=${GTSIM} -rom ${G}roms/${ROM}.rom
TSTBK1FILES=$(wildcard ${G}tst/*.1bk)
TSTBK2FILES=$(wildcard ${G}tst/*.2bk)
TSTX=${patsubst ${G}tst/%.1bk,${B}tst/%.gt1, ${TSTBK1FILES}}
TSTO=${patsubst ${G}tst/%.1bk,${B}tst/%.xx1, ${TSTBK1FILES}}
ifeq (${ROM},dev7)
TSTS=${patsubst ${G}tst/%.2bk,${B}tst/%.s, ${TSTBK2FILES}}
endif
glcc-test: ${TSTS} ${TSTO}
${B}tst/%.s: tst/%.c FORCE
@test -d ${B}tst || mkdir ${B}tst
-${GLCC} -S -rom=${ROM} -o $@ $< 2>"${B}tst/$(*F).xx2"
cmp "${B}tst/$(*F).xx2" "${G}tst/$(*F).2bk"
[ ! -r "${G}tst/$(*F).sbk" ] || cmp $@ "${G}tst/$(*F).sbk"
${B}tst/%.gt1: tst/%.c FORCE
@test -d ${B}tst || mkdir ${B}tst
${GLCC} -map=sim,allout -rom=${ROM} -o $@ $< 2>"${B}tst/$(*F).xx2"
${B}tst/%.xx1: ${B}tst/%.gt1 FORCE
${GTSIMR} $< > "$@" < "tst/$(*F).0"
cmp $@ ${G}tst/$(*F).1bk
.PRECIOUS: ${B}tst/%.gt1
FORCE: .PHONY
.PHONY: