1 ################################################################################
5 ################################################################################
8 QEMU_SOURCE = qemu-$(QEMU_VERSION).tar.bz2
9 QEMU_SITE = http://wiki.qemu.org/download
10 QEMU_LICENSE = GPLv2 LGPLv2.1 MIT BSD-3c BSD-2c 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
32 # microblaze microblaze
46 HOST_QEMU_ARCH = $(ARCH)
47 ifeq ($(HOST_QEMU_ARCH),i486)
50 ifeq ($(HOST_QEMU_ARCH),i586)
53 ifeq ($(HOST_QEMU_ARCH),i686)
56 ifeq ($(HOST_QEMU_ARCH),powerpc)
59 ifeq ($(HOST_QEMU_ARCH),sh4a)
62 ifeq ($(HOST_QEMU_ARCH),sh4aeb)
63 HOST_QEMU_ARCH = sh4eb
65 HOST_QEMU_TARGETS = $(HOST_QEMU_ARCH)-linux-user
67 ifeq ($(BR2_PACKAGE_HOST_QEMU),y)
68 HOST_QEMU_HOST_SYSTEM_TYPE = $(shell uname -s)
69 ifneq ($(HOST_QEMU_HOST_SYSTEM_TYPE),Linux)
70 $(error "qemu-user can only be used on Linux hosts")
73 # kernel version as major*256 + minor
74 HOST_QEMU_HOST_SYSTEM_VERSION = $(shell uname -r | awk -F. '{ print $$1 * 256 + $$2 }')
75 HOST_QEMU_TARGET_SYSTEM_VERSION = $(shell echo $(BR2_TOOLCHAIN_HEADERS_AT_LEAST) | awk -F. '{ print $$1 * 256 + $$2 }')
76 HOST_QEMU_COMPARE_VERSION = $(shell test $(HOST_QEMU_HOST_SYSTEM_VERSION) -ge $(HOST_QEMU_TARGET_SYSTEM_VERSION) && echo OK)
79 # The principle of qemu-user is that it emulates the instructions of
80 # the target architecture when running the binary, and then when this
81 # binary does a system call, it converts this system call into a
82 # system call on the host machine. This mechanism makes an assumption:
83 # that the target binary will not do system calls that do not exist on
84 # the host. This basically requires that the target binary should be
85 # built with kernel headers that are older or the same as the kernel
86 # version running on the host machine.
88 ifeq ($(BR_BUILDING),y)
89 ifneq ($(HOST_QEMU_COMPARE_VERSION),OK)
90 $(error "Refusing to build qemu-user: target Linux version newer than host's.")
95 define HOST_QEMU_CONFIGURE_CMDS
96 cd $(@D); $(HOST_CONFIGURE_OPTS) ./configure \
97 --target-list="$(HOST_QEMU_TARGETS)" \
98 --prefix="$(HOST_DIR)/usr" \
99 --interp-prefix=$(STAGING_DIR) \
101 --host-cc="$(HOSTCC)" \
102 --python=$(HOST_DIR)/usr/bin/python2 \
103 --extra-cflags="$(HOST_CFLAGS)" \
104 --extra-ldflags="$(HOST_LDFLAGS)"
107 define HOST_QEMU_BUILD_CMDS
108 $(HOST_MAKE_ENV) $(MAKE) -C $(@D)
111 define HOST_QEMU_INSTALL_CMDS
112 $(HOST_MAKE_ENV) $(MAKE) -C $(@D) install
115 $(eval $(host-generic-package))
117 # variable used by other packages
118 QEMU_USER = $(HOST_DIR)/usr/bin/qemu-$(HOST_QEMU_ARCH)
120 #-------------------------------------------------------------
123 QEMU_DEPENDENCIES = host-pkgconf host-python libglib2 zlib pixman
125 # Need the LIBS variable because librt and libm are
126 # not automatically pulled. :-(
132 LIBTOOL=$(HOST_DIR)/usr/bin/libtool \
133 PYTHON=$(HOST_DIR)/usr/bin/python2 \
134 PYTHONPATH=$(TARGET_DIR)/usr/lib/python$(PYTHON_VERSION_MAJOR)/site-packages
136 # If we want to specify only a subset of targets, we must still enable all
137 # of them, so that QEMU properly builds its list of default targets, from
138 # which it then checks if the specified sub-set is valid. That's what we
139 # do in the first part of the if-clause.
140 # Otherwise, if we do not want to pass a sub-set of targets, we then need
141 # to either enable or disable -user and/or -system emulation appropriately.
142 # That's what we do in the else-clause.
143 ifneq ($(call qstrip,$(BR2_PACKAGE_QEMU_CUSTOM_TARGETS)),)
144 QEMU_OPTS += --enable-system --enable-linux-user
145 QEMU_OPTS += --target-list="$(call qstrip,$(BR2_PACKAGE_QEMU_CUSTOM_TARGETS))"
148 ifeq ($(BR2_PACKAGE_QEMU_SYSTEM),y)
149 QEMU_OPTS += --enable-system
151 QEMU_OPTS += --disable-system
154 ifeq ($(BR2_PACKAGE_QEMU_LINUX_USER),y)
155 QEMU_OPTS += --enable-linux-user
157 QEMU_OPTS += --disable-linux-user
162 ifeq ($(BR2_PACKAGE_QEMU_SDL),y)
163 QEMU_OPTS += --enable-sdl
164 QEMU_DEPENDENCIES += sdl
165 QEMU_VARS += SDL_CONFIG=$(BR2_STAGING_DIR)/usr/bin/sdl-config
167 QEMU_OPTS += --disable-sdl
170 ifeq ($(BR2_PACKAGE_QEMU_FDT),y)
171 QEMU_OPTS += --enable-fdt
172 QEMU_DEPENDENCIES += dtc
174 QEMU_OPTS += --disable-fdt
177 define QEMU_CONFIGURE_CMDS
179 LIBS='$(QEMU_LIBS)' \
180 $(TARGET_CONFIGURE_OPTS) \
181 $(TARGET_CONFIGURE_ARGS) \
185 --cross-prefix=$(TARGET_CROSS) \
186 --with-system-pixman \
200 --disable-guest-base \
203 --disable-linux-aio \
209 --disable-usb-redir \
210 --disable-smartcard-nss \
219 define QEMU_BUILD_CMDS
220 $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)
223 define QEMU_INSTALL_TARGET_CMDS
224 $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(QEMU_MAKE_ENV) DESTDIR=$(TARGET_DIR) install
227 $(eval $(generic-package))