build: stubdom and tools should depend on public header target

Build can fail if stubdom build is run before tools build because:

1. tools/include build uses relative path and depends on XEN_OS
2. stubdom needs tools/include to be built, at which time XEN_OS is
   mini-os and corresponding symlinks are created
3. libraries inside tools needs tools/include to be built, at which
   time XEN_OS is the host os name, but symlinks won't be created
   because they are already there
4. libraries get the wrong headers and fail to build

Since both tools and stubdom build need the public headers, we build
tools/include before stubdom and tools. Remove runes in stubdom and
tools to avoid building tools/include more than once.

Provide a new dist target for tools/include.  Hook up the install,
clean, dist and distclean targets for tools/include.

The new arrangement ensures tools build gets the correct headers
because XEN_OS is set to host os when building tools/include. As for
stubdom, it explicitly links to the mini-os directory without relying
on XEN_OS so it should be fine.

Reported-by: Steven Haigh <netwiz@crc.id.au>
Signed-off-by: Wei Liu <wei.liu2@citrix.com>
Tested-by: Steven Haigh <netwiz@crc.id.au>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Release-acked-by: Julien Grall <julien.grall@arm.com>
Acked-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
This commit is contained in:
Wei Liu committed 2017-05-18 10:53:17 +01:00
1 parent a7d4a5904b
commit f745b55f13
4 files changed
+14 -6

No files matched your search

+11 -3
View File
@@ -38,9 +38,14 @@ mini-os-dir-force-update: mini-os-dir
export XEN_TARGET_ARCH
export DESTDIR
.PHONY: build-tools-public-headers
build-tools-public-headers:
$(MAKE) -C tools/include
# build and install everything into the standard system directories
.PHONY: install
install: $(TARGS_INSTALL)
$(MAKE) -C tools/include install
.PHONY: build
build: $(TARGS_BUILD)
@@ -50,11 +55,11 @@ build-xen:
$(MAKE) -C xen build
.PHONY: build-tools
build-tools:
build-tools: build-tools-public-headers
$(MAKE) -C tools build
.PHONY: build-stubdom
build-stubdom: mini-os-dir
build-stubdom: mini-os-dir build-tools-public-headers
$(MAKE) -C stubdom build
ifeq (x86_64,$(XEN_TARGET_ARCH))
XEN_TARGET_ARCH=x86_32 $(MAKE) -C stubdom pv-grub
@@ -75,6 +80,7 @@ test:
.PHONY: dist
dist: DESTDIR=$(DISTDIR)/install
dist: $(TARGS_DIST) dist-misc
make -C tools/include dist
dist-misc:
$(INSTALL_DIR) $(DISTDIR)/
@@ -101,7 +107,7 @@ install-tools:
$(MAKE) -C tools install
.PHONY: install-stubdom
install-stubdom: mini-os-dir
install-stubdom: mini-os-dir build-tools-public-headers
$(MAKE) -C stubdom install
ifeq (x86_64,$(XEN_TARGET_ARCH))
XEN_TARGET_ARCH=x86_32 $(MAKE) -C stubdom install-grub
@@ -168,6 +174,7 @@ src-tarball: subtree-force-update-all
.PHONY: clean
clean: $(TARGS_CLEAN)
$(MAKE) -C tools/include clean
.PHONY: clean-xen
clean-xen:
@@ -191,6 +198,7 @@ clean-docs:
# clean, but blow away tarballs
.PHONY: distclean
distclean: $(TARGS_DISTCLEAN)
$(MAKE) -C tools/include distclean
rm -f config/Toplevel.mk
rm -rf dist
rm -rf config.log config.status config.cache autom4te.cache
-1
View File
@@ -355,7 +355,6 @@ LINK_DIRS := libxc-$(XEN_TARGET_ARCH) xenstore $(foreach dir,$(LINK_LIBS_DIRS),l
LINK_STAMPS := $(foreach dir,$(LINK_DIRS),$(dir)/stamp)
mk-headers-$(XEN_TARGET_ARCH): $(IOEMU_LINKFARM_TARGET) $(LINK_STAMPS)
$(MAKE) -C $(XEN_ROOT)/tools/include
mkdir -p include/xen && \
ln -sf $(wildcard $(XEN_ROOT)/xen/include/public/*.h) include/xen && \
ln -sf $(addprefix $(XEN_ROOT)/xen/include/public/,arch-x86 hvm io xsm) include/xen && \
+1 -2
View File
@@ -5,7 +5,6 @@ export PKG_CONFIG_DIR = $(CURDIR)/pkg-config
include $(XEN_ROOT)/tools/Rules.mk
SUBDIRS-y :=
SUBDIRS-y += include
SUBDIRS-y += libs
SUBDIRS-y += libxc
SUBDIRS-y += flask
@@ -50,7 +49,7 @@ SUBDIRS-$(OCAML_TOOLS) += ocaml
endif
ifeq ($(CONFIG_RUMP),y)
SUBDIRS-y := include libxc xenstore
SUBDIRS-y := libxc xenstore
endif
# For the sake of linking, set the sys-root
+2
View File
@@ -63,6 +63,8 @@ clean:
rm -rf xen xen-xsm acpi
$(MAKE) -C xen-foreign clean
.PHONY: dist
dist: install
.PHONY: distclean
distclean: clean
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.