qemu.mk 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530
  1. ################################################################################
  2. #
  3. # qemu
  4. #
  5. ################################################################################
  6. # When updating the version, check whether the list of supported targets
  7. # needs to be updated.
  8. QEMU_VERSION = 9.1.0
  9. QEMU_SOURCE = qemu-$(QEMU_VERSION).tar.xz
  10. QEMU_SITE = https://download.qemu.org
  11. QEMU_SELINUX_MODULES = qemu virt
  12. QEMU_LICENSE = GPL-2.0, LGPL-2.1, MIT, BSD-3-Clause, BSD-2-Clause, Others/BSD-1c
  13. QEMU_LICENSE_FILES = COPYING COPYING.LIB
  14. # NOTE: there is no top-level license file for non-(L)GPL licenses;
  15. # the non-(L)GPL license texts are specified in the affected
  16. # individual source files.
  17. QEMU_CPE_ID_VENDOR = qemu
  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. # Target-qemu
  22. QEMU_DEPENDENCIES = \
  23. host-meson \
  24. host-pkgconf \
  25. host-python3 \
  26. host-python-distlib \
  27. libglib2 \
  28. zlib
  29. # Need the LIBS variable because librt and libm are
  30. # not automatically pulled. :-(
  31. QEMU_LIBS = -lrt -lm
  32. QEMU_OPTS =
  33. QEMU_VARS = LIBTOOL=$(HOST_DIR)/bin/libtool
  34. # If we want to build all emulation targets, we just need to either enable -user
  35. # and/or -system emulation appropriately.
  36. # Otherwise, if we want only a subset of targets, we must still enable all of
  37. # them, so that QEMU properly builds a list of default targets from which it
  38. # checks if the specified sub-set is valid.
  39. ifeq ($(BR2_PACKAGE_QEMU_SYSTEM),y)
  40. QEMU_DEPENDENCIES += pixman
  41. QEMU_OPTS += --enable-system
  42. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_AARCH64) += aarch64-softmmu
  43. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_ALPHA) += alpha-softmmu
  44. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_ARM) += arm-softmmu
  45. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_AVR) += avr-softmmu
  46. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_CRIS) += cris-softmmu
  47. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_HPPA) += hppa-softmmu
  48. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_I386) += i386-softmmu
  49. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_LOONGARCH64) += loongarch64-softmmu
  50. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_M68K) += m68k-softmmu
  51. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_MICROBLAZE) += microblaze-softmmu
  52. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_MICROBLAZEEL) += microblazeel-softmmu
  53. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_MIPS) += mips-softmmu
  54. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_MIPS64) += mips64-softmmu
  55. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_MIPS64EL) += mips64el-softmmu
  56. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_MIPSEL) += mipsel-softmmu
  57. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_OR1K) += or1k-softmmu
  58. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_PPC) += ppc-softmmu
  59. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_PPC64) += ppc64-softmmu
  60. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_RISCV32) += riscv32-softmmu
  61. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_RISCV64) += riscv64-softmmu
  62. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_RX) += rx-softmmu
  63. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_S390X) += s390x-softmmu
  64. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_SH4) += sh4-softmmu
  65. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_SH4EB) += sh4eb-softmmu
  66. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_SPARC) += sparc-softmmu
  67. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_SPARC64) += sparc64-softmmu
  68. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_TRICORE) += tricore-softmmu
  69. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_X86_64) += x86_64-softmmu
  70. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_XTENSA) += xtensa-softmmu
  71. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_XTENSAEB) += xtensaeb-softmmu
  72. else
  73. QEMU_OPTS += --disable-system
  74. endif
  75. ifeq ($(BR2_PACKAGE_QEMU_LINUX_USER),y)
  76. QEMU_OPTS += --enable-linux-user
  77. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_AARCH64) += aarch64-linux-user
  78. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_AARCH64_BE) += aarch64_be-linux-user
  79. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_ALPHA) += alpha-linux-user
  80. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_ARM) += arm-linux-user
  81. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_ARMEB) += armeb-linux-user
  82. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_CRIS) += cris-linux-user
  83. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_HEXAGON) += hexagon-linux-user
  84. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_HPPA) += hppa-linux-user
  85. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_I386) += i386-linux-user
  86. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_LOONGARCH64) += loongarch64-linux-user
  87. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_M68K) += m68k-linux-user
  88. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_MICROBLAZE) += microblaze-linux-user
  89. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_MICROBLAZEEL) += microblazeel-linux-user
  90. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_MIPS) += mips-linux-user
  91. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_MIPS64) += mips64-linux-user
  92. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_MIPS64EL) += mips64el-linux-user
  93. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_MIPSEL) += mipsel-linux-user
  94. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_MIPSN32) += mipsn32-linux-user
  95. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_MIPSN32EL) += mipsn32el-linux-user
  96. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_OR1K) += or1k-linux-user
  97. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_PPC) += ppc-linux-user
  98. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_PPC64) += ppc64-linux-user
  99. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_PPC64LE) += ppc64le-linux-user
  100. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_RISCV32) += riscv32-linux-user
  101. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_RISCV64) += riscv64-linux-user
  102. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_S390X) += s390x-linux-user
  103. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_SH4) += sh4-linux-user
  104. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_SH4EB) += sh4eb-linux-user
  105. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_SPARC) += sparc-linux-user
  106. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_SPARC32PLUS) += sparc32plus-linux-user
  107. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_SPARC64) += sparc64-linux-user
  108. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_X86_64) += x86_64-linux-user
  109. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_XTENSA) += xtensa-linux-user
  110. QEMU_TARGET_LIST_$(BR2_PACKAGE_QEMU_TARGET_XTENSAEB) += xtensaeb-linux-user
  111. else
  112. QEMU_OPTS += --disable-linux-user
  113. endif
  114. # Build the list of desired targets, if any.
  115. ifeq ($(BR2_PACKAGE_QEMU_CHOOSE_TARGETS),y)
  116. QEMU_TARGET_LIST = $(strip $(QEMU_TARGET_LIST_y))
  117. ifeq ($(BR_BUILDING).$(QEMU_TARGET_LIST),y.)
  118. $(error "No emulator target has ben chosen")
  119. endif
  120. QEMU_OPTS += --target-list="$(QEMU_TARGET_LIST)"
  121. endif
  122. ifeq ($(BR2_TOOLCHAIN_USES_UCLIBC),y)
  123. QEMU_OPTS += --disable-vhost-user
  124. else
  125. QEMU_OPTS += --enable-vhost-user
  126. endif
  127. ifeq ($(BR2_PACKAGE_QEMU_SLIRP),y)
  128. QEMU_OPTS += --enable-slirp
  129. QEMU_DEPENDENCIES += slirp
  130. else
  131. QEMU_OPTS += --disable-slirp
  132. endif
  133. ifeq ($(BR2_PACKAGE_QEMU_SDL),y)
  134. QEMU_OPTS += --enable-sdl
  135. QEMU_DEPENDENCIES += sdl2
  136. QEMU_VARS += SDL2_CONFIG=$(STAGING_DIR)/usr/bin/sdl2-config
  137. else
  138. QEMU_OPTS += --disable-sdl
  139. endif
  140. ifeq ($(BR2_PACKAGE_QEMU_FDT),y)
  141. QEMU_OPTS += --enable-fdt
  142. QEMU_DEPENDENCIES += dtc
  143. else
  144. QEMU_OPTS += --disable-fdt
  145. endif
  146. ifeq ($(BR2_PACKAGE_QEMU_TRACING),y)
  147. QEMU_OPTS += --enable-trace-backends=log
  148. else
  149. QEMU_OPTS += --enable-trace-backends=nop
  150. endif
  151. ifeq ($(BR2_PACKAGE_QEMU_TOOLS),y)
  152. QEMU_OPTS += --enable-tools
  153. else
  154. QEMU_OPTS += --disable-tools
  155. endif
  156. ifeq ($(BR2_PACKAGE_QEMU_GUEST_AGENT),y)
  157. QEMU_OPTS += --enable-guest-agent
  158. else
  159. QEMU_OPTS += --disable-guest-agent
  160. endif
  161. ifeq ($(BR2_PACKAGE_LIBFUSE3),y)
  162. QEMU_OPTS += --enable-fuse --enable-fuse-lseek
  163. QEMU_DEPENDENCIES += libfuse3
  164. else
  165. QEMU_OPTS += --disable-fuse --disable-fuse-lseek
  166. endif
  167. ifeq ($(BR2_PACKAGE_LIBSECCOMP),y)
  168. QEMU_OPTS += --enable-seccomp
  169. QEMU_DEPENDENCIES += libseccomp
  170. else
  171. QEMU_OPTS += --disable-seccomp
  172. endif
  173. ifeq ($(BR2_PACKAGE_LIBSSH),y)
  174. QEMU_OPTS += --enable-libssh
  175. QEMU_DEPENDENCIES += libssh
  176. else
  177. QEMU_OPTS += --disable-libssh
  178. endif
  179. ifeq ($(BR2_PACKAGE_LIBUSB),y)
  180. QEMU_OPTS += --enable-libusb
  181. QEMU_DEPENDENCIES += libusb
  182. else
  183. QEMU_OPTS += --disable-libusb
  184. endif
  185. ifeq ($(BR2_PACKAGE_LIBVNCSERVER),y)
  186. QEMU_OPTS += \
  187. --enable-vnc \
  188. --disable-vnc-sasl
  189. QEMU_DEPENDENCIES += libvncserver
  190. ifeq ($(BR2_PACKAGE_LIBPNG),y)
  191. QEMU_OPTS += --enable-png
  192. QEMU_DEPENDENCIES += libpng
  193. else
  194. QEMU_OPTS += --disable-png
  195. endif
  196. ifeq ($(BR2_PACKAGE_JPEG),y)
  197. QEMU_OPTS += --enable-vnc-jpeg
  198. QEMU_DEPENDENCIES += jpeg
  199. else
  200. QEMU_OPTS += --disable-vnc-jpeg
  201. endif
  202. else
  203. QEMU_OPTS += --disable-vnc
  204. endif
  205. ifeq ($(BR2_PACKAGE_NETTLE),y)
  206. QEMU_OPTS += --enable-nettle
  207. QEMU_DEPENDENCIES += nettle
  208. else
  209. QEMU_OPTS += --disable-nettle
  210. endif
  211. ifeq ($(BR2_PACKAGE_NUMACTL),y)
  212. QEMU_OPTS += --enable-numa
  213. QEMU_DEPENDENCIES += numactl
  214. else
  215. QEMU_OPTS += --disable-numa
  216. endif
  217. ifeq ($(BR2_PACKAGE_PIPEWIRE),y)
  218. QEMU_OPTS += --enable-pipewire
  219. QEMU_DEPENDENCIES += pipewire
  220. else
  221. QEMU_OPTS += --disable-pipewire
  222. endif
  223. ifeq ($(BR2_PACKAGE_SPICE),y)
  224. QEMU_OPTS += --enable-spice
  225. QEMU_DEPENDENCIES += spice
  226. else
  227. QEMU_OPTS += --disable-spice
  228. endif
  229. ifeq ($(BR2_PACKAGE_USBREDIR),y)
  230. QEMU_OPTS += --enable-usb-redir
  231. QEMU_DEPENDENCIES += usbredir
  232. else
  233. QEMU_OPTS += --disable-usb-redir
  234. endif
  235. ifeq ($(BR2_STATIC_LIBS),y)
  236. QEMU_OPTS += --static
  237. endif
  238. ifeq ($(BR2_PACKAGE_QEMU_BLOBS),y)
  239. QEMU_OPTS += --enable-install-blobs
  240. else
  241. QEMU_OPTS += --disable-install-blobs
  242. endif
  243. # Override CPP, as it expects to be able to call it like it'd
  244. # call the compiler.
  245. define QEMU_CONFIGURE_CMDS
  246. unset TARGET_DIR; \
  247. cd $(@D); \
  248. LIBS='$(QEMU_LIBS)' \
  249. $(TARGET_CONFIGURE_OPTS) \
  250. $(TARGET_CONFIGURE_ARGS) \
  251. CPP="$(TARGET_CC) -E" \
  252. $(QEMU_VARS) \
  253. ./configure \
  254. --prefix=/usr \
  255. --cross-prefix=$(TARGET_CROSS) \
  256. --audio-drv-list= \
  257. --python=$(HOST_DIR)/bin/python3 \
  258. --ninja=$(HOST_DIR)/bin/ninja \
  259. --disable-alsa \
  260. --disable-bpf \
  261. --disable-brlapi \
  262. --disable-bsd-user \
  263. --disable-cap-ng \
  264. --disable-capstone \
  265. --disable-containers \
  266. --disable-coreaudio \
  267. --disable-curl \
  268. --disable-curses \
  269. --disable-dbus-display \
  270. --disable-docs \
  271. --disable-dsound \
  272. --disable-hvf \
  273. --disable-jack \
  274. --disable-libiscsi \
  275. --disable-linux-aio \
  276. --disable-linux-io-uring \
  277. --disable-malloc-trim \
  278. --disable-membarrier \
  279. --disable-mpath \
  280. --disable-netmap \
  281. --disable-opengl \
  282. --disable-oss \
  283. --disable-pa \
  284. --disable-plugins \
  285. --disable-rbd \
  286. --disable-sanitizers \
  287. --disable-selinux \
  288. --disable-sparse \
  289. --disable-strip \
  290. --disable-vde \
  291. --disable-vhost-crypto \
  292. --disable-vhost-user-blk-server \
  293. --disable-virtfs \
  294. --disable-whpx \
  295. --disable-xen \
  296. --enable-attr \
  297. --enable-kvm \
  298. --enable-vhost-net \
  299. --disable-download \
  300. --disable-hexagon-idef-parser \
  301. $(QEMU_OPTS)
  302. endef
  303. define QEMU_BUILD_CMDS
  304. unset TARGET_DIR; \
  305. $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)
  306. endef
  307. define QEMU_INSTALL_TARGET_CMDS
  308. unset TARGET_DIR; \
  309. $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(QEMU_MAKE_ENV) DESTDIR=$(TARGET_DIR) install
  310. endef
  311. $(eval $(generic-package))
  312. #-------------------------------------------------------------
  313. # Host-qemu
  314. HOST_QEMU_DEPENDENCIES = \
  315. host-libglib2 \
  316. host-meson \
  317. host-pixman \
  318. host-pkgconf \
  319. host-python3 \
  320. host-python-distlib \
  321. host-slirp \
  322. host-zlib
  323. # BR ARCH qemu
  324. # ------- ----
  325. # arm arm
  326. # armeb armeb
  327. # i486 i386
  328. # i586 i386
  329. # i686 i386
  330. # x86_64 x86_64
  331. # m68k m68k
  332. # microblaze microblaze
  333. # mips mips
  334. # mipsel mipsel
  335. # mips64 mips64
  336. # mips64el mips64el
  337. # nios2 nios2
  338. # or1k or1k
  339. # powerpc ppc
  340. # powerpc64 ppc64
  341. # powerpc64le ppc64 (system) / ppc64le (usermode)
  342. # sh2a not supported
  343. # sh4 sh4
  344. # sh4eb sh4eb
  345. # sh4a sh4
  346. # sh4aeb sh4eb
  347. # sparc sparc
  348. # sparc64 sparc64
  349. # xtensa xtensa
  350. HOST_QEMU_ARCH = $(ARCH)
  351. ifeq ($(HOST_QEMU_ARCH),armeb)
  352. HOST_QEMU_SYS_ARCH = arm
  353. endif
  354. ifeq ($(HOST_QEMU_ARCH),i486)
  355. HOST_QEMU_ARCH = i386
  356. endif
  357. ifeq ($(HOST_QEMU_ARCH),i586)
  358. HOST_QEMU_ARCH = i386
  359. endif
  360. ifeq ($(HOST_QEMU_ARCH),i686)
  361. HOST_QEMU_ARCH = i386
  362. endif
  363. ifeq ($(HOST_QEMU_ARCH),powerpc)
  364. HOST_QEMU_ARCH = ppc
  365. endif
  366. ifeq ($(HOST_QEMU_ARCH),powerpc64)
  367. HOST_QEMU_ARCH = ppc64
  368. endif
  369. ifeq ($(HOST_QEMU_ARCH),powerpc64le)
  370. HOST_QEMU_ARCH = ppc64le
  371. HOST_QEMU_SYS_ARCH = ppc64
  372. endif
  373. ifeq ($(HOST_QEMU_ARCH),sh4a)
  374. HOST_QEMU_ARCH = sh4
  375. endif
  376. ifeq ($(HOST_QEMU_ARCH),sh4aeb)
  377. HOST_QEMU_ARCH = sh4eb
  378. endif
  379. HOST_QEMU_SYS_ARCH ?= $(HOST_QEMU_ARCH)
  380. HOST_QEMU_CFLAGS = $(HOST_CFLAGS)
  381. ifeq ($(BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE),y)
  382. HOST_QEMU_TARGETS += $(HOST_QEMU_SYS_ARCH)-softmmu
  383. HOST_QEMU_OPTS += --enable-system --enable-fdt
  384. HOST_QEMU_CFLAGS += -I$(HOST_DIR)/include/libfdt
  385. HOST_QEMU_DEPENDENCIES += host-dtc
  386. else
  387. HOST_QEMU_OPTS += --disable-system
  388. endif
  389. ifeq ($(BR2_PACKAGE_HOST_QEMU_LINUX_USER_MODE),y)
  390. HOST_QEMU_TARGETS += $(HOST_QEMU_ARCH)-linux-user
  391. HOST_QEMU_OPTS += --enable-linux-user
  392. HOST_QEMU_HOST_SYSTEM_TYPE = $(shell uname -s)
  393. ifneq ($(HOST_QEMU_HOST_SYSTEM_TYPE),Linux)
  394. $(error "qemu-user can only be used on Linux hosts")
  395. endif
  396. else # BR2_PACKAGE_HOST_QEMU_LINUX_USER_MODE
  397. HOST_QEMU_OPTS += --disable-linux-user
  398. endif # BR2_PACKAGE_HOST_QEMU_LINUX_USER_MODE
  399. ifeq ($(BR2_PACKAGE_HOST_QEMU_VDE2),y)
  400. HOST_QEMU_OPTS += --enable-vde
  401. HOST_QEMU_DEPENDENCIES += host-vde2
  402. endif
  403. # virtfs-proxy-helper is the only user of libcap-ng.
  404. ifeq ($(BR2_PACKAGE_HOST_QEMU_VIRTFS),y)
  405. HOST_QEMU_OPTS += --enable-virtfs --enable-cap-ng
  406. HOST_QEMU_DEPENDENCIES += host-libcap-ng
  407. else
  408. HOST_QEMU_OPTS += --disable-virtfs --disable-cap-ng
  409. endif
  410. ifeq ($(BR2_PACKAGE_HOST_QEMU_USB),y)
  411. HOST_QEMU_OPTS += --enable-libusb
  412. HOST_QEMU_DEPENDENCIES += host-libusb
  413. else
  414. HOST_QEMU_OPTS += --disable-libusb
  415. endif
  416. # Override CPP, as it expects to be able to call it like it'd
  417. # call the compiler.
  418. define HOST_QEMU_CONFIGURE_CMDS
  419. unset TARGET_DIR; \
  420. cd $(@D); $(HOST_CONFIGURE_OPTS) CPP="$(HOSTCC) -E" \
  421. ./configure \
  422. --target-list="$(HOST_QEMU_TARGETS)" \
  423. --prefix="$(HOST_DIR)" \
  424. --interp-prefix=$(STAGING_DIR) \
  425. --cc="$(HOSTCC)" \
  426. --host-cc="$(HOSTCC)" \
  427. --extra-cflags="$(HOST_QEMU_CFLAGS)" \
  428. --extra-ldflags="$(HOST_LDFLAGS)" \
  429. --python=$(HOST_DIR)/bin/python3 \
  430. --ninja=$(HOST_DIR)/bin/ninja \
  431. --disable-alsa \
  432. --disable-bpf \
  433. --disable-bzip2 \
  434. --disable-containers \
  435. --disable-coreaudio \
  436. --disable-curl \
  437. --disable-dbus-display \
  438. --disable-docs \
  439. --disable-dsound \
  440. --disable-jack \
  441. --disable-libssh \
  442. --disable-linux-aio \
  443. --disable-linux-io-uring \
  444. --disable-netmap \
  445. --disable-oss \
  446. --disable-pa \
  447. --disable-pipewire \
  448. --disable-sdl \
  449. --disable-selinux \
  450. --disable-vde \
  451. --disable-vhost-user-blk-server \
  452. --disable-vnc-jpeg \
  453. --disable-plugins \
  454. --disable-png \
  455. --disable-vnc-sasl \
  456. --enable-slirp \
  457. --enable-tools \
  458. --disable-guest-agent \
  459. $(HOST_QEMU_OPTS)
  460. endef
  461. define HOST_QEMU_BUILD_CMDS
  462. unset TARGET_DIR; \
  463. $(HOST_MAKE_ENV) $(MAKE) -C $(@D)
  464. endef
  465. define HOST_QEMU_INSTALL_CMDS
  466. unset TARGET_DIR; \
  467. $(HOST_MAKE_ENV) $(MAKE) -C $(@D) install
  468. endef
  469. # install symlink to qemu-system
  470. ifeq ($(BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE),y)
  471. define HOST_QEMU_POST_INSTALL_SYMLINK
  472. ln -sf ./qemu-system-$(HOST_QEMU_ARCH) $(HOST_DIR)/bin/qemu-system
  473. endef
  474. HOST_QEMU_POST_INSTALL_HOOKS += HOST_QEMU_POST_INSTALL_SYMLINK
  475. endif
  476. $(eval $(host-generic-package))
  477. # variable used by other packages
  478. QEMU_USER = $(HOST_DIR)/bin/qemu-$(HOST_QEMU_ARCH)