[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH RFC v1 37/74] tools/firmware: Build and install xen-shim



From: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>

Link a minimum set of files to build the shim. The linkfarm rune can
handle creation and deletion of files.

We can do better by properly generate the dependency from the list of
files but that's an improvement for later.

Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx>
Signed-off-by: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>
---
 .gitignore                         |  4 ++
 tools/firmware/Makefile            | 11 +++++
 tools/firmware/xen-dir/Makefile    | 59 ++++++++++++++++++++++++++
 tools/firmware/xen-dir/shim.config | 87 ++++++++++++++++++++++++++++++++++++++
 xen/Makefile                       |  8 +++-
 5 files changed, 167 insertions(+), 2 deletions(-)
 create mode 100644 tools/firmware/xen-dir/Makefile
 create mode 100644 tools/firmware/xen-dir/shim.config

diff --git a/.gitignore b/.gitignore
index 8da67daf31..f6cc61a701 100644
--- a/.gitignore
+++ b/.gitignore
@@ -155,6 +155,10 @@ tools/firmware/rombios/rombios[^/]*.s
 tools/firmware/rombios/32bit/32bitbios_flat.h
 tools/firmware/vgabios/vbetables-gen
 tools/firmware/vgabios/vbetables.h
+tools/firmware/xen-dir/*.old
+tools/firmware/xen-dir/linkfarm.stamp*
+tools/firmware/xen-dir/xen-root
+tools/firmware/xen-dir/xen-shim
 tools/flask/utils/flask-getenforce
 tools/flask/utils/flask-get-bool
 tools/flask/utils/flask-loadpolicy
diff --git a/tools/firmware/Makefile b/tools/firmware/Makefile
index 868b506920..b2f011df49 100644
--- a/tools/firmware/Makefile
+++ b/tools/firmware/Makefile
@@ -1,6 +1,10 @@
 XEN_ROOT = $(CURDIR)/../..
 include $(XEN_ROOT)/tools/Rules.mk
 
+ifneq ($(XEN_TARGET_ARCH),x86_32)
+CONFIG_PV_SHIM := y
+endif
+
 # hvmloader is a 32-bit protected mode binary.
 TARGET      := hvmloader/hvmloader
 INST_DIR := $(DESTDIR)$(XENFIRMWAREDIR)
@@ -11,6 +15,7 @@ SUBDIRS-$(CONFIG_SEABIOS) += seabios-dir
 SUBDIRS-$(CONFIG_ROMBIOS) += rombios
 SUBDIRS-$(CONFIG_ROMBIOS) += vgabios
 SUBDIRS-$(CONFIG_ROMBIOS) += etherboot
+SUBDIRS-$(CONFIG_PV_SHIM) += xen-dir
 SUBDIRS-y += hvmloader
 
 LD32BIT-$(CONFIG_FreeBSD) := LD32BIT_FLAG=-melf_i386_fbsd
@@ -48,6 +53,9 @@ endif
 ifeq ($(CONFIG_OVMF),y)
        $(INSTALL_DATA) ovmf-dir/ovmf.bin $(INST_DIR)/ovmf.bin
 endif
+ifeq ($(CONFIG_PV_SHIM),y)
+       $(INSTALL_DATA) xen-dir/xen-shim $(INST_DIR)/xen-shim
+endif
 
 .PHONY: uninstall
 uninstall:
@@ -58,6 +66,9 @@ endif
 ifeq ($(CONFIG_OVMF),y)
        rm -f $(INST_DIR)/ovmf.bin
 endif
+ifeq ($(CONFIG_PV_SHIM),y)
+       rm -f $(INST_DIR)/xen-shim
+endif
 
 .PHONY: clean
 clean: subdirs-clean
diff --git a/tools/firmware/xen-dir/Makefile b/tools/firmware/xen-dir/Makefile
new file mode 100644
index 0000000000..adf6c31e8d
--- /dev/null
+++ b/tools/firmware/xen-dir/Makefile
@@ -0,0 +1,59 @@
+XEN_ROOT = $(CURDIR)/../../..
+
+all: xen-shim
+
+.PHONY: FORCE
+FORCE:
+
+D=xen-root
+
+# Minimun set of files / directories go get Xen to build
+LINK_DIRS=config xen
+LINK_FILES=Config.mk
+
+DEP_DIRS=$(foreach i, $(LINK_DIRS), $(XEN_ROOT)/$(i))
+DEP_FILES=$(foreach i, $(LINK_FILES), $(XEN_ROOT)/$(i))
+
+linkfarm.stamp: $(DEP_DIRS) $(DEP_FILES) FORCE
+       mkdir -p $(D)
+       set -e
+       rm -f linkfarm.stamp.tmp
+       $(foreach d, $(LINK_DIRS), \
+                (mkdir -p $(D)/$(d); \
+                 cd $(D)/$(d); \
+                 find $(XEN_ROOT)/$(d)/ -type d -printf "./%P\n" |  xargs 
mkdir -p);)
+       $(foreach d, $(LINK_DIRS), \
+               (cd $(XEN_ROOT); \
+                find $(d) ! -type l -type f \
+                $(addprefix ! -path , '*.[oda1]' '*.d[12]')) \
+                >> linkfarm.stamp.tmp ; )
+       $(foreach f, $(LINK_FILES), \
+               echo $(f) >> linkfarm.stamp.tmp ;)
+       cmp -s linkfarm.stamp.tmp linkfarm.stamp && \
+               rm linkfarm.stamp.tmp || { \
+               mv linkfarm.stamp.tmp linkfarm.stamp; \
+               cat linkfarm.stamp | while read f; \
+                 do rm -f "$(D)/$$f"; ln -s "$(XEN_ROOT)/$$f" "$(D)/$$f"; done 
\
+               }
+
+# Copy enough of the tree to build the shim hypervisor
+$(D): linkfarm.stamp
+       $(MAKE) -C $(D)/xen distclean
+
+.PHONY: shim-%config
+shim-%config: $(D) FORCE
+       $(MAKE) -C $(D)/xen $*config \
+               XEN_CONFIG_EXPERT=y \
+               KCONFIG_CONFIG=$(CURDIR)/shim.config
+
+xen-shim: $(D) shim-olddefconfig
+       $(MAKE) -C $(D)/xen install-shim \
+               XEN_CONFIG_EXPERT=y \
+               KCONFIG_CONFIG=$(CURDIR)/shim.config \
+               DESTDIR=$(CURDIR)
+
+.PHONY: distclean clean
+distclean clean:
+       rm -f xen-shim *.old
+       rm -rf $(D)
+       rm -f linkfarm.stamp*
diff --git a/tools/firmware/xen-dir/shim.config 
b/tools/firmware/xen-dir/shim.config
new file mode 100644
index 0000000000..227a12fb4c
--- /dev/null
+++ b/tools/firmware/xen-dir/shim.config
@@ -0,0 +1,87 @@
+#
+# Automatically generated file; DO NOT EDIT.
+# Xen/x86 4.11-unstable Configuration
+#
+CONFIG_X86_64=y
+CONFIG_X86=y
+CONFIG_ARCH_DEFCONFIG="arch/x86/configs/x86_64_defconfig"
+
+#
+# Architecture Features
+#
+CONFIG_NR_CPUS=32
+CONFIG_PV=y
+CONFIG_PV_LINEAR_PT=y
+CONFIG_HVM=y
+# CONFIG_SHADOW_PAGING is not set
+# CONFIG_BIGMEM is not set
+# CONFIG_HVM_FEP is not set
+# CONFIG_TBOOT is not set
+CONFIG_XEN_GUEST=y
+CONFIG_PVH_GUEST=y
+CONFIG_PV_SHIM=y
+CONFIG_PV_SHIM_EXCLUSIVE=y
+
+#
+# Common Features
+#
+CONFIG_COMPAT=y
+CONFIG_CORE_PARKING=y
+CONFIG_HAS_ALTERNATIVE=y
+CONFIG_HAS_EX_TABLE=y
+CONFIG_HAS_MEM_ACCESS=y
+CONFIG_HAS_MEM_PAGING=y
+CONFIG_HAS_MEM_SHARING=y
+CONFIG_HAS_PDX=y
+CONFIG_HAS_UBSAN=y
+CONFIG_HAS_KEXEC=y
+CONFIG_HAS_GDBSX=y
+CONFIG_HAS_IOPORTS=y
+# CONFIG_KEXEC is not set
+# CONFIG_TMEM is not set
+# CONFIG_XENOPROF is not set
+# CONFIG_XSM is not set
+
+#
+# Schedulers
+#
+CONFIG_SCHED_CREDIT=y
+# CONFIG_SCHED_CREDIT2 is not set
+# CONFIG_SCHED_RTDS is not set
+# CONFIG_SCHED_ARINC653 is not set
+CONFIG_SCHED_NULL=y
+# CONFIG_SCHED_CREDIT_DEFAULT is not set
+CONFIG_SCHED_NULL_DEFAULT=y
+CONFIG_SCHED_DEFAULT="null"
+# CONFIG_LIVEPATCH is not set
+# CONFIG_SUPPRESS_DUPLICATE_SYMBOL_WARNINGS is not set
+CONFIG_CMDLINE=""
+
+#
+# Device Drivers
+#
+CONFIG_ACPI=y
+CONFIG_ACPI_LEGACY_TABLES_LOOKUP=y
+CONFIG_NUMA=y
+CONFIG_HAS_NS16550=y
+CONFIG_HAS_EHCI=y
+CONFIG_HAS_CPUFREQ=y
+CONFIG_HAS_PASSTHROUGH=y
+CONFIG_HAS_PCI=y
+CONFIG_VIDEO=y
+CONFIG_VGA=y
+CONFIG_DEFCONFIG_LIST="$ARCH_DEFCONFIG"
+CONFIG_ARCH_SUPPORTS_INT128=y
+
+#
+# Debugging Options
+#
+# CONFIG_DEBUG is not set
+# CONFIG_CRASH_DEBUG is not set
+# CONFIG_FRAME_POINTER is not set
+# CONFIG_GCOV is not set
+# CONFIG_LOCK_PROFILE is not set
+# CONFIG_PERF_COUNTERS is not set
+# CONFIG_VERBOSE_DEBUG is not set
+# CONFIG_SCRUB_DEBUG is not set
+# CONFIG_UBSAN is not set
diff --git a/xen/Makefile b/xen/Makefile
index 044e7c82a3..49b590187f 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -39,8 +39,8 @@ dist: install
 
 build install:: include/config/auto.conf
 
-.PHONY: build install uninstall clean distclean cscope TAGS tags MAP gtags 
tests
-build install uninstall debug clean distclean cscope TAGS tags MAP gtags 
tests::
+.PHONY: build install uninstall clean distclean cscope TAGS tags MAP gtags 
tests install-shim
+build install uninstall debug clean distclean cscope TAGS tags MAP gtags tests 
install-shim::
 ifneq ($(XEN_TARGET_ARCH),x86_32)
        $(MAKE) -f Rules.mk _$@
 else
@@ -80,6 +80,10 @@ _install: $(TARGET)$(CONFIG_XEN_INSTALL_SUFFIX)
                fi; \
        fi
 
+.PHONY: _install-shim
+_install-shim: build
+       $(INSTALL_DATA) $(TARGET)-shim $(DESTDIR)
+
 .PHONY: _tests
 _tests:
        $(MAKE) -f $(BASEDIR)/Rules.mk -C test tests
-- 
2.11.0


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.