# Northwestern University
# (c) 2008, Jack Lange <jarusl@cs.northwestern.edu>
# (c) 2008, Peter Dinda <pdinda@northwestern.edu>
-# (c) 2008, Lei Xia <xiaxlei@gmail.com>
+# (c) 2008, Lei Xia <lxia@northwestern.edu>
# (c) 2008, The V3VEE Project <http://www.v3vee.org>
#
# Based on GeekOS Makefile:
#
ifeq ($(LEAN_AND_MEAN),1)
-DEBUG=0
-DEBUG_SECTIONS=
+DEBUG := 0
+DEBUG_SECTIONS :=
else
-DEBUG=1
-DEBUG_SECTIONS=
+DEBUG := 1
+DEBUG_SECTIONS :=
endif
ifeq ($(DEBUG_ALL),1)
- DEBUG_SECTIONS:= $(DEBUG_SECTIONS) -DDEBUG_SHADOW_PAGING -DDEBUG_CTRL_REGS -DDEBUG_INTERRUPTS -DDEBUG_IO -DDEBUG_KEYBOARD -DDEBUG_PIC -DDEBUG_PIT -DDEBUG_NVRAM -DDEBUG_EMULATOR -DDEBUG_GENERIC -DDEBUG_RAMDISK -DDEBUG_XED -DDEBUG_HALT -DDEBUG_DEV_MGR
+ DEBUG_SECTIONS:= $(DEBUG_SECTIONS) -DDEBUG_SHADOW_PAGING -DDEBUG_NESTED_PAGING -DDEBUG_CTRL_REGS -DDEBUG_INTERRUPTS -DDEBUG_KEYBOARD -DDEBUG_PIC -DDEBUG_PIT -DDEBUG_NVRAM -DDEBUG_EMULATOR -DDEBUG_XED -DDEBUG_HALT -DDEBUG_DEV_MGR
+# -DDEBUG_IO -DDEBUG_GENERIC -DDEBUG_IDE
endif
+
ifeq ($(DEBUG_SHADOW_PAGING),1)
DEBUG_SECTIONS := $(DEBUG_SECTIONS) -DDEBUG_SHADOW_PAGING
else
ifeq ($(DEBUG_SHADOW_PAGING),0)
DEBUG_SECTIONS := $(DEBUG_SECTIONS) -UDEBUG_SHADOW_PAGING
endif
+
+endif
+ifeq ($(DEBUG_NESTED_PAGING),1)
+DEBUG_SECTIONS := $(DEBUG_SECTIONS) -DDEBUG_NESTED_PAGING
+else
+ifeq ($(DEBUG_NESTED_PAGING),0)
+DEBUG_SECTIONS := $(DEBUG_SECTIONS) -UDEBUG_NESTED_PAGING
+endif
endif
ifeq ($(DEBUG_CTRL_REGS),1)
endif
endif
-ifeq ($(DEBUG_RAMDISK),1)
-DEBUG_SECTIONS := $(DEBUG_SECTIONS) -DDEBUG_RAMDISK
+ifeq ($(DEBUG_IDE),1)
+DEBUG_SECTIONS := $(DEBUG_SECTIONS) -DDEBUG_IDE
else
-ifeq ($(DEBUG_RAMDISK),0)
-DEBUG_SECTIONS := $(DEBUG_SECTIONS) -UDEBUG_RAMDISK
-endif
-endif
-
-ifeq ($(TRACE_RAMDISK),1)
-DEBUG_SECTIONS := $(DEBUG_SECTIONS) -DTRACE_RAMDISK
-else
-ifeq ($(TRACE_RAMDSK),0)
-DEBUG_SECTIONS := $(DEBUG_SECTIONS) -UTRACE_RAMDISK
+ifeq ($(DEBUG_IDE),0)
+DEBUG_SECTIONS := $(DEBUG_SECTIONS) -UDEBUG_IDE
endif
endif
endif
endif
+ifeq ($(DEBUG_APIC),1)
+DEBUG_SECTIONS := $(DEBUG_SECTIONS) -DDEBUG_APIC
+else
+ifeq ($(DEBUG_APIC),0)
+DEBUG_SECTIONS := $(DEBUG_SECTIONS) -UDEBUG_APIC
+endif
+endif
+
+ifeq ($(DEBUG_PCI),1)
+DEBUG_SECTIONS := $(DEBUG_SECTIONS) -DDEBUG_PCI
+else
+ifeq ($(DEBUG_PCI),0)
+DEBUG_SECTIONS := $(DEBUG_SECTIONS) -UDEBUG_PCI
+endif
+endif
+
ifeq ($(DEBUG_DEV_MGR),1)
DEBUG_SECTIONS := $(DEBUG_SECTIONS) -DDEBUG_DEV_MGR
else
endif
endif
+ifeq ($(DEBUG_NE2K),1)
+DEBUG_SECTIONS := $(DEBUG_SECTIONS) -DDEBUG_NE2K
+else
+ifeq ($(DEBUG_NE2K),0)
+DEBUG_SECTIONS := $(DEBUG_SECTIONS) -UDEBUG_NE2K
+endif
+endif
+
#DEBUG_SECTIONS := $(DEBUG_SECTIONS) -DTEST_NE2K
ifeq ($(DEBUG),1)
+ifeq ($(INSTRUMENT_VMM),1)
+ EXTRA_C_OPTS:= -DINSTRUMENT_VMM
+ INSTRUMENT_OPT := -finstrument-functions
+ OBJ_FILES := palacios/vmm_instrument.o
+else
+ INSTRUMENT_OPT :=
+endif
+
+CFLAGS = -fno-stack-protector
+
# ----------------------------------------------------------------------
# Configuration -
# List of targets to build by default.
# These targets encompass everything needed to boot
# and run GeekOS.
-ALL_TARGETS := vmm vm_kernel
+ALL_TARGETS := vmm force_payload
VMM_OBJS := \
palacios/vmm_debug.o \
palacios/svm_io.o \
palacios/vmm_intr.o \
+ palacios/vmm_excp.o \
palacios/vmm_time.o \
palacios/vmm_shadow_paging.o \
palacios/vm_guest_mem.o \
palacios/vmm_queue.o \
palacios/vmm_host_events.o \
palacios/svm_lowlevel.o \
+ palacios/vmm_msr.o \
+ palacios/svm_msr.o \
+ palacios/vmm_socket.o \
+ palacios/vmm_xed.o \
+ palacios/vmm_rbtree.o \
+ palacios/vmm_profiler.o \
+ palacios/vmm_direct_paging.o \
+ palacios/vmm_ringbuffer.o \
+ palacios/vmm_hypercall.o \
+ $(OBJ_FILES)
# vmx.c vmcs_gen.c vmcs.c
# Extra C flags for the VMM objects
$(VMM_OBJS) :: EXTRA_CFLAGS = \
- $(JRLDEBUG) \
+ $(JRLDEBUG) $(CFLAGS)\
xed/v3-xed-compat.o \
xed/v3-udiv-compat.o \
-$(XED_OBJS) :: EXTRA_CFLAGS =
-
+$(XED_OBJS) :: EXTRA_CFLAGS = \
+ $(JRLDEBUG) $(CFLAGS)\
DEVICES_OBJS := \
devices/generic.o \
devices/8259a.o \
devices/8254.o \
devices/serial.o \
- devices/ramdisk.o \
- devices/cdrom.o \
devices/bochs_debug.o \
+ devices/os_debug.o \
+ devices/apic.o \
+ devices/io_apic.o \
+ devices/pci.o \
+ devices/para_net.o \
+ devices/ide.o \
+ devices/ram_cd.o \
+ devices/ram_hd.o \
+ devices/i440fx.o \
+ devices/piix3.o \
-$(DEVICES_OBJS) :: EXTRA_CFLAGS =
+# devices/ne2k.o \
+# devices/cdrom.o \
+# devices/ramdisk.o \
+# devices/vnic.o \
-#
-# DECODER is the decoder that will be used
-# currently we only support xed
-#
-DECODER=XED
-
-ifeq ($(DECODER),XED)
-VMM_OBJS += palacios/vmm_xed.o
-else
-# This is an error
-endif
+$(DEVICES_OBJS) :: EXTRA_CFLAGS = \
+ $(JRLDEBUG) $(CFLAGS)\
endif
+ifeq ($(CRAY_XT),1)
+EXTRA_C_OPTS := $(EXTRA_C_OPTS) -DCRAY_XT
+endif
+
+
# Uncomment if cross compiling
#TARGET_CC_PREFIX := $(PROJECT_ROOT)/../devtools/i386/bin/i386-elf-
#TARGET_CC_PREFIX := i386-elf-
$(EXTRA_C_OPTS) \
$(VMM_FLAGS) \
-I$(PROJECT_ROOT)/include \
- -fPIC \
-Werror \
+ -fPIC \
+ -mno-red-zone \
-Wp,-MD,$(@D)/.$(@F).d \
-Wp,-MT,$@ \
+#-fPIC \
#-fvisibility=hidden
-
# Flags passed to objcopy program (strip unnecessary sections from kernel.exe)
OBJCOPY_FLAGS := -R .dynamic -R .note -R .comment
-c \
$< \
-o $@ \
+ $(INSTRUMENT_OPT) \
)
AS_COMPILE = \
-c \
$< \
-o $@ \
+ $(INSTRUMENT_OPT) \
)
ln -s -f ../src/vmboot/vgabios/VGABIOS-lgpl-latest.bin vgabios
-force_rombios: rombios_link
- (cd ../src/vmboot/rombios; make clean; make)
-
-force_vgabios: vgabios_link
- (cd ../src/vmboot/vgabios; make clean; make)
-
-force_payload: force_rombios force_vgabios
+force_payload: rombios_link vgabios_link
../scripts/make_payload.pl payload_layout.txt vm_kernel
inter1: force_payload