Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


Incorporated XED inclusion code.
[palacios.git] / palacios / build / Makefile
index a8f76d7..e8b2b78 100644 (file)
@@ -1,6 +1,6 @@
 # Makefile for GeekOS kernel, userspace, and tools
 # Copyright (c) 2004,2005 David H. Hovemeyer <daveho@cs.umd.edu>
-# $Revision: 1.19 $
+# $Revision: 1.46 $
 
 # This is free software.  You are permitted to use,
 # redistribute, and modify it as specified in the file "COPYING".
@@ -30,7 +30,7 @@
 #
 # The setup code needs to copy it up to this address and jump there
 #
-KERNEL_BASE_ADDR := 0x00010000
+KERNEL_BASE_ADDR := 0x00100000
 
 # Kernel entry point function
 KERNEL_ENTRY = $(SYM_PFX)Main
@@ -41,22 +41,54 @@ VPATH := $(PROJECT_ROOT)/src
 
 #when -DNDEBUG is set the kassert functions are disabled
 #JRLDEBUG=-DNDEBUG
-JRLDEBUG= -DSERIAL_PRINT_DEBUG=1 -DSERIAL_PRINT_DEBUG_LEVEL=10 -DSERIAL_PRINT=1
+
+# DEBUG=1 means VMM_DEBUG, VMM_INFO, and VMM_TRACE are enabled
+# as are SERIAL_PRINT_DEBUG
+# 
+DEBUG=1
+
+#
+# XED=1 means that libxed will be included
+#
+# and VMM_XED is one
+#
+# and make world will build an empty boot package
+#
+XED=0
+
+ifeq ($(DEBUG),1)
+  JRLDEBUG= -DSERIAL_PRINT_DEBUG=1 -DSERIAL_PRINT_DEBUG_LEVEL=10 -DSERIAL_PRINT=1 -DVMM_DEBUG=1 -DVMM_INFO=1 -DVMM_TRACE=1
+else
+  JRLDEBUG= -DSERIAL_PRINT_DEBUG=0 -DSERIAL_PRINT_DEBUG_LEVEL=999999 -DSERIAL_PRINT=0 -DVMM_DEBUG=0 -DVMM_INFO=0 -DVMM_TRACE=0
+endif
+
+ifeq ($(XED),1)
+  LEIXED = -DVMM_XED=1
+else
+  LEIXED = -DVMM_XED=0
+endif
+
+LEIFLAGS = $(LEIXED)
 
 #
 #
 #Peter's compile flags
 PADFLAGS =
 
+#
+# This is wrong for current cygwin - no changes needed
+#
 # Figure out if we're compiling with cygwin, http://cygwin.com
-SYSTEM_NAME := $(shell uname -s)
-ifeq ($(findstring CYGWIN,$(SYSTEM_NAME)),CYGWIN)
-SYM_PFX            := _
-EXTRA_C_OPTS       := -DNEED_UNDERSCORE -DGNU_WIN32
-EXTRA_NASM_OPTS    := -DNEED_UNDERSCORE
-NON_ELF_SYSTEM     := yes
-EXTRA_CC_USER_OPTS := -Dmain=geekos_main
-endif
+#
+# 
+#SYSTEM_NAME := $(shell uname -s)
+#ifeq ($(findstring CYGWIN,$(SYSTEM_NAME)),CYGWIN)
+#SYM_PFX            := _
+#EXTRA_C_OPTS       := -DNEED_UNDERSCORE -DGNU_WIN32
+#EXTRA_NASM_OPTS    := -DNEED_UNDERSCORE
+#NON_ELF_SYSTEM     := yes
+#EXTRA_CC_USER_OPTS := -Dmain=geekos_main
+#endif
 
 
 
@@ -72,7 +104,7 @@ endif
 # 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
@@ -84,20 +116,17 @@ KERNEL_C_SRCS := idt.c int.c trap.c irq.c io.c \
        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 svm_ctrl_regs.c \
-       vmcb.c vmm_mem.c vm_guest.c vmm_paging.c vmm_io.c vmm_debug.c \
-       vmm_shadow_paging.c vm_guest_mem.c \
-       debug.c\
+        paging.c \
+       debug.c vmm_stubs.c  vm.c  pci.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
+KERNEL_GAS_SRCS := testvm.s udivdi3.s
 
 # Kernel object files build from assembler source files
 KERNEL_ASM_OBJS := $(KERNEL_ASM_SRCS:%.asm=geekos/%.o) 
@@ -118,7 +147,37 @@ COMMON_C_SRCS := fmtout.c string.c memmove.c
 # 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_time.c\
+               vmm_shadow_paging.c vm_guest_mem.c  \
+                vm_dev.c vmm_dev_mgr.c vmm_decoder.c \
+                svm_halt.c svm_pause.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 := generic.c keyboard.c nvram.c timer.c simple_pic.c 8259a.c 8254.c serial.c
+
+DEVICE_C_OBJS := $(DEVICE_C_SRCS:%.c=devices/%.o)
+
+DEVICE_OBJS := $(DEVICE_C_OBJS)
+
+V3LIBS :=
+
+ifeq ($(XED),1) 
+  V3LIBS := $(V3LIBS) -L../lib/xed -lxed
+endif
 
 
 # ----------------------------------------------------------------------
