blob: 4770db8a6c0d64e0004afa8be49bf6bda5893a79 [file] [log] [blame]
Lorenz Brun0de18932021-03-11 00:36:48 +01001diff --git a/BUILD b/BUILD
2new file mode 100644
3index 0000000000..436f8c5cf3
4--- /dev/null
5+++ b/BUILD
Tim Windelschmidtf69d84b2024-07-03 20:32:19 +02006@@ -0,0 +1,1356 @@
Lorenz Brun0de18932021-03-11 00:36:48 +01007+load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library")
8+load("@rules_python//python:defs.bzl", "py_binary")
Tim Windelschmidtafeb4c42024-07-17 21:37:26 +02009+load("@@//build/utils:template_file.bzl", "template_file")
Serge Bazanski4e6fe4a2023-03-23 17:35:22 +010010+load(":defs.bzl", "filter_label_suffix", "filter_label_contains")
Lorenz Brun0de18932021-03-11 00:36:48 +010011+load("//:defs.bzl", "cc_qemu_keymaps")
12+
13+filegroup(
14+ name = "trace-files",
15+ srcs = glob(["**/trace-events"]) + ["//qapi:trace-events"],
16+ visibility = ["//visibility:public"],
17+)
18+
19+filter_label_suffix(
20+ name = "qapi_hdrs_gen",
21+ srcs = ["//qapi:qapi_generated"],
22+ suffix = ".h",
23+)
24+
25+filter_label_suffix(
26+ name = "qapi_c",
27+ srcs = ["//qapi:qapi_generated"],
28+ suffix = ".c",
29+)
30+
Serge Bazanski4e6fe4a2023-03-23 17:35:22 +010031+# qapi sources which are needed for qemu-img. We don't want to pull in too
32+# many, as that basically pulls in the entirety of softmmu and monitor
33+# functionality, which we don't want and are poisoned by a targetless build
34+# anyway.
35+filter_label_contains(
36+ name = "qapi_qemu_img_c",
37+ srcs = [":qapi_c"],
38+ contains =
39+ ["%s-block" % kind for kind in ["types", "events", "visit"]] +
40+ ["%s-job" % kind for kind in ["types", "events", "visit"]] +
41+ ["%s-crypto" % kind for kind in ["types", "visit"]] +
42+ ["%s-common" % kind for kind in ["types", "visit"]] +
43+ ["%s-sockets" % kind for kind in ["types", "visit"]] +
44+ ["%s-misc." % kind for kind in ["types", "visit"]] +
45+ ["builtin-%s" % kind for kind in ["types", "visit"]],
46+)
47+
Lorenz Brun0de18932021-03-11 00:36:48 +010048+filter_label_suffix(
49+ name = "trace_c",
50+ srcs = ["//trace"],
51+ exclude = [
52+ "trace-linux-user.c",
53+ "trace-hw_pci-host.c",
54+ ],
55+ suffix = ".c",
56+)
57+
58+genrule(
59+ name = "block-coroutine-gen",
60+ srcs = [
61+ "include/block/block.h",
62+ "block/coroutines.h",
63+ ],
64+ outs = ["block-gen.c"],
65+ cmd = "./$(location //scripts:block-coroutine-wrapper) \"$@\" $(location include/block/block.h) $(location block/coroutines.h)",
66+ tools = ["//scripts:block-coroutine-wrapper"],
67+)
68+
69+filter_label_suffix(
70+ name = "trace_hdrs_gen",
71+ srcs = ["//trace"],
72+ suffix = ".h",
73+)
74+
75+filegroup(
76+ name = "gen_hdrs",
77+ srcs = [
78+ ":libslirp-version.h",
79+ ":qapi_hdrs_gen",
80+ ":trace_hdrs_gen",
81+ "//qapi:extra_hdrs",
82+ "//trace:extra_hdrs",
83+ ],
84+)
85+
86+filegroup(
87+ name = "all_headers",
88+ srcs = glob([
89+ "accel/**/*.h",
90+ "accel/**/*.inc",
91+ "audio/**/*.h",
92+ "audio/**/*.inc",
93+ "authz/**/*.h",
94+ "authz/**/*.inc",
95+ "backends/**/*.h",
96+ "backends/**/*.inc",
97+ "block/**/*.h",
98+ "block/**/*.inc",
99+ "capstone/**/*.h",
100+ "capstone/**/*.inc",
101+ "chardev/**/*.h",
102+ "chardev/**/*.inc",
103+ "contrib/**/*.h",
104+ "contrib/**/*.inc",
105+ "crypto/**/*.h",
106+ "crypto/**/*.inc",
107+ "default-configs/**/*.h",
108+ "default-configs/**/*.inc",
109+ "disas/**/*.h",
110+ "disas/**/*.inc",
111+ "dtc/**/*.h",
112+ "dtc/**/*.inc",
113+ "dump/**/*.h",
114+ "dump/**/*.inc",
115+ "fpu/**/*.h",
116+ "fpu/**/*.inc",
117+ "fsdev/**/*.h",
118+ "fsdev/**/*.inc",
119+ "gdb-xml/**/*.h",
120+ "gdb-xml/**/*.inc",
121+ "hw/**/*.h",
122+ "hw/**/*.inc",
123+ "include/**/*.h",
124+ "include/**/*.inc",
125+ "io/**/*.h",
126+ "io/**/*.inc",
127+ "libdecnumber/**/*.h",
128+ "libdecnumber/**/*.inc",
Lorenz Brun0de18932021-03-11 00:36:48 +0100129+ "linux-user/**/*.h",
130+ "linux-user/**/*.inc",
131+ "migration/**/*.h",
132+ "migration/**/*.inc",
133+ "monitor/**/*.h",
134+ "monitor/**/*.inc",
135+ "nbd/**/*.h",
136+ "nbd/**/*.inc",
137+ "net/**/*.h",
138+ "net/**/*.inc",
139+ "plugins/**/*.h",
140+ "plugins/**/*.inc",
141+ "qapi/**/*.h",
142+ "qapi/**/*.inc",
143+ "qga/**/*.h",
144+ "qga/**/*.inc",
145+ "qobject/**/*.h",
146+ "qobject/**/*.inc",
147+ "qom/**/*.h",
148+ "qom/**/*.inc",
149+ "replay/**/*.h",
150+ "replay/**/*.inc",
151+ "scripts/**/*.h",
152+ "scripts/**/*.inc",
153+ "scsi/**/*.h",
154+ "scsi/**/*.inc",
155+ "slirp/**/*.h",
156+ "slirp/**/*.inc",
157+ "softmmu/**/*.h",
158+ "softmmu/**/*.inc",
159+ "storage-daemon/**/*.h",
160+ "storage-daemon/**/*.inc",
161+ "subprojects/**/*.h",
162+ "subprojects/**/*.inc",
163+ "stubs/**/*.h",
164+ "stubs/**/*.inc",
165+ "target/**/*.h",
166+ "target/**/*.inc",
167+ "tcg/**/*.h",
168+ "tcg/**/*.inc",
169+ "tools/**/*.h",
170+ "tools/**/*.inc",
171+ "trace/**/*.h",
172+ "trace/**/*.inc",
173+ "ui/**/*.h",
174+ "ui/**/*.inc",
175+ "util/**/*.h",
176+ "util/**/*.inc",
177+ ]) + [
178+ ":hmp-commands",
179+ ":module-block",
180+ ":cursor-hdrs",
181+ ":keymaps-gen",
182+ "qemu-img-cmds.h",
183+ "qemu-options.h",
184+ "qemu-options-wrapper.h",
185+ "qemu-version.h",
186+ "replication.h",
187+ "x86_64-softmmu-config-devices.h",
188+ "x86_64-softmmu-config-target.h",
189+ "memory_ldst.c.inc",
190+ ],
191+)
192+
193+cc_library(
194+ name = "capstone",
195+ srcs = [":all_headers"] + [
196+ "capstone/cs.c",
197+ "capstone/MCInst.c",
198+ "capstone/MCInstrDesc.c",
199+ "capstone/MCRegisterInfo.c",
200+ "capstone/SStream.c",
201+ "capstone/utils.c",
202+ "capstone/arch/X86/X86Disassembler.c",
203+ "capstone/arch/X86/X86DisassemblerDecoder.c",
204+ "capstone/arch/X86/X86ATTInstPrinter.c",
205+ "capstone/arch/X86/X86IntelInstPrinter.c",
206+ "capstone/arch/X86/X86InstPrinterCommon.c",
207+ "capstone/arch/X86/X86Mapping.c",
208+ "capstone/arch/X86/X86Module.c",
209+ ],
210+ local_defines = [
211+ "_GNU_SOURCE",
212+ "_FILE_OFFSET_BITS=64",
213+ "_LARGEFILE_SOURCE",
214+ ],
215+ includes = ["capstone/include"],
216+)
217+
218+template_file(
219+ name = "libslirp-version.h",
220+ src = "slirp/src/libslirp-version.h.in",
221+ substitutions = {
222+ "@SLIRP_MAJOR_VERSION@": "0",
223+ "@SLIRP_MINOR_VERSION@": "0",
224+ "@SLIRP_MICRO_VERSION@": "1",
225+ "@SLIRP_VERSION_STRING@": "\"0.0.1\"",
226+ },
227+)
228+
229+cc_library(
230+ name = "slirp",
231+ srcs = [":all_headers"] + [
232+ "slirp/src/arp_table.c",
233+ "slirp/src/bootp.c",
234+ "slirp/src/cksum.c",
235+ "slirp/src/dhcpv6.c",
236+ "slirp/src/dnssearch.c",
237+ "slirp/src/if.c",
238+ "slirp/src/ip6_icmp.c",
239+ "slirp/src/ip6_input.c",
240+ "slirp/src/ip6_output.c",
241+ "slirp/src/ip_icmp.c",
242+ "slirp/src/ip_input.c",
243+ "slirp/src/ip_output.c",
244+ "slirp/src/mbuf.c",
245+ "slirp/src/misc.c",
246+ "slirp/src/ncsi.c",
247+ "slirp/src/ndp_table.c",
248+ "slirp/src/sbuf.c",
249+ "slirp/src/slirp.c",
250+ "slirp/src/socket.c",
251+ "slirp/src/state.c",
252+ "slirp/src/stream.c",
253+ "slirp/src/tcp_input.c",
254+ "slirp/src/tcp_output.c",
255+ "slirp/src/tcp_subr.c",
256+ "slirp/src/tcp_timer.c",
257+ "slirp/src/tftp.c",
258+ "slirp/src/udp.c",
259+ "slirp/src/udp6.c",
260+ "slirp/src/util.c",
261+ "slirp/src/version.c",
262+ "slirp/src/vmstate.c",
263+ ] + [":libslirp-version.h"],
264+ local_defines = [
265+ "_GNU_SOURCE",
266+ "_FILE_OFFSET_BITS=64",
267+ "_LARGEFILE_SOURCE",
268+ "G_LOG_DOMAIN=\\\"Slirp\\\"",
269+ ],
270+ deps = [
271+ "@glib//glib",
272+ ],
273+ includes = ["include", "slirp/src"],
274+)
275+
276+cc_library(
277+ name = "fdt",
278+ srcs = [":all_headers"] + [
279+ "dtc/libfdt/fdt.c",
280+ "dtc/libfdt/fdt_ro.c",
281+ "dtc/libfdt/fdt_wip.c",
282+ "dtc/libfdt/fdt_sw.c",
283+ "dtc/libfdt/fdt_rw.c",
284+ "dtc/libfdt/fdt_strerror.c",
285+ "dtc/libfdt/fdt_empty_tree.c",
286+ "dtc/libfdt/fdt_addresses.c",
287+ "dtc/libfdt/fdt_overlay.c",
288+ "dtc/libfdt/fdt_check.c",
289+ ],
290+ local_defines = [
291+ "_GNU_SOURCE",
292+ "_FILE_OFFSET_BITS=64",
293+ "_LARGEFILE_SOURCE",
294+ ],
295+ includes = ["include", "dtc/libfdt", "disas/libvixl"],
296+)
297+
298+cc_library(
299+ name = "qemu",
300+ srcs = [":all_headers"] + [
301+ "accel/accel.c",
302+ "audio/audio_legacy.c",
303+ "audio/audio.c",
304+ "audio/mixeng.c",
305+ "audio/noaudio.c",
306+ "audio/wavaudio.c",
307+ "audio/wavcapture.c",
308+ "authz/base.c",
309+ "authz/list.c",
310+ "authz/listfile.c",
311+ "authz/simple.c",
312+ "backends/cryptodev-builtin.c",
313+ "backends/cryptodev-vhost.c",
314+ "backends/cryptodev.c",
315+ "backends/hostmem-file.c",
316+ "backends/hostmem-memfd.c",
317+ "backends/hostmem-ram.c",
318+ "backends/hostmem.c",
319+ "backends/rng-builtin.c",
320+ "backends/rng-egd.c",
321+ "backends/rng-random.c",
322+ "backends/rng.c",
323+ "backends/tpm/tpm_backend.c",
324+ "backends/tpm/tpm_emulator.c",
325+ "backends/tpm/tpm_passthrough.c",
326+ "backends/tpm/tpm_util.c",
327+ "block.c",
328+ "block/accounting.c",
329+ "block/aio_task.c",
330+ "block/amend.c",
331+ "block/backup-top.c",
332+ "block/backup.c",
333+ "block/blkdebug.c",
334+ "block/blklogwrites.c",
335+ "block/blkverify.c",
336+ "block/block-backend.c",
337+ "block/block-copy.c",
338+ "block/commit.c",
339+ "block/copy-on-read.c",
340+ "block/create.c",
341+ "block/crypto.c",
342+ "block/dirty-bitmap.c",
343+ "block/export/export.c",
344+ "block/file-posix.c",
345+ "block/filter-compress.c",
346+ "block/io_uring.c",
347+ "block/io.c",
348+ "block/mirror.c",
349+ "block/monitor/bitmap-qmp-cmds.c",
350+ "block/monitor/block-hmp-cmds.c",
351+ "block/nbd.c",
352+ "block/null.c",
353+ "block/nvme.c",
354+ "block/qapi-sysemu.c",
355+ "block/qapi.c",
356+ "block/qcow2-bitmap.c",
357+ "block/qcow2-cache.c",
358+ "block/qcow2-cluster.c",
359+ "block/qcow2-refcount.c",
360+ "block/qcow2-snapshot.c",
361+ "block/qcow2-threads.c",
362+ "block/qcow2.c",
363+ "block/quorum.c",
364+ "block/raw-format.c",
365+ "block/snapshot.c",
366+ "block/stream.c",
367+ "block/throttle-groups.c",
368+ "block/throttle.c",
369+ "block/vhdx-endian.c",
370+ "block/vhdx-log.c",
371+ "block/vhdx.c",
372+ "block/vmdk.c",
373+ "block/vpc.c",
374+ "block/write-threshold.c",
375+ "blockdev-nbd.c",
376+ "blockdev.c",
377+ "blockjob.c",
378+ "chardev/char-fd.c",
379+ "chardev/char-fe.c",
380+ "chardev/char-file.c",
381+ "chardev/char-io.c",
382+ "chardev/char-mux.c",
383+ "chardev/char-null.c",
384+ "chardev/char-parallel.c",
385+ "chardev/char-pipe.c",
386+ "chardev/char-pty.c",
387+ "chardev/char-ringbuf.c",
388+ "chardev/char-serial.c",
389+ "chardev/char-socket.c",
390+ "chardev/char-stdio.c",
391+ "chardev/char-udp.c",
392+ "chardev/char.c",
393+ "chardev/msmouse.c",
394+ "chardev/testdev.c",
395+ "chardev/wctablet.c",
396+ "cpus-common.c",
397+ "crypto/aes.c",
398+ "crypto/afsplit.c",
399+ "crypto/block-luks.c",
400+ "crypto/block-qcow.c",
401+ "crypto/block.c",
402+ "crypto/cipher.c",
403+ "crypto/desrfb.c",
404+ "crypto/hash-glib.c",
405+ "crypto/hash.c",
406+ "crypto/hmac-glib.c",
407+ "crypto/hmac.c",
408+ "crypto/init.c",
409+ "crypto/ivgen-essiv.c",
410+ "crypto/ivgen-plain.c",
411+ "crypto/ivgen-plain64.c",
412+ "crypto/ivgen.c",
413+ "crypto/pbkdf-stub.c",
414+ "crypto/pbkdf.c",
415+ "crypto/random-platform.c",
416+ "crypto/secret_common.c",
417+ "crypto/secret.c",
418+ "crypto/tlscreds.c",
419+ "crypto/tlscredsanon.c",
420+ "crypto/tlscredspsk.c",
421+ "crypto/tlscredsx509.c",
422+ "crypto/tlssession.c",
423+ "crypto/xts.c",
424+ "disas/capstone.c",
425+ "disas/i386.c",
426+ "dump/dump-hmp-cmds.c",
427+ "fsdev/qemu-fsdev-dummy.c",
428+ "fsdev/qemu-fsdev-opts.c",
429+ "fsdev/qemu-fsdev-throttle.c",
430+ "hw/acpi/acpi_interface.c",
431+ "hw/acpi/aml-build.c",
432+ "hw/acpi/bios-linker-loader.c",
433+ "hw/acpi/core.c",
434+ "hw/acpi/cpu_hotplug.c",
435+ "hw/acpi/cpu.c",
436+ "hw/acpi/generic_event_device.c",
437+ "hw/acpi/hmat.c",
438+ "hw/acpi/ich9.c",
439+ "hw/acpi/ipmi.c",
440+ "hw/acpi/memory_hotplug.c",
441+ "hw/acpi/nvdimm.c",
442+ "hw/acpi/pci.c",
443+ "hw/acpi/pcihp.c",
444+ "hw/acpi/piix4.c",
445+ "hw/acpi/tco.c",
446+ "hw/acpi/tpm.c",
447+ "hw/acpi/utils.c",
448+ "hw/acpi/vmgenid.c",
449+ "hw/audio/ac97.c",
450+ "hw/audio/adlib.c",
451+ "hw/audio/cs4231a.c",
452+ "hw/audio/es1370.c",
453+ "hw/audio/fmopl.c",
454+ "hw/audio/gus.c",
455+ "hw/audio/gusemu_hal.c",
456+ "hw/audio/gusemu_mixer.c",
457+ "hw/audio/hda-codec.c",
458+ "hw/audio/intel-hda.c",
459+ "hw/audio/pcspk.c",
460+ "hw/audio/sb16.c",
461+ "hw/audio/soundhw.c",
462+ "hw/block/block.c",
463+ "hw/block/cdrom.c",
464+ "hw/block/fdc.c",
465+ "hw/block/hd-geometry.c",
466+ "hw/block/nvme-ns.c",
467+ "hw/block/nvme.c",
468+ "hw/block/pflash_cfi01.c",
469+ "hw/char/debugcon.c",
470+ "hw/char/ipoctal232.c",
471+ "hw/char/parallel-isa.c",
472+ "hw/char/parallel.c",
473+ "hw/char/serial-isa.c",
474+ "hw/char/serial-pci-multi.c",
475+ "hw/char/serial-pci.c",
476+ "hw/char/serial.c",
477+ "hw/char/virtio-console.c",
478+ "hw/core/bus.c",
479+ "hw/core/clock-vmstate.c",
480+ "hw/core/clock.c",
481+ "hw/core/cpu.c",
482+ "hw/core/fw-path-provider.c",
483+ "hw/core/generic-loader.c",
484+ "hw/core/hotplug.c",
485+ "hw/core/irq.c",
486+ "hw/core/loader.c",
487+ "hw/core/machine-hmp-cmds.c",
488+ "hw/core/machine.c",
489+ "hw/core/nmi.c",
490+ "hw/core/null-machine.c",
491+ "hw/core/qdev-clock.c",
492+ "hw/core/qdev-fw.c",
493+ "hw/core/qdev-properties-system.c",
494+ "hw/core/qdev-properties.c",
495+ "hw/core/qdev.c",
496+ "hw/core/reset.c",
497+ "hw/core/resettable.c",
498+ "hw/core/sysbus.c",
499+ "hw/core/vm-change-state-handler.c",
500+ "hw/core/vmstate-if.c",
501+ "hw/cpu/cluster.c",
502+ "hw/cpu/core.c",
503+ "hw/display/ati_2d.c",
504+ "hw/display/ati_dbg.c",
505+ "hw/display/ati.c",
506+ "hw/display/bochs-display.c",
507+ "hw/display/cirrus_vga_isa.c",
508+ "hw/display/cirrus_vga.c",
509+ "hw/display/edid-generate.c",
510+ "hw/display/edid-region.c",
511+ "hw/display/i2c-ddc.c",
512+ "hw/display/ramfb-standalone.c",
513+ "hw/display/ramfb.c",
514+ "hw/display/vga-isa.c",
515+ "hw/display/vga-pci.c",
516+ "hw/display/virtio-gpu-base.c",
517+ "hw/display/virtio-gpu-pci.c",
518+ "hw/display/virtio-gpu.c",
519+ "hw/display/virtio-vga.c",
520+ "hw/display/vmware_vga.c",
521+ "hw/dma/i8257.c",
522+ "hw/i2c/bitbang_i2c.c",
523+ "hw/i2c/core.c",
524+ "hw/i2c/pm_smbus.c",
525+ "hw/i2c/smbus_eeprom.c",
526+ "hw/i2c/smbus_ich9.c",
527+ "hw/i2c/smbus_master.c",
528+ "hw/i2c/smbus_slave.c",
529+ "hw/ide/ahci.c",
530+ "hw/ide/atapi.c",
531+ "hw/ide/core.c",
532+ "hw/ide/ich.c",
533+ "hw/ide/ioport.c",
534+ "hw/ide/isa.c",
535+ "hw/ide/pci.c",
536+ "hw/ide/piix.c",
537+ "hw/ide/qdev.c",
538+ "hw/input/hid.c",
539+ "hw/input/pckbd.c",
540+ "hw/input/ps2.c",
541+ "hw/input/virtio-input-hid.c",
542+ "hw/input/virtio-input-host.c",
543+ "hw/input/virtio-input.c",
544+ "hw/intc/i8259_common.c",
545+ "hw/intc/i8259.c",
546+ "hw/intc/intc.c",
547+ "hw/intc/ioapic_common.c",
548+ "hw/ipack/ipack.c",
549+ "hw/ipack/tpci200.c",
550+ "hw/ipmi/ipmi_bmc_extern.c",
551+ "hw/ipmi/ipmi_bmc_sim.c",
552+ "hw/ipmi/ipmi_bt.c",
553+ "hw/ipmi/ipmi_kcs.c",
554+ "hw/ipmi/ipmi.c",
555+ "hw/ipmi/isa_ipmi_bt.c",
556+ "hw/ipmi/isa_ipmi_kcs.c",
557+ "hw/ipmi/pci_ipmi_bt.c",
558+ "hw/ipmi/pci_ipmi_kcs.c",
559+ "hw/ipmi/smbus_ipmi.c",
560+ "hw/isa/apm.c",
561+ "hw/isa/isa-bus.c",
562+ "hw/isa/piix3.c",
563+ "hw/mem/memory-device.c",
564+ "hw/mem/nvdimm.c",
565+ "hw/mem/pc-dimm.c",
566+ "hw/misc/applesmc.c",
567+ "hw/misc/debugexit.c",
568+ "hw/misc/edu.c",
569+ "hw/misc/ivshmem.c",
570+ "hw/misc/pc-testdev.c",
571+ "hw/misc/pci-testdev.c",
572+ "hw/misc/pvpanic.c",
573+ "hw/misc/sga.c",
574+ "hw/misc/vmcoreinfo.c",
575+ "hw/net/can/can_kvaser_pci.c",
576+ "hw/net/can/can_mioe3680_pci.c",
577+ "hw/net/can/can_pcm3680_pci.c",
578+ "hw/net/can/can_sja1000.c",
579+ "hw/net/can/ctucan_core.c",
580+ "hw/net/can/ctucan_pci.c",
581+ "hw/net/e1000.c",
582+ "hw/net/e1000e_core.c",
583+ "hw/net/e1000e.c",
584+ "hw/net/e1000x_common.c",
585+ "hw/net/eepro100.c",
586+ "hw/net/ne2000-isa.c",
587+ "hw/net/ne2000-pci.c",
588+ "hw/net/ne2000.c",
589+ "hw/net/net_rx_pkt.c",
590+ "hw/net/net_tx_pkt.c",
591+ "hw/net/pcnet-pci.c",
592+ "hw/net/pcnet.c",
593+ "hw/net/rocker/rocker_desc.c",
594+ "hw/net/rocker/rocker_fp.c",
595+ "hw/net/rocker/rocker_of_dpa.c",
596+ "hw/net/rocker/rocker_world.c",
597+ "hw/net/rocker/rocker.c",
598+ "hw/net/rtl8139.c",
599+ "hw/net/tulip.c",
600+ "hw/net/vhost_net.c",
601+ "hw/net/vmxnet3.c",
602+ "hw/nvram/eeprom93xx.c",
603+ "hw/nvram/fw_cfg-interface.c",
604+ "hw/nvram/fw_cfg.c",
605+ "hw/pci-bridge/gen_pcie_root_port.c",
606+ "hw/pci-bridge/i82801b11.c",
607+ "hw/pci-bridge/ioh3420.c",
608+ "hw/pci-bridge/pci_bridge_dev.c",
609+ "hw/pci-bridge/pci_expander_bridge.c",
610+ "hw/pci-bridge/pcie_pci_bridge.c",
611+ "hw/pci-bridge/pcie_root_port.c",
612+ "hw/pci-bridge/xio3130_downstream.c",
613+ "hw/pci-bridge/xio3130_upstream.c",
614+ "hw/pci-host/gpex-acpi.c",
615+ "hw/pci-host/gpex.c",
616+ "hw/pci-host/i440fx.c",
617+ "hw/pci-host/pam.c",
618+ "hw/pci-host/q35.c",
619+ "hw/pci/msi.c",
620+ "hw/pci/msix.c",
621+ "hw/pci/pci_bridge.c",
622+ "hw/pci/pci_host.c",
623+ "hw/pci/pci.c",
624+ "hw/pci/pcie_aer.c",
625+ "hw/pci/pcie_host.c",
626+ "hw/pci/pcie_port.c",
627+ "hw/pci/pcie.c",
628+ "hw/pci/shpc.c",
629+ "hw/pci/slotid_cap.c",
630+ "hw/pcmcia/pcmcia.c",
631+ "hw/scsi/emulation.c",
632+ "hw/scsi/esp-pci.c",
633+ "hw/scsi/esp.c",
634+ "hw/scsi/lsi53c895a.c",
635+ "hw/scsi/megasas.c",
636+ "hw/scsi/mptconfig.c",
637+ "hw/scsi/mptendian.c",
638+ "hw/scsi/mptsas.c",
639+ "hw/scsi/scsi-bus.c",
640+ "hw/scsi/scsi-disk.c",
641+ "hw/scsi/scsi-generic.c",
642+ "hw/scsi/vmw_pvscsi.c",
643+ "hw/sd/core.c",
644+ "hw/sd/sd.c",
645+ "hw/sd/sdhci-pci.c",
646+ "hw/sd/sdhci.c",
647+ "hw/sd/sdmmc-internal.c",
648+ "hw/smbios/smbios_type_38.c",
649+ "hw/smbios/smbios.c",
650+ "hw/timer/hpet.c",
651+ "hw/timer/i8254_common.c",
652+ "hw/timer/i8254.c",
653+ "hw/usb/bus.c",
654+ "hw/usb/combined-packet.c",
655+ "hw/usb/core.c",
656+ "hw/usb/desc-msos.c",
657+ "hw/usb/desc.c",
658+ "hw/usb/dev-audio.c",
659+ "hw/usb/dev-hid.c",
660+ "hw/usb/dev-hub.c",
661+ "hw/usb/dev-mtp.c",
662+ "hw/usb/dev-network.c",
663+ "hw/usb/dev-serial.c",
664+ "hw/usb/dev-smartcard-reader.c",
665+ "hw/usb/dev-storage.c",
666+ "hw/usb/dev-uas.c",
667+ "hw/usb/dev-wacom.c",
668+ "hw/usb/hcd-ehci-pci.c",
669+ "hw/usb/hcd-ehci.c",
670+ "hw/usb/hcd-ohci-pci.c",
671+ "hw/usb/hcd-ohci.c",
672+ "hw/usb/hcd-uhci.c",
673+ "hw/usb/hcd-xhci-nec.c",
674+ "hw/usb/hcd-xhci-pci.c",
675+ "hw/usb/hcd-xhci-sysbus.c",
676+ "hw/usb/hcd-xhci.c",
677+ "hw/usb/host-stub.c",
678+ "hw/usb/imx-usb-phy.c",
679+ "hw/usb/libhw.c",
680+ "hw/usb/u2f-passthru.c",
681+ "hw/usb/u2f.c",
682+ "hw/virtio/virtio-bus.c",
683+ "hw/virtio/virtio-mmio.c",
684+ "hw/virtio/virtio-pci.c",
685+ "hw/watchdog/watchdog.c",
686+ "hw/watchdog/wdt_i6300esb.c",
687+ "hw/watchdog/wdt_ib700.c",
688+ "io/channel-buffer.c",
689+ "io/channel-command.c",
690+ "io/channel-file.c",
691+ "io/channel-socket.c",
692+ "io/channel-tls.c",
693+ "io/channel-util.c",
694+ "io/channel-watch.c",
695+ "io/channel-websock.c",
696+ "io/channel.c",
697+ "io/dns-resolver.c",
698+ "io/net-listener.c",
699+ "io/task.c",
700+ "iothread.c",
701+ "job-qmp.c",
702+ "job.c",
703+ "migration/block-dirty-bitmap.c",
704+ "migration/channel.c",
705+ "migration/colo-failover.c",
706+ "migration/colo.c",
707+ "migration/exec.c",
708+ "migration/fd.c",
709+ "migration/global_state.c",
710+ "migration/migration.c",
711+ "migration/multifd-zlib.c",
712+ "migration/multifd.c",
713+ "migration/page_cache.c",
714+ "migration/postcopy-ram.c",
715+ "migration/qemu-file-channel.c",
716+ "migration/qemu-file.c",
717+ "migration/savevm.c",
718+ "migration/socket.c",
719+ "migration/tls.c",
720+ "migration/vmstate-types.c",
721+ "migration/vmstate.c",
722+ "migration/xbzrle.c",
723+ "migration/qjson.c",
724+ "monitor/hmp-cmds.c",
725+ "monitor/hmp.c",
726+ "monitor/monitor.c",
727+ "monitor/qmp-cmds-control.c",
728+ "monitor/qmp-cmds.c",
729+ "monitor/qmp.c",
730+ "nbd/client.c",
731+ "nbd/common.c",
732+ "nbd/server.c",
733+ "net/announce.c",
734+ "net/can/can_core.c",
735+ "net/can/can_host.c",
736+ "net/can/can_socketcan.c",
737+ "net/checksum.c",
738+ "net/colo-compare.c",
739+ "net/colo.c",
740+ "net/dump.c",
741+ "net/eth.c",
742+ "net/filter-buffer.c",
743+ "net/filter-mirror.c",
744+ "net/filter-rewriter.c",
745+ "net/filter.c",
746+ "net/hub.c",
747+ "net/l2tpv3.c",
748+ "net/net.c",
749+ "net/queue.c",
750+ "net/slirp.c",
751+ "net/socket.c",
752+ "net/tap-linux.c",
753+ "net/tap.c",
754+ "net/util.c",
755+ "net/vhost-user-stub.c",
756+ "net/vhost-vdpa.c",
757+ "os-posix.c",
758+ "qemu-io-cmds.c",
759+ "qobject/block-qdict.c",
760+ "qobject/json-lexer.c",
761+ "qobject/json-parser.c",
762+ "qobject/json-streamer.c",
763+ "qobject/qbool.c",
764+ "qobject/qdict.c",
765+ "qobject/qjson.c",
766+ "qobject/qlist.c",
767+ "qobject/qlit.c",
768+ "qobject/qnull.c",
769+ "qobject/qnum.c",
770+ "qobject/qobject.c",
771+ "qobject/qstring.c",
772+ "qom/container.c",
773+ "qom/object_interfaces.c",
774+ "qom/object.c",
775+ "qom/qom-hmp-cmds.c",
776+ "qom/qom-qmp-cmds.c",
777+ "qom/qom-qobject.c",
778+ "replay/stubs-system.c",
779+ "scsi/pr-manager-helper.c",
780+ "scsi/pr-manager.c",
781+ "scsi/utils.c",
782+ "softmmu/bootdevice.c",
783+ "softmmu/device_tree.c",
784+ "softmmu/dma-helpers.c",
785+ "softmmu/qdev-monitor.c",
786+ "softmmu/qemu-seccomp.c",
787+ "softmmu/tpm.c",
788+ "stubs/gdbstub.c",
789+ "stubs/icount.c",
790+ "stubs/replay-tools.c",
791+ "stubs/replay.c",
792+ "stubs/semihost.c",
793+ "stubs/target-get-monitor-def.c",
794+ "stubs/win32-kbd-hook.c",
795+ "stubs/xen-hw-stub.c",
796+ "contrib/libvhost-user/libvhost-user-glib.c",
797+ "contrib/libvhost-user/libvhost-user.c",
798+ "ui/console.c",
799+ "ui/cursor.c",
800+ "ui/input-barrier.c",
801+ "ui/input-keymap.c",
802+ "ui/input-legacy.c",
803+ "ui/input-linux.c",
804+ "ui/input.c",
805+ "ui/kbd-state.c",
806+ "ui/keymaps.c",
807+ "ui/qemu-pixman.c",
808+ "ui/spice-module.c",
809+ "ui/vnc-stubs.c",
810+ "util/aio-posix.c",
811+ "util/aio-wait.c",
812+ "util/aiocb.c",
813+ "util/async.c",
814+ "util/base64.c",
815+ "util/bitmap.c",
816+ "util/bitops.c",
817+ "util/block-helpers.c",
818+ "util/buffer.c",
819+ "util/bufferiszero.c",
820+ "util/cacheinfo.c",
821+ "util/compatfd.c",
Lorenz Brun647cbb22021-03-16 15:09:56 +0100822+ "util/coroutine-sigaltstack.c",
Lorenz Brun0de18932021-03-11 00:36:48 +0100823+ "util/crc32c.c",
824+ "util/cutils.c",
825+ "util/drm.c",
826+ "util/envlist.c",
827+ "util/error.c",
828+ "util/event_notifier-posix.c",
829+ "util/fdmon-epoll.c",
830+ "util/fdmon-io_uring.c",
831+ "util/fdmon-poll.c",
832+ "util/fifo8.c",
833+ "util/filemonitor-inotify.c",
834+ "util/getauxval.c",
835+ "util/guest-random.c",
836+ "util/hbitmap.c",
837+ "util/hexdump.c",
838+ "util/host-utils.c",
839+ "util/id.c",
840+ "util/iov.c",
841+ "util/iova-tree.c",
842+ "util/keyval.c",
843+ "util/lockcnt.c",
844+ "util/log.c",
845+ "util/main-loop.c",
846+ "util/memfd.c",
847+ "util/mmap-alloc.c",
848+ "util/module.c",
849+ "util/notify.c",
850+ "util/nvdimm-utils.c",
851+ "util/osdep.c",
852+ "util/oslib-posix.c",
853+ "util/pagesize.c",
854+ "util/path.c",
855+ "util/qdist.c",
856+ "util/qemu-co-shared-resource.c",
857+ "util/qemu-config.c",
858+ "util/qemu-coroutine-io.c",
859+ "util/qemu-coroutine-lock.c",
860+ "util/qemu-coroutine-sleep.c",
861+ "util/qemu-error.c",
862+ "util/qemu-openpty.c",
863+ "util/qemu-option.c",
864+ "util/qemu-print.c",
865+ "util/qemu-progress.c",
866+ "util/qemu-sockets.c",
867+ "util/qemu-thread-posix.c",
868+ "util/qemu-timer-common.c",
869+ "util/qemu-timer.c",
870+ "util/qht.c",
871+ "util/qsp.c",
872+ "util/range.c",
873+ "util/rcu.c",
874+ "util/readline.c",
875+ "util/stats64.c",
876+ "util/sys_membarrier.c",
877+ "util/systemd.c",
878+ "util/thread-pool.c",
879+ "util/throttle.c",
880+ "util/timed-average.c",
881+ "util/unicode.c",
882+ "util/uri.c",
883+ "util/uuid.c",
884+ "util/vfio-helpers.c",
885+ "util/vhost-user-server.c",
886+ "util/qemu-coroutine.c",
887+ ] + [
888+ "//qapi:opts-visitor.c",
889+ "//qapi:qapi-clone-visitor.c",
890+ "//qapi:qapi-dealloc-visitor.c",
891+ "//qapi:qapi-util.c",
892+ "//qapi:qapi-visit-core.c",
893+ "//qapi:qmp-dispatch.c",
894+ "//qapi:qmp-event.c",
895+ "//qapi:qmp-registry.c",
896+ "//qapi:qobject-input-visitor.c",
897+ "//qapi:qobject-output-visitor.c",
898+ "//qapi:string-input-visitor.c",
899+ "//qapi:string-output-visitor.c",
900+ "//trace:control.c",
901+ "//trace:qmp.c",
902+ ] + [
903+ ":gen_hdrs",
904+ ":block-coroutine-gen",
905+ ],
906+ # QEMU relies on hacky two's complement representation interpretation of bitshifts
907+ copts = ["-fwrapv"],
908+ local_defines = [
909+ "_GNU_SOURCE",
910+ "_FILE_OFFSET_BITS=64",
911+ "_LARGEFILE_SOURCE",
912+ ],
913+ deps = [
914+ ":capstone",
915+ ":fdt",
916+ ":slirp",
917+ "@glib//glib",
918+ "@pixman//:pixman",
919+ "@seccomp",
920+ "@uring//:uring",
921+ "@zlib//:zlib",
922+ ],
923+ includes = ["include", "capstone/include/capstone"],
924+ alwayslink = True, # QEMU uses __attribute__((constructor)) functions
925+)
926+
927+cc_binary(
Serge Bazanski4e6fe4a2023-03-23 17:35:22 +0100928+ name = "qemu-img",
929+ srcs = [":all_headers"] + [
930+ "qemu-img.c",
931+
932+ "qobject/block-qdict.c",
933+ "qobject/json-lexer.c",
934+ "qobject/json-parser.c",
935+ "qobject/json-streamer.c",
936+ "qobject/qbool.c",
937+ "qobject/qdict.c",
938+ "qobject/qjson.c",
939+ "qobject/qlist.c",
940+ "qobject/qlit.c",
941+ "qobject/qnull.c",
942+ "qobject/qnum.c",
943+ "qobject/qobject.c",
944+ "qobject/qstring.c",
945+
946+ "qom/container.c",
947+ "qom/object_interfaces.c",
948+ "qom/object.c",
949+ "qom/qom-qobject.c",
950+
951+ "util/aio-posix.c",
952+ "util/aio-wait.c",
953+ "util/aiocb.c",
954+ "util/async.c",
955+ "util/base64.c",
956+ "util/bitmap.c",
957+ "util/bitops.c",
958+ "util/block-helpers.c",
959+ "util/buffer.c",
960+ "util/bufferiszero.c",
961+ "util/compatfd.c",
962+ "util/coroutine-sigaltstack.c",
963+ "util/crc32c.c",
964+ "util/cutils.c",
965+ "util/error.c",
966+ "util/event_notifier-posix.c",
967+ "util/fdmon-epoll.c",
968+ "util/fdmon-io_uring.c",
969+ "util/fdmon-poll.c",
970+ "util/filemonitor-inotify.c",
971+ "util/hbitmap.c",
972+ "util/hexdump.c",
973+ "util/id.c",
974+ "util/iov.c",
975+ "util/keyval.c",
976+ "util/lockcnt.c",
977+ "util/log.c",
978+ "util/main-loop.c",
979+ "util/mmap-alloc.c",
980+ "util/module.c",
981+ "util/notify.c",
982+ "util/osdep.c",
983+ "util/oslib-posix.c",
984+ "util/pagesize.c",
985+ "util/qdist.c",
986+ "util/qemu-config.c",
987+ "util/qemu-coroutine-io.c",
988+ "util/qemu-coroutine-lock.c",
989+ "util/qemu-coroutine-sleep.c",
990+ "util/qemu-error.c",
991+ "util/qemu-option.c",
992+ "util/qemu-print.c",
993+ "util/qemu-progress.c",
994+ "util/qemu-thread-posix.c",
995+ "util/qemu-timer-common.c",
996+ "util/qemu-timer.c",
997+ "util/qht.c",
998+ "util/qsp.c",
999+ "util/range.c",
1000+ "util/rcu.c",
1001+ "util/sys_membarrier.c",
1002+ "util/thread-pool.c",
1003+ "util/throttle.c",
1004+ "util/timed-average.c",
1005+ "util/unicode.c",
1006+ "util/uuid.c",
1007+ "util/qemu-coroutine.c",
1008+
1009+ # All of these are needed for qcow/luks encryption, which can't be
1010+ # disabled.
1011+ "crypto/aes.c",
1012+ "crypto/afsplit.c",
1013+ "crypto/block-luks.c",
1014+ "crypto/block-qcow.c",
1015+ "crypto/block.c",
1016+ "crypto/cipher.c",
1017+ "crypto/desrfb.c",
1018+ "crypto/hash-glib.c",
1019+ "crypto/hash.c",
1020+ "crypto/hmac-glib.c",
1021+ "crypto/hmac.c",
1022+ "crypto/init.c",
1023+ "crypto/ivgen-essiv.c",
1024+ "crypto/ivgen-plain.c",
1025+ "crypto/ivgen-plain64.c",
1026+ "crypto/ivgen.c",
1027+ "crypto/pbkdf-stub.c",
1028+ "crypto/pbkdf.c",
1029+ "crypto/random-platform.c",
1030+ "crypto/secret_common.c",
1031+ "crypto/secret.c",
1032+ "crypto/xts.c",
1033+
1034+ "block.c",
1035+ "block/accounting.c",
1036+ "block/aio_task.c",
1037+ "block/block-backend.c",
1038+ "block/commit.c",
1039+ "block/create.c",
1040+ "block/crypto.c",
1041+ "block/dirty-bitmap.c",
1042+ "block/file-posix.c",
1043+ "block/io.c",
1044+ "block/io_uring.c",
1045+ "block/mirror.c",
1046+ "block/monitor/bitmap-qmp-cmds.c",
1047+ "block/qapi.c",
1048+ "block/qcow2-bitmap.c",
1049+ "block/qcow2-cache.c",
1050+ "block/qcow2-cluster.c",
1051+ "block/qcow2-refcount.c",
1052+ "block/qcow2-snapshot.c",
1053+ "block/qcow2-threads.c",
1054+ "block/qcow2.c",
1055+ "block/raw-format.c",
1056+ "block/snapshot.c",
1057+ "block/throttle-groups.c",
1058+ "block/write-threshold.c",
1059+
1060+ "stubs/bdrv-next-monitor-owned.c",
1061+ "stubs/blk-exp-close-all.c",
1062+ "stubs/blockdev-close-all-bdrv-states.c",
1063+ "stubs/change-state-handler.c",
1064+ "stubs/cpu-get-clock.c",
1065+ "stubs/cpus-get-virtual-clock.c",
1066+ "stubs/error-printf.c",
1067+ "stubs/fdset.c",
1068+ "stubs/icount.c",
1069+ "stubs/iothread-lock.c",
1070+ "stubs/is-daemonized.c",
1071+ "stubs/migr-blocker.c",
1072+ "stubs/monitor-core.c",
1073+ "stubs/monitor.c",
1074+ "stubs/qemu-timer-notify-cb.c",
1075+ "stubs/qtest.c",
1076+ "stubs/ram-block.c",
1077+ "stubs/replay-tools.c",
1078+ "stubs/replay.c",
1079+ "stubs/runstate-check.c",
1080+ "stubs/trace-control.c",
1081+ "stubs/vm-stop.c",
1082+ "scsi/pr-manager.c",
1083+
1084+ "blockjob.c",
1085+ "iothread.c",
1086+ "job.c",
1087+ ] + [
1088+ "//qapi:opts-visitor.c",
1089+ "//qapi:qapi-clone-visitor.c",
1090+ "//qapi:qapi-dealloc-visitor.c",
1091+ "//qapi:qapi-util.c",
1092+ "//qapi:qapi-visit-core.c",
1093+ "//qapi:qmp-event.c",
1094+ "//qapi:qobject-input-visitor.c",
1095+ "//qapi:qobject-output-visitor.c",
1096+ "//qapi:string-input-visitor.c",
1097+ "//qapi:string-output-visitor.c",
1098+ "//trace:control.c",
1099+ ] + [
1100+ ":block-coroutine-gen",
1101+ ":gen_hdrs",
1102+ ":qapi_qemu_img_c",
1103+ ":trace_c",
1104+ ],
1105+ copts = ["-fwrapv"], # QEMU relies on hacky two's complement representations of bitshifts
1106+ local_defines = [
1107+ "_GNU_SOURCE",
1108+ "_FILE_OFFSET_BITS=64",
1109+ "_LARGEFILE_SOURCE",
1110+ ],
1111+ deps = [
1112+ "@glib//glib",
1113+ "@uring//:uring",
1114+ "@zlib//:zlib",
1115+ ],
1116+ visibility = ["//visibility:public"],
Tim Windelschmidtf69d84b2024-07-03 20:32:19 +02001117+ includes = ["include"],
Serge Bazanski4e6fe4a2023-03-23 17:35:22 +01001118+)
1119+
1120+cc_binary(
Lorenz Brun0de18932021-03-11 00:36:48 +01001121+ name = "qemu-x86_64-softmmu",
1122+ srcs = [":all_headers"] + [
1123+ "//trace:control-target.c",
1124+ "accel/dummy-cpus.c",
1125+ "accel/kvm/kvm-all.c",
1126+ "accel/kvm/kvm-cpus.c",
1127+ "accel/qtest/qtest.c",
1128+ "accel/stubs/hax-stub.c",
1129+ "accel/stubs/tcg-stub.c",
1130+ "accel/stubs/xen-stub.c",
1131+ "cpu.c",
1132+ "disas.c",
1133+ "dump/dump.c",
1134+ "dump/win_dump.c",
1135+ "exec-vary.c",
1136+ "gdbstub.c",
1137+ "hw/block/dataplane/virtio-blk.c",
1138+ "hw/block/virtio-blk.c",
1139+ "hw/char/virtio-serial-bus.c",
1140+ "hw/core/machine-qmp-cmds.c",
1141+ "hw/core/numa.c",
1142+ "hw/display/vga.c",
1143+ "hw/hyperv/hyperv_testdev.c",
1144+ "hw/hyperv/hyperv.c",
1145+ "hw/hyperv/vmbus.c",
1146+ "hw/i386/acpi-build.c",
1147+ "hw/i386/acpi-common.c",
1148+ "hw/i386/acpi-microvm.c",
1149+ "hw/i386/amd_iommu.c",
1150+ "hw/i386/e820_memory_layout.c",
1151+ "hw/i386/fw_cfg.c",
1152+ "hw/i386/generic_event_device_x86.c",
1153+ "hw/i386/intel_iommu.c",
1154+ "hw/i386/kvm/apic.c",
1155+ "hw/i386/kvm/clock.c",
1156+ "hw/i386/kvm/i8254.c",
1157+ "hw/i386/kvm/i8259.c",
1158+ "hw/i386/kvm/ioapic.c",
1159+ "hw/i386/kvmvapic.c",
1160+ "hw/i386/microvm.c",
1161+ "hw/i386/multiboot.c",
1162+ "hw/i386/pc_piix.c",
1163+ "hw/i386/pc_q35.c",
1164+ "hw/i386/pc_sysfw.c",
1165+ "hw/i386/pc.c",
1166+ "hw/i386/port92.c",
1167+ "hw/i386/vmmouse.c",
1168+ "hw/i386/vmport.c",
1169+ "hw/i386/x86-iommu.c",
1170+ "hw/i386/x86.c",
1171+ "hw/intc/apic_common.c",
1172+ "hw/intc/apic.c",
1173+ "hw/intc/ioapic.c",
1174+ "hw/isa/lpc_ich9.c",
1175+ "hw/net/virtio-net.c",
1176+ "hw/rtc/mc146818rtc.c",
1177+ "hw/scsi/virtio-scsi-dataplane.c",
1178+ "hw/scsi/virtio-scsi.c",
1179+ "hw/vfio/common.c",
1180+ "hw/vfio/display.c",
1181+ "hw/vfio/igd.c",
1182+ "hw/vfio/migration.c",
1183+ "hw/vfio/pci-quirks.c",
1184+ "hw/vfio/pci.c",
1185+ "hw/vfio/spapr.c",
1186+ "hw/virtio/vhost-backend.c",
1187+ "hw/virtio/vhost-vdpa.c",
1188+ "hw/virtio/vhost.c",
1189+ "hw/virtio/virtio-balloon-pci.c",
1190+ "hw/virtio/virtio-balloon.c",
1191+ "hw/virtio/virtio-blk-pci.c",
1192+ "hw/virtio/virtio-crypto-pci.c",
1193+ "hw/virtio/virtio-crypto.c",
1194+ "hw/virtio/virtio-input-host-pci.c",
1195+ "hw/virtio/virtio-input-pci.c",
1196+ "hw/virtio/virtio-iommu-pci.c",
1197+ "hw/virtio/virtio-iommu.c",
1198+ "hw/virtio/virtio-mem-pci.c",
1199+ "hw/virtio/virtio-mem.c",
1200+ "hw/virtio/virtio-net-pci.c",
1201+ "hw/virtio/virtio-pmem-pci.c",
1202+ "hw/virtio/virtio-pmem.c",
1203+ "hw/virtio/virtio-rng-pci.c",
1204+ "hw/virtio/virtio-rng.c",
1205+ "hw/virtio/virtio-scsi-pci.c",
1206+ "hw/virtio/virtio-serial-pci.c",
1207+ "hw/virtio/virtio.c",
1208+ "migration/dirtyrate.c",
1209+ "migration/ram.c",
1210+ "monitor/misc.c",
1211+ "softmmu/arch_init.c",
1212+ "softmmu/balloon.c",
1213+ "softmmu/cpu-throttle.c",
1214+ "softmmu/cpu-timers.c",
1215+ "softmmu/cpus.c",
1216+ "softmmu/ioport.c",
1217+ "softmmu/main.c",
1218+ "softmmu/memory_mapping.c",
1219+ "softmmu/memory.c",
1220+ "softmmu/physmem.c",
1221+ "softmmu/qtest.c",
1222+ "softmmu/vl.c",
1223+ "target/i386/arch_dump.c",
1224+ "target/i386/arch_memory_mapping.c",
1225+ "target/i386/cpu.c",
1226+ "target/i386/gdbstub.c",
1227+ "target/i386/helper.c",
1228+ "target/i386/kvm.c",
1229+ "target/i386/hyperv.c",
1230+ "target/i386/machine.c",
1231+ "target/i386/monitor.c",
1232+ "target/i386/tcg-stub.c",
1233+ "target/i386/sev.c",
1234+ "target/i386/xsave_helper.c",
1235+ ] + [
1236+ ":gen_hdrs",
1237+ ":trace_c",
1238+ ":qapi_c",
1239+ ],
1240+ copts = ["-fwrapv"], # QEMU relies on hacky two's complement representations of bitshifts
1241+ linkopts = [
1242+ "-pthread",
1243+ "-lutil", # Not actually a library but weird GLIBC shenanigans
1244+ ],
1245+ data = glob(["pc-bios/**"]),
1246+ local_defines = [
1247+ "_GNU_SOURCE",
1248+ "_FILE_OFFSET_BITS=64",
1249+ "_LARGEFILE_SOURCE",
1250+ "NEED_CPU_H",
1251+ "CONFIG_TARGET=\\\"x86_64-softmmu-config-target.h\\\"",
1252+ "CONFIG_DEVICES=\\\"x86_64-softmmu-config-devices.h\\\"",
1253+ ],
1254+ deps = [
1255+ ":fdt",
1256+ ":qemu",
1257+ ":slirp",
1258+ "@glib//glib",
1259+ "@pixman//:pixman",
1260+ "@zlib//:zlib",
1261+ ],
1262+ visibility = ["//visibility:public"],
Tim Windelschmidtf69d84b2024-07-03 20:32:19 +02001263+ includes = ["target/i386", "tcg/i386", "accel/tcg"],
Lorenz Brun0de18932021-03-11 00:36:48 +01001264+)
1265+
1266+genrule(
1267+ name = "cursor-hdrs",
1268+ srcs = [
1269+ "ui/cursor_hidden.xpm",
1270+ "ui/cursor_left_ptr.xpm",
1271+ ],
1272+ outs = [
1273+ "ui/cursor_hidden.h",
1274+ "ui/cursor_left_ptr.h",
1275+ ],
1276+ cmd = """
1277+ cp $(location ui/cursor_hidden.xpm) $(location ui/cursor_hidden.h)
1278+ cp $(location ui/cursor_left_ptr.xpm) $(location ui/cursor_left_ptr.h)
1279+ """,
1280+)
1281+
1282+genrule(
1283+ name = "module-block",
1284+ outs = ["block/module_block.h"],
1285+ cmd = "./$(location //scripts/modules:module_block) $(location block/module_block.h)",
1286+ tools = ["//scripts/modules:module_block"],
1287+)
1288+
1289+genrule(
1290+ name = "hmp-commands",
1291+ srcs = [
1292+ "hmp-commands.hx",
1293+ "hmp-commands-info.hx",
1294+ "qemu-options.hx",
1295+ "qemu-img-cmds.hx",
1296+ ],
1297+ outs = [
1298+ "hmp-commands.h",
1299+ "hmp-commands-info.h",
1300+ "qemu-options-gen.h",
1301+ "qemu-img-cmds.h",
1302+ ],
1303+ cmd = """
1304+ ./$(location //scripts:hxtool-sh) -h $(location hmp-commands.hx) > $(location hmp-commands.h)
1305+ ./$(location //scripts:hxtool-sh) -h $(location hmp-commands-info.hx) > $(location hmp-commands-info.h)
1306+ ./$(location //scripts:hxtool-sh) -h $(location qemu-options.hx) > $(location qemu-options-gen.h)
1307+ ./$(location //scripts:hxtool-sh) -h $(location qemu-img-cmds.hx) > $(location qemu-img-cmds.h)
1308+ """,
1309+ tools = ["//scripts:hxtool-sh"],
1310+)
1311+
1312+cc_qemu_keymaps(
1313+ name = "keymaps-gen",
1314+ src = "ui/keycodemapdb/data/keymaps.csv",
1315+ maps = {
1316+ "atset1": ["qcode"],
1317+ "linux": ["qcode"],
1318+ "qcode": [
1319+ "atset1",
1320+ "atset2",
1321+ "atset3",
1322+ "linux",
1323+ "qnum",
1324+ "sun",
1325+ ],
1326+ "qnum": ["qcode"],
1327+ "usb": ["qcode"],
1328+ "win32": ["qcode"],
1329+ "x11": ["qcode"],
1330+ "xorgevdev": ["qcode"],
1331+ "xorgkbd": ["qcode"],
1332+ "xorgxquartz": ["qcode"],
1333+ "xorgxwin": ["qcode"],
1334+ "osx": ["qcode"],
1335+ },
1336+)
1337+
1338+
1339+genrule(
1340+ name = "renamed-keymap-gen",
1341+ srcs = ["ui/keycodemapdb/tools/keymap-gen"],
1342+ outs = ["keymap-gen.py"],
1343+ cmd = "cp $(location ui/keycodemapdb/tools/keymap-gen) $@",
1344+)
1345+
1346+py_binary(
1347+ name = "keymap-gen",
1348+ srcs = [":renamed-keymap-gen"],
1349+ visibility = ["//visibility:public"],
Tim Windelschmidtc834b7d2023-10-26 05:52:28 +02001350+ imports = [""],
Lorenz Brun0de18932021-03-11 00:36:48 +01001351+)
1352+
1353+genrule(
1354+ name = "gdbstub-xml",
1355+ srcs = ["gdb-xml/i386-64bit.xml"],
1356+ outs = ["x86_64-softmmu-gdbstub-xml.c"],
1357+ cmd = "./$(location //scripts:feature_to_c) $(location gdb-xml/i386-64bit.xml) > $@",
1358+ tools = ["//scripts:feature_to_c"],
1359+)
1360+
1361+# TODO: x86_64-softmmu-config-target.h, x86_64-softmmu-config-devices.h, include/qemu/config-host.h (probably copy)
1362+# TODO: ui/input-keymap-*.c.inc (generate at top level with //ui/keycodemapdb/tools:keymap-gen)
1363diff --git a/defs.bzl b/defs.bzl
1364new file mode 100644
1365index 0000000000..3a8d50d429
1366--- /dev/null
1367+++ b/defs.bzl
Tim Windelschmidt961a7cc2024-01-13 21:00:02 +01001368@@ -0,0 +1,73 @@
Serge Bazanski4e6fe4a2023-03-23 17:35:22 +01001369+def _impl_filter_label_contains(ctx):
1370+ return [DefaultInfo(
1371+ files = depset([f for f in ctx.files.srcs if any([c in f.path for c in ctx.attr.contains])]),
1372+ )]
1373+
1374+filter_label_contains = rule(
1375+ implementation = _impl_filter_label_contains,
1376+ attrs = {
1377+ "srcs": attr.label_list(
1378+ mandatory = True,
1379+ allow_files = True,
1380+ ),
1381+ "contains": attr.string_list(
1382+ default = [],
1383+ ),
1384+ },
1385+)
1386+
Lorenz Brun0de18932021-03-11 00:36:48 +01001387+def _impl_filter_label_suffix(ctx):
1388+ return [DefaultInfo(
1389+ files = depset([f for f in ctx.files.srcs if f.path.endswith(ctx.attr.suffix) and f.basename not in ctx.attr.exclude]),
1390+ )]
1391+
1392+filter_label_suffix = rule(
1393+ implementation = _impl_filter_label_suffix,
1394+ attrs = {
1395+ "srcs": attr.label_list(
1396+ mandatory = True,
1397+ allow_files = True,
1398+ ),
1399+ "suffix": attr.string(
1400+ mandatory = True,
1401+ ),
1402+ "exclude": attr.string_list(
1403+ default = [],
1404+ ),
1405+ },
1406+)
1407+
1408+def _impl_cc_qemu_keymaps(ctx):
1409+ outs = []
1410+ for _from in ctx.attr.maps:
1411+ for _to in ctx.attr.maps[_from]:
1412+ out = ctx.actions.declare_file("ui/input-keymap-{}-to-{}.c.inc".format(_from, _to))
1413+ ctx.actions.run(
1414+ inputs = ctx.files.src + ctx.files._keymap_gen,
1415+ executable = ctx.executable._savestdout,
Tim Windelschmidt961a7cc2024-01-13 21:00:02 +01001416+ # Don't use _keymap_gen[0] as this does not call the .py file directly,
1417+ # instead it would use the wrapper script provided by bazel,
1418+ # which does not work without more workarounds to provide the correct runfiles.
1419+ arguments = [out.path, ctx.files._keymap_gen[1].path, "--lang=glib2", "--varname=qemu_input_map_{}_to_{}".format(_from, _to), "code-map", ctx.files.src[0].path, _from, _to],
Lorenz Brun0de18932021-03-11 00:36:48 +01001420+ outputs = [out],
1421+ )
1422+ outs.append(out)
1423+ return [DefaultInfo(files = depset(outs))]
1424+
1425+cc_qemu_keymaps = rule(
1426+ implementation = _impl_cc_qemu_keymaps,
1427+ attrs = {
1428+ "src": attr.label(allow_single_file = True),
1429+ "maps": attr.string_list_dict(),
1430+ "_keymap_gen": attr.label(
1431+ default = Label("//:keymap-gen"),
1432+ executable = True,
1433+ cfg = "exec",
1434+ ),
1435+ "_savestdout": attr.label(
Tim Windelschmidtafeb4c42024-07-17 21:37:26 +02001436+ default = Label("@@//build/savestdout"),
Lorenz Brun0de18932021-03-11 00:36:48 +01001437+ executable = True,
1438+ cfg = "exec",
1439+ ),
1440+ },
1441+)
1442diff --git a/qapi/BUILD b/qapi/BUILD
1443new file mode 100644
1444index 0000000000..71ff5a7445
1445--- /dev/null
1446+++ b/qapi/BUILD
1447@@ -0,0 +1,25 @@
1448+load("//scripts/qapi:defs.bzl", "cc_qapi")
1449+
1450+cc_qapi(
1451+ name = "qapi_generated",
1452+ srcs = glob(["*.json"]),
1453+ main = "qapi-schema.json",
1454+ visibility = ["//visibility:public"],
1455+)
1456+
1457+exports_files(glob([
1458+ "*.c",
1459+ "*.h",
1460+]) + ["trace-events"])
1461+
1462+filegroup(
1463+ name = "extra_hdrs",
1464+ srcs = glob(["**/*.h"]),
1465+ visibility = ["//visibility:public"],
1466+)
1467+
1468+filegroup(
1469+ name = "schema",
1470+ srcs = glob(["*.json"]),
1471+ visibility = ["//visibility:public"],
1472+)
1473diff --git a/qapi/defs.bzl b/qapi/defs.bzl
1474new file mode 100644
1475index 0000000000..2d1f38fdfa
1476--- /dev/null
1477+++ b/qapi/defs.bzl
1478@@ -0,0 +1,40 @@
1479+load("@rules_cc//cc:defs.bzl", "cc_library")
1480+
1481+# The actual rule which does the filtering.
1482+def _do_filter_impl(ctx):
1483+ return [DefaultInfo(
1484+ files = depset([f for f in ctx.files.srcs if f.path.endswith(ctx.attr.suffix)]),
1485+ )]
1486+
1487+_do_filter = rule(
1488+ implementation = _do_filter_impl,
1489+ attrs = {
1490+ "srcs": attr.label_list(
1491+ mandatory = True,
1492+ allow_files = True,
1493+ ),
1494+ "suffix": attr.string(
1495+ mandatory = True,
1496+ ),
1497+ },
1498+)
1499+
1500+def filtered_cc_library(name, srcs, hdrs, **kwargs):
1501+ _do_filter(
1502+ name = "%s_hdrs" % name,
1503+ visibility = ["//visibility:private"],
1504+ srcs = hdrs,
1505+ suffix = ".h",
1506+ )
1507+ _do_filter(
1508+ name = "%s_srcs" % name,
1509+ visibility = ["//visibility:private"],
1510+ srcs = srcs,
1511+ suffix = ".c",
1512+ )
1513+ cc_library(
1514+ name = name,
1515+ srcs = [":%s_srcs" % name],
1516+ hdrs = [":%s_hdrs" % name],
1517+ **kwargs
1518+ )
1519diff --git a/scripts/BUILD b/scripts/BUILD
1520new file mode 100644
1521index 0000000000..0b4fc8a248
1522--- /dev/null
1523+++ b/scripts/BUILD
Tim Windelschmidtc834b7d2023-10-26 05:52:28 +02001524@@ -0,0 +1,38 @@
Lorenz Brun0de18932021-03-11 00:36:48 +01001525+load("@rules_python//python:defs.bzl", "py_binary")
1526+
1527+py_binary(
1528+ name = "qapi-gen",
1529+ srcs = ["qapi-gen.py"],
1530+ visibility = ["//visibility:public"],
1531+ deps = ["//scripts/qapi"],
Tim Windelschmidtc834b7d2023-10-26 05:52:28 +02001532+ imports = [""],
Lorenz Brun0de18932021-03-11 00:36:48 +01001533+)
1534+
1535+py_binary(
1536+ # We cannot use tracetool as name as a directory with the same name exists
1537+ name = "tracetool-cli",
1538+ srcs = ["tracetool.py"],
1539+ main = "tracetool.py",
1540+ visibility = ["//visibility:public"],
1541+ deps = ["//scripts/tracetool"],
Tim Windelschmidtc834b7d2023-10-26 05:52:28 +02001542+ imports = [""],
Lorenz Brun0de18932021-03-11 00:36:48 +01001543+)
1544+
1545+py_binary(
1546+ name = "block-coroutine-wrapper",
1547+ srcs = ["block-coroutine-wrapper.py"],
1548+ visibility = ["//visibility:public"],
Tim Windelschmidtc834b7d2023-10-26 05:52:28 +02001549+ imports = [""],
Lorenz Brun0de18932021-03-11 00:36:48 +01001550+)
1551+
1552+sh_binary(
1553+ name = "hxtool-sh",
1554+ srcs = ["hxtool"],
1555+ visibility = ["//visibility:public"],
1556+)
1557+
1558+sh_binary(
1559+ name = "feature_to_c",
1560+ srcs = ["feature_to_c.sh"],
1561+ visibility = ["//:__subpackages__"],
1562+)
1563diff --git a/scripts/modules/BUILD b/scripts/modules/BUILD
1564new file mode 100644
1565index 0000000000..99a5ab2243
1566--- /dev/null
1567+++ b/scripts/modules/BUILD
Tim Windelschmidtc834b7d2023-10-26 05:52:28 +02001568@@ -0,0 +1,8 @@
Lorenz Brun0de18932021-03-11 00:36:48 +01001569+load("@rules_python//python:defs.bzl", "py_binary")
1570+
1571+py_binary(
1572+ name = "module_block",
1573+ srcs = ["module_block.py"],
Tim Windelschmidtc834b7d2023-10-26 05:52:28 +02001574+ visibility = ["//:__subpackages__"],
1575+ imports = [""],
Lorenz Brun0de18932021-03-11 00:36:48 +01001576+)
1577diff --git a/scripts/qapi/BUILD b/scripts/qapi/BUILD
1578new file mode 100644
1579index 0000000000..a7e8da9368
1580--- /dev/null
1581+++ b/scripts/qapi/BUILD
1582@@ -0,0 +1,7 @@
1583+load("@rules_python//python:defs.bzl", "py_library")
1584+
1585+py_library(
1586+ name = "qapi",
1587+ srcs = glob(["*.py"]),
1588+ visibility = ["//visibility:public"],
1589+)
1590diff --git a/scripts/qapi/defs.bzl b/scripts/qapi/defs.bzl
1591new file mode 100644
1592index 0000000000..807f4b37d5
1593--- /dev/null
1594+++ b/scripts/qapi/defs.bzl
1595@@ -0,0 +1,52 @@
1596+def _impl_qapi_cc(ctx):
1597+ out = []
1598+ out_types = ["types", "visit", "events", "commands"]
1599+ system_modules = ["builtin-types", "builtin-visit", "introspect", "init-commands", "emit-events", "types-error", "visit-error"]
1600+ for t in out_types:
1601+ out.append(ctx.actions.declare_file("qapi-{}.c".format(t)))
1602+ out.append(ctx.actions.declare_file("qapi-{}.h".format(t)))
1603+ for t in system_modules:
1604+ out.append(ctx.actions.declare_file("qapi-{}.c".format(t)))
1605+ out.append(ctx.actions.declare_file("qapi-{}.h".format(t)))
1606+
1607+ input_dir = ""
1608+ main_file = ctx.files.main[0]
1609+ for src in ctx.files.srcs:
1610+ if src.path == main_file.path:
1611+ continue
1612+ extension = src.extension
1613+ basename = src.basename[:-len(extension) - 1]
1614+ if input_dir == "":
1615+ input_dir = src.dirname
1616+ elif input_dir != src.dirname:
1617+ fail("all cc_qapi sources need to be in the same folder")
1618+
1619+ for t in out_types:
1620+ out.append(ctx.actions.declare_file("qapi-{}-{}.c".format(t, basename)))
1621+ out.append(ctx.actions.declare_file("qapi-{}-{}.h".format(t, basename)))
1622+
1623+ ctx.actions.run(
1624+ inputs = ctx.files.srcs + ctx.files.main,
1625+ executable = ctx.executable._qapi_gen,
1626+ arguments = ["-o", out[0].dirname, "-b", main_file.path],
1627+ outputs = out,
1628+ )
1629+ return [DefaultInfo(files = depset(out))]
1630+
1631+cc_qapi = rule(
1632+ implementation = _impl_qapi_cc,
1633+ attrs = {
1634+ "srcs": attr.label_list(
1635+ mandatory = True,
1636+ allow_files = True,
1637+ ),
1638+ "main": attr.label(
1639+ allow_single_file = True,
1640+ ),
1641+ "_qapi_gen": attr.label(
1642+ default = Label("//scripts:qapi-gen"),
1643+ executable = True,
1644+ cfg = "exec",
1645+ ),
1646+ },
1647+)
1648diff --git a/scripts/tracetool/BUILD b/scripts/tracetool/BUILD
1649new file mode 100644
1650index 0000000000..93ccf94480
1651--- /dev/null
1652+++ b/scripts/tracetool/BUILD
1653@@ -0,0 +1,11 @@
1654+load("@rules_python//python:defs.bzl", "py_library")
1655+
1656+py_library(
1657+ name = "tracetool",
1658+ srcs = glob(["*.py"]),
1659+ visibility = ["//visibility:public"],
1660+ deps = [
1661+ "//scripts/tracetool/backend",
1662+ "//scripts/tracetool/format",
1663+ ],
1664+)
1665diff --git a/scripts/tracetool/backend/BUILD b/scripts/tracetool/backend/BUILD
1666new file mode 100644
1667index 0000000000..6cc626682c
1668--- /dev/null
1669+++ b/scripts/tracetool/backend/BUILD
1670@@ -0,0 +1,7 @@
1671+load("@rules_python//python:defs.bzl", "py_library")
1672+
1673+py_library(
1674+ name = "backend",
1675+ srcs = glob(["*.py"]),
1676+ visibility = ["//visibility:public"],
1677+)
1678diff --git a/scripts/tracetool/defs.bzl b/scripts/tracetool/defs.bzl
1679new file mode 100644
1680index 0000000000..70ce080a62
1681--- /dev/null
1682+++ b/scripts/tracetool/defs.bzl
Serge Bazanski665b1092023-02-23 09:36:17 +00001683@@ -0,0 +1,67 @@
Lorenz Brun0de18932021-03-11 00:36:48 +01001684+def _impl_cc_qemu_trace(ctx):
1685+ outs = []
1686+ for src in ctx.files.srcs:
1687+ name = src.path.replace("external/qemu/", "").replace("/trace-events", "").replace("/", "_")
1688+ if name == "trace-events":
1689+ name = "root"
1690+ trace_h = ctx.actions.declare_file("trace-{}.h".format(name))
1691+ trace_c = ctx.actions.declare_file("trace-{}.c".format(name))
1692+ outs.append(trace_c)
1693+ outs.append(trace_h)
1694+
1695+ ctx.actions.run(
Serge Bazanski665b1092023-02-23 09:36:17 +00001696+ inputs = [src],
1697+ tools = [ctx.executable._tracetool],
Lorenz Brun0de18932021-03-11 00:36:48 +01001698+ executable = ctx.executable._savestdout,
Serge Bazanski665b1092023-02-23 09:36:17 +00001699+ arguments = [trace_h.path, ctx.executable._tracetool.path, "--backend", ctx.attr.backend, "--group", name, "--format=h", src.path],
Lorenz Brun0de18932021-03-11 00:36:48 +01001700+ outputs = [trace_h],
1701+ )
1702+ ctx.actions.run(
Serge Bazanski665b1092023-02-23 09:36:17 +00001703+ inputs = [src],
1704+ tools = [ctx.executable._tracetool],
Lorenz Brun0de18932021-03-11 00:36:48 +01001705+ executable = ctx.executable._savestdout,
Serge Bazanski665b1092023-02-23 09:36:17 +00001706+ arguments = [trace_c.path, ctx.executable._tracetool.path, "--backend", ctx.attr.backend, "--group", name, "--format=c", src.path],
Lorenz Brun0de18932021-03-11 00:36:48 +01001707+ outputs = [trace_c],
1708+ )
1709+ return [DefaultInfo(files = depset(outs))]
1710+
1711+cc_qemu_trace = rule(
1712+ implementation = _impl_cc_qemu_trace,
1713+ attrs = {
1714+ "srcs": attr.label_list(
1715+ mandatory = True,
1716+ allow_files = True,
1717+ ),
1718+ "backend": attr.string(
1719+ default = "log",
1720+ ),
1721+ "_tracetool": attr.label(
1722+ default = Label("//scripts:tracetool-cli"),
1723+ executable = True,
1724+ cfg = "exec",
1725+ ),
1726+ "_savestdout": attr.label(
Tim Windelschmidtafeb4c42024-07-17 21:37:26 +02001727+ default = Label("@@//build/savestdout"),
Lorenz Brun0de18932021-03-11 00:36:48 +01001728+ executable = True,
1729+ cfg = "exec",
1730+ ),
1731+ },
1732+)
1733+
1734+def _impl_cc_qemu_trace_single(ctx):
1735+ trace_h = ctx.actions.declare_file("trace-{}.h".format(ctx.attr.name))
1736+ trace_c = ctx.actions.declare_file("trace-{}.c".format(ctx.attr.name))
1737+
1738+ ctx.actions.run(
1739+ inputs = ctx.files.src,
1740+ executable = ctx.executable._tracetool,
1741+ arguments = ["--backend", ctx.attr.backend, "--group", ctx.attr.name, "--format=h", ctx.files.src[0].path, trace_h.path],
1742+ outputs = [trace_h],
1743+ )
1744+ ctx.actions.run(
1745+ inputs = ctx.files.src,
1746+ executable = ctx.executable._tracetool,
1747+ arguments = ["--backend", ctx.attr.backend, "--group", ctx.attr.name, "--format=c", ctx.files.src[0].path, trace_c.path],
1748+ outputs = [trace_c],
1749+ )
1750+ return [DefaultInfo(files = depset([trace_c, trace_h]))]
1751diff --git a/scripts/tracetool/format/BUILD b/scripts/tracetool/format/BUILD
1752new file mode 100644
1753index 0000000000..1b2dc209e1
1754--- /dev/null
1755+++ b/scripts/tracetool/format/BUILD
1756@@ -0,0 +1,7 @@
1757+load("@rules_python//python:defs.bzl", "py_library")
1758+
1759+py_library(
1760+ name = "format",
1761+ srcs = glob(["*.py"]),
1762+ visibility = ["//visibility:public"],
1763+)
1764diff --git a/trace/BUILD b/trace/BUILD
1765new file mode 100644
1766index 0000000000..2f2e71d81a
1767--- /dev/null
1768+++ b/trace/BUILD
1769@@ -0,0 +1,18 @@
1770+load("//scripts/tracetool:defs.bzl", "cc_qemu_trace")
1771+
1772+cc_qemu_trace(
1773+ name = "trace",
1774+ srcs = ["//:trace-files"],
1775+ visibility = ["//visibility:public"],
1776+)
1777+
1778+exports_files(glob([
1779+ "*.c",
1780+ "*.h",
1781+]))
1782+
1783+filegroup(
1784+ name = "extra_hdrs",
1785+ srcs = glob(["**/*.h"]),
1786+ visibility = ["//visibility:public"],
1787+)
1788--
17892.25.1
1790