1 # Top level Makefile for V3Vee
3 # Northwestern University
4 # (c) 2008, Jack Lange <jarusl@cs.northwestern.edu>
5 # (c) 2008, Peter Dinda <pdinda@northwestern.edu>
6 # (c) 2008, Lei Xia <xiaxlei@gmail.com>
7 # (c) 2008, The V3VEE Project <http://www.v3vee.org>
9 # Required software to build V3Vee:
10 # - GNU Make (http://www.gnu.org/software/make)
11 # - nasm (http://nasm.sourceforge.net)
12 # - Perl5, AWK (any version), egrep
21 PALACIOS_BUILD_DIR := $(PROJECT_ROOT)/palacios/build
22 GEEKOS_BUILD_DIR := $(PROJECT_ROOT)/geekos/build
23 GUEST_ISO_DIR := /opt/vmm-tools/isos
26 QEMU := /usr/local/qemu/bin/qemu-system-x86_64
30 #when -DNDEBUG is set the kassert functions are disabled
33 # DEBUG=1 means VMM_DEBUG, VMM_INFO, and VMM_TRACE are enabled
34 # as are SERIAL_PRINT_DEBUG
36 DEBUG_SECTIONS := DEBUG=1
39 DEBUG_SECTIONS:= $(DEBUG_SECTIONS) DEBUG_ALL=1
42 ifeq ($(DEBUG_SHADOW_PAGING),1)
43 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_SHADOW_PAGING=1
45 ifeq ($(DEBUG_SHADOW_PAGING),0)
46 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_SHADOW_PAGING=0
50 ifeq ($(DEBUG_NESTED_PAGING),1)
51 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_NESTED_PAGING=1
53 ifeq ($(DEBUG_NESTED_PAGING),0)
54 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_NESTED_PAGING=0
58 ifeq ($(DEBUG_CTRL_REGS),1)
59 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_CTRL_REGS=1
61 ifeq ($(DEBUG_CTRL_REGS),0)
62 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_CTRL_REGS=0
66 ifeq ($(DEBUG_INTERRUPTS),1)
67 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_INTERRUPTS=1
69 ifeq ($(DEBUG_INTERRUPTS),0)
70 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_INTERRUPTS=0
75 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_IO=1
78 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_IO=0
82 ifeq ($(DEBUG_KEYBOARD),1)
83 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_KEYBOARD=1
85 ifeq ($(DEBUG_KEYBOARD),0)
86 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_KEYBOARD=0
91 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_PIC=1
94 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_PIC=0
99 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_PIT=1
101 ifeq ($(DEBUG_PIT),0)
102 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_PIT=0
106 ifeq ($(DEBUG_NVRAM),1)
107 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_NVRAM=1
109 ifeq ($(DEBUG_NVRAM),0)
110 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_NVRAM=0
114 ifeq ($(DEBUG_GENERIC),1)
115 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_GENERIC=1
117 ifeq ($(DEBUG_GENERIC),0)
118 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_GENERIC=0
122 ifeq ($(DEBUG_EMULATOR),1)
123 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_EMULATOR=1
125 ifeq ($(DEBUG_EMULATOR),0)
126 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_EMULATOR=0
130 ifeq ($(DEBUG_RAMDISK),1)
131 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_RAMDISK=1
133 ifeq ($(DEBUG_RAMDISK),0)
134 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_RAMDISK=0
138 ifeq ($(DEBUG_XED),1)
139 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_XED=1
141 ifeq ($(DEBUG_XED),0)
142 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_XED=0
146 ifeq ($(DEBUG_HALT),1)
147 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_HALT=1
149 ifeq ($(DEBUG_HALT),0)
150 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_HALT=0
154 ifeq ($(DEBUG_DEV_MGR),1)
155 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_DEV_MGR=1
157 ifeq ($(DEBUG_DEV_MGR),0)
158 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_DEV_MGR=0
162 ifeq ($(DEBUG_APIC),1)
163 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_APIC=1
165 ifeq ($(DEBUG_APIC),0)
166 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_APIC=0
170 ifeq ($(DEBUG_PCI),1)
171 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_PCI=1
173 ifeq ($(DEBUG_PCI),0)
174 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_PCI=0
179 ifeq ($(PROFILE_VMM),1)
180 GEEKOS_FLAGS:= $(GEEKOS_FLAGS) PROFILE_VMM=1
183 ifeq ($(INSTRUMENT_VMM),1)
184 GEEKOS_FLAGS:= $(GEEKOS_FLAGS) INSTRUMENT_VMM=1
189 # ----------------------------------------------------------------------
191 # Specifies files to be built
192 # ----------------------------------------------------------------------
194 # Default target - see definition of ALL_TARGETS in Configuration section
195 all : palacios-full64
199 (cd $(PALACIOS_BUILD_DIR) && make ARCH=64 $(DEBUG_SECTIONS))
202 (cd $(PALACIOS_BUILD_DIR) && make $(DEBUG_SECTIONS))
206 (cd $(PALACIOS_BUILD_DIR) && make $(DEBUG_SECTIONS) world)
209 (cd $(PALACIOS_BUILD_DIR) && make ARCH=64 $(DEBUG_SECTIONS) world)
212 (cd $(PALACIOS_BUILD_DIR) && make V=1 ARCH=64 CRAY_XT=1 $(DEBUG_SECTIONS) world)
215 (cd $(PALACIOS_BUILD_DIR) && make LEAN_AND_MEAN=1 world)
220 cp $(PALACIOS_BUILD_DIR)/libv3vee.a $(GEEKOS_BUILD_DIR)/palacios/
221 cp $(PALACIOS_BUILD_DIR)/../lib/xed/libxed.a $(GEEKOS_BUILD_DIR)/palacios/
222 cp $(PALACIOS_BUILD_DIR)/vm_kernel $(GEEKOS_BUILD_DIR)/palacios/
223 (cd $(GEEKOS_BUILD_DIR) && make $(GEEKOS_FLAGS))
226 geekos-full: palacios-full32
227 cp $(PALACIOS_BUILD_DIR)/libv3vee.a $(GEEKOS_BUILD_DIR)/palacios/
228 cp $(PALACIOS_BUILD_DIR)/../lib/xed/libxed.a $(GEEKOS_BUILD_DIR)/palacios/
229 cp $(PALACIOS_BUILD_DIR)/vm_kernel $(GEEKOS_BUILD_DIR)/palacios/
230 (cd $(GEEKOS_BUILD_DIR) && make clean && make $(GEEKOS_FLAGS))
233 world: geekos-full palacios-full64
235 lean-and-mean: palacios-lean geekos-full
239 # make ready to boot over PXE
241 cp $(GEEKOS_BUILD_DIR)/vmm.img /tftpboot/vmm.img
244 $(QEMU) -m 1024 -serial file:serial.out -cdrom $(GUEST_ISO_DIR)/puppy.iso -fda $(GEEKOS_BUILD_DIR)/vmm.img
247 cp $(GEEKOS_BUILD_DIR)/vmm.img iso/vmm.img
248 mkisofs -R -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -o test.iso iso
257 # Clean build directories of generated files
259 for d in $(GEEKOS_BUILD_DIR) $(PALACIOS_BUILD_DIR); do \
260 (cd $$d && make clean); \