1################################################################################ 2# 3# qemu 4# 5################################################################################ 6 7QEMU_VERSION = 6.1.0 8QEMU_SOURCE = qemu-$(QEMU_VERSION).tar.xz 9QEMU_SITE = http://download.qemu.org 10QEMU_LICENSE = GPL-2.0, LGPL-2.1, MIT, BSD-3-Clause, BSD-2-Clause, Others/BSD-1c 11QEMU_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. 15QEMU_CPE_ID_VENDOR = qemu 16 17#------------------------------------------------------------- 18 19# The build system is now partly based on Meson. 20# However, building is still done with configure and make as in previous versions of QEMU. 21 22# Target-qemu 23QEMU_DEPENDENCIES = host-meson host-pkgconf libglib2 zlib pixman host-python3 24 25# Need the LIBS variable because librt and libm are 26# not automatically pulled. :-( 27QEMU_LIBS = -lrt -lm 28 29QEMU_OPTS = 30 31QEMU_VARS = LIBTOOL=$(HOST_DIR)/bin/libtool 32 33# If we want to specify only a subset of targets, we must still enable all 34# of them, so that QEMU properly builds its list of default targets, from 35# which it then checks if the specified sub-set is valid. That's what we 36# do in the first part of the if-clause. 37# Otherwise, if we do not want to pass a sub-set of targets, we then need 38# to either enable or disable -user and/or -system emulation appropriately. 39# That's what we do in the else-clause. 40ifneq ($(call qstrip,$(BR2_PACKAGE_QEMU_CUSTOM_TARGETS)),) 41QEMU_OPTS += --enable-system --enable-linux-user 42QEMU_OPTS += --target-list="$(call qstrip,$(BR2_PACKAGE_QEMU_CUSTOM_TARGETS))" 43else 44 45ifeq ($(BR2_PACKAGE_QEMU_SYSTEM),y) 46QEMU_OPTS += --enable-system 47else 48QEMU_OPTS += --disable-system 49endif 50 51ifeq ($(BR2_PACKAGE_QEMU_LINUX_USER),y) 52QEMU_OPTS += --enable-linux-user 53else 54QEMU_OPTS += --disable-linux-user 55endif 56 57endif 58 59ifeq ($(BR2_TOOLCHAIN_USES_UCLIBC),y) 60QEMU_OPTS += --disable-vhost-user 61else 62QEMU_OPTS += --enable-vhost-user 63endif 64 65ifeq ($(BR2_PACKAGE_QEMU_SLIRP),y) 66QEMU_OPTS += --enable-slirp=system 67QEMU_DEPENDENCIES += slirp 68else 69QEMU_OPTS += --disable-slirp 70endif 71 72ifeq ($(BR2_PACKAGE_QEMU_SDL),y) 73QEMU_OPTS += --enable-sdl 74QEMU_DEPENDENCIES += sdl2 75QEMU_VARS += SDL2_CONFIG=$(BR2_STAGING_DIR)/usr/bin/sdl2-config 76else 77QEMU_OPTS += --disable-sdl 78endif 79 80ifeq ($(BR2_PACKAGE_QEMU_FDT),y) 81QEMU_OPTS += --enable-fdt 82QEMU_DEPENDENCIES += dtc 83else 84QEMU_OPTS += --disable-fdt 85endif 86 87ifeq ($(BR2_PACKAGE_QEMU_TOOLS),y) 88QEMU_OPTS += --enable-tools 89else 90QEMU_OPTS += --disable-tools 91endif 92 93ifeq ($(BR2_PACKAGE_LIBFUSE3),y) 94QEMU_OPTS += --enable-fuse --enable-fuse-lseek 95QEMU_DEPENDENCIES += libfuse3 96else 97QEMU_OPTS += --disable-fuse --disable-fuse-lseek 98endif 99 100ifeq ($(BR2_PACKAGE_LIBSECCOMP),y) 101QEMU_OPTS += --enable-seccomp 102QEMU_DEPENDENCIES += libseccomp 103else 104QEMU_OPTS += --disable-seccomp 105endif 106 107ifeq ($(BR2_PACKAGE_LIBSSH),y) 108QEMU_OPTS += --enable-libssh 109QEMU_DEPENDENCIES += libssh 110else 111QEMU_OPTS += --disable-libssh 112endif 113 114ifeq ($(BR2_PACKAGE_LIBUSB),y) 115QEMU_OPTS += --enable-libusb 116QEMU_DEPENDENCIES += libusb 117else 118QEMU_OPTS += --disable-libusb 119endif 120 121ifeq ($(BR2_PACKAGE_LIBVNCSERVER),y) 122QEMU_OPTS += \ 123 --enable-vnc \ 124 --disable-vnc-sasl 125QEMU_DEPENDENCIES += libvncserver 126ifeq ($(BR2_PACKAGE_LIBPNG),y) 127QEMU_OPTS += --enable-vnc-png 128QEMU_DEPENDENCIES += libpng 129else 130QEMU_OPTS += --disable-vnc-png 131endif 132ifeq ($(BR2_PACKAGE_JPEG),y) 133QEMU_OPTS += --enable-vnc-jpeg 134QEMU_DEPENDENCIES += jpeg 135else 136QEMU_OPTS += --disable-vnc-jpeg 137endif 138else 139QEMU_OPTS += --disable-vnc 140endif 141 142ifeq ($(BR2_PACKAGE_NETTLE),y) 143QEMU_OPTS += --enable-nettle 144QEMU_DEPENDENCIES += nettle 145else 146QEMU_OPTS += --disable-nettle 147endif 148 149ifeq ($(BR2_PACKAGE_NUMACTL),y) 150QEMU_OPTS += --enable-numa 151QEMU_DEPENDENCIES += numactl 152else 153QEMU_OPTS += --disable-numa 154endif 155 156ifeq ($(BR2_PACKAGE_SPICE),y) 157QEMU_OPTS += --enable-spice 158QEMU_DEPENDENCIES += spice 159else 160QEMU_OPTS += --disable-spice 161endif 162 163ifeq ($(BR2_PACKAGE_USBREDIR),y) 164QEMU_OPTS += --enable-usb-redir 165QEMU_DEPENDENCIES += usbredir 166else 167QEMU_OPTS += --disable-usb-redir 168endif 169 170ifeq ($(BR2_STATIC_LIBS),y) 171QEMU_OPTS += --static 172endif 173 174# Override CPP, as it expects to be able to call it like it'd 175# call the compiler. 176define QEMU_CONFIGURE_CMDS 177 unset TARGET_DIR; \ 178 cd $(@D); \ 179 LIBS='$(QEMU_LIBS)' \ 180 $(TARGET_CONFIGURE_OPTS) \ 181 $(TARGET_CONFIGURE_ARGS) \ 182 CPP="$(TARGET_CC) -E" \ 183 $(QEMU_VARS) \ 184 ./configure \ 185 --prefix=/usr \ 186 --cross-prefix=$(TARGET_CROSS) \ 187 --audio-drv-list= \ 188 --meson=$(HOST_DIR)/bin/meson \ 189 --ninja=$(HOST_DIR)/bin/ninja \ 190 --enable-kvm \ 191 --enable-attr \ 192 --enable-vhost-net \ 193 --disable-bpf \ 194 --disable-bsd-user \ 195 --disable-containers \ 196 --disable-xen \ 197 --disable-virtfs \ 198 --disable-brlapi \ 199 --disable-curses \ 200 --disable-curl \ 201 --disable-vde \ 202 --disable-linux-aio \ 203 --disable-linux-io-uring \ 204 --disable-cap-ng \ 205 --disable-docs \ 206 --disable-rbd \ 207 --disable-libiscsi \ 208 --disable-strip \ 209 --disable-sparse \ 210 --disable-mpath \ 211 --disable-sanitizers \ 212 --disable-hvf \ 213 --disable-whpx \ 214 --disable-malloc-trim \ 215 --disable-membarrier \ 216 --disable-vhost-crypto \ 217 --disable-libxml2 \ 218 --disable-capstone \ 219 --with-git-submodules=ignore \ 220 --disable-opengl \ 221 --disable-vhost-user-blk-server \ 222 --disable-virtiofsd \ 223 $(QEMU_OPTS) 224endef 225 226define QEMU_BUILD_CMDS 227 unset TARGET_DIR; \ 228 $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) 229endef 230 231define QEMU_INSTALL_TARGET_CMDS 232 unset TARGET_DIR; \ 233 $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(QEMU_MAKE_ENV) DESTDIR=$(TARGET_DIR) install 234endef 235 236$(eval $(generic-package)) 237 238#------------------------------------------------------------- 239# Host-qemu 240 241HOST_QEMU_DEPENDENCIES = host-meson host-pkgconf host-zlib host-libglib2 host-pixman host-python3 242 243# BR ARCH qemu 244# ------- ---- 245# arm arm 246# armeb armeb 247# i486 i386 248# i586 i386 249# i686 i386 250# x86_64 x86_64 251# m68k m68k 252# microblaze microblaze 253# mips mips 254# mipsel mipsel 255# mips64 mips64 256# mips64el mips64el 257# nios2 nios2 258# or1k or1k 259# powerpc ppc 260# powerpc64 ppc64 261# powerpc64le ppc64 (system) / ppc64le (usermode) 262# sh2a not supported 263# sh4 sh4 264# sh4eb sh4eb 265# sh4a sh4 266# sh4aeb sh4eb 267# sparc sparc 268# sparc64 sparc64 269# xtensa xtensa 270 271HOST_QEMU_ARCH = $(ARCH) 272ifeq ($(HOST_QEMU_ARCH),i486) 273HOST_QEMU_ARCH = i386 274endif 275ifeq ($(HOST_QEMU_ARCH),i586) 276HOST_QEMU_ARCH = i386 277endif 278ifeq ($(HOST_QEMU_ARCH),i686) 279HOST_QEMU_ARCH = i386 280endif 281ifeq ($(HOST_QEMU_ARCH),powerpc) 282HOST_QEMU_ARCH = ppc 283endif 284ifeq ($(HOST_QEMU_ARCH),powerpc64) 285HOST_QEMU_ARCH = ppc64 286endif 287ifeq ($(HOST_QEMU_ARCH),powerpc64le) 288HOST_QEMU_ARCH = ppc64le 289HOST_QEMU_SYS_ARCH = ppc64 290endif 291ifeq ($(HOST_QEMU_ARCH),sh4a) 292HOST_QEMU_ARCH = sh4 293endif 294ifeq ($(HOST_QEMU_ARCH),sh4aeb) 295HOST_QEMU_ARCH = sh4eb 296endif 297HOST_QEMU_SYS_ARCH ?= $(HOST_QEMU_ARCH) 298 299HOST_QEMU_CFLAGS = $(HOST_CFLAGS) 300 301ifeq ($(BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE),y) 302HOST_QEMU_TARGETS += $(HOST_QEMU_SYS_ARCH)-softmmu 303HOST_QEMU_OPTS += --enable-system --enable-fdt 304HOST_QEMU_CFLAGS += -I$(HOST_DIR)/include/libfdt 305HOST_QEMU_DEPENDENCIES += host-dtc 306else 307HOST_QEMU_OPTS += --disable-system 308endif 309 310ifeq ($(BR2_PACKAGE_HOST_QEMU_LINUX_USER_MODE),y) 311HOST_QEMU_TARGETS += $(HOST_QEMU_ARCH)-linux-user 312HOST_QEMU_OPTS += --enable-linux-user 313 314HOST_QEMU_HOST_SYSTEM_TYPE = $(shell uname -s) 315ifneq ($(HOST_QEMU_HOST_SYSTEM_TYPE),Linux) 316$(error "qemu-user can only be used on Linux hosts") 317endif 318 319else # BR2_PACKAGE_HOST_QEMU_LINUX_USER_MODE 320HOST_QEMU_OPTS += --disable-linux-user 321endif # BR2_PACKAGE_HOST_QEMU_LINUX_USER_MODE 322 323ifeq ($(BR2_PACKAGE_HOST_QEMU_VDE2),y) 324HOST_QEMU_OPTS += --enable-vde 325HOST_QEMU_DEPENDENCIES += host-vde2 326endif 327 328# virtfs-proxy-helper is the only user of libcap-ng. 329ifeq ($(BR2_PACKAGE_HOST_QEMU_VIRTFS),y) 330HOST_QEMU_OPTS += --enable-virtfs --enable-cap-ng 331HOST_QEMU_DEPENDENCIES += host-libcap-ng 332else 333HOST_QEMU_OPTS += --disable-virtfs --disable-cap-ng 334endif 335 336ifeq ($(BR2_PACKAGE_HOST_QEMU_USB),y) 337HOST_QEMU_OPTS += --enable-libusb 338HOST_QEMU_DEPENDENCIES += host-libusb 339else 340HOST_QEMU_OPTS += --disable-libusb 341endif 342 343# Override CPP, as it expects to be able to call it like it'd 344# call the compiler. 345define HOST_QEMU_CONFIGURE_CMDS 346 unset TARGET_DIR; \ 347 cd $(@D); $(HOST_CONFIGURE_OPTS) CPP="$(HOSTCC) -E" \ 348 ./configure \ 349 --target-list="$(HOST_QEMU_TARGETS)" \ 350 --prefix="$(HOST_DIR)" \ 351 --interp-prefix=$(STAGING_DIR) \ 352 --cc="$(HOSTCC)" \ 353 --host-cc="$(HOSTCC)" \ 354 --extra-cflags="$(HOST_QEMU_CFLAGS)" \ 355 --extra-ldflags="$(HOST_LDFLAGS)" \ 356 --meson=$(HOST_DIR)/bin/meson \ 357 --ninja=$(HOST_DIR)/bin/ninja \ 358 --disable-bpf \ 359 --disable-bzip2 \ 360 --disable-containers \ 361 --disable-curl \ 362 --disable-docs \ 363 --disable-libssh \ 364 --disable-linux-io-uring \ 365 --disable-sdl \ 366 --disable-vhost-user-blk-server \ 367 --disable-virtiofsd \ 368 --disable-vnc-jpeg \ 369 --disable-vnc-png \ 370 --disable-vnc-sasl \ 371 $(HOST_QEMU_OPTS) 372endef 373 374define HOST_QEMU_BUILD_CMDS 375 unset TARGET_DIR; \ 376 $(HOST_MAKE_ENV) $(MAKE) -C $(@D) 377endef 378 379define HOST_QEMU_INSTALL_CMDS 380 unset TARGET_DIR; \ 381 $(HOST_MAKE_ENV) $(MAKE) -C $(@D) install 382endef 383 384$(eval $(host-generic-package)) 385 386# variable used by other packages 387QEMU_USER = $(HOST_DIR)/bin/qemu-$(HOST_QEMU_ARCH) 388