BUILD_DIR = output
CC = wcc
ASM = nasm
LNK = wlink
LIB = wlib

ASM_FLAGS = -f obj
LNK_FLAGS = option quiet
LIB_FLAGS = -q
CFLAGS = -0 -zl -s -zu -zdf -za99 -zq \
			-Ikernel/stdlib \
			-Ikernel/drivers

export WATCOM := $(BUILD_DIR)

include kernel/Makefile

ArtichOS.img: system.sys boot.bin
	@echo MKDIR $(BUILD_DIR)/root
	@mkdir -p $(BUILD_DIR)/root
	@echo CP $(BUILD_DIR)/root/$<
	@cp $(BUILD_DIR)/$< $(BUILD_DIR)/root/$<
	@echo CP $(BUILD_DIR)/root
	@cp -Ra root/. $(BUILD_DIR)/root/
	
	@echo MFORMAT $@
	@mformat -s 8 -t 5 -h 1 -1 -r 1 -B $(BUILD_DIR)/boot.bin -v ArtichOS -C i:
	@#mformat -f 1440 -B $(BUILD_DIR)/boot.bin -v ArtichOS -C i:
	@echo MCOPY root
	@mcopy -snv $(BUILD_DIR)/root/* i:

space :=
space +=
comma := ,

system.sys: std.lib drv.lib $(system_obj)
	@echo LNK $@
	@$(LNK) $(LNK_FLAGS) \
		option START=kmain_ \
		name $(BUILD_DIR)/$@ \
		output raw offset=0x0500 \
		$(addprefix library $(BUILD_DIR)/, $(filter %.lib, $^)) \
		file $(subst $(space),$(comma),$(filter %.o, $^)) \
		order \
		    clname CODE offset=0x0500 \
		    clname DATA

boot.bin: $(boot_obj)
	@echo LNK $@
	@$(LNK) $(LNK_FLAGS) \
		name $(BUILD_DIR)/$@ \
		output raw offset=0x7C00 \
		file $(subst $(space),$(comma),$^) \
		order \
			clname CODE offset=0x7C00 \
			clname MAGIC offset=0x7DFE

std.lib: $(stdlib_obj)
	@echo LIB $@
	@$(LIB) $(LIB_FLAGS) $(BUILD_DIR)/$@ $^

drv.lib: $(drivers_obj)
	@echo LIB $@
	@$(LIB) $(LIB_FLAGS) $(BUILD_DIR)/$@ $^

.PHONY: clean run all

clean:
	@rm -Rf $(BUILD_DIR)
	@echo CLEAN

run: ArtichOS.img
	qemu-system-i386 -drive format=raw,file=$(BUILD_DIR)/$<,index=0,if=floppy -monitor stdio

all: clean run

$(BUILD_DIR)/%.o: %.asm
	@mkdir -p $(dir $@)
	@echo ASM $@
	@$(ASM) $(ASM_FLAGS) $^ -o $@

$(BUILD_DIR)/%.o: %.c
	@mkdir -p $(dir $@)
	@echo CC $@
	@$(CC) $(CFLAGS) $^ -fo=$@
