OUT = ..\..\out\Release
OBJ = ..\..\obj\Release\vbasic
SRC = source

SRCFILES_RUNTIME = \
	source\atbasic.s \
	source\comm.s \
	source\data.s \
	source\error.s \
	source\evaluator.s \
	source\exec.s \
	source\functions.s \
	source\io.s \
	source\list.s \
	makefile \
	source\math.s \
	source\memory.s \
	source\parser.s \
	source\parserbytecode.s \
	source\statements.s \
	source\vsystem.inc \
	source\tokens.inc \
	source\util.s \
	source\variables.s

SRCFILES_HOST = \
	source\vhost.s \
	source\system.inc \
	makefile

SRCFILES_LOADER = \
	source\vloader.s \
	source\system.inc \
	makefile

.SUFFIXES: .s .xex .bin .inc

all: $(OUT)\vbasic.xex

clean:
	del "$(OUT)\vbasic.xex"

$(OBJ)\vhost.bin: $(SRCFILES_HOST)
	@if not exist $(OUT) md $(OUT)
	@for %x in (source\vhost.s) do mads -c -s -o:$@ -l:$(@R).lst -t:$(@R).lab -hm:$(@R).hea "%~fx"

$(OBJ)\vhost.inc: $(OBJ)\vhost.bin
	-@findstr comm_ $(OBJ)\vhost.hea >$(OBJ)\vhost.inc

$(OBJ)\vruntime.bin: $(SRCFILES_RUNTIME) $(OBJ)\vhost.inc
	@if not exist $(OUT) md $(OUT)
	@for %x in (source\atbasic.s) do mads -c -s -o:$@ -i:$(OBJ) -l:$(@R).lst -t:$(@R).lab "%~fx"

$(OUT)\vbasic.xex: $(SRCFILES_LOADER) $(OBJ)\vruntime.bin $(OBJ)\vhost.inc
	@if not exist $(OUT) md $(OUT)
	@for %x in (source\vloader.s) do mads -c -s -o:$@ -i:$(OBJ) -l:$(@R).lst -t:$(@R).lab "%~fx"
