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 812d4c9..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.40 $
+# $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
 
 
 
@@ -94,7 +126,7 @@ KERNEL_C_OBJS := $(KERNEL_C_SRCS:%.c=geekos/%.o)
 # Kernel assembly files
 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) 
@@ -127,7 +159,7 @@ VMM_C_SRCS :=   vm_guest.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_halt.c svm_pause.c
 #\
 #              vmx.c vmcs_gen.c vmcs.c
 
@@ -135,12 +167,17 @@ 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
+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
 
 
 # ----------------------------------------------------------------------
@@ -199,13 +236,16 @@ 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
@@ -286,10 +326,10 @@ all : $(ALL_TARGETS)
 #      $(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
@@ -297,29 +337,38 @@ vmm.img : fd.img
 
 force_rombios: 
        (cd ../src/vmboot/rombios; make clean; make)
-#      cp ../src/vmboot/rombios/BIOS-bochs-latest rombios
 
 force_vgabios:
        (cd ../src/vmboot/vgabios; make clean; make)
 
-world: force_rombios force_vgabios
+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
-       - make clean
-       make vmm.img
+endif
+
+inter1: force_payload
+       -make clean
+
+world: inter1 vmm.img
 
 # make ready to boot over PXE
 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 $@
 
@@ -329,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
@@ -340,18 +388,18 @@ geekos/kernel.bin : geekos/kernel.exe
        $(PAD) $@ 512
 
 # The kernel executable and symbol map.
-geekos/kernel.exe : $(KERNEL_OBJS) $(COMMON_C_OBJS) $(VMM_OBJS) $(DEVICE_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) $(VMM_OBJS) $(DEVICE_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"