TOPDIR	= ..
include $(TOPDIR)/Makefile.master

# config macros
CONSTANTS-$(CONFIG_64) +=
CONSTANTS-$(CONFIG_SPINLOCK_DEBUG) += -DSPINLOCK_DEBUG
CONSTANTS-$(CONFIG_TTY_SERIAL) += -DTTY_SERIAL
CONSTANTS-$(CONFIG_PS2KBD_F11PANIC) += -DF11PANIC
CONSTANTS-$(CONFIG_PS2KBD_F12MSG) += -DF12MSG
CONSTANTS-$(CONFIG_ACPI_DSDT) += -DACPI_DSDT
CONSTANTS-$(CONFIG_DISABLE_SLEEP) += -DDISABLE_SLEEP
CONSTANTS-$(CONFIG_ENABLE_ASSERT) += -DENABLE_ASSERT
CONSTANTS-$(CONFIG_VT_EPT) += -DCONFIG_VT_EPT

BITS-0        = 32
BITS-1        = 64
OBJS-1        = \
	acpi.o \
	apic.o \
	apic_pass.o \
	arith.o \
	asm.o \
	assert.o \
	beep.o \
	callrealmode.o \
	callrealmode_asm.o \
	cpu.o \
	cpu_emul.o \
	cpu_interpreter.o \
	cpu_mmu.o \
	cpu_mmu_spt.o \
	cpu_seg.o \
	cpu_stack.o \
	cpuid.o \
	current.o \
	debug.o \
	entry.o \
	extint.o \
	gbiosloader.o \
	gmm.o \
	gmm_access.o \
	gmm_ident.o \
	gmm_trans.o \
	guest_boot.o \
	initfunc.o \
	int.o \
	int_handler.o \
	io_io.o \
	io_iohook.o \
	io_iopass.o \
	keyboard.o \
	main.o \
	mm.o \
	mm_access.o \
	mm_alloc.o \
	mm_process.o \
	mmio.o \
	msg.o \
	msr_pass.o \
	mtrr.o \
	panic.o \
	param.o \
	pcpu.o \
	printf.o \
	process.o \
	process_sysenter.o \
	putchar.o \
	reboot.o \
	rm.o \
	seg.o \
	serial.o \
	sleep.o \
	smp.o \
	string.o \
	svm.o \
	svm_exitcode.o \
	svm_init.o \
	svm_io.o \
	svm_main.o \
	svm_msr.o \
	svm_np.o \
	svm_panic.o \
	svm_regs.o \
	thread.o \
	thread_switch.o \
	time.o \
	timer.o \
	tty.o \
	vcpu.o \
	vm.o \
	vmmcall.o \
	vmmcall_status.o \
	vramwrite.o \
	vt.o \
	vt_exitreason.o \
	vt_init.o \
	vt_io.o \
	vt_main.o \
	vt_msr.o \
	vt_panic.o \
	vt_regs.o

OBJS-$(CONFIG_DBGSH) += vmmcall_dbgsh.o
OBJS-$(CONFIG_LOG_TO_GUEST) += vmmcall_log.o
OBJS-$(CONFIG_ACPI_DSDT) += acpi_dsdt.o
OBJS-$(CONFIG_VT_EPT) += vt_ept.o

HEADERS       += $(wildcard *.h)
OBJ_BUILTIN   = ./builtin/process_builtin.o
CFLAGS	      += $(CONSTANTS-1)
#CFLAGS	      += -O
LINTFLAGS     += $(CONSTANTS-1)
ASFLAGS       = --$(BITS-$(CONFIG_64))
LDFLAGS       += -r
OUT_OBJ       = core.o

.PHONY : all clean $(OBJ_BUILTIN) lint

all : $(OUT_OBJ)

clean : 
	$(MAKE) -C ./builtin clean
	rm -f $(OUT_OBJ) *.o *~

lint:
	splint $(LINTFLAGS) *.c

$(OBJ_BUILTIN) :
	$(MAKE) -C ./builtin

$(OUT_OBJ) : $(OBJS-1) $(OBJ_BUILTIN) $(CONFIG)
	$(LD) $(LDFLAGS) -o $(OUT_OBJ) $(OBJS-1) $(OBJ_BUILTIN)

$(OBJS-1) : $(HEADERS) $(CONFIG) Makefile

# cpu_mmu_spt.o: $(HEADERS) $(CONFIG) $(@:.o=.c)
#	$(CC) -c $(CPPFLAGS) $(CFLAGS) -O -o $@ $(@:.o=.c)

check-syntax:
	gcc -fsyntax-only $(CPPFLAGS) $(CFLAGS) $(CHK_SOURCES)
# 	splint $(LINTFLAGS) $(CHK_SOURCES)
