1 ################################################################################
5 ################################################################################
8 QEMU_SOURCE = qemu-$(QEMU_VERSION).tar.bz2
9 QEMU_SITE = http://wiki.qemu.org/download
10 QEMU_LICENSE = GPL-2.0, LGPL-2.1, MIT, BSD-3-Clause, BSD-2-Clause, Others/BSD-1c
11 QEMU_LICENSE_FILES = COPYING COPYING.LIB
12 # NOTE: there is no top-level license file for non-(L)GPL licenses;
13 # the non-(L)GPL license texts are specified in the affected
14 # individual source files.
16 #-------------------------------------------------------------
19 HOST_QEMU_DEPENDENCIES = host-pkgconf host-python host-zlib host-libglib2 host-pixman
31 # microblaze microblaze
38 # powerpc64le ppc64 (system) / ppc64le (usermode)
47 HOST_QEMU_ARCH = $(ARCH)
48 ifeq ($(HOST_QEMU_ARCH),i486)
51 ifeq ($(HOST_QEMU_ARCH),i586)
54 ifeq ($(HOST_QEMU_ARCH),i686)
57 ifeq ($(HOST_QEMU_ARCH),powerpc)
60 ifeq ($(HOST_QEMU_ARCH),powerpc64)
61 HOST_QEMU_ARCH = ppc64
63 ifeq ($(HOST_QEMU_ARCH),powerpc64le)
64 HOST_QEMU_ARCH = ppc64le
65 HOST_QEMU_SYS_ARCH = ppc64
67 ifeq ($(HOST_QEMU_ARCH),sh4a)
70 ifeq ($(HOST_QEMU_ARCH),sh4aeb)
71 HOST_QEMU_ARCH = sh4eb
73 HOST_QEMU_SYS_ARCH ?= $(HOST_QEMU_ARCH)
75 ifeq ($(BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE),y)
76 HOST_QEMU_TARGETS += $(HOST_QEMU_SYS_ARCH)-softmmu
77 HOST_QEMU_OPTS += --enable-system --enable-fdt
78 HOST_QEMU_DEPENDENCIES += host-dtc
80 HOST_QEMU_OPTS += --disable-system
83 ifeq ($(BR2_PACKAGE_HOST_QEMU_LINUX_USER_MODE),y)
84 HOST_QEMU_TARGETS += $(HOST_QEMU_ARCH)-linux-user
85 HOST_QEMU_OPTS += --enable-linux-user
87 HOST_QEMU_HOST_SYSTEM_TYPE = $(shell uname -s)
88 ifneq ($(HOST_QEMU_HOST_SYSTEM_TYPE),Linux)
89 $(error "qemu-user can only be used on Linux hosts")
92 # kernel version as major*256 + minor
93 HOST_QEMU_HOST_SYSTEM_VERSION = $(shell uname -r | awk -F. '{ print $$1 * 256 + $$2 }')
94 HOST_QEMU_TARGET_SYSTEM_VERSION = $(shell echo $(BR2_TOOLCHAIN_HEADERS_AT_LEAST) | awk -F. '{ print $$1 * 256 + $$2 }')
95 HOST_QEMU_COMPARE_VERSION = $(shell test $(HOST_QEMU_HOST_SYSTEM_VERSION) -ge $(HOST_QEMU_TARGET_SYSTEM_VERSION) && echo OK)
98 # The principle of qemu-user is that it emulates the instructions of
99 # the target architecture when running the binary, and then when this
100 # binary does a system call, it converts this system call into a
101 # system call on the host machine. This mechanism makes an assumption:
102 # that the target binary will not do system calls that do not exist on
103 # the host. This basically requires that the target binary should be
104 # built with kernel headers that are older or the same as the kernel
105 # version running on the host machine.
108 ifeq ($(BR_BUILDING),y)
109 ifneq ($(HOST_QEMU_COMPARE_VERSION),OK)
110 $(error "Refusing to build qemu-user: target Linux version newer than host's.")
114 else # BR2_PACKAGE_HOST_QEMU_LINUX_USER_MODE
115 HOST_QEMU_OPTS += --disable-linux-user
116 endif # BR2_PACKAGE_HOST_QEMU_LINUX_USER_MODE
118 ifeq ($(BR2_PACKAGE_HOST_QEMU_VDE2),y)
119 HOST_QEMU_OPTS += --enable-vde
120 HOST_QEMU_DEPENDENCIES += host-vde2
123 # Override CPP, as it expects to be able to call it like it'd
125 define HOST_QEMU_CONFIGURE_CMDS
126 cd $(@D); $(HOST_CONFIGURE_OPTS) CPP="$(HOSTCC) -E" \
128 --target-list="$(HOST_QEMU_TARGETS)" \
129 --prefix="$(HOST_DIR)" \
130 --interp-prefix=$(STAGING_DIR) \
132 --host-cc="$(HOSTCC)" \
133 --python=$(HOST_DIR)/bin/python2 \
134 --extra-cflags="$(HOST_CFLAGS)" \
135 --extra-ldflags="$(HOST_LDFLAGS)" \
139 define HOST_QEMU_BUILD_CMDS
140 $(HOST_MAKE_ENV) $(MAKE) -C $(@D)
143 define HOST_QEMU_INSTALL_CMDS
144 $(HOST_MAKE_ENV) $(MAKE) -C $(@D) install
147 $(eval $(host-generic-package))
149 # variable used by other packages
150 QEMU_USER = $(HOST_DIR)/bin/qemu-$(HOST_QEMU_ARCH)
152 #-------------------------------------------------------------
155 QEMU_DEPENDENCIES = host-pkgconf host-python libglib2 zlib pixman
157 # Need the LIBS variable because librt and libm are
158 # not automatically pulled. :-(
164 LIBTOOL=$(HOST_DIR)/bin/libtool \
165 PYTHON=$(HOST_DIR)/bin/python2 \
166 PYTHONPATH=$(TARGET_DIR)/usr/lib/python$(PYTHON_VERSION_MAJOR)/site-packages
168 # If we want to specify only a subset of targets, we must still enable all
169 # of them, so that QEMU properly builds its list of default targets, from
170 # which it then checks if the specified sub-set is valid. That's what we
171 # do in the first part of the if-clause.
172 # Otherwise, if we do not want to pass a sub-set of targets, we then need
173 # to either enable or disable -user and/or -system emulation appropriately.
174 # That's what we do in the else-clause.
175 ifneq ($(call qstrip,$(BR2_PACKAGE_QEMU_CUSTOM_TARGETS)),)
176 QEMU_OPTS += --enable-system --enable-linux-user
177 QEMU_OPTS += --target-list="$(call qstrip,$(BR2_PACKAGE_QEMU_CUSTOM_TARGETS))"
180 ifeq ($(BR2_PACKAGE_QEMU_SYSTEM),y)
181 QEMU_OPTS += --enable-system
183 QEMU_OPTS += --disable-system
186 ifeq ($(BR2_PACKAGE_QEMU_LINUX_USER),y)
187 QEMU_OPTS += --enable-linux-user
189 QEMU_OPTS += --disable-linux-user
194 ifeq ($(BR2_PACKAGE_QEMU_SDL),y)
195 QEMU_OPTS += --enable-sdl
196 QEMU_DEPENDENCIES += sdl
197 QEMU_VARS += SDL_CONFIG=$(BR2_STAGING_DIR)/usr/bin/sdl-config
199 QEMU_OPTS += --disable-sdl
202 ifeq ($(BR2_PACKAGE_QEMU_FDT),y)
203 QEMU_OPTS += --enable-fdt
204 QEMU_DEPENDENCIES += dtc
206 QEMU_OPTS += --disable-fdt
209 ifeq ($(BR2_PACKAGE_QEMU_TOOLS),y)
210 QEMU_OPTS += --enable-tools
212 QEMU_OPTS += --disable-tools
215 # Override CPP, as it expects to be able to call it like it'd
217 define QEMU_CONFIGURE_CMDS
219 LIBS='$(QEMU_LIBS)' \
220 $(TARGET_CONFIGURE_OPTS) \
221 $(TARGET_CONFIGURE_ARGS) \
222 CPP="$(TARGET_CC) -E" \
226 --cross-prefix=$(TARGET_CROSS) \
227 --with-system-pixman \
242 --disable-linux-aio \
248 --disable-usb-redir \
256 define QEMU_BUILD_CMDS
257 $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)
260 define QEMU_INSTALL_TARGET_CMDS
261 $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(QEMU_MAKE_ENV) DESTDIR=$(TARGET_DIR) install
264 $(eval $(generic-package))