183 lines
4.6 KiB
Makefile
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:
|
|
|
|
|
|
|