HOSTCC = gcc
HOSTCXX = g++
-HOSTCFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer \
+HOSTCFLAGS = -Wall -Wstrict-prototypes -fomit-frame-pointer \
-Wno-unused -Wno-format-security -U_FORTIFY_SOURCE
-HOSTCXXFLAGS = -O2
+HOSTCXXFLAGS = -O
# Decide whether to build built-in, modular, or both.
# Normally, just do built-in.
CPPFLAGS := $(V3_INCLUDE) -D__V3VEE__
-CFLAGS := -fno-stack-protector -Wall -O -Werror -fPIC -mno-red-zone
+#
+# 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,)
+
+
-LDFLAGS := --whole-archive
+#-ffreestanding
+
+
+LDFLAGS := --whole-archive
ifeq ($(call cc-option-yn, -fgnu89-inline),y)
CFLAGS += -fgnu89-inline
endif
ifeq ($(KBUILD_EXTMOD),)
- ifneq ($(filter config %config,$(MAKECMDGOALS)),)
+ ifneq ($(filter %config,$(MAKECMDGOALS)),)
config-targets := 1
- ifneq ($(filter-out config %config,$(MAKECMDGOALS)),)
+ ifneq ($(filter-out %config,$(MAKECMDGOALS)),)
mixed-targets := 1
endif
endif
include $(srctree)/Makefile.$(ARCH)
export KBUILD_DEFCONFIG
-config %config: scripts_basic outputmakefile FORCE
+%config: scripts_basic outputmakefile FORCE
$(Q)mkdir -p palacios/include/config
$(Q)$(MAKE) $(build)=scripts/kconfig $@
# $(Q)$(MAKE) -C $(srctree) KBUILD_SRC= .kernelrelease
core-y := palacios/src/palacios/
libs-y := palacios/lib/$(ARCH)/
devices-y := palacios/src/devices/
+interfaces-y := palacios/src/interfaces/
+extensions-y := palacios/src/extensions/
+vnet-y := palacios/src/vnet/
+gears-y := palacios/src/gears/
+modules-y := modules/
+
+
ifeq ($(dot-config),1)
# In this section, we need .config
palacios/include/autoconf.h: ;
endif
+
+ifdef V3_CONFIG_LINUX
+DEFAULT_EXTRA_TARGETS=linux_module
+else
DEFAULT_EXTRA_TARGETS=
+endif
# The all: target is the default when no target is given on the
# command line.
all: palacios $(DEFAULT_EXTRA_TARGETS)
-ifdef CONFIG_FRAME_POINTER
+ifdef V3_CONFIG_LINUX
+CFLAGS += -mcmodel=kernel
+else
+CFLAGS += -fPIC
+endif
+
+ifdef V3_CONFIG_FRAME_POINTER
CFLAGS += -fno-omit-frame-pointer $(call cc-option,-fno-optimize-sibling-calls,)
else
CFLAGS += -fomit-frame-pointer
endif
-ifdef CONFIG_UNWIND_INFO
+ifdef V3_CONFIG_UNWIND_INFO
CFLAGS += -fasynchronous-unwind-tables
endif
-ifdef CONFIG_DEBUG_INFO
+ifdef V3_CONFIG_DEBUG_INFO
CFLAGS += -g
endif
# 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) $(libs-y)))
+ $(core-y) $(devices-y) $(interfaces-y) $(extensions-y) $(vnet-y) $(gears-y) $(libs-y)) $(modules-y))
+
+
#palacios-alldirs := $(sort $(palacios-dirs) $(patsubst %/,%,$(filter %/, \
# $(core-n) $(core-) $(devices-n) $(devices-) \
palacios-cleandirs := $(sort $(palacios-dirs) $(patsubst %/,%,$(filter %/, \
- $(core-n) $(core-) $(devices-n) $(devices-))))
+ $(core-n) $(core-) $(devices-n) $(devices-) \
+ $(interfaces-n) $(interfaces-) $(extensions-n) $(extensions-) $(vnet-n) $(vnet-) $(gears-n) $(gears-) $(modules-n) $(modules-))))
core-y := $(patsubst %/, %/built-in.o, $(core-y))
devices-y := $(patsubst %/, %/built-in.o, $(devices-y))
+interfaces-y := $(patsubst %/, %/built-in.o, $(interfaces-y))
+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))
+
#core-y := $(patsubst %/, %/lib.a, $(core-y))
#devices-y := $(patsubst %/, %/lib.a, $(devices-y))
-palacios := $(core-y) $(devices-y) $(libs-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_KALLSYMS
+# Rule to link palacios - also used during CONFIG_CONFIGKALLSYMS
# May be overridden by /Makefile.$(ARCH)
quiet_cmd_palacios__ ?= AR $@
cmd_palacios__ ?= $(AR) rcs $@ $^
palacios: libv3vee.a
+
+
+
+linux_module/v3vee.ko: linux_module/*.c linux_module/*.h libv3vee.a
+ cd linux_module/ && make -j 8
+ cp linux_module/v3vee.ko v3vee.ko
+
+
+linux_module: linux_module/v3vee.ko
+
+
+
palacios.asm: palacios
$(OBJDUMP) --disassemble $< > $@
tags TAGS cscope*
+# \( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \
+
+
# clean - Delete most, but leave enough to build external modules
#
clean: rm-dirs := $(CLEAN_DIRS)
$(clean-dirs):
$(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@)
+
clean: archclean $(clean-dirs)
$(call cmd,rmdirs)
$(call cmd,rmfiles)
@find . $(RCS_FIND_IGNORE) \
\( -name 'lib' \) -prune -o \
- \( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \
- -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \) \
+ \( -name '*.[oas]' -o -name '.*.cmd' \
+ -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' -o -name '*.ko' \) \
-type f -print | xargs rm -f
# mrproper - Delete all generated files, including .config
ALLSOURCE_ARCHS := $(ARCH)
define all-sources
- ( find $(__srctree)/palacios $(RCS_FIND_IGNORE) \
+ ( find $(__srctree)palacios $(RCS_FIND_IGNORE) \
\( -name lib \) -prune -o \
-name '*.[chS]' -print; )
endef
$(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
# Modules
-/ %/: prepare scripts FORCE
- $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
+%/: prepare scripts FORCE
+ $(Q)$(MAKE) KBUILD_MODULES=$(if $(V3_CONFIG_MODULES),1) \
$(build)=$(build-dir)
%.ko: prepare scripts FORCE
- $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
+ $(Q)$(MAKE) KBUILD_MODULES=$(if $(V3_CONFIG_MODULES),1) \
$(build)=$(build-dir) $(@:.ko=.o)
$(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modpost