# Makefile for GeekOS kernel, userspace, and tools
# Copyright (c) 2004,2005 David H. Hovemeyer <daveho@cs.umd.edu>
-# $Revision: 1.17 $
+# $Revision: 1.33 $
# This is free software. You are permitted to use,
# redistribute, and modify it as specified in the file "COPYING".
# List of targets to build by default.
# These targets encompass everything needed to boot
# and run GeekOS.
-ALL_TARGETS := fd.img vm_kernel
+ALL_TARGETS := vmm.img vm_kernel
# Kernel source files
bget.c malloc.c \
synch.c kthread.c \
serial.c reboot.c \
- paging.c vmx.c vmcs_gen.c vmcs.c \
- svm.c svm_handler.c vmm.c vmm_util.c vmm_stubs.c \
- vmcb.c vmm_mem.c vm_guest.c vmm_paging.c vmm_io.c vmm_debug.c \
- debug.c\
+ paging.c \
+ debug.c vmm_stubs.c vm.c\
main.c
# Kernel object files built from C source files
KERNEL_C_OBJS := $(KERNEL_C_SRCS:%.c=geekos/%.o)
# Kernel assembly files
-KERNEL_ASM_SRCS := lowlevel.asm vmx_lowlevel.asm svm_lowlevel.asm
+KERNEL_ASM_SRCS := lowlevel.asm
KERNEL_GAS_SRCS := testvm.s
# Common library object files.
COMMON_C_OBJS := $(COMMON_C_SRCS:%.c=common/%.o)
+VMM_ASM_SRCS := svm_lowlevel.asm \
+# vmx_lowlevel.asm
+
+VMM_ASM_OBJS := $(VMM_ASM_SRCS:%.asm=palacios/%.o)
+
+
+VMM_C_SRCS := vm_guest.c \
+ svm.c svm_handler.c vmm.c vmm_util.c vmm_ctrl_regs.c \
+ vmcb.c vmm_mem.c vmm_paging.c vmm_io.c vmm_debug.c svm_io.c \
+ vmm_intr.c vmm_irq.c\
+ vmm_shadow_paging.c vm_guest_mem.c \
+ vm_dev.c vmm_dev_mgr.c \
+#\
+# vmx.c vmcs_gen.c vmcs.c
+
+VMM_C_OBJS := $(VMM_C_SRCS:%.c=palacios/%.o)
+
+VMM_OBJS := $(VMM_C_OBJS) $(VMM_ASM_OBJS)
+
+DEVICE_C_SRCS := keyboard.c nvram.c timer.c simple_pic.c 8259a.c
+
+DEVICE_C_OBJS := $(DEVICE_C_SRCS:%.c=devices/%.o)
+
+DEVICE_OBJS := $(DEVICE_C_OBJS)
# Flags used for kernel C source files
CC_KERNEL_OPTS := -g -DGEEKOS -I$(PROJECT_ROOT)/include
+# Flags used for VMM C source files
+CC_VMM_OPTS := -g -I$(PROJECT_ROOT)/include -D__V3VEE__
+
+# Flags used for VMM C ASM files
+NASM_VMM_OPTS := -I$(PROJECT_ROOT)/src/palacios/ -f elf $(EXTRA_NASM_OPTS)
+
# Flags user for kernel assembly files
NASM_KERNEL_OPTS := -I$(PROJECT_ROOT)/src/geekos/ -f elf $(EXTRA_NASM_OPTS)
common/%.o : common/%.c
$(TARGET_CC) -c $(CC_GENERAL_OPTS) $(CC_USER_OPTS) $< -o common/$*.o
+palacios/%.o : palacios/%.c
+ $(TARGET_CC) -c $(CC_GENERAL_OPTS) $(CC_VMM_OPTS) $< -o palacios/$*.o
+
+palacios/%.o : palacios/%.asm
+ $(NASM) $(NASM_VMM_OPTS) $< -o palacios/$*.o
+
+devices/%.o : devices/%.c
+ $(TARGET_CC) -c $(CC_GENERAL_OPTS) $(CC_VMM_OPTS) $< -o devices/$*.o
+
+devices/%.o : devices/%.asm
+ $(NASM) $(NASM_VMM_OPTS) $< -o devices/$*.o
+
# ----------------------------------------------------------------------
# Targets -
# Specifies files to be built
all : $(ALL_TARGETS)
-geekos/vmx_lowlevel.o: $(PROJECT_ROOT)/src/geekos/vmx_lowlevel.asm
- $(NASM) -O99 \
- -f elf \
- -I$(PROJECT_ROOT)/src/geekos/ \
- $(PROJECT_ROOT)/src/geekos/vmx_lowlevel.asm \
- -o $@
+#geekos/vmx_lowlevel.o: $(PROJECT_ROOT)/src/geekos/vmx_lowlevel.asm
+# $(NASM) -O99 \
+# -f elf \
+# -I$(PROJECT_ROOT)/src/geekos/ \
+# $(PROJECT_ROOT)/src/geekos/vmx_lowlevel.asm \
+# -o $@
-geekos/test: geekos/test.o geekos/vmcs.o geekos/vmx_lowlevel.o
- $(CC) geekos/test.o geekos/vmcs.o geekos/vmx_lowlevel.o -o geekos/test
+#geekos/test: geekos/test.o geekos/vmcs.o geekos/vmx_lowlevel.o
+# $(CC) geekos/test.o geekos/vmcs.o geekos/vmx_lowlevel.o -o geekos/test
# Standard floppy image - just boots the kernel
fd.img : geekos/fd_boot.bin geekos/setup.bin geekos/kernel.bin vm_kernel
$(PAD) _temp 512
cat _temp vm_kernel > $@
+vmm.img : fd.img
+ cp fd.img vmm.img
+ $(PAD) vmm.img 1474560
+
+force_rombios:
+ (cd ../src/vmboot/rombios; make)
+
+world: force_rombios
+ ../scripts/make_payload.pl payload_layout.txt vm_kernel
+ make clean
+ make vmm.img
+
# make ready to boot over PXE
-pxe: fd.img
- cp fd.img /tftpboot/vmm.img
- $(PAD) /tftpboot/vmm.img 1474560
+pxe: vmm.img
+ cp vmm.img /tftpboot/vmm.img
$(PAD) $@ 512
# The kernel executable and symbol map.
-geekos/kernel.exe : $(KERNEL_OBJS) $(COMMON_C_OBJS)
+geekos/kernel.exe : $(KERNEL_OBJS) $(COMMON_C_OBJS) $(VMM_OBJS) $(DEVICE_OBJS)
$(TARGET_LD) -o geekos/kernel.exe -Ttext $(KERNEL_BASE_ADDR) -e $(KERNEL_ENTRY) \
- $(KERNEL_OBJS) $(COMMON_C_OBJS)
+ $(KERNEL_OBJS) $(COMMON_C_OBJS) $(VMM_OBJS) $(DEVICE_OBJS)
$(TARGET_NM) geekos/kernel.exe > geekos/kernel.syms
-vmm_mem_test: geekos/vmm_mem.c
- $(HOST_CC) -m32 -o mem_test -DVMM_MEM_TEST -I../include ../src/geekos/vmm_mem.c
-
# Clean build directories of generated files
clean :
- for d in geekos common libc user tools; do \
+ for d in geekos common libc user tools palacios devices; do \
(cd $$d && rm -f *); \
done
$(COMMON_C_SRCS:%.c=$(PROJECT_ROOT)/src/common/%.c) \
| $(PERL) -n -e 's,^(\S),common/$$1,;print' \
>> depend.mak
+ $(TARGET_CC) -M $(CC_GENERAL_OPTS) $(CC_KERNEL_OPTS) \
+ $(VMM_C_SRCS:%.c=$(PROJECT_ROOT)/src/palacios/%.c) \
+ | $(PERL) -n -e 's,^(\S),palacios/$$1,;print' \
+ >> depend.mak
+ $(TARGET_CC) -M $(CC_GENERAL_OPTS) $(CC_KERNEL_OPTS) \
+ $(DEVICE_C_SRCS:%.c=$(PROJECT_ROOT)/src/devices/%.c) \
+ | $(PERL) -n -e 's,^(\S),devices/$$1,;print' \
+ >> depend.mak
# By default, there are no header file dependencies.
depend.mak :