1XEN_ROOT = $(CURDIR)/.. 2 3export PKG_CONFIG_DIR = $(CURDIR)/pkg-config 4 5include $(XEN_ROOT)/tools/Rules.mk 6 7SUBDIRS-y := 8SUBDIRS-y += libs 9SUBDIRS-y += flask 10SUBDIRS-y += fuzz 11SUBDIRS-y += xs-clients 12SUBDIRS-$(XENSTORE_XENSTORED) += xenstored 13SUBDIRS-y += misc 14SUBDIRS-y += examples 15SUBDIRS-y += hotplug 16SUBDIRS-y += xentrace 17SUBDIRS-$(CONFIG_XCUTILS) += xcutils 18SUBDIRS-$(CONFIG_X86) += firmware 19SUBDIRS-y += console 20SUBDIRS-y += xenmon 21SUBDIRS-$(XENSTAT_XENTOP) += xentop 22SUBDIRS-$(CONFIG_LIBFSIMAGE) += libfsimage 23SUBDIRS-$(CONFIG_Linux) += vchan 24 25# do not recurse in to a dir we are about to delete 26ifneq "$(MAKECMDGOALS)" "distclean" 27SUBDIRS-$(CONFIG_QEMU_XEN) += qemu-xen-dir 28endif 29 30SUBDIRS-y += xenpmd 31SUBDIRS-$(CONFIG_GOLANG) += golang 32SUBDIRS-y += xl 33SUBDIRS-y += helpers 34SUBDIRS-y += 9pfsd 35SUBDIRS-$(CONFIG_X86) += xenpaging 36SUBDIRS-$(CONFIG_X86) += debugger 37SUBDIRS-$(CONFIG_TESTS) += tests 38 39SUBDIRS-y += python 40SUBDIRS-$(CONFIG_PYGRUB) += pygrub 41SUBDIRS-$(OCAML_TOOLS) += ocaml 42 43ifeq ($(CONFIG_RUMP),y) 44SUBDIRS-y := libs 45endif 46 47# For the sake of linking, set the sys-root 48ifneq ($(CROSS_COMPILE),) 49CROSS_BIN_PATH ?= /usr/$(CROSS_COMPILE:-=)/bin 50CROSS_SYS_ROOT ?= /usr/$(CROSS_COMPILE:-=)/sys-root 51export CROSS_SYS_ROOT # exported for check/funcs.sh 52export CROSS_BIN_PATH # exported for cross-install.sh 53endif 54 55.PHONY: build all 56build all: subdirs-all 57 58.PHONY: install 59install: 60 $(INSTALL_DIR) -m 700 $(DESTDIR)$(XEN_DUMP_DIR) 61 $(INSTALL_DIR) $(DESTDIR)$(XEN_LOG_DIR) 62 $(INSTALL_DIR) $(DESTDIR)$(XEN_LIB_DIR) 63 $(INSTALL_DIR) $(DESTDIR)$(PKG_INSTALLDIR) 64 $(MAKE) subdirs-install 65 66.PHONY: uninstall 67uninstall: D=$(DESTDIR) 68uninstall: 69 [ -d $(D)$(XEN_CONFIG_DIR) ] && mv -f $(D)$(XEN_CONFIG_DIR) $(D)$(XEN_CONFIG_DIR).old-`date +%s` || true 70 rm -rf $(D)$(libdir)/xen 71 rm -rf $(D)$(SHAREDIR)/xen 72 rm -rf $(D)$(SHAREDIR)/qemu-xen 73 $(MAKE) subdirs-uninstall 74 75.PHONY: clean 76clean: subdirs-clean 77 rm -rf pkg-config 78 79.PHONY: distclean 80distclean: subdirs-distclean clean 81 rm -rf qemu-xen-dir qemu-xen-dir-remote qemu-xen-build 82 rm -rf ../config/Tools.mk config.h config.log config.status \ 83 config.cache autom4te.cache 84 85ifneq ($(XEN_COMPILE_ARCH),$(XEN_TARGET_ARCH)) 86IOEMU_CONFIGURE_CROSS ?= --cross-prefix=$(CROSS_COMPILE) \ 87 --interp-prefix=$(CROSS_SYS_ROOT) 88endif 89 90ifeq ($(XEN_TOOLS_RPATH),y) 91QEMU_UPSTREAM_RPATH := -Wl,-rpath,$(LIBEXEC_LIB):$(libdir) 92IOEMU_EXTRA_LDFLAGS := --extra-ldflags="-Wl,-rpath,$(libdir)" 93else 94QEMU_UPSTREAM_RPATH := -Wl,-rpath,$(LIBEXEC_LIB) 95IOEMU_EXTRA_LDFLAGS := 96endif 97 98# Targets for external trees: 99# ${target}-dir-find 100# See if the directory exists and check it out if not. 101# ${target}-dir-force-update 102# Pull to the most recent update (as if you had checked it out for the 103# first time) 104# subdir-all-${target}-dir 105# Do "make all" for ${target}, including all prerequisites (such as 106# configure) 107# subdir-install-${target}-dir 108# Do "make install" for $TARGET 109# subdir-clean-${target}-dir 110# Do "make clean" for $TARGET 111# 112# Directories for external trees: 113# ${target}-dir 114# Used for local builds. Usually a link to ${target}-dir-remote 115# ${target}-dir-remote 116# Where remote repositories are cloned 117# ${target} 118# Where a copy of the source files are put when building a source 119# tarball for release 120# 121# Expected variables: 122# ${TARGET}_URL 123# A url from which to clone a git repo 124# ${TARGET}_REVISION 125# The target revision to check out when doing "find" or "force-update" 126# ${TARGET}_INTREE 127# The directory where the subtree can be found (usually used when building 128# a source tarball) 129# ${TARGET}_LOC 130# The ultimate location of the source (either a local dir or remote URL) 131 132# External target: qemu-xen 133qemu-xen-dir-find: 134 if test -d $(QEMU_UPSTREAM_LOC) ; then \ 135 mkdir -p qemu-xen-dir; \ 136 else \ 137 export GIT=$(GIT); \ 138 $(XEN_ROOT)/scripts/git-checkout.sh $(QEMU_UPSTREAM_LOC) $(QEMU_UPSTREAM_REVISION) qemu-xen-dir ; \ 139 fi 140 141.PHONY: qemu-xen-dir-force-update 142qemu-xen-dir-force-update: qemu-xen-dir-find 143 set -ex; \ 144 if [ "$(QEMU_UPSTREAM_REVISION)" ]; then \ 145 cd qemu-xen-dir-remote; \ 146 $(GIT) fetch origin; \ 147 $(GIT) reset --hard $(QEMU_UPSTREAM_REVISION); \ 148 fi 149 150ifeq ($(debug),y) 151QEMU_XEN_ENABLE_DEBUG := --enable-debug 152else 153QEMU_XEN_ENABLE_DEBUG := 154endif 155 156subdir-all-qemu-xen-dir: qemu-xen-dir-find 157 unset MAKELEVEL; \ 158 if test -d $(QEMU_UPSTREAM_LOC) ; then \ 159 source=$(QEMU_UPSTREAM_LOC); \ 160 else \ 161 source=$(XEN_ROOT)/tools/qemu-xen-dir; \ 162 fi; \ 163 mkdir -p qemu-xen-build; \ 164 cd qemu-xen-build; \ 165 if $$source/scripts/tracetool.py --check-backend --backend log ; then \ 166 enable_trace_backend="--enable-trace-backends=log"; \ 167 elif $$source/scripts/tracetool.py --check-backend --backend stderr ; then \ 168 enable_trace_backend='--enable-trace-backends=stderr'; \ 169 else \ 170 enable_trace_backend='' ; \ 171 fi ; \ 172 if [ "$(CONFIG_9PFS)" = "y" ]; then \ 173 virtfs='--enable-virtfs' ; \ 174 elif [ "$(CONFIG_9PFS)" = "n" ]; then \ 175 virtfs='--disable-virtfs' ; \ 176 else \ 177 virtfs='' ; \ 178 fi ; \ 179 PKG_CONFIG_PATH=$(XEN_ROOT)/tools/pkg-config$${PKG_CONFIG_PATH:+:$${PKG_CONFIG_PATH}} \ 180 $$source/configure --enable-xen --target-list=i386-softmmu \ 181 $(QEMU_XEN_ENABLE_DEBUG) \ 182 $$enable_trace_backend \ 183 --prefix=$(prefix) \ 184 --libdir=$(LIBEXEC_LIB) \ 185 --includedir=$(LIBEXEC_INC) \ 186 --extra-cflags="-DXC_WANT_COMPAT_EVTCHN_API=1 \ 187 -DXC_WANT_COMPAT_GNTTAB_API=1 \ 188 -DXC_WANT_COMPAT_MAP_FOREIGN_API=1 \ 189 -DXC_WANT_COMPAT_DEVICEMODEL_API=1 \ 190 $(EXTRA_CFLAGS_QEMU_XEN)" \ 191 --extra-ldflags="$(QEMU_UPSTREAM_RPATH)" \ 192 --bindir=$(LIBEXEC_BIN) \ 193 --datadir=$(SHAREDIR)/qemu-xen \ 194 --localstatedir=$(localstatedir) \ 195 --docdir=$(LIBEXEC)/share/doc \ 196 --mandir=$(LIBEXEC)/share/man \ 197 --libexecdir=$(LIBEXEC)/libexec \ 198 --firmwarepath=$(LIBEXEC)/share/qemu-firmware \ 199 --disable-kvm \ 200 --disable-docs \ 201 --disable-guest-agent \ 202 --python=$(PYTHON) \ 203 $(CONFIG_QEMUU_EXTRA_ARGS) \ 204 --cpu=$(IOEMU_CPU_ARCH) \ 205 $(IOEMU_CONFIGURE_CROSS) \ 206 $$virtfs; \ 207 $(MAKE) all 208 209subdir-install-qemu-xen-dir: subdir-all-qemu-xen-dir 210 cd qemu-xen-build; \ 211 $(MAKE) install 212 213subdir-clean-qemu-xen-dir: 214 set -e; if test -d qemu-xen-build/.; then \ 215 $(MAKE) -C qemu-xen-build clean; \ 216 fi 217 218subdir-uninstall-qemu-xen-dir: ; 219 220subtree-force-update: 221ifeq ($(CONFIG_QEMU_XEN),y) 222 $(MAKE) qemu-xen-dir-force-update 223endif 224ifeq ($(CONFIG_X86),y) 225 $(MAKE) -C firmware subtree-force-update 226endif 227