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
25 # List of targets to build by default.
26 # These targets encompass everything needed to boot
28 ALL_TARGETS := geekos-full
30 QEMU := /usr/local/qemu/bin/qemu-system-x86_64
34 #when -DNDEBUG is set the kassert functions are disabled
37 # DEBUG=1 means VMM_DEBUG, VMM_INFO, and VMM_TRACE are enabled
38 # as are SERIAL_PRINT_DEBUG
40 DEBUG_SECTIONS := DEBUG=1
43 DEBUG_SECTIONS:= $(DEBUG_SECTIONS) DEBUG_ALL=1
46 ifeq ($(DEBUG_SHADOW_PAGING),1)
47 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_SHADOW_PAGING=1
49 ifeq ($(DEBUG_SHADOW_PAGING),0)
50 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_SHADOW_PAGING=0
54 ifeq ($(DEBUG_CTRL_REGS),1)
55 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_CTRL_REGS=1
57 ifeq ($(DEBUG_CTRL_REGS),0)
58 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_CTRL_REGS=0
62 ifeq ($(DEBUG_INTERRUPTS),1)
63 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_INTERRUPTS=1
65 ifeq ($(DEBUG_INTERRUPTS),0)
66 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_INTERRUPTS=0
71 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_IO=1
74 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_IO=0
78 ifeq ($(DEBUG_KEYBOARD),1)
79 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_KEYBOARD=1
81 ifeq ($(DEBUG_KEYBOARD),0)
82 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_KEYBOARD=0
87 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_PIC=1
90 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_PIC=0
95 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_PIT=1
98 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_PIT=0
102 ifeq ($(DEBUG_NVRAM),1)
103 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_NVRAM=1
105 ifeq ($(DEBUG_NVRAM),0)
106 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_NVRAM=0
110 ifeq ($(DEBUG_GENERIC),1)
111 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_GENERIC=1
113 ifeq ($(DEBUG_GENERIC),0)
114 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_GENERIC=0
118 ifeq ($(DEBUG_EMULATOR),1)
119 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_EMULATOR=1
121 ifeq ($(DEBUG_EMULATOR),0)
122 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_EMULATOR=0
126 ifeq ($(DEBUG_RAMDISK),1)
127 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_RAMDISK=1
129 ifeq ($(DEBUG_RAMDISK),0)
130 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_RAMDISK=0
134 ifeq ($(DEBUG_XED),1)
135 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_XED=1
137 ifeq ($(DEBUG_XED),0)
138 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_XED=0
142 ifeq ($(DEBUG_HALT),1)
143 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_HALT=1
145 ifeq ($(DEBUG_HALT),0)
146 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_HALT=0
150 ifeq ($(DEBUG_DEV_MGR),1)
151 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_DEV_MGR=1
153 ifeq ($(DEBUG_DEV_MGR),0)
154 DEBUG_SECTIONS := $(DEBUG_SECTIONS) DEBUG_DEV_MGR=0
159 ifeq ($(PROFILE_VMM),1)
160 GEEKOS_FLAGS:= $(GEEKOS_FLAGS) PROFILE_VMM=1
163 ifeq ($(INSTRUMENT_VMM),1)
164 GEEKOS_FLAGS:= $(GEEKOS_FLAGS) INSTRUMENT_VMM=1
167 # ----------------------------------------------------------------------
169 # Specifies files to be built
170 # ----------------------------------------------------------------------
172 # Default target - see definition of ALL_TARGETS in Configuration section
177 (cd $(PALACIOS_BUILD_DIR) && make ARCH=64 $(DEBUG_SECTIONS))
180 (cd $(PALACIOS_BUILD_DIR) && make $(DEBUG_SECTIONS))
184 (cd $(PALACIOS_BUILD_DIR) && make $(DEBUG_SECTIONS) world)
187 (cd $(PALACIOS_BUILD_DIR) && make ARCH=64 $(DEBUG_SECTIONS) world)
190 (cd $(PALACIOS_BUILD_DIR) && make LEAN_AND_MEAN=1 world)
195 cp $(PALACIOS_BUILD_DIR)/libv3vee.a $(GEEKOS_BUILD_DIR)/palacios/
196 cp $(PALACIOS_BUILD_DIR)/../lib/xed/libxed.a $(GEEKOS_BUILD_DIR)/palacios/
197 cp $(PALACIOS_BUILD_DIR)/vm_kernel $(GEEKOS_BUILD_DIR)/palacios/
198 (cd $(GEEKOS_BUILD_DIR) && make $(GEEKOS_FLAGS))
201 geekos-full: palacios-full32
202 cp $(PALACIOS_BUILD_DIR)/libv3vee.a $(GEEKOS_BUILD_DIR)/palacios/
203 cp $(PALACIOS_BUILD_DIR)/../lib/xed/libxed.a $(GEEKOS_BUILD_DIR)/palacios/
204 cp $(PALACIOS_BUILD_DIR)/vm_kernel $(GEEKOS_BUILD_DIR)/palacios/
205 (cd $(GEEKOS_BUILD_DIR) && make clean && make $(GEEKOS_FLAGS))
208 world: geekos-full palacios-full64
210 lean-and-mean: palacios-lean geekos-full
214 # make ready to boot over PXE
216 cp $(GEEKOS_BUILD_DIR)/vmm.img /tftpboot/vmm.img
219 $(QEMU) -m 1024 -serial file:serial.out -cdrom $(GUEST_ISO_DIR)/puppy.iso -fda $(GEEKOS_BUILD_DIR)/vmm.img
222 cp $(GEEKOS_BUILD_DIR)/vmm.img iso/vmm.img
223 mkisofs -R -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -o test.iso iso
232 # Clean build directories of generated files
234 for d in $(GEEKOS_BUILD_DIR) $(PALACIOS_BUILD_DIR); do \
235 (cd $$d && make clean); \