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: