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