1XEN_ROOT = $(CURDIR)/../../..
2
3all: xen-shim
4
5.PHONY: FORCE
6FORCE:
7
8D=xen-root
9
10# Minimun set of files / directories go get Xen to build
11LINK_DIRS=config xen
12LINK_FILES=Config.mk
13
14DEP_DIRS=$(foreach i, $(LINK_DIRS), $(XEN_ROOT)/$(i))
15DEP_FILES=$(foreach i, $(LINK_FILES), $(XEN_ROOT)/$(i))
16
17linkfarm.stamp: $(DEP_DIRS) $(DEP_FILES) FORCE
18	mkdir -p $(D)
19	set -e
20	rm -f linkfarm.stamp.tmp
21	$(foreach d, $(LINK_DIRS), \
22		 (mkdir -p $(D)/$(d); \
23		  cd $(D)/$(d); \
24		  find $(XEN_ROOT)/$(d)/ -type d -exec sh -c \
25		      "echo {} | sed 's,^$(XEN_ROOT)/$(d)/,,g' | xargs mkdir -p" \;);)
26	$(foreach d, $(LINK_DIRS), \
27		(cd $(XEN_ROOT); \
28		 find $(d) ! -type l -type f \
29		 $(addprefix ! -path , '*.[oda1]' '*.d[12]')) \
30		 >> linkfarm.stamp.tmp ; )
31	$(foreach f, $(LINK_FILES), \
32		echo $(f) >> linkfarm.stamp.tmp ;)
33	cmp -s linkfarm.stamp.tmp linkfarm.stamp && \
34		rm linkfarm.stamp.tmp || { \
35		mv linkfarm.stamp.tmp linkfarm.stamp; \
36		cat linkfarm.stamp | while read f; \
37		  do rm -f "$(D)/$$f"; ln -s "$(XEN_ROOT)/$$f" "$(D)/$$f"; done \
38		}
39
40# Copy enough of the tree to build the shim hypervisor
41$(D): linkfarm.stamp
42	$(MAKE) -C $(D)/xen distclean
43
44.PHONY: shim-%config
45shim-%config: $(D) FORCE
46	$(MAKE) -C $(D)/xen $*config \
47		XEN_CONFIG_EXPERT=y \
48		KCONFIG_CONFIG=$(CURDIR)/shim.config
49
50xen-shim: $(D) shim-olddefconfig
51	$(MAKE) -C $(D)/xen install-shim \
52		XEN_CONFIG_EXPERT=y \
53		KCONFIG_CONFIG=$(CURDIR)/shim.config \
54		DESTDIR=$(CURDIR)
55
56.PHONY: distclean clean
57distclean clean:
58	rm -f xen-shim *.old
59	rm -rf $(D)
60	rm -f linkfarm.stamp*
61