-# Makefile for GeekOS kernel, userspace, and tools
-#
# Northwestern University
# (c) 2008, Jack Lange <jarusl@cs.northwestern.edu>
# (c) 2008, Peter Dinda <pdinda@northwestern.edu>
# (c) 2008, Lei Xia <lxia@northwestern.edu>
# (c) 2008, The V3VEE Project <http://www.v3vee.org>
-#
-# Based on GeekOS Makefile:
-# Copyright (c) 2004,2005 David H. Hovemeyer <daveho@cs.umd.edu>
-# $Revision: 1.71 $
-
-
-# This is free software. You are permitted to use,
-# redistribute, and modify it as specified in the file "COPYING".
-
-# Required software to build GeekOS:
-# - GNU Make (http://www.gnu.org/software/make)
-# - gcc 2.95.2 generating code for target (i386/ELF) and host platforms
-# - Perl5, AWK (any version), egrep
-#
-# Cygwin (http://cygwin.com) may be used to build GeekOS.
-# Make sure that gcc, binutils, nasm, and perl are installed.
-
-# NOTES:
-# - This makefile has been written carefully to work correctly
-# with the -j (parallel make) option. I regularly use "make -j 2"
-# to speed the build process on 2 processor systems.
-
-
-# Base address of kernel
-#
-# Note: at top of memory minus three pages (GDT/TSS/IDT)
-# minus maximum size
-#
-#
-# Note that the code will initially load at 0x10000
-#
-# The setup code needs to copy it up to this address and jump there
-#
-
-
-
PROJECT_ROOT := ..
VPATH := $(PROJECT_ROOT)/src
ifeq ($(DEBUG_ALL),1)
- DEBUG_SECTIONS:= $(DEBUG_SECTIONS) -DDEBUG_SHADOW_PAGING -DDEBUG_CTRL_REGS -DDEBUG_INTERRUPTS -DDEBUG_KEYBOARD -DDEBUG_PIC -DDEBUG_PIT -DDEBUG_NVRAM -DDEBUG_EMULATOR -DDEBUG_XED -DDEBUG_HALT -DDEBUG_DEV_MGR
-# -DDEBUG_IO -DDEBUG_GENERIC -DDEBUG_RAMDISK
+ DEBUG_SECTIONS:= $(DEBUG_SECTIONS) -DDEBUG_SHADOW_PAGING -DDEBUG_NESTED_PAGING -DDEBUG_CTRL_REGS -DDEBUG_INTERRUPTS -DDEBUG_KEYBOARD -DDEBUG_PIC -DDEBUG_PIT -DDEBUG_NVRAM -DDEBUG_EMULATOR -DDEBUG_XED -DDEBUG_HALT -DDEBUG_DEV_MGR
+# -DDEBUG_IO -DDEBUG_GENERIC -DDEBUG_IDE
endif
ifeq ($(DEBUG_SHADOW_PAGING),0)
DEBUG_SECTIONS := $(DEBUG_SECTIONS) -UDEBUG_SHADOW_PAGING
endif
+
+endif
+ifeq ($(DEBUG_NESTED_PAGING),1)
+DEBUG_SECTIONS := $(DEBUG_SECTIONS) -DDEBUG_NESTED_PAGING
+else
+ifeq ($(DEBUG_NESTED_PAGING),0)
+DEBUG_SECTIONS := $(DEBUG_SECTIONS) -UDEBUG_NESTED_PAGING
+endif
endif
ifeq ($(DEBUG_CTRL_REGS),1)
endif
endif
-ifeq ($(DEBUG_RAMDISK),1)
-DEBUG_SECTIONS := $(DEBUG_SECTIONS) -DDEBUG_RAMDISK
+ifeq ($(DEBUG_IDE),1)
+DEBUG_SECTIONS := $(DEBUG_SECTIONS) -DDEBUG_IDE
else
-ifeq ($(DEBUG_RAMDISK),0)
-DEBUG_SECTIONS := $(DEBUG_SECTIONS) -UDEBUG_RAMDISK
-endif
-endif
-
-ifeq ($(TRACE_RAMDISK),1)
-DEBUG_SECTIONS := $(DEBUG_SECTIONS) -DTRACE_RAMDISK
-else
-ifeq ($(TRACE_RAMDSK),0)
-DEBUG_SECTIONS := $(DEBUG_SECTIONS) -UTRACE_RAMDISK
+ifeq ($(DEBUG_IDE),0)
+DEBUG_SECTIONS := $(DEBUG_SECTIONS) -UDEBUG_IDE
endif
endif
endif
endif
+ifeq ($(DEBUG_APIC),1)
+DEBUG_SECTIONS := $(DEBUG_SECTIONS) -DDEBUG_APIC
+else
+ifeq ($(DEBUG_APIC),0)
+DEBUG_SECTIONS := $(DEBUG_SECTIONS) -UDEBUG_APIC
+endif
+endif
+
+ifeq ($(DEBUG_PCI),1)
+DEBUG_SECTIONS := $(DEBUG_SECTIONS) -DDEBUG_PCI
+else
+ifeq ($(DEBUG_PCI),0)
+DEBUG_SECTIONS := $(DEBUG_SECTIONS) -UDEBUG_PCI
+endif
+endif
+
ifeq ($(DEBUG_DEV_MGR),1)
DEBUG_SECTIONS := $(DEBUG_SECTIONS) -DDEBUG_DEV_MGR
else
endif
endif
-#DEBUG_SECTIONS := $(DEBUG_SECTIONS) -DTEST_NE2K
ifeq ($(DEBUG),1)
JRLDEBUG= -DVMM_DEBUG -DVMM_INFO -DVMM_TRACE $(DEBUG_SECTIONS)
endif
-
-
-
-
-#
-# 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
-
-
-
ifeq ($(INSTRUMENT_VMM),1)
EXTRA_C_OPTS:= -DINSTRUMENT_VMM
INSTRUMENT_OPT := -finstrument-functions
INSTRUMENT_OPT :=
endif
+CFLAGS = -fno-stack-protector
-# ----------------------------------------------------------------------
-# Configuration -
-# Various options specifying how GeekOS should be built,
-# what source files to build, which user programs to build,
-# etc. This is generally the only section of the makefile
-# that will need to be modified.
-# ----------------------------------------------------------------------
+# Compile targets
-# List of targets to build by default.
-# These targets encompass everything needed to boot
-# and run GeekOS.
ALL_TARGETS := vmm force_payload
+# Compilation Objects
+
VMM_OBJS := \
palacios/vm_guest.o \
palacios/vmm_debug.o \
palacios/svm_io.o \
palacios/vmm_intr.o \
+ palacios/vmm_excp.o \
palacios/vmm_time.o \
palacios/vmm_shadow_paging.o \
palacios/vm_guest_mem.o \
# Extra C flags for the VMM objects
$(VMM_OBJS) :: EXTRA_CFLAGS = \
- $(JRLDEBUG) \
+ $(JRLDEBUG) $(CFLAGS)\
xed/v3-udiv-compat.o \
$(XED_OBJS) :: EXTRA_CFLAGS = \
- $(JRLDEBUG) \
+ $(JRLDEBUG) $(CFLAGS)\
DEVICES_OBJS := \
devices/generic.o \
devices/8259a.o \
devices/8254.o \
devices/serial.o \
- devices/ramdisk.o \
- devices/cdrom.o \
devices/bochs_debug.o \
devices/os_debug.o \
devices/apic.o \
devices/io_apic.o \
+ devices/pci.o \
+ devices/para_net.o \
+ devices/ide.o \
+ devices/ram_cd.o \
+ devices/ram_hd.o \
+ devices/i440fx.o \
+ devices/piix3.o \
+
+# devices/ne2k.o \
+# devices/vnic.o \
$(DEVICES_OBJS) :: EXTRA_CFLAGS = \
- $(JRLDEBUG) \
+ $(JRLDEBUG) $(CFLAGS)\
endif
+ifeq ($(CRAY_XT),1)
+EXTRA_C_OPTS := $(EXTRA_C_OPTS) -DCRAY_XT
+endif
+
+
# Uncomment if cross compiling
#TARGET_CC_PREFIX := $(PROJECT_ROOT)/../devtools/i386/bin/i386-elf-
#TARGET_CC_PREFIX := i386-elf-
-# Target C compiler. gcc 2.95.2 or later should work.
ifeq ($(ARCH),64)
TARGET_CC := $(TARGET_CC_PREFIX)gcc -m64
else
TARGET_CC := $(TARGET_CC_PREFIX)gcc -m32
endif
-#TARGET_CC := $(TARGET_CC_PREFIX)gcc34 -m32
# Target linker. GNU ld is probably to only one that will work.
# Target objcopy
TARGET_OBJCOPY := $(TARGET_CC_PREFIX)objcopy
-# Nasm (http://nasm.sourceforge.net)
-NASM := $(PROJECT_ROOT)/../devtools/bin/nasm
-#NASM := /opt/vmm-tools/bin/nasm
-
CPP := cpp
-I$(PROJECT_ROOT)/include \
-Werror \
-fPIC \
+ -mno-red-zone \
-Wp,-MD,$(@D)/.$(@F).d \
-Wp,-MT,$@ \
# Default target - see definition of ALL_TARGETS in Configuration section
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/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
-
-
-
rombios_link:
ln -s -f ../src/vmboot/rombios/BIOS-bochs-latest rombios
ln -s -f ../src/vmboot/vgabios/VGABIOS-lgpl-latest.bin vgabios
-force_rombios: rombios_link
- (cd ../src/vmboot/rombios; make clean; make)
-
-force_vgabios: vgabios_link
- (cd ../src/vmboot/vgabios; make clean; make)
-
-force_payload: force_rombios force_vgabios
+force_payload: rombios_link vgabios_link
../scripts/make_payload.pl payload_layout.txt vm_kernel
inter1: force_payload
vmm: palacios/vmm.lib
-
-
# Loadable (flat) kernel image.
palacios/vmm.bin : palacios/vmm.lib
$(TARGET_OBJCOPY) $(OBJCOPY_FLAGS) -S -O binary palacios/vmm.lib palacios/vmm.bin