CPPFLAGS := $(V3_INCLUDE) -D__V3VEE__
+#
+# We want no-strict-aliasing here whether or not the target kernel
+# has it configued. See Linus's rant about gcc's "if the standard
+# says we can do anything, we will do the wrong thing" behavior with
+# regard to this option
+#
CFLAGS := -fno-stack-protector -Wall -Werror -mno-red-zone -fno-common \
+ -fno-strict-aliasing -ffreestanding \
$(call cc-option, -Wno-unused-but-set-variable,)
interfaces-y := palacios/src/interfaces/
extensions-y := palacios/src/extensions/
vnet-y := palacios/src/vnet/
+gears-y := palacios/src/gears/
modules-y := modules/
DEFAULT_EXTRA_TARGETS=
endif
+ifdef V3_CONFIG_NAUTILUS
+DEFAULT_EXTRA_TARGETS=nautilus
+else
+DEFAULT_EXTRA_TARGETS=
+endif
+
+
# The all: target is the default when no target is given on the
# command line.
# This allow a user to issue only 'make' to build a kernel including modules
ifdef V3_CONFIG_LINUX
CFLAGS += -mcmodel=kernel
else
+ifdef V3_CONFIG_NAUTILUS
+CFLAGS += -O2 \
+ -fno-omit-frame-pointer \
+ -ffreestanding \
+ -fno-stack-protector \
+ -fno-strict-aliasing \
+ -mno-red-zone \
+ -mcmodel=large
+LDFLAGS += -z max-page-size=0x1000
+else
CFLAGS += -fPIC
endif
+endif
ifdef V3_CONFIG_FRAME_POINTER
CFLAGS += -fno-omit-frame-pointer $(call cc-option,-fno-optimize-sibling-calls,)
# disable pointer signedness warnings in gcc 4.0
CFLAGS += $(call cc-option,-Wno-pointer-sign,)
+CFLAGS += -O2
+
# Default kernel image to build when no specific target is given.
# KBUILD_IMAGE may be overruled on the commandline or
# set in the environment
palacios-dirs := $(patsubst %/,%,$(filter %/, \
- $(core-y) $(devices-y) $(interfaces-y) $(extensions-y) $(vnet-y) $(libs-y)) $(modules-y))
+ $(core-y) $(devices-y) $(interfaces-y) $(extensions-y) $(vnet-y) $(gears-y) $(libs-y)) $(modules-y))
palacios-cleandirs := $(sort $(palacios-dirs) $(patsubst %/,%,$(filter %/, \
$(core-n) $(core-) $(devices-n) $(devices-) \
- $(interfaces-n) $(interfaces-) $(extensions-n) $(extensions-) $(vnet-n) $(vnet-) $(modules-n) $(modules-))))
+ $(interfaces-n) $(interfaces-) $(extensions-n) $(extensions-) $(vnet-n) $(vnet-) $(gears-n) $(gears-) $(modules-n) $(modules-))))
extensions-y := $(patsubst %/, %/built-in.o, $(extensions-y))
libs-y := $(patsubst %/, %/built-in.o, $(libs-y))
vnet-y := $(patsubst %/, %/built-in.o, $(vnet-y))
+gears-y := $(patsubst %/, %/built-in.o, $(gears-y))
modules-y := $(patsubst %/, %/built-in.o, $(modules-y))
#lnxmod-y := $(patsubst %/, %/built-in.o, $(lnxmod-y))
-palacios := $(core-y) $(devices-y) $(interfaces-y) $(extensions-y) $(vnet-y) $(libs-y) $(modules-y)
+palacios := $(core-y) $(devices-y) $(interfaces-y) $(extensions-y) $(vnet-y) $(gears-y) $(libs-y) $(modules-y)
# Rule to link palacios - also used during CONFIG_CONFIGKALLSYMS
linux_module/v3vee.ko: linux_module/*.c linux_module/*.h libv3vee.a
- cd linux_module/ && make
+ cd linux_module/ && make -j 8
cp linux_module/v3vee.ko v3vee.ko
linux_module: linux_module/v3vee.ko
+nautilus/libnautilus.a: nautilus/*.c nautilus/*.h libv3vee.a
+ cd nautilus/ && make
+ cp nautilus/libnautilus.a .
+
+nautilus: nautilus/libnautilus.a
palacios.asm: palacios