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
+CFLAGS := -fno-stack-protector -Wall -Werror -mno-red-zone -fno-common
-LDFLAGS := --whole-archive
+
+
+#-ffreestanding
+
+
+LDFLAGS := --whole-archive
ifeq ($(call cc-option-yn, -fgnu89-inline),y)
CFLAGS += -fgnu89-inline
devices-y := palacios/src/devices/
modules-y := modules/
+
+
ifeq ($(dot-config),1)
# In this section, we need .config
palacios/include/autoconf.h: ;
endif
+
+ifdef 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_LINUX
+CFLAGS += -mcmodel=kernel
+else
+CFLAGS += -fPIC
+endif
+
ifdef CONFIG_FRAME_POINTER
CFLAGS += -fno-omit-frame-pointer $(call cc-option,-fno-optimize-sibling-calls,)
else
ifdef CONFIG_DEBUG_INFO
CFLAGS += -g
+else
+CFLAGS += -O
endif
palacios-dirs := $(patsubst %/,%,$(filter %/, \
$(core-y) $(devices-y) $(libs-y)) $(modules-y))
+
+
#palacios-alldirs := $(sort $(palacios-dirs) $(patsubst %/,%,$(filter %/, \
# $(core-n) $(core-) $(devices-n) $(devices-) \
# $(libs-n) $(libs-))))
devices-y := $(patsubst %/, %/built-in.o, $(devices-y))
libs-y := $(patsubst %/, %/built-in.o, $(libs-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) $(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 CONFIG_LINUX_KERN=$(CONFIG_LINUX_KERN)
+ 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