Files
xen/tools/Makefile
T
Juergen Gross c9a899f7f4 tools: add configure option for disabling pygrub
Add a "--disable-pygrub" option for being able to disable the build
and installation of pygrub.

There are two main reasons to do so:

- A main reason to use pygrub is to allow a PV guest to choose its
  bitness (32- or 64-bit). Pygrub allows that by looking into the boot
  image and to start the guest in the correct mode depending on the
  kernel selected. With 32-bit PV guests being deprecated and the
  possibility to even build a hypervisor without 32-bit PV support,
  this use case is gone for at least some configurations.

- Pygrub is running in dom0 with root privileges. As it is operating
  on guest controlled data (the boot image) and taking decisions based
  on this data, there is a higher security risk. Not being possible
  to use pygrub is thus a step towards a reduction of attack surface.

Default is still to build and install pygrub.

Signed-off-by: Juergen Gross <jgross@suse.com>
Acked-by: Anthony PERARD <anthony.perard@citrix.com>
2023-08-09 09:05:23 +02:00

288 lines
8.1 KiB
Makefile

XEN_ROOT = $(CURDIR)/..
export PKG_CONFIG_DIR = $(CURDIR)/pkg-config
include $(XEN_ROOT)/tools/Rules.mk
SUBDIRS-y :=
SUBDIRS-y += libs
SUBDIRS-y += flask
SUBDIRS-y += fuzz
SUBDIRS-y += xenstore
SUBDIRS-y += misc
SUBDIRS-y += examples
SUBDIRS-y += hotplug
SUBDIRS-y += xentrace
SUBDIRS-$(CONFIG_XCUTILS) += xcutils
SUBDIRS-$(CONFIG_X86) += firmware
SUBDIRS-y += console
SUBDIRS-y += xenmon
SUBDIRS-$(XENSTAT_XENTOP) += xentop
SUBDIRS-y += libfsimage
SUBDIRS-$(CONFIG_Linux) += vchan
# do not recurse in to a dir we are about to delete
ifneq "$(MAKECMDGOALS)" "distclean"
SUBDIRS-$(CONFIG_QEMU_TRAD) += qemu-xen-traditional-dir
SUBDIRS-$(CONFIG_QEMU_XEN) += qemu-xen-dir
endif
SUBDIRS-y += xenpmd
SUBDIRS-$(CONFIG_GOLANG) += golang
SUBDIRS-y += xl
SUBDIRS-y += helpers
SUBDIRS-$(CONFIG_X86) += xenpaging
SUBDIRS-$(CONFIG_X86) += debugger
SUBDIRS-$(CONFIG_TESTS) += tests
SUBDIRS-y += python
SUBDIRS-$(CONFIG_PYGRUB) += pygrub
SUBDIRS-$(OCAML_TOOLS) += ocaml
ifeq ($(CONFIG_RUMP),y)
SUBDIRS-y := libs
endif
# For the sake of linking, set the sys-root
ifneq ($(CROSS_COMPILE),)
CROSS_BIN_PATH ?= /usr/$(CROSS_COMPILE:-=)/bin
CROSS_SYS_ROOT ?= /usr/$(CROSS_COMPILE:-=)/sys-root
export CROSS_SYS_ROOT # exported for check/funcs.sh
export CROSS_BIN_PATH # exported for cross-install.sh
endif
.PHONY: build all
build all: subdirs-all
.PHONY: install
install:
$(INSTALL_DIR) -m 700 $(DESTDIR)$(XEN_DUMP_DIR)
$(INSTALL_DIR) $(DESTDIR)$(XEN_LOG_DIR)
$(INSTALL_DIR) $(DESTDIR)$(XEN_LIB_DIR)
$(INSTALL_DIR) $(DESTDIR)$(PKG_INSTALLDIR)
$(MAKE) subdirs-install
.PHONY: uninstall
uninstall: D=$(DESTDIR)
uninstall:
[ -d $(D)$(XEN_CONFIG_DIR) ] && mv -f $(D)$(XEN_CONFIG_DIR) $(D)$(XEN_CONFIG_DIR).old-`date +%s` || true
rm -rf $(D)$(libdir)/xen
rm -rf $(D)$(SHAREDIR)/xen
rm -rf $(D)$(SHAREDIR)/qemu-xen
$(MAKE) subdirs-uninstall
.PHONY: clean
clean: subdirs-clean
rm -rf pkg-config
.PHONY: distclean
distclean: subdirs-distclean clean
rm -rf qemu-xen-traditional-dir qemu-xen-traditional-dir-remote
rm -rf qemu-xen-dir qemu-xen-dir-remote qemu-xen-build
rm -rf ../config/Tools.mk config.h config.log config.status \
config.cache autom4te.cache
ifneq ($(XEN_COMPILE_ARCH),$(XEN_TARGET_ARCH))
IOEMU_CONFIGURE_CROSS ?= --cross-prefix=$(CROSS_COMPILE) \
--interp-prefix=$(CROSS_SYS_ROOT)
endif
ifeq ($(XEN_TOOLS_RPATH),y)
QEMU_UPSTREAM_RPATH := -Wl,-rpath,$(LIBEXEC_LIB):$(libdir)
IOEMU_EXTRA_LDFLAGS := --extra-ldflags="-Wl,-rpath,$(libdir)"
else
QEMU_UPSTREAM_RPATH := -Wl,-rpath,$(LIBEXEC_LIB)
IOEMU_EXTRA_LDFLAGS :=
endif
QEMU_ROOT := $(shell if [ -d "$(QEMU_TRADITIONAL_LOC)" ]; then echo "$(QEMU_TRADITIONAL_LOC)"; else echo .; fi)
ifneq ($(QEMU_ROOT),.)
export QEMU_ROOT
endif
# Targets for external trees:
# ${target}-dir-find
# See if the directory exists and check it out if not.
# ${target}-dir-force-update
# Pull to the most recent update (as if you had checked it out for the
# first time)
# subdir-all-${target}-dir
# Do "make all" for ${target}, including all prerequisites (such as
# configure)
# subdir-install-${target}-dir
# Do "make install" for $TARGET
# subdir-clean-${target}-dir
# Do "make clean" for $TARGET
#
# Directories for external trees:
# ${target}-dir
# Used for local builds. Usually a link to ${target}-dir-remote
# ${target}-dir-remote
# Where remote repositories are cloned
# ${target}
# Where a copy of the source files are put when building a source
# tarball for release
#
# Expected variables:
# ${TARGET}_URL
# A url from which to clone a git repo
# ${TARGET}_REVISION
# The target revision to check out when doing "find" or "force-update"
# ${TARGET}_INTREE
# The directory where the subtree can be found (usually used when building
# a source tarball)
# ${TARGET}_LOC
# The ultimate location of the source (either a local dir or remote URL)
# External target: qemu-xen-traditional
qemu-xen-traditional-dir-find:
set -ex; \
if test -d $(QEMU_TRADITIONAL_LOC); then \
mkdir -p qemu-xen-traditional-dir; \
else \
export GIT=$(GIT); \
$(XEN_ROOT)/scripts/git-checkout.sh $(QEMU_TRADITIONAL_LOC) $(QEMU_TRADITIONAL_REVISION) qemu-xen-traditional-dir; \
fi
.PHONY: qemu-xen-traditional-dir-force-update
qemu-xen-traditional-dir-force-update: qemu-xen-traditional-dir-find
set -ex; \
if [ "$(QEMU_TRADITIONAL_REVISION)" ]; then \
cd qemu-xen-traditional-dir-remote; \
$(GIT) fetch origin; \
$(GIT) reset --hard $(QEMU_TRADITIONAL_REVISION); \
fi
qemu-traditional-recurse = \
set -e; \
$(buildmakevars2shellvars); \
export CONFIG_BLKTAP1=n; \
export BUILDING_QEMU_TRAD=y; \
cd qemu-xen-traditional-dir; \
$(1)
subdir-all-qemu-xen-traditional-dir: qemu-xen-traditional-dir-find
$(call qemu-traditional-recurse,\
$(QEMU_ROOT)/xen-setup \
--extra-cflags="-D__XEN_TOOLS__ $(EXTRA_CFLAGS_QEMU_TRADITIONAL)" \
$(IOEMU_EXTRA_LDFLAGS) \
--cpu=$(IOEMU_CPU_ARCH) \
$(IOEMU_CONFIGURE_CROSS); \
$(MAKE) all \
)
subdir-install-qemu-xen-traditional-dir: subdir-all-qemu-xen-traditional-dir
$(call qemu-traditional-recurse,$(MAKE) install)
subdir-clean-qemu-xen-traditional-dir:
set -e; if test -d qemu-xen-traditional-dir/.; then \
$(MAKE) -C qemu-xen-traditional-dir clean; \
fi
subdir-uninstall-qemu-xen-traditional-dir:
rm -f $(D)$(bindir)/qemu-nbd*
rm -f $(D)$(bindir)/qemu-img*
# External target: qemu-xen
qemu-xen-dir-find:
if test -d $(QEMU_UPSTREAM_LOC) ; then \
mkdir -p qemu-xen-dir; \
else \
export GIT=$(GIT); \
$(XEN_ROOT)/scripts/git-checkout.sh $(QEMU_UPSTREAM_LOC) $(QEMU_UPSTREAM_REVISION) qemu-xen-dir ; \
fi
.PHONY: qemu-xen-dir-force-update
qemu-xen-dir-force-update: qemu-xen-dir-find
set -ex; \
if [ "$(QEMU_UPSTREAM_REVISION)" ]; then \
cd qemu-xen-dir-remote; \
$(GIT) fetch origin; \
$(GIT) reset --hard $(QEMU_UPSTREAM_REVISION); \
fi
ifeq ($(debug),y)
QEMU_XEN_ENABLE_DEBUG := --enable-debug
else
QEMU_XEN_ENABLE_DEBUG :=
endif
subdir-all-qemu-xen-dir: qemu-xen-dir-find
unset MAKELEVEL; \
if test -d $(QEMU_UPSTREAM_LOC) ; then \
source=$(QEMU_UPSTREAM_LOC); \
else \
source=$(XEN_ROOT)/tools/qemu-xen-dir; \
fi; \
mkdir -p qemu-xen-build; \
cd qemu-xen-build; \
if $$source/scripts/tracetool.py --check-backend --backend log ; then \
enable_trace_backend="--enable-trace-backends=log"; \
elif $$source/scripts/tracetool.py --check-backend --backend stderr ; then \
enable_trace_backend='--enable-trace-backends=stderr'; \
else \
enable_trace_backend='' ; \
fi ; \
if [ "$(CONFIG_9PFS)" = "y" ]; then \
virtfs='--enable-virtfs' ; \
elif [ "$(CONFIG_9PFS)" = "n" ]; then \
virtfs='--disable-virtfs' ; \
else \
virtfs='' ; \
fi ; \
PKG_CONFIG_PATH=$(XEN_ROOT)/tools/pkg-config$${PKG_CONFIG_PATH:+:$${PKG_CONFIG_PATH}} \
$$source/configure --enable-xen --target-list=i386-softmmu \
$(QEMU_XEN_ENABLE_DEBUG) \
$$enable_trace_backend \
--prefix=$(prefix) \
--libdir=$(LIBEXEC_LIB) \
--includedir=$(LIBEXEC_INC) \
--extra-cflags="-DXC_WANT_COMPAT_EVTCHN_API=1 \
-DXC_WANT_COMPAT_GNTTAB_API=1 \
-DXC_WANT_COMPAT_MAP_FOREIGN_API=1 \
-DXC_WANT_COMPAT_DEVICEMODEL_API=1 \
$(EXTRA_CFLAGS_QEMU_XEN)" \
--extra-ldflags="$(QEMU_UPSTREAM_RPATH)" \
--bindir=$(LIBEXEC_BIN) \
--datadir=$(SHAREDIR)/qemu-xen \
--localstatedir=$(localstatedir) \
--docdir=$(LIBEXEC)/share/doc \
--mandir=$(LIBEXEC)/share/man \
--libexecdir=$(LIBEXEC)/libexec \
--firmwarepath=$(LIBEXEC)/share/qemu-firmware \
--disable-kvm \
--disable-docs \
--disable-guest-agent \
--python=$(PYTHON) \
$(CONFIG_QEMUU_EXTRA_ARGS) \
--cpu=$(IOEMU_CPU_ARCH) \
$(IOEMU_CONFIGURE_CROSS) \
$$virtfs; \
$(MAKE) all
subdir-install-qemu-xen-dir: subdir-all-qemu-xen-dir
cd qemu-xen-build; \
$(MAKE) install
subdir-clean-qemu-xen-dir:
set -e; if test -d qemu-xen-build/.; then \
$(MAKE) -C qemu-xen-build clean; \
fi
subdir-uninstall-qemu-xen-dir: ;
subtree-force-update:
ifeq ($(CONFIG_QEMU_XEN),y)
$(MAKE) qemu-xen-dir-force-update
endif
ifeq ($(CONFIG_QEMU_TRAD),y)
$(MAKE) qemu-xen-traditional-dir-force-update
endif
ifeq ($(CONFIG_X86),y)
$(MAKE) -C firmware subtree-force-update
endif
subtree-force-update-all:
$(MAKE) qemu-xen-dir-force-update
$(MAKE) qemu-xen-traditional-dir-force-update
$(MAKE) -C firmware subtree-force-update-all