# Copyright (c) 1997-2019 Alexei G. Malinin <Alexei.Malinin@mail.ru>
#
# Permission to use, copy, modify, and distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.


MK_DISK_APP:=	make_test_disk
MK_DISK_SRC:=	${MK_DISK_APP}.c
MK_DISK_OBJ:=	${MK_DISK_APP}.o

PTE_APP:=	PTe
PTE_TEMPLATE:=	${PTE_APP}.S.template
PTE_SRC:=	${PTE_APP}.S
PTE_OBJ:=	${PTE_APP}.o

PBR:=		pbr

RM:=		rm -rf
CAT:=		cat

NDISASM!=	ndisasm -r >/dev/null 2>&1 && echo ndisasm || echo true

TMP_DIR:=	./tmp


.SUFFIXES:	.S .d .c .o

.PHONY: all clean pdf


all: ${MK_DISK_APP}
	@echo "--> $@:"
	@echo && echo


clean:
	@echo "--> $@:"
	${RM} ${PTE_SRC} ${PTE_OBJ} ${PTE_APP} \
		${PBR} ${PBR}.objdump ${PBR}.${NDISASM} \
		${TMP_DIR}
	${RM} ${MK_DISK_OBJ} ${MK_DISK_APP} *.d
	@echo && echo


AS:=		gcc -pipe
AFLAGS:=	-m32 -fno-pie
LD:=		ld
ALDFLAGS:=	-nostdlib -Ttext 0 -x -N -s -Bstatic -e START -nopie -znorelro \
		-melf_i386 -L/usr/libdata

${PBR}: ${PTE_APP}
	@echo "--> $@:"
	dd if=${PTE_APP} of=${PBR} bs=1 skip=31744 >/dev/null 2>&1
	@echo
	@ls -l ${PBR}
	@echo
	objdump -b binary -m i8086 -D ${PTE_APP} >${PBR}.objdump
	${NDISASM} -k0,31744 ${PTE_APP} >${PBR}.${NDISASM}
	@echo

${PTE_APP}: ${PTE_OBJ}
	@echo "--> $@:"
	${LD} ${ALDFLAGS} -o $@ ${PTE_OBJ}
	objcopy -O binary ${PTE_APP}
	@echo

.S.o: ${PTE_SRC}
	@echo "--> $@:"
	${AS} ${AFLAGS} -c $<
	@echo

${PTE_SRC}: makefile ${PTE_TEMPLATE}
	@echo "--> $@:"
	${CAT} ${PTE_TEMPLATE} >$@
	@echo


CC:=		gcc -pipe -std=c99
CPPFLAGS:=	
CFLAGS:=	-W -Wextra -Wbad-function-cast -Wold-style-definition \
		-Wstrict-prototypes -Wpointer-arith \
		-Wall -pedantic \
		-O0 -g \
		-g3 -ggdb
LDFLAGS:=	-static -lm

MKDEP:=		${CC} ${CPPFLAGS} -M -MP -MF

${MK_DISK_APP}: ${MK_DISK_OBJ}
	@echo "--> $@:"
	${CC} ${CPPFLAGS} -o $@ ${CFLAGS} ${MK_DISK_OBJ} ${LDFLAGS}
	@echo

.c.o: $*.d
	@echo "--> $@:"
	${CC} ${CPPFLAGS} ${CFLAGS} -c $*.c
	@echo

.c.d: makefile ${MK_DISK_SRC}
	@echo "--> $@:"
	${MKDEP} $*.d $*.c
	@echo


PDF:=		tests.pdf
2PDF:=		echo ${PDF} ; ( cat makefile; echo "\f"; \
				cat ${PTE_TEMPLATE}; echo "\f"; \
				cat ${MK_DISK_SRC}; echo "\f"; \
				cat _DISK.MAKE.sh; echo "\f"; \
				cat _PBRs.MAKE.sh \
				) | \
				a2ps.sh 111 1 | fixps.sh | ps2pdf13 - ${PDF}

pdf: makefile
	@echo "--> $@:"
	${RM} ${PDF}
	@${2PDF}
	@echo && echo


