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_TRAD) += qemu-xen-traditional-dir 28SUBDIRS-$(CONFIG_QEMU_XEN) += qemu-xen-dir 29endif 30 31SUBDIRS-y += xenpmd 32SUBDIRS-$(CONFIG_GOLANG) += golang 33SUBDIRS-y += xl 34SUBDIRS-y += helpers 35SUBDIRS-y += 9pfsd 36SUBDIRS-$(CONFIG_X86) += xenpaging 37SUBDIRS-$(CONFIG_X86) += debugger 38SUBDIRS-$(CONFIG_TESTS) += tests 39 40SUBDIRS-y += python 41SUBDIRS-$(CONFIG_PYGRUB) += pygrub 42SUBDIRS-$(OCAML_TOOLS) += ocaml 43 44ifeq ($(CONFIG_RUMP),y) 45SUBDIRS-y := libs 46endif 47 48# For the sake of linking, set the sys-root 49ifneq ($(CROSS_COMPILE),) 50CROSS_BIN_PATH ?= /usr/$(CROSS_COMPILE:-=)/bin 51CROSS_SYS_ROOT ?= /usr/$(CROSS_COMPILE:-=)/sys-root 52export CROSS_SYS_ROOT # exported for check/funcs.sh 53export CROSS_BIN_PATH # exported for cross-install.sh 54endif 55 56.PHONY: build all 57build all: subdirs-all 58 59.PHONY: install 60install: 61 $(INSTALL_DIR) -m 700 $(DESTDIR)$(XEN_DUMP_DIR) 62 $(INSTALL_DIR) $(DESTDIR)$(XEN_LOG_DIR) 63 $(INSTALL_DIR) $(DESTDIR)$(XEN_LIB_DIR) 64 $(INSTALL_DIR) $(DESTDIR)$(PKG_INSTALLDIR) 65 $(MAKE) subdirs-install 66 67.PHONY: uninstall 68uninstall: D=$(DESTDIR) 69uninstall: 70 [ -d $(D)$(XEN_CONFIG_DIR) ] && mv -f $(D)$(XEN_CONFIG_DIR) $(D)$(XEN_CONFIG_DIR).old-`date +%s` || true 71 rm -rf $(D)$(libdir)/xen 72 rm -rf $(D)$(SHAREDIR)/xen 73 rm -rf $(D)$(SHAREDIR)/qemu-xen 74 $(MAKE) subdirs-uninstall 75 76.PHONY: clean 77clean: subdirs-clean 78 rm -rf pkg-config 79 80.PHONY: distclean 81distclean: subdirs-distclean clean 82 rm -rf qemu-xen-traditional-dir qemu-xen-traditional-dir-remote 83 rm -rf qemu-xen-dir qemu-xen-dir-remote qemu-xen-build 84 rm -rf ../config/Tools.mk config.h config.log config.status \ 85 config.cache autom4te.cache 86 87ifneq ($(XEN_COMPILE_ARCH),$(XEN_TARGET_ARCH)) 88IOEMU_CONFIGURE_CROSS ?= --cross-prefix=$(CROSS_COMPILE) \ 89 --interp-prefix=$(CROSS_SYS_ROOT) 90endif 91 92ifeq ($(XEN_TOOLS_RPATH),y) 93QEMU_UPSTREAM_RPATH := -Wl,-rpath,$(LIBEXEC_LIB):$(libdir) 94IOEMU_EXTRA_LDFLAGS := --extra-ldflags="-Wl,-rpath,$(libdir)" 95else 96QEMU_UPSTREAM_RPATH := -Wl,-rpath,$(LIBEXEC_LIB) 97IOEMU_EXTRA_LDFLAGS := 98endif 99 100QEMU_ROOT := $(shell if [ -d "$(QEMU_TRADITIONAL_LOC)" ]; then echo "$(QEMU_TRADITIONAL_LOC)"; else echo .; fi) 101ifneq ($(QEMU_ROOT),.) 102export QEMU_ROOT 103endif 104 105# Targets for external trees: 106# ${target}-dir-find 107# See if the directory exists and check it out if not. 108# ${target}-dir-force-update 109# Pull to the most recent update (as if you had checked it out for the 110# first time) 111# subdir-all-${target}-dir 112# Do "make all" for ${target}, including all prerequisites (such as 113# configure) 114# subdir-install-${target}-dir 115# Do "make install" for $TARGET 116# subdir-clean-${target}-dir 117# Do "make clean" for $TARGET 118# 119# Directories for external trees: 120# ${target}-dir 121# Used for local builds. Usually a link to ${target}-dir-remote 122# ${target}-dir-remote 123# Where remote repositories are cloned 124# ${target} 125# Where a copy of the source files are put when building a source 126# tarball for release 127# 128# Expected variables: 129# ${TARGET}_URL 130# A url from which to clone a git repo 131# ${TARGET}_REVISION 132# The target revision to check out when doing "find" or "force-update" 133# ${TARGET}_INTREE 134# The directory where the subtree can be found (usually used when building 135# a source tarball) 136# ${TARGET}_LOC 137# The ultimate location of the source (either a local dir or remote URL) 138 139# External target: qemu-xen-traditional 140qemu-xen-traditional-dir-find: 141 set -ex; \ 142 if test -d $(QEMU_TRADITIONAL_LOC); then \ 143 mkdir -p qemu-xen-traditional-dir; \ 144 else \ 145 export GIT=$(GIT); \ 146 $(XEN_ROOT)/scripts/git-checkout.sh $(QEMU_TRADITIONAL_LOC) $(QEMU_TRADITIONAL_REVISION) qemu-xen-traditional-dir; \ 147 fi 148 149.PHONY: qemu-xen-traditional-dir-force-update 150qemu-xen-traditional-dir-force-update: qemu-xen-traditional-dir-find 151 set -ex; \ 152 if [ "$(QEMU_TRADITIONAL_REVISION)" ]; then \ 153 cd qemu-xen-traditional-dir-remote; \ 154 $(GIT) fetch origin; \ 155 $(GIT) reset --hard $(QEMU_TRADITIONAL_REVISION); \ 156 fi 157 158qemu-traditional-recurse = \ 159 set -e; \ 160 $(buildmakevars2shellvars); \ 161 export CONFIG_BLKTAP1=n; \ 162 export BUILDING_QEMU_TRAD=y; \ 163 cd qemu-xen-traditional-dir; \ 164 $(1) 165 166subdir-all-qemu-xen-traditional-dir: qemu-xen-traditional-dir-find 167 $(call qemu-traditional-recurse,\ 168 $(QEMU_ROOT)/xen-setup \ 169 --extra-cflags="-D__XEN_TOOLS__ $(EXTRA_CFLAGS_QEMU_TRADITIONAL)" \ 170 $(IOEMU_EXTRA_LDFLAGS) \ 171 --cpu=$(IOEMU_CPU_ARCH) \ 172 $(IOEMU_CONFIGURE_CROSS); \ 173 $(MAKE) all \ 174 ) 175 176subdir-install-qemu-xen-traditional-dir: subdir-all-qemu-xen-traditional-dir 177 $(call qemu-traditional-recurse,$(MAKE) install) 178 179subdir-clean-qemu-xen-traditional-dir: 180 set -e; if test -d qemu-xen-traditional-dir/.; then \ 181 $(MAKE) -C qemu-xen-traditional-dir clean; \ 182 fi 183subdir-uninstall-qemu-xen-traditional-dir: 184 rm -f $(D)$(bindir)/qemu-nbd* 185 rm -f $(D)$(bindir)/qemu-img* 186 187# External target: qemu-xen 188qemu-xen-dir-find: 189 if test -d $(QEMU_UPSTREAM_LOC) ; then \ 190 mkdir -p qemu-xen-dir; \ 191 else \ 192 export GIT=$(GIT); \ 193 $(XEN_ROOT)/scripts/git-checkout.sh $(QEMU_UPSTREAM_LOC) $(QEMU_UPSTREAM_REVISION) qemu-xen-dir ; \ 194 fi 195 196.PHONY: qemu-xen-dir-force-update 197qemu-xen-dir-force-update: qemu-xen-dir-find 198 set -ex; \ 199 if [ "$(QEMU_UPSTREAM_REVISION)" ]; then \ 200 cd qemu-xen-dir-remote; \ 201 $(GIT) fetch origin; \ 202 $(GIT) reset --hard $(QEMU_UPSTREAM_REVISION); \ 203 fi 204 205ifeq ($(debug),y) 206QEMU_XEN_ENABLE_DEBUG := --enable-debug 207else 208QEMU_XEN_ENABLE_DEBUG := 209endif 210 211subdir-all-qemu-xen-dir: qemu-xen-dir-find 212 unset MAKELEVEL; \ 213 if test -d $(QEMU_UPSTREAM_LOC) ; then \ 214 source=$(QEMU_UPSTREAM_LOC); \ 215 else \ 216 source=$(XEN_ROOT)/tools/qemu-xen-dir; \ 217 fi; \ 218 mkdir -p qemu-xen-build; \ 219 cd qemu-xen-build; \ 220 if $$source/scripts/tracetool.py --check-backend --backend log ; then \ 221 enable_trace_backend="--enable-trace-backends=log"; \ 222 elif $$source/scripts/tracetool.py --check-backend --backend stderr ; then \ 223 enable_trace_backend='--enable-trace-backends=stderr'; \ 224 else \ 225 enable_trace_backend='' ; \ 226 fi ; \ 227 if [ "$(CONFIG_9PFS)" = "y" ]; then \ 228 virtfs='--enable-virtfs' ; \ 229 elif [ "$(CONFIG_9PFS)" = "n" ]; then \ 230 virtfs='--disable-virtfs' ; \ 231 else \ 232 virtfs='' ; \ 233 fi ; \ 234 PKG_CONFIG_PATH=$(XEN_ROOT)/tools/pkg-config$${PKG_CONFIG_PATH:+:$${PKG_CONFIG_PATH}} \ 235 $$source/configure --enable-xen --target-list=i386-softmmu \ 236 $(QEMU_XEN_ENABLE_DEBUG) \ 237 $$enable_trace_backend \ 238 --prefix=$(prefix) \ 239 --libdir=$(LIBEXEC_LIB) \ 240 --includedir=$(LIBEXEC_INC) \ 241 --extra-cflags="-DXC_WANT_COMPAT_EVTCHN_API=1 \ 242 -DXC_WANT_COMPAT_GNTTAB_API=1 \ 243 -DXC_WANT_COMPAT_MAP_FOREIGN_API=1 \ 244 -DXC_WANT_COMPAT_DEVICEMODEL_API=1 \ 245 $(EXTRA_CFLAGS_QEMU_XEN)" \ 246 --extra-ldflags="$(QEMU_UPSTREAM_RPATH)" \ 247 --bindir=$(LIBEXEC_BIN) \ 248 --datadir=$(SHAREDIR)/qemu-xen \ 249 --localstatedir=$(localstatedir) \ 250 --docdir=$(LIBEXEC)/share/doc \ 251 --mandir=$(LIBEXEC)/share/man \ 252 --libexecdir=$(LIBEXEC)/libexec \ 253 --firmwarepath=$(LIBEXEC)/share/qemu-firmware \ 254 --disable-kvm \ 255 --disable-docs \ 256 --disable-guest-agent \ 257 --python=$(PYTHON) \ 258 $(CONFIG_QEMUU_EXTRA_ARGS) \ 259 --cpu=$(IOEMU_CPU_ARCH) \ 260 $(IOEMU_CONFIGURE_CROSS) \ 261 $$virtfs; \ 262 $(MAKE) all 263 264subdir-install-qemu-xen-dir: subdir-all-qemu-xen-dir 265 cd qemu-xen-build; \ 266 $(MAKE) install 267 268subdir-clean-qemu-xen-dir: 269 set -e; if test -d qemu-xen-build/.; then \ 270 $(MAKE) -C qemu-xen-build clean; \ 271 fi 272 273subdir-uninstall-qemu-xen-dir: ; 274 275subtree-force-update: 276ifeq ($(CONFIG_QEMU_XEN),y) 277 $(MAKE) qemu-xen-dir-force-update 278endif 279ifeq ($(CONFIG_QEMU_TRAD),y) 280 $(MAKE) qemu-xen-traditional-dir-force-update 281endif 282ifeq ($(CONFIG_X86),y) 283 $(MAKE) -C firmware subtree-force-update 284endif 285 286subtree-force-update-all: 287 $(MAKE) qemu-xen-dir-force-update 288 $(MAKE) qemu-xen-traditional-dir-force-update 289 $(MAKE) -C firmware subtree-force-update-all 290