qemu.mk 16 KB

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