diff options
author | Yousong Zhou <yszhou4tech@gmail.com> | 2016-12-06 14:52:37 +0800 |
---|---|---|
committer | Yousong Zhou <yszhou4tech@gmail.com> | 2016-12-11 21:32:22 -0600 |
commit | c778ff571489adc577f9b7395940281aa3af4b6a (patch) | |
tree | f0758e285e72e6eb11f83000ffb5e49c2986238b /utils/qemu/Makefile | |
parent | 83f0cfb71ae21cc3fad4916e00b19ab4f3c669dd (diff) |
qemu: packaging target {x86_64,arm}-softmmu and friends
At the moment, only build these softmmu emulators for x86_64 and sunxi
target. The decision was made for the following reasons
- It seems that interests of virtualization with qemu are mostly from
x86, and ARM recently.
- x86, sunxi boards/boxes capable of running qemu with accel=kvm are more
widely available
- Not all host, target combinations of qemu works, or even compiles
- Extra maintenance work and server resources
Test results are as the following
- Nested vmx works: lede-qemu-x86_64-kvm on lede-qemu-x86_64-kvm
- KVM on Cubieboard2 works
- tcg with malta works: lede-qemu-malta-tcg on lede-qemu-malta-tcg.
But it's too slow to be useful thus not included in this version
- mips64 host does not compile
Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
Diffstat (limited to 'utils/qemu/Makefile')
-rw-r--r-- | utils/qemu/Makefile | 191 |
1 files changed, 173 insertions, 18 deletions
diff --git a/utils/qemu/Makefile b/utils/qemu/Makefile index 15fa72b17..c512dec32 100644 --- a/utils/qemu/Makefile +++ b/utils/qemu/Makefile @@ -18,6 +18,7 @@ PKG_LICENSE_FILES:=LICENSE tcg/LICENSE PKG_MAINTAINER:=Yousong Zhou <yszhou4tech@gmail.com> PKG_INSTALL:=1 +PKG_USE_MIPS16:=0 include $(INCLUDE_DIR)/uclibc++.mk include $(INCLUDE_DIR)/package.mk @@ -27,15 +28,100 @@ define Package/qemu-ga CATEGORY:=Utilities TITLE:=QEMU Guest Agent URL:=http://www.qemu.org - DEPENDS:=+glib2 +libpthread $(CXX_DEPENDS) +librt + DEPENDS:= +glib2 $(CXX_DEPENDS) endef define Package/qemu-ga/description -This package contains the QEMU Guest Agent daemon + This package contains the QEMU Guest Agent daemon +endef + +define Package/qemu-ga/install + $(INSTALL_DIR) $(1)/usr/bin + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/qemu-ga $(1)/usr/bin + $(INSTALL_DIR) $(1)/etc/init.d + $(INSTALL_BIN) ./files/qemu-ga.init $(1)/etc/init.d/qemu-ga + $(INSTALL_DIR) $(1)/etc/hotplug.d/virtio-ports + $(INSTALL_BIN) ./files/virtio-ports.hotplug $(1)/etc/hotplug.d/virtio-ports/qemu-ga +endef + +define Package/qemu-blobs + SECTION:=utils + CATEGORY:=Utilities + TITLE:=QEMU blobs of BIOS, VGA BIOS and keymaps + URL:=http://www.qemu.org + DEPENDS:= +endef + +define Package/qemu-blobs/install + $(INSTALL_DIR) $(1)/usr/share/qemu + $(CP) $(PKG_INSTALL_DIR)/usr/share/qemu/* $(1)/usr/share/qemu +endef + +define Package/qemu-bridge-helper + SECTION:=utils + CATEGORY:=Utilities + TITLE:=QEMU bridge helper + URL:=http://www.qemu.org + DEPENDS:=+glib2 $(CXX_DEPENDS) +endef + +define Package/qemu-bridge-helper/install + $(INSTALL_DIR) $(1)/usr/lib/ + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/qemu-bridge-helper $(1)/usr/lib + $(INSTALL_DIR) $(1)/etc/qemu + $(INSTALL_DATA) ./files/bridge.conf $(1)/etc/qemu endef PKG_CONFIG_DEPENDS += CONFIG_PACKAGE_qemu-ga +# Naming rules used in qemu Makefile.target +define qemu-prog_ + $(if $(filter %-softmmu,$(1)), \ + $(patsubst %-softmmu,qemu-system-%,$(1)), \ + $(error unknown qemu target $(1)) \ + ) +endef +qemu-prog = $(strip $(call qemu-prog_,$(1))) + +# Why libfdt was enabled for all softmmu targets: according to qemu's +# configure script, libfdt is only strictly required for the following targets +# and is optional for others. But libfdt support will be built into other +# targets when any single target enabled it. +# +# aarch64%-softmmu arm%-softmmu ppc%-softmmu microblaze%-softmmu +# +define qemu-target + PKG_CONFIG_DEPENDS += CONFIG_PACKAGE_qemu-$(1) + + define Package/qemu-$(1) + SECTION:=utils + CATEGORY:=Utilities + TITLE:=QEMU target $(1) + URL:=http://www.qemu.org + DEPENDS:= +glib2 +libpthread +zlib $(CXX_DEPENDS) \ + $(if $(filter %-softmmu,$(1)),+libncurses +libfdt +qemu-blobs) \ + @(TARGET_x86_64||TARGET_sunxi) + endef + + define Package/qemu-$(1)/description + This package contains the QEMU target $(1) + endef + + define Package/qemu-$(1)/install + $(INSTALL_DIR) $$(1)/usr/bin + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/$(call qemu-prog,$(1)) $$(1)/usr/bin + endef + +endef + +QEMU_TARGET_LIST := \ + x86_64-softmmu \ + arm-softmmu \ + +$(foreach target,$(QEMU_TARGET_LIST), \ + $(eval $(call qemu-target,$(target))) \ +) + # QEMU configure script does not recognize these options CONFIGURE_ARGS:=$(filter-out \ --target=% \ @@ -47,36 +133,105 @@ CONFIGURE_ARGS:=$(filter-out \ --disable-nls \ , $(CONFIGURE_ARGS)) -# Building qemu-ga alone does not require zlib, pixman -# -# --disable-tools to disable building pixman which will fail at the moment on -# octeon mips64 target. +# Tell build system of qemu to not add _FORTIFY_SOURCE options and let the base +# build system decide flavor of fortify_source to use CONFIGURE_ARGS += \ --cross-prefix=$(TARGET_CROSS) \ --host-cc="$(HOSTCC)" \ - --target-list='' \ + --disable-fortify-source \ + --disable-stack-protector \ + +CONFIGURE_ARGS += \ + --audio-drv-list='' \ + --disable-debug-info \ + --disable-modules \ + --disable-sdl \ + --disable-qom-cast-debug \ + --disable-virtfs \ + --disable-vnc \ + --disable-debug-tcg \ + --disable-sparse \ + --disable-strip \ + --disable-vnc-sasl \ + --disable-vnc-jpeg \ + --disable-vnc-png \ + --disable-uuid \ + --disable-vde \ + --disable-netmap \ + --disable-xen \ + --disable-xen-pci-passthrough \ + --disable-xen-pv-domain-build \ + --disable-brlapi \ + --disable-bluez \ + --disable-tcg-interpreter \ + --disable-cap-ng \ + --disable-spice \ + --disable-libiscsi \ + --disable-libnfs \ + --disable-cocoa \ + --disable-bsd-user \ + --disable-curl \ + --disable-linux-aio \ + --disable-attr \ --disable-docs \ + --disable-opengl \ + --disable-rbd \ + --disable-xfsctl \ + --disable-smartcard \ + --disable-libusb \ + --disable-usb-redir \ --disable-zlib-test \ + --disable-lzo \ + --disable-snappy \ + --disable-bzip2 \ + --disable-guest-agent-msi \ --disable-tools \ - --without-pixman \ + --disable-seccomp \ + --disable-glusterfs \ + --disable-archipelago \ + --disable-gtk \ + --disable-gnutls \ + --disable-nettle \ + --disable-gcrypt \ + --disable-rdma \ + --disable-vte \ + --disable-virglrenderer \ + --disable-tpm \ + --disable-libssh2 \ + --disable-vhdx \ + --disable-numa \ + --disable-tcmalloc \ + --disable-jemalloc \ + --disable-strip \ + --disable-werror \ + +QEMU_CONFIGURE_TARGET_LIST := $(foreach target,$(QEMU_TARGET_LIST),$(if $(CONFIG_PACKAGE_qemu-$(target)),$(target))) +CONFIGURE_ARGS += --target-list='$(QEMU_CONFIGURE_TARGET_LIST)' ifneq ($(CONFIG_PACKAGE_qemu-ga),) CONFIGURE_ARGS += --enable-guest-agent endif +TARGET_LDFLAGS += -Wl,--as-needed MAKE_VARS += V=s +# ARCH is special in qemu's build system, e.g. ARCH mips64 will be translated +# there to mips and stored in config-host.mak +MAKE_FLAGS:=$(filter-out \ + ARCH=% \ + ,$(MAKE_FLAGS)) -define Build/Compile - $(if $(CONFIG_PACKAGE_qemu-ga),$(call Build/Compile/Default,qemu-ga)) -endef +QEMU_MAKE_TARGETS := \ + $(if $(CONFIG_PACKAGE_qemu-ga),qemu-ga) \ + $(if $(CONFIG_PACKAGE_qemu-bridge-helper),qemu-bridge-helper) \ + $(foreach target,$(QEMU_TARGET_LIST),$(if $(CONFIG_PACKAGE_qemu-$(target)),subdir-$(target))) \ -define Package/qemu-ga/install - $(INSTALL_DIR) $(1)/usr/bin - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/qemu-ga $(1)/usr/bin - $(INSTALL_DIR) $(1)/etc/init.d - $(INSTALL_BIN) ./files/qemu-ga.init $(1)/etc/init.d/qemu-ga - $(INSTALL_DIR) $(1)/etc/hotplug.d/virtio-ports - $(INSTALL_BIN) ./files/virtio-ports.hotplug $(1)/etc/hotplug.d/virtio-ports/qemu-ga +define Build/Compile + $(if $(strip $(QEMU_MAKE_TARGETS)),$(call Build/Compile/Default,$(QEMU_MAKE_TARGETS))) endef $(eval $(call BuildPackage,qemu-ga)) +$(eval $(call BuildPackage,qemu-bridge-helper)) +$(eval $(call BuildPackage,qemu-blobs)) +$(foreach target,$(QEMU_TARGET_LIST), \ + $(eval $(call BuildPackage,qemu-$(target))) \ +) |