@@ -177,18 +236,27 @@ ZEROFILE := $(PERL) $(PROJECT_ROOT)/scripts/zerofile
 NUMSECS := $(PERL) $(PROJECT_ROOT)/scripts/numsecs
 
 
+#Round a value up to a certain factor (hex values)
+ROUND_UP_HEX := $(PERL) $(PROJECT_ROOT)/scripts/round_up_hex.pl
+
 # ----------------------------------------------------------------------
 # Definitions -
 #   Options passed to the tools.
 # ----------------------------------------------------------------------
 
 # Flags used for all C source files
-GENERAL_OPTS := -O -Wall $(EXTRA_C_OPTS) $(JRLDEBUG) $(PADFLAGS) -fPIC
+GENERAL_OPTS := -O -Wall $(EXTRA_C_OPTS) $(JRLDEBUG) $(PADFLAGS) $(LEIFLAGS)  -fPIC
 CC_GENERAL_OPTS := $(GENERAL_OPTS) -Werror 
 
 # 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__ -D__V3_32BIT__
+
+# 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)
 
@@ -225,6 +293,18 @@ geekos/%.o : geekos/%.S
 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
@@ -234,37 +314,61 @@ common/%.o : common/%.c
 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
+fd.img : geekos/fd_boot.bin geekos/setup.bin geekos/kernel.bin
        cat geekos/fd_boot.bin geekos/setup.bin geekos/kernel.bin > _temp
        $(PAD) _temp 512
-       cat _temp vm_kernel > $@
+       cp _temp fd.img
+
+vmm.img : fd.img
+       cp fd.img vmm.img
+       $(PAD) vmm.img 1474560
+
+force_rombios: 
+       (cd ../src/vmboot/rombios; make clean; make)
+
+force_vgabios:
+       (cd ../src/vmboot/vgabios; make clean; make)
+
+force_payload: force_rombios force_vgabios
+ifeq ($(XED),1)
+       ../scripts/make_payload.pl payload_none.txt vm_kernel
+else
+       ../scripts/make_payload.pl payload_layout.txt vm_kernel
+endif
+
+inter1: force_payload
+       -make clean
+
+world: inter1 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
+
+run: vmm.img
+       /usr/local/qemu/bin/qemu-system-x86_64 -m 1024 -serial file:serial.out -cdrom puppy.iso -fda vmm.img 
+
 
 
 
 # Floppy boot sector (first stage boot loader).
-geekos/fd_boot.bin : geekos/setup.bin geekos/kernel.bin $(PROJECT_ROOT)/src/geekos/fd_boot.asm vm_kernel
+geekos/fd_boot.bin : geekos/setup.bin geekos/kernel.bin $(PROJECT_ROOT)/src/geekos/fd_boot.asm
        $(NASM) -f bin \
                -I$(PROJECT_ROOT)/src/geekos/ \
                -DNUM_SETUP_SECTORS=`$(NUMSECS) geekos/setup.bin` \
                -DNUM_KERN_SECTORS=`$(NUMSECS) geekos/kernel.bin` \
-               -DNUM_VM_KERNEL_SECTORS=`$(NUMSECS) vm_kernel` \
                $(PROJECT_ROOT)/src/geekos/fd_boot.asm \
                -o $@
 
@@ -274,7 +378,6 @@ geekos/setup.bin : geekos/kernel.bin $(PROJECT_ROOT)/src/geekos/setup.asm
                -I$(PROJECT_ROOT)/src/geekos/ \
                -DENTRY_POINT=0x`egrep 'Main$$' geekos/kernel.syms |awk '{print $$1}'` \
                -DVMM_SIZE=`$(NUMSECS) geekos/kernel.bin` \
-               -DGUEST_SIZE=`$(NUMSECS) vm_kernel` \
                $(PROJECT_ROOT)/src/geekos/setup.asm \
                -o $@
        $(PAD) $@ 512
@@ -285,28 +388,25 @@ geekos/kernel.bin : geekos/kernel.exe
        $(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) vm_kernel
        $(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) $(V3LIBS) -b binary vm_kernel
        $(TARGET_NM) geekos/kernel.exe > geekos/kernel.syms
 
 
 force:
 
 
-vm_kernel: force
-       $(PAD) vm_kernel 512
-       @echo "VM kernel lives at 0x100000 and is" `$(NUMSECS) vm_kernel` "sectors long"
+#vm_kernel: force
+#      $(PAD) vm_kernel 512
+#      @echo "VM kernel lives at 0x100000 and is" `$(NUMSECS) vm_kernel` "sectors long"
 
 
 
-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
 
@@ -322,6 +422,14 @@ depend : $(GENERATED_LIBC_SRCS)
                $(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 :