1XEN_ROOT = $(CURDIR)/.. 2MINI_OS = $(XEN_ROOT)/extras/mini-os 3 4export XEN_ROOT 5export XEN_OS=MiniOS 6export PKG_CONFIG_DIR = $(CURDIR)/pkg-config 7 8# Remove flags which are meant for tools, e.g. "-m64" 9export EXTRA_CFLAGS_XEN_TOOLS= 10export EXTRA_CFLAGS_QEMU_TRADITIONAL= 11 12export stubdom=y 13export debug=y 14# Moved from config/StdGNU.mk 15CFLAGS += -O1 -fno-omit-frame-pointer 16 17ifeq (,$(findstring clean,$(MAKECMDGOALS))) 18 ifeq ($(wildcard $(MINI_OS)/Config.mk),) 19 $(error Please run 'make mini-os-dir' in top-level directory) 20 endif 21 include $(XEN_ROOT)/Config.mk 22endif 23 24-include $(XEN_ROOT)/config/Stubdom.mk 25 26include $(XEN_ROOT)/tools/libs/uselibs.mk 27 28define LIB_deps 29 LIBDEPS_$(1) = $$(foreach use,$$(USELIBS_$(1)),libxen$$(use)) 30endef 31$(foreach lib,$(LIBS_LIBS),$(eval $(call LIB_deps,$(lib)))) 32 33GNU_TARGET_ARCH:=$(XEN_TARGET_ARCH) 34ifeq ($(XEN_TARGET_ARCH),x86_32) 35GNU_TARGET_ARCH:=i686 36endif 37 38ifeq ($(GNU_TARGET_ARCH), i686) 39TARGET_CFLAGS= 40NEWLIB_CFLAGS+=-D_I386MACH_ALLOW_HW_INTERRUPTS 41STUBDOM_SUPPORTED=1 42endif 43ifeq ($(GNU_TARGET_ARCH), x86_64) 44TARGET_CFLAGS=-mno-red-zone 45NEWLIB_CFLAGS+=-D_I386MACH_ALLOW_HW_INTERRUPTS 46STUBDOM_SUPPORTED=1 47endif 48 49CROSS_ROOT=cross-root-$(GNU_TARGET_ARCH) 50CROSS_PREFIX=$(CURDIR)/$(CROSS_ROOT) 51 52# Disable PIE/SSP if GCC supports them. They can break us. 53TARGET_CFLAGS += $(CFLAGS) 54TARGET_CPPFLAGS += $(CPPFLAGS) 55$(call cc-options-add,TARGET_CFLAGS,CC,$(EMBEDDED_EXTRA_CFLAGS)) 56 57# Do not use host headers and libs 58GCC_INSTALL = $(shell LANG=C gcc -print-search-dirs | sed -n -e 's/install: \(.*\)/\1/p') 59TARGET_CPPFLAGS += -U __linux__ -U __FreeBSD__ -U __sun__ 60TARGET_CPPFLAGS += -nostdinc 61TARGET_CPPFLAGS += -isystem $(MINI_OS)/include/posix 62TARGET_CPPFLAGS += -isystem $(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf/include 63TARGET_CPPFLAGS += -isystem $(GCC_INSTALL)include 64TARGET_CPPFLAGS += -isystem $(CURDIR)/lwip-$(XEN_TARGET_ARCH)/src/include 65TARGET_CPPFLAGS += -isystem $(CURDIR)/lwip-$(XEN_TARGET_ARCH)/src/include/ipv4 66TARGET_CPPFLAGS += -I$(CURDIR)/include 67TARGET_CPPFLAGS += -I$(XEN_ROOT)/xen/include 68 69TARGET_LDFLAGS += -nostdlib -L$(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf/lib 70 71TARGETS=$(STUBDOM_TARGETS) 72 73STUBDOMPATH="stubdompath.sh" 74genpath-target = $(call buildmakevars2file,$(STUBDOMPATH)) 75$(eval $(genpath-target)) 76 77.PHONY: all 78all: build 79ifeq ($(STUBDOM_SUPPORTED),1) 80build: $(STUBDOMPATH) $(STUBDOM_BUILD) 81else 82build: $(STUBDOMPATH) 83endif 84 85############## 86# Cross-newlib 87############## 88 89newlib-$(NEWLIB_VERSION).tar.gz: 90 $(FETCHER) $@ $(NEWLIB_URL)/$@ 91 92newlib-$(NEWLIB_VERSION): newlib-$(NEWLIB_VERSION).tar.gz 93 tar xzf $< 94 patch -d $@ -p0 < newlib.patch 95 patch -d $@ -p0 < newlib-chk.patch 96 patch -d $@ -p1 < newlib-stdint-size_max-fix-from-1.17.0.patch 97 patch -d $@ -p1 < newlib-disable-texinfo.patch 98 patch -d $@ -p1 < newlib-cygmon-gmon.patch 99 patch -d $@ -p1 < newlib-makedoc.patch 100 find $@ -type f | xargs perl -i.bak \ 101 -pe 's/\b_(tzname|daylight|timezone)\b/$$1/g' 102 touch $@ 103 104NEWLIB_STAMPFILE=$(CROSS_ROOT)/$(GNU_TARGET_ARCH)-xen-elf/lib/libc.a 105.PHONY: cross-newlib 106cross-newlib: $(NEWLIB_STAMPFILE) 107$(NEWLIB_STAMPFILE): mk-headers-$(XEN_TARGET_ARCH) newlib-$(NEWLIB_VERSION) 108 mkdir -p newlib-$(XEN_TARGET_ARCH) 109 ( cd newlib-$(XEN_TARGET_ARCH) && \ 110 CC_FOR_TARGET="$(CC) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) $(NEWLIB_CFLAGS)" AR_FOR_TARGET=$(AR) LD_FOR_TARGET=$(LD) RANLIB_FOR_TARGET=$(RANLIB) ../newlib-$(NEWLIB_VERSION)/configure --prefix=$(CROSS_PREFIX) --verbose --target=$(GNU_TARGET_ARCH)-xen-elf --enable-newlib-io-long-long --enable-newlib-io-c99-formats --disable-multilib && \ 111 $(MAKE) DESTDIR= && \ 112 $(MAKE) DESTDIR= install ) 113 114############ 115# Cross-zlib 116############ 117 118zlib-$(ZLIB_VERSION).tar.gz: 119 $(FETCHER) $@ $(ZLIB_URL)/$@ 120 121zlib-$(XEN_TARGET_ARCH): zlib-$(ZLIB_VERSION).tar.gz 122 tar xzf $< 123 mv zlib-$(ZLIB_VERSION) $@ 124 125ZLIB_STAMPFILE=$(CROSS_ROOT)/$(GNU_TARGET_ARCH)-xen-elf/lib/libz.a 126.PHONY: cross-zlib 127cross-zlib: $(ZLIB_STAMPFILE) 128$(ZLIB_STAMPFILE): zlib-$(XEN_TARGET_ARCH) $(NEWLIB_STAMPFILE) 129 ( cd $< && \ 130 CFLAGS="$(TARGET_CPPFLAGS) $(TARGET_CFLAGS)" CC=$(CC) ./configure --prefix=$(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf && \ 131 $(MAKE) DESTDIR= libz.a && \ 132 $(MAKE) DESTDIR= install ) 133 134############## 135# Cross-libpci 136############## 137 138pciutils-$(LIBPCI_VERSION).tar.bz2: 139 $(FETCHER) $@ $(LIBPCI_URL)/$@ 140 141pciutils-$(XEN_TARGET_ARCH): pciutils-$(LIBPCI_VERSION).tar.bz2 142 tar xjf $< 143 mv pciutils-$(LIBPCI_VERSION) $@ 144 patch -d $@ -p1 < pciutils.patch 145 touch $@ 146 147LIBPCI_STAMPFILE=$(CROSS_ROOT)/$(GNU_TARGET_ARCH)-xen-elf/lib/libpci.a 148.PHONY: cross-libpci 149cross-libpci: $(LIBPCI_STAMPFILE) 150$(LIBPCI_STAMPFILE): pciutils-$(XEN_TARGET_ARCH) $(NEWLIB_STAMPFILE) $(ZLIB_STAMPFILE) 151 ( cd $< && \ 152 cp ../libpci.config.h lib/config.h && \ 153 chmod u+w lib/config.h && \ 154 echo '#define PCILIB_VERSION "$(LIBPCI_VERSION)"' >> lib/config.h && \ 155 ln -sf ../../libpci.config.mak lib/config.mk && \ 156 $(MAKE) DESTDIR= CC="$(CC) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) -I$(call realpath,$(MINI_OS)/include)" lib/libpci.a && \ 157 $(INSTALL_DATA) lib/libpci.a $(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf/lib/ && \ 158 $(INSTALL_DIR) $(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf/include/pci && \ 159 $(INSTALL_DATA) lib/config.h lib/header.h lib/pci.h lib/types.h $(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf/include/pci/ \ 160 ) 161 162###### 163# lwIP 164###### 165 166lwip-$(LWIP_VERSION).tar.gz: 167 $(FETCHER) $@ $(LWIP_URL)/$@ 168 169lwip-$(XEN_TARGET_ARCH): lwip-$(LWIP_VERSION).tar.gz 170 tar xzf $< 171 mv lwip $@ 172 patch -d $@ -p0 < lwip.patch-cvs 173 patch -d $@ -p0 < lwip.dhcp_create_request-hwaddr_len.patch 174 touch $@ 175 176############# 177# cross-gmp 178############# 179gmp-$(GMP_VERSION).tar.bz2: 180 $(FETCHER) $@ $(GMP_URL)/$@ 181 182.PHONY: cross-gmp 183ifeq ($(XEN_TARGET_ARCH), x86_32) 184 GMPEXT=ABI=32 185endif 186gmp-$(XEN_TARGET_ARCH): gmp-$(GMP_VERSION).tar.bz2 $(NEWLIB_STAMPFILE) 187 tar xjf $< 188 rm $@ -rf || : 189 mv gmp-$(GMP_VERSION) $@ 190 #patch -d $@ -p0 < gmp.patch 191 cd $@; CPPFLAGS="-isystem $(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf/include $(TARGET_CPPFLAGS)" CFLAGS="$(TARGET_CFLAGS)" CC=$(CC) $(GMPEXT) ./configure --disable-shared --enable-static --disable-fft --without-readline --prefix=$(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf --libdir=$(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf/lib --build=`gcc -dumpmachine` --host=$(GNU_TARGET_ARCH)-xen-elf 192 sed -i 's/#define HAVE_OBSTACK_VPRINTF 1/\/\/#define HAVE_OBSTACK_VPRINTF 1/' $@/config.h 193 touch $@ 194 195GMP_STAMPFILE=$(CROSS_ROOT)/$(GNU_TARGET_ARCH)-xen-elf/lib/libgmp.a 196cross-gmp: $(GMP_STAMPFILE) 197$(GMP_STAMPFILE): gmp-$(XEN_TARGET_ARCH) 198 ( cd $< && \ 199 $(MAKE) && \ 200 $(MAKE) DESTDIR= install ) 201 202############# 203# cross-polarssl 204############# 205polarssl-$(POLARSSL_VERSION)-gpl.tgz: 206 $(FETCHER) $@ $(POLARSSL_URL)/$@ 207 208polarssl-$(XEN_TARGET_ARCH): polarssl-$(POLARSSL_VERSION)-gpl.tgz 209 tar xzf $< 210 mv polarssl-$(POLARSSL_VERSION) $@ 211 patch -d $@ -p1 < polarssl.patch 212 touch $@ 213 214POLARSSL_STAMPFILE=$(CROSS_ROOT)/$(GNU_TARGET_ARCH)-xen-elf/lib/libpolarssl.a 215cross-polarssl: $(POLARSSL_STAMPFILE) 216$(POLARSSL_STAMPFILE): polarssl-$(XEN_TARGET_ARCH) $(NEWLIB_STAMPFILE) lwip-$(XEN_TARGET_ARCH) 217 ( cd $</library && \ 218 make CC="$(CC) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) -I $(realpath $(MINI_OS)/include)" && \ 219 mkdir -p $(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf/include && \ 220 cp -r ../include/* $(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf/include && \ 221 mkdir -p $(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf/lib && \ 222 $(INSTALL_DATA) libpolarssl.a $(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf/lib/ ) 223 224############# 225# cross-tpmemu 226############# 227tpm_emulator-$(TPMEMU_VERSION).tar.gz: 228 $(FETCHER) $@ $(TPMEMU_URL)/$@ 229 230tpm_emulator-$(XEN_TARGET_ARCH): tpm_emulator-$(TPMEMU_VERSION).tar.gz 231 @if [ ! -f "$(CMAKE)" ]; then echo "cmake not installed! Install it and then rerun ./configure!"; false; fi 232 tar xzf $< 233 mv tpm_emulator-$(TPMEMU_VERSION) $@ 234 patch -d $@ -p1 < tpmemu-$(TPMEMU_VERSION).patch; 235 patch -d $@ -p1 < vtpm-bufsize.patch 236 patch -d $@ -p1 < vtpm-locality.patch 237 patch -d $@ -p1 < vtpm-parent-sign-ek.patch 238 patch -d $@ -p1 < vtpm-deepquote.patch 239 patch -d $@ -p1 < vtpm-deepquote-anyloc.patch 240 patch -d $@ -p1 < vtpm-cmake-Wextra.patch 241 patch -d $@ -p1 < vtpm-implicit-fallthrough.patch 242 patch -d $@ -p1 < vtpm_TPM_ChangeAuthAsymFinish.patch 243 patch -d $@ -p1 < vtpm_extern.patch 244 patch -d $@ -p1 < vtpm-microsecond-duration.patch 245 patch -d $@ -p1 < vtpm-command-duration.patch 246 patch -d $@ -p1 < vtpm-tpm_bn_t-addr.patch 247 mkdir $@/build 248 cd $@/build; CC=${CC} $(CMAKE) .. -DCMAKE_C_FLAGS:STRING="-std=c99 -DTPM_NO_EXTERN $(TARGET_CPPFLAGS) $(TARGET_CFLAGS)" 249 touch $@ 250 251TPMEMU_STAMPFILE=$(CROSS_ROOT)/$(GNU_TARGET_ARCH)-xen-elf/lib/libtpm.a 252$(TPMEMU_STAMPFILE): tpm_emulator-$(XEN_TARGET_ARCH) $(GMP_STAMPFILE) 253 ( cd $</build && make VERBOSE=1 tpm_crypto tpm ) 254 cp $</build/crypto/libtpm_crypto.a $(CROSS_ROOT)/$(GNU_TARGET_ARCH)-xen-elf/lib/libtpm_crypto.a 255 cp $</build/tpm/libtpm.a $(TPMEMU_STAMPFILE) 256 257.PHONY: cross-tpmemu 258cross-tpmemu: $(TPMEMU_STAMPFILE) 259 260####### 261# Links 262####### 263 264.PHONY: $(CROSS_ROOT) 265$(CROSS_ROOT): cross-newlib cross-zlib cross-libpci 266 267QEMU_ROOT := $(shell if [ -d "$(QEMU_TRADITIONAL_LOC)" ]; then echo "$(QEMU_TRADITIONAL_LOC)"; else echo .; fi) 268 269ifneq ($(filter ioemu,$(STUBDOM_TARGETS)),) 270IOEMU_LINKFARM_TARGET := ioemu/linkfarm.stamp 271endif 272 273ifeq ($(QEMU_ROOT),.) 274$(XEN_ROOT)/tools/qemu-xen-traditional-dir: 275 $(MAKE) DESTDIR= -C $(XEN_ROOT)/tools qemu-xen-traditional-dir-find 276 277ioemu/linkfarm.stamp: $(XEN_ROOT)/tools/qemu-xen-traditional-dir 278 mkdir -p ioemu 279 set -e; \ 280 $(buildmakevars2shellvars); \ 281 cd ioemu; \ 282 src="$$XEN_ROOT/tools/qemu-xen-traditional-dir"; export src; \ 283 (cd $$src && find * -type d \ 284 $(addprefix ! -path , '*-softmmu*' '*-linux-user*') -print) \ 285 | xargs mkdir -p; \ 286 (cd $$src && find * ! -type l -type f $(addprefix ! -path , \ 287 '*.[oda1]' 'config-*' config.mak qemu-dm qemu-img-xen \ 288 '*.html' '*.pod' '*-softmmu*' '*-linux-user*' \ 289 )) >linkfarm.stamp.tmp; \ 290 cmp -s linkfarm.stamp.tmp linkfarm.stamp && \ 291 rm linkfarm.stamp.tmp || { \ 292 mv linkfarm.stamp.tmp linkfarm.stamp; \ 293 cat linkfarm.stamp | while read f; \ 294 do rm -f "$$f"; ln -s "$$src/$$f" "$$f"; done; \ 295 } 296else 297export QEMU_ROOT 298 299ioemu/linkfarm.stamp: 300 mkdir -p ioemu 301 touch ioemu/linkfarm.stamp 302endif 303 304####### 305# libraries under tools/libs 306####### 307 308STUB_LIBS := toolcore toollog evtchn gnttab call foreignmemory devicemodel ctrl guest 309 310LIBDEP_guest := cross-zlib 311 312####### 313# common handling 314####### 315 316define do_links 317 mkdir -p $(dir $@)include 318 cd $(dir $@); \ 319 ln -sf $(dir $<)include/*.h include/; \ 320 find $(dir $<) -maxdepth 1 -type f -name '*.[ch]' -exec ln -sf {} . \; ; \ 321 ln -sf $(dir $<)Makefile.common . 322 touch $@ 323endef 324 325define BUILD_lib 326 .PHONY: libxen$(1) clean-libxen$(1) 327 libxen$(1): libs-$$(XEN_TARGET_ARCH)/$(1)/libxen$(1).a 328 libs-$$(XEN_TARGET_ARCH)/$(1)/libxen$(1).a: $$(LIBDEPS_$(1)) $$(LIBDEP_$(1)) 329 libs-$$(XEN_TARGET_ARCH)/$(1)/libxen$(1).a: mk-headers-$$(XEN_TARGET_ARCH) $$(NEWLIB_STAMPFILE) .phony 330 CPPFLAGS="$$(TARGET_CPPFLAGS)" CFLAGS="$$(TARGET_CFLAGS)" $$(MAKE) CONFIG_LIBXC_MINIOS=y -f $(CURDIR)/xenlibs.mk -C $$(@D) $$(@F) 331 332 clean-libxen$(1): 333 if [ -e libs-$$(XEN_TARGET_ARCH)/$(1)/Makefile.common ]; then \ 334 $$(MAKE) -f $(CURDIR)/xenlibs.mk -C libs-$$(XEN_TARGET_ARCH)/$(1) clean; \ 335 fi 336 337 libs-$$(XEN_TARGET_ARCH)/$(1)/stamp: $$(XEN_ROOT)/tools/libs/$(1)/Makefile.common 338 $$(do_links) 339endef 340 341$(foreach lib,$(STUB_LIBS),$(eval $(call BUILD_lib,$(lib)))) 342 343xenstore/stamp: $(XEN_ROOT)/tools/xenstored/Makefile.common 344 $(do_links) 345 346xenstorepvh/stamp: $(XEN_ROOT)/tools/xenstored/Makefile.common 347 $(do_links) 348 349LINK_DIRS := xenstore xenstorepvh $(foreach dir,$(STUB_LIBS),libs-$(XEN_TARGET_ARCH)/$(dir)) 350LINK_STAMPS := $(foreach dir,$(LINK_DIRS),$(dir)/stamp) 351 352mk-headers-$(XEN_TARGET_ARCH): $(IOEMU_LINKFARM_TARGET) $(LINK_STAMPS) 353 mkdir -p include/xen && \ 354 ln -sf $(wildcard $(XEN_ROOT)/xen/include/public/*.h) include/xen && \ 355 ln -sf $(addprefix $(XEN_ROOT)/xen/include/public/,arch-x86 hvm io xsm) include/xen && \ 356 ( [ -h include/xen/sys ] || ln -sf $(XEN_ROOT)/tools/include/xen-sys/MiniOS include/xen/sys ) && \ 357 ( [ -h include/xen/libelf ] || ln -sf $(XEN_ROOT)/tools/include/xen/libelf include/xen/libelf ) && \ 358 mkdir -p include/xen-foreign && \ 359 ln -sf $(wildcard $(XEN_ROOT)/tools/include/xen-foreign/*) include/xen-foreign/ && \ 360 $(MAKE) DESTDIR= -C include/xen-foreign/ && \ 361 ( [ -h include/xen/foreign ] || ln -sf ../xen-foreign include/xen/foreign ) 362 $(MAKE) DESTDIR= -C $(MINI_OS) links 363 touch mk-headers-$(XEN_TARGET_ARCH) 364 365TARGETS_MINIOS=$(addprefix mini-os-$(XEN_TARGET_ARCH)-,$(TARGETS)) 366$(TARGETS_MINIOS): mini-os-%: 367 [ -d $@ ] || \ 368 for i in $$(cd $(MINI_OS) ; find . -type d) ; do \ 369 mkdir -p $@/$$i ; \ 370 done 371 372####### 373# ioemu 374####### 375 376ioemu-minios-config.mk: $(CURDIR)/ioemu-minios.cfg 377 MINIOS_CONFIG="$<" CONFIG_FILE="$(CURDIR)/$@" $(MAKE) DESTDIR= -C $(MINI_OS) config 378 379.PHONY: ioemu 380ioemu: cross-zlib cross-libpci libxenguest ioemu-minios-config.mk 381 [ -f ioemu/config-host.mak ] || \ 382 ( $(buildmakevars2shellvars); \ 383 cd ioemu ; \ 384 LWIPDIR=$(CURDIR)/lwip-$(XEN_TARGET_ARCH) \ 385 TARGET_CPPFLAGS="$(TARGET_CPPFLAGS) $(shell cat ioemu-minios-config.mk)" \ 386 TARGET_CFLAGS="$(TARGET_CFLAGS)" \ 387 TARGET_LDFLAGS="$(TARGET_LDFLAGS)" \ 388 $(QEMU_ROOT)/xen-setup-stubdom ) 389 $(MAKE) DESTDIR= -C ioemu -f $(QEMU_ROOT)/Makefile 390 391### 392# C 393### 394 395c-minios-config.mk: $(CURDIR)/c/minios.cfg 396 MINIOS_CONFIG="$<" CONFIG_FILE="$(CURDIR)/$@" $(MAKE) DESTDIR= -C $(MINI_OS) config 397 398.PHONY: c 399c: $(CROSS_ROOT) c-minios-config.mk 400 CPPFLAGS="$(TARGET_CPPFLAGS) $(shell cat c-minios-config.mk)" CFLAGS="$(TARGET_CFLAGS)" $(MAKE) DESTDIR= -C $@ LWIPDIR=$(CURDIR)/lwip-$(XEN_TARGET_ARCH) 401 402###### 403# VTPM 404###### 405 406vtpm-minios-config.mk: $(CURDIR)/vtpm/minios.cfg 407 MINIOS_CONFIG="$<" CONFIG_FILE="$(CURDIR)/$@" $(MAKE) DESTDIR= -C $(MINI_OS) config 408 409.PHONY: vtpm 410vtpm: cross-polarssl cross-tpmemu vtpm-minios-config.mk 411 XEN_TARGET_ARCH="$(XEN_TARGET_ARCH)" CPPFLAGS="$(TARGET_CPPFLAGS) $(shell cat vtpm-minios-config.mk)" CFLAGS="$(TARGET_CFLAGS)" $(MAKE) -C $@ 412 413###### 414# VTPMMGR 415###### 416 417vtpmmgr-minios-config.mk: $(CURDIR)/vtpmmgr/minios.cfg 418 MINIOS_CONFIG="$<" CONFIG_FILE="$(CURDIR)/$@" $(MAKE) DESTDIR= -C $(MINI_OS) config 419 420.PHONY: vtpmmgr 421vtpmmgr: cross-polarssl vtpmmgr-minios-config.mk 422 XEN_TARGET_ARCH="$(XEN_TARGET_ARCH)" CPPFLAGS="$(TARGET_CPPFLAGS) $(shell cat vtpmmgr-minios-config.mk)" CFLAGS="$(TARGET_CFLAGS)" $(MAKE) -C $@ 423 424###### 425# Grub 426###### 427 428grub-$(GRUB_VERSION).tar.gz: 429 $(FETCHER) $@ $(GRUB_URL)/$@ 430 431grub-upstream: grub-$(GRUB_VERSION).tar.gz 432 tar xzf $< 433 mv grub-$(GRUB_VERSION) $@ 434 for i in grub.patches/* ; do \ 435 patch -d $@ -p1 < $$i || exit 1; \ 436 done 437 438grub-$(XEN_TARGET_ARCH)-minios-config.mk: $(CURDIR)/grub/minios.cfg 439 MINIOS_CONFIG="$<" CONFIG_FILE="$(CURDIR)/$@" $(MAKE) DESTDIR= -C $(MINI_OS) config 440 441.PHONY: grub 442grub: cross-polarssl grub-upstream $(CROSS_ROOT) grub-$(XEN_TARGET_ARCH)-minios-config.mk 443 mkdir -p grub-$(XEN_TARGET_ARCH) 444 CPPFLAGS="$(TARGET_CPPFLAGS) $(shell cat grub-$(XEN_TARGET_ARCH)-minios-config.mk)" CFLAGS="$(TARGET_CFLAGS)" $(MAKE) DESTDIR= -C $@ OBJ_DIR=$(CURDIR)/grub-$(XEN_TARGET_ARCH) 445 446########## 447# xenstore 448########## 449 450xenstore-minios-config.mk: $(CURDIR)/xenstore-minios.cfg 451 MINIOS_CONFIG="$<" CONFIG_FILE="$(CURDIR)/$@" $(MAKE) DESTDIR= -C $(MINI_OS) config 452 453.PHONY: xenstore 454xenstore: $(CROSS_ROOT) xenstore-minios-config.mk 455 CPPFLAGS="$(TARGET_CPPFLAGS) $(shell cat xenstore-minios-config.mk)" CFLAGS="$(TARGET_CFLAGS)" $(MAKE) -f $(CURDIR)/xenlibs.mk -C $@ xenstored.a CONFIG_STUBDOM=y 456 457############# 458# xenstorepvh 459############# 460 461xenstorepvh-minios-config.mk: $(CURDIR)/xenstorepvh-minios.cfg 462 MINIOS_CONFIG="$<" CONFIG_FILE="$(CURDIR)/$@" $(MAKE) DESTDIR= -C $(MINI_OS) config 463 464.PHONY: xenstorepvh 465xenstorepvh: $(CROSS_ROOT) xenstorepvh-minios-config.mk 466 CPPFLAGS="$(TARGET_CPPFLAGS) $(shell cat xenstorepvh-minios-config.mk)" CFLAGS="$(TARGET_CFLAGS)" $(MAKE) -f $(CURDIR)/xenlibs.mk -C $@ xenstored.a CONFIG_STUBDOM=y 467 468######## 469# minios 470######## 471 472.PHONY: ioemu-stubdom 473ioemu-stubdom: APP_OBJS=$(CURDIR)/ioemu/i386-stubdom/qemu.a $(CURDIR)/ioemu/i386-stubdom/libqemu.a $(CURDIR)/ioemu/libqemu_common.a 474ioemu-stubdom: mini-os-$(XEN_TARGET_ARCH)-ioemu lwip-$(XEN_TARGET_ARCH) libxenguest ioemu 475 DEF_CPPFLAGS="$(TARGET_CPPFLAGS)" DEF_CFLAGS="$(TARGET_CFLAGS)" DEF_LDFLAGS="$(TARGET_LDFLAGS)" MINIOS_CONFIG="$(CURDIR)/ioemu-minios.cfg" $(MAKE) DESTDIR= -C $(MINI_OS) OBJ_DIR=$(CURDIR)/$< LWIPDIR=$(CURDIR)/lwip-$(XEN_TARGET_ARCH) APP_OBJS="$(APP_OBJS)" 476 477.PHONY: c-stubdom 478c-stubdom: mini-os-$(XEN_TARGET_ARCH)-c lwip-$(XEN_TARGET_ARCH) libxenguest c 479 DEF_CPPFLAGS="$(TARGET_CPPFLAGS)" DEF_CFLAGS="$(TARGET_CFLAGS)" DEF_LDFLAGS="$(TARGET_LDFLAGS)" MINIOS_CONFIG="$(CURDIR)/c/minios.cfg" $(MAKE) DESTDIR= -C $(MINI_OS) OBJ_DIR=$(CURDIR)/$< LWIPDIR=$(CURDIR)/lwip-$(XEN_TARGET_ARCH) APP_OBJS=$(CURDIR)/c/main.a 480 481.PHONY: vtpm-stubdom 482vtpm-stubdom: mini-os-$(XEN_TARGET_ARCH)-vtpm vtpm 483 DEF_CPPFLAGS="$(TARGET_CPPFLAGS)" DEF_CFLAGS="$(TARGET_CFLAGS)" DEF_LDFLAGS="$(TARGET_LDFLAGS)" MINIOS_CONFIG="$(CURDIR)/vtpm/minios.cfg" $(MAKE) -C $(MINI_OS) OBJ_DIR=$(CURDIR)/$< APP_OBJS="$(CURDIR)/vtpm/vtpm.a" APP_LDLIBS="-ltpm -ltpm_crypto -lgmp -lpolarssl" 484 485.PHONY: vtpmmgr-stubdom 486vtpmmgr-stubdom: mini-os-$(XEN_TARGET_ARCH)-vtpmmgr vtpmmgr 487 DEF_CPPFLAGS="$(TARGET_CPPFLAGS)" DEF_CFLAGS="$(TARGET_CFLAGS)" DEF_LDFLAGS="$(TARGET_LDFLAGS)" MINIOS_CONFIG="$(CURDIR)/vtpmmgr/minios.cfg" $(MAKE) -C $(MINI_OS) OBJ_DIR=$(CURDIR)/$< APP_OBJS="$(CURDIR)/vtpmmgr/vtpmmgr.a" APP_LDLIBS="-lm -lpolarssl" 488 489.PHONY: pv-grub 490pv-grub: mini-os-$(XEN_TARGET_ARCH)-grub libxenguest grub 491 DEF_CPPFLAGS="$(TARGET_CPPFLAGS)" DEF_CFLAGS="$(TARGET_CFLAGS)" DEF_LDFLAGS="$(TARGET_LDFLAGS)" MINIOS_CONFIG="$(CURDIR)/grub/minios.cfg" $(MAKE) DESTDIR= -C $(MINI_OS) OBJ_DIR=$(CURDIR)/$< APP_OBJS=$(CURDIR)/grub-$(XEN_TARGET_ARCH)/main.a 492 493.PHONY: pv-grub-if-enabled 494ifneq ($(filter grub,$(STUBDOM_TARGETS)),) 495pv-grub-if-enabled: pv-grub 496else 497pv-grub-if-enabled: 498endif 499 500.PHONY: xenstore-stubdom 501xenstore-stubdom: mini-os-$(XEN_TARGET_ARCH)-xenstore libxenguest xenstore 502 DEF_CPPFLAGS="$(TARGET_CPPFLAGS)" DEF_CFLAGS="$(TARGET_CFLAGS)" DEF_LDFLAGS="$(TARGET_LDFLAGS)" MINIOS_CONFIG="$(CURDIR)/xenstore-minios.cfg" $(MAKE) DESTDIR= -C $(MINI_OS) OBJ_DIR=$(CURDIR)/$< APP_OBJS=$(CURDIR)/xenstore/xenstored.a 503 504.PHONY: xenstorepvh-stubdom 505xenstorepvh-stubdom: mini-os-$(XEN_TARGET_ARCH)-xenstorepvh libxenguest xenstorepvh 506 DEF_CPPFLAGS="$(TARGET_CPPFLAGS)" DEF_CFLAGS="$(TARGET_CFLAGS)" DEF_LDFLAGS="$(TARGET_LDFLAGS)" MINIOS_CONFIG="$(CURDIR)/xenstorepvh-minios.cfg" $(MAKE) DESTDIR= -C $(MINI_OS) OBJ_DIR=$(CURDIR)/$< APP_OBJS=$(CURDIR)/xenstorepvh/xenstored.a 507 508######### 509# install 510######### 511 512ifeq ($(STUBDOM_SUPPORTED),1) 513install: $(STUBDOMPATH) $(STUBDOM_INSTALL) 514else 515install: $(STUBDOMPATH) 516endif 517 518install-ioemu: ioemu-stubdom 519 $(INSTALL_DIR) "$(DESTDIR)$(LIBEXEC_BIN)" 520 $(INSTALL_PROG) stubdom-dm "$(DESTDIR)$(LIBEXEC_BIN)" 521 $(INSTALL_DATA) stubdompath.sh "$(DESTDIR)$(LIBEXEC_BIN)" 522 $(INSTALL_DIR) "$(DESTDIR)$(XENFIRMWAREDIR)" 523 $(INSTALL_DATA) mini-os-$(XEN_TARGET_ARCH)-ioemu/mini-os.gz "$(DESTDIR)$(XENFIRMWAREDIR)/ioemu-stubdom.gz" 524 525install-grub: pv-grub 526 $(INSTALL_DIR) "$(DESTDIR)$(XENFIRMWAREDIR)" 527 $(INSTALL_DATA) mini-os-$(XEN_TARGET_ARCH)-grub/mini-os.gz "$(DESTDIR)$(XENFIRMWAREDIR)/pv-grub-$(XEN_TARGET_ARCH).gz" 528 529ifneq ($(filter grub,$(STUBDOM_TARGETS)),) 530install-grub-if-enabled: install-grub 531else 532install-grub-if-enabled: 533endif 534 535install-c: c-stubdom 536 537install-xenstore: xenstore-stubdom 538 $(INSTALL_DIR) "$(DESTDIR)$(XENFIRMWAREDIR)" 539 $(INSTALL_DATA) mini-os-$(XEN_TARGET_ARCH)-xenstore/mini-os.gz "$(DESTDIR)$(XENFIRMWAREDIR)/xenstore-stubdom.gz" 540 541install-xenstorepvh: xenstorepvh-stubdom 542 $(INSTALL_DIR) "$(DESTDIR)$(XENFIRMWAREDIR)" 543 $(INSTALL_DATA) mini-os-$(XEN_TARGET_ARCH)-xenstorepvh/mini-os.gz "$(DESTDIR)$(XENFIRMWAREDIR)/xenstorepvh-stubdom.gz" 544 545install-vtpm: vtpm-stubdom 546 $(INSTALL_DIR) "$(DESTDIR)$(XENFIRMWAREDIR)" 547 $(INSTALL_DATA) mini-os-$(XEN_TARGET_ARCH)-vtpm/mini-os.gz "$(DESTDIR)$(XENFIRMWAREDIR)/vtpm-stubdom.gz" 548 549install-vtpmmgr: vtpmmgr-stubdom 550 $(INSTALL_DIR) "$(DESTDIR)$(XENFIRMWAREDIR)" 551 $(INSTALL_DATA) mini-os-$(XEN_TARGET_ARCH)-vtpmmgr/mini-os.gz "$(DESTDIR)$(XENFIRMWAREDIR)/vtpmmgr-stubdom.gz" 552 553########### 554# uninstall 555########### 556 557ifeq (x$(STUBDOM_UNINSTALL),x) 558STUBDOM_UNINSTALL=$(patsubst install-%,uninstall-%,$(STUBDOM_INSTALL)) 559endif 560 561ifeq ($(STUBDOM_SUPPORTED),1) 562uninstall: $(STUBDOM_UNINSTALL) 563else 564uninstall: 565endif 566 567uninstall-ioemu: 568 rm -f $(DESTDIR)$(LIBEXEC_BIN)/stubdom-dm 569 rm -f $(DESTDIR)$(LIBEXEC_BIN)/stubdompath.sh 570 rm -f $(DESTDIR)$(XENFIRMWAREDIR)/ioemu-stubdom.gz 571 572uninstall-grub: 573 rm -f $(DESTDIR)$(XENFIRMWAREDIR)/pv-grub-$(XEN_TARGET_ARCH).gz 574 575uninstall-xenstore: 576 rm -f $(DESTDIR)$(XENFIRMWAREDIR)/xenstore-stubdom.gz 577 578uninstall-xenstorepvh: 579 rm -f $(DESTDIR)$(XENFIRMWAREDIR)/xenstorepvh-stubdom.gz 580 581uninstall-vtpm: 582 rm -f $(DESTDIR)$(XENFIRMWAREDIR)/vtpm-stubdom.gz 583 584uninstall-vtpmmgr: 585 rm -f $(DESTDIR)$(XENFIRMWAREDIR)/vtpmmgr-stubdom.gz 586 587####### 588# clean 589####### 590 591# Only clean the libxc/ioemu/mini-os part 592.PHONY: clean 593clean: $(foreach lib,$(STUB_LIBS),clean-libxen$(lib)) 594clean: 595 rm -fr mini-os-$(XEN_TARGET_ARCH)-ioemu 596 rm -fr mini-os-$(XEN_TARGET_ARCH)-c 597 rm -fr mini-os-$(XEN_TARGET_ARCH)-grub 598 rm -fr mini-os-$(XEN_TARGET_ARCH)-xenstore 599 rm -fr mini-os-$(XEN_TARGET_ARCH)-xenstorepvh 600 rm -fr mini-os-$(XEN_TARGET_ARCH)-vtpm 601 rm -fr mini-os-$(XEN_TARGET_ARCH)-vtpmmgr 602 $(MAKE) DESTDIR= -C c clean 603 $(MAKE) -C vtpm clean 604 $(MAKE) -C vtpmmgr clean 605 rm -fr grub-$(XEN_TARGET_ARCH) 606 rm -f $(STUBDOMPATH) 607 rm -f *-minios-config.mk 608 rm -fr pkg-config 609 -[ ! -d ioemu ] || $(MAKE) DESTDIR= -C ioemu clean 610 -[ ! -d xenstore ] || $(MAKE) -f $(CURDIR)/xenlibs.mk -C xenstore clean 611 -[ ! -d xenstorepvh ] || $(MAKE) -f $(CURDIR)/xenlibs.mk -C xenstorepvh clean 612 613# clean the cross-compilation result 614.PHONY: crossclean 615crossclean: clean 616 rm -fr $(CROSS_ROOT) 617 rm -fr newlib-$(XEN_TARGET_ARCH) 618 rm -fr zlib-$(XEN_TARGET_ARCH) pciutils-$(XEN_TARGET_ARCH) 619 rm -fr libs-$(XEN_TARGET_ARCH) 620 rm -fr ioemu xenstore xenstorepvh 621 rm -fr gmp-$(XEN_TARGET_ARCH) 622 rm -fr polarssl-$(XEN_TARGET_ARCH) 623 rm -fr tpm_emulator-$(XEN_TARGET_ARCH) 624 rm -f mk-headers-$(XEN_TARGET_ARCH) 625 rm -fr include 626 627# clean patched sources 628.PHONY: patchclean 629patchclean: crossclean 630 rm -fr newlib-$(NEWLIB_VERSION) 631 rm -fr gmp-$(XEN_TARGET_ARCH) 632 rm -fr polarssl-$(XEN_TARGET_ARCH) 633 rm -fr tpm_emulator-$(XEN_TARGET_ARCH) 634 rm -fr lwip-$(XEN_TARGET_ARCH) 635 rm -fr grub-upstream 636 637# clean downloads 638.PHONY: downloadclean 639downloadclean: patchclean 640 rm -f newlib-$(NEWLIB_VERSION).tar.gz 641 rm -f zlib-$(ZLIB_VERSION).tar.gz 642 rm -f gmp-$(GMP_VERSION).tar.bz2 643 rm -f tpm_emulator-$(TPMEMU_VERSION).tar.gz 644 rm -f pciutils-$(LIBPCI_VERSION).tar.bz2 645 rm -f grub-$(GRUB_VERSION).tar.gz 646 rm -f lwip-$(LWIP_VERSION).tar.gz 647 rm -f polarssl-$(POLARSSL_VERSION)-gpl.tgz 648 649.PHONY: distclean 650distclean: downloadclean 651 rm -rf config.log config.status config.cache autom4te.cache ../config/Stubdom.mk 652 653ifeq (,$(findstring clean,$(MAKECMDGOALS))) 654$(XEN_ROOT)/config/Stubdom.mk: 655 $(error You have to run ./configure before building or installing stubdom) 656endif 657