mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-10-05 02:29:49 +00:00
4a1418e07b
kqemu introduces a number of restrictions on the i386 target. The worst is that it prevents large memory from working in the default build. Furthermore, kqemu is fundamentally flawed in a number of ways. It relies on the TSC as a time source which will not be reliable on a multiple processor system in userspace. Since most modern processors are multicore, this severely limits the utility of kqemu. kvm is a viable alternative for people looking to accelerate qemu and has the benefit of being supported by the upstream Linux kernel. If someone can implement work arounds to remove the restrictions introduced by kqemu, I'm happy to avoid and/or revert this patch. N.B. kqemu will still function in the 0.11 series but this patch removes it from the 0.12 series. Paul, please Ack or Nack this patch. Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
328 lines
9.9 KiB
Makefile
328 lines
9.9 KiB
Makefile
# -*- Mode: makefile -*-
|
|
|
|
include config.mak
|
|
include $(SRC_PATH)/rules.mak
|
|
|
|
TARGET_PATH=$(SRC_PATH)/target-$(TARGET_BASE_ARCH)
|
|
VPATH=$(SRC_PATH):$(TARGET_PATH):$(SRC_PATH)/hw
|
|
QEMU_CFLAGS+= -I.. -I$(TARGET_PATH) -DNEED_CPU_H
|
|
|
|
ifdef CONFIG_USER_ONLY
|
|
# user emulator name
|
|
QEMU_PROG=qemu-$(TARGET_ARCH2)
|
|
else
|
|
# system emulator name
|
|
ifeq ($(TARGET_ARCH), i386)
|
|
QEMU_PROG=qemu$(EXESUF)
|
|
else
|
|
QEMU_PROG=qemu-system-$(TARGET_ARCH2)$(EXESUF)
|
|
endif
|
|
endif
|
|
|
|
PROGS=$(QEMU_PROG)
|
|
|
|
ifeq ($(subst ppc64,ppc,$(ARCH))$(TARGET_BASE_ARCH),ppcppc)
|
|
translate.o: QEMU_CFLAGS += $(call cc-option, $(QEMU_CFLAGS), -fno-unit-at-a-time,)
|
|
endif
|
|
|
|
LIBS+=-lm
|
|
|
|
kvm.o kvm-all.o: QEMU_CFLAGS+=$(KVM_CFLAGS)
|
|
|
|
all: $(PROGS)
|
|
# Dummy command so that make thinks it has done something
|
|
@true
|
|
|
|
#########################################################
|
|
# cpu emulator library
|
|
libobj-y = exec.o translate-all.o cpu-exec.o translate.o
|
|
libobj-y += tcg/tcg.o tcg/tcg-runtime.o
|
|
libobj-$(CONFIG_SOFTFLOAT) += fpu/softfloat.o
|
|
libobj-$(CONFIG_NOSOFTFLOAT) += fpu/softfloat-native.o
|
|
libobj-y += op_helper.o helper.o
|
|
libobj-$(CONFIG_NEED_MMU) += mmu.o
|
|
libobj-$(TARGET_ARM) += neon_helper.o iwmmxt_helper.o
|
|
libobj-$(TARGET_ALPHA) += alpha_palcode.o
|
|
|
|
# NOTE: the disassembler code is only needed for debugging
|
|
libobj-y += disas.o
|
|
libobj-$(CONFIG_ALPHA_DIS) += alpha-dis.o
|
|
libobj-$(CONFIG_ARM_DIS) += arm-dis.o
|
|
libobj-$(CONFIG_CRIS_DIS) += cris-dis.o
|
|
libobj-$(CONFIG_HPPA_DIS) += hppa-dis.o
|
|
libobj-$(CONFIG_I386_DIS) += i386-dis.o
|
|
libobj-$(CONFIG_M68K_DIS) += m68k-dis.o
|
|
libobj-$(CONFIG_MICROBLAZE_DIS) += microblaze-dis.o
|
|
libobj-$(CONFIG_MIPS_DIS) += mips-dis.o
|
|
libobj-$(CONFIG_PPC_DIS) += ppc-dis.o
|
|
libobj-$(CONFIG_S390_DIS) += s390-dis.o
|
|
libobj-$(CONFIG_SH4_DIS) += sh4-dis.o
|
|
libobj-$(CONFIG_SPARC_DIS) += sparc-dis.o
|
|
|
|
# libqemu
|
|
|
|
libqemu.a: $(libobj-y)
|
|
|
|
translate.o: translate.c cpu.h
|
|
|
|
translate-all.o: translate-all.c cpu.h
|
|
|
|
tcg/tcg.o: cpu.h
|
|
|
|
# HELPER_CFLAGS is used for all the code compiled with static register
|
|
# variables
|
|
op_helper.o cpu-exec.o: QEMU_CFLAGS += $(HELPER_CFLAGS)
|
|
|
|
# Note: this is a workaround. The real fix is to avoid compiling
|
|
# cpu_signal_handler() in cpu-exec.c.
|
|
signal.o: QEMU_CFLAGS += $(HELPER_CFLAGS)
|
|
|
|
#########################################################
|
|
# Linux user emulator target
|
|
|
|
ifdef CONFIG_LINUX_USER
|
|
|
|
VPATH+=:$(SRC_PATH)/linux-user:$(SRC_PATH)/linux-user/$(TARGET_ABI_DIR)
|
|
QEMU_CFLAGS+=-I$(SRC_PATH)/linux-user -I$(SRC_PATH)/linux-user/$(TARGET_ABI_DIR)
|
|
|
|
obj-y = main.o syscall.o strace.o mmap.o signal.o thunk.o \
|
|
elfload.o linuxload.o uaccess.o gdbstub.o gdbstub-xml.o
|
|
|
|
obj-$(TARGET_HAS_BFLT) += flatload.o
|
|
obj-$(TARGET_HAS_ELFLOAD32) += elfload32.o
|
|
|
|
obj-$(TARGET_I386) += vm86.o
|
|
|
|
obj-i386-y += ioport-user.o
|
|
|
|
nwfpe-obj-y = fpa11.o fpa11_cpdo.o fpa11_cpdt.o fpa11_cprt.o fpopcode.o
|
|
nwfpe-obj-y += single_cpdo.o double_cpdo.o extended_cpdo.o
|
|
obj-arm-y += $(addprefix nwfpe/, $(nwfpe-obj-y))
|
|
obj-arm-y += arm-semi.o
|
|
|
|
obj-m68k-y += m68k-sim.o m68k-semi.o
|
|
|
|
ARLIBS=../libqemu_user.a libqemu.a
|
|
endif #CONFIG_LINUX_USER
|
|
|
|
#########################################################
|
|
# Darwin user emulator target
|
|
|
|
ifdef CONFIG_DARWIN_USER
|
|
|
|
VPATH+=:$(SRC_PATH)/darwin-user
|
|
QEMU_CFLAGS+=-I$(SRC_PATH)/darwin-user -I$(SRC_PATH)/darwin-user/$(TARGET_ARCH)
|
|
|
|
# Leave some space for the regular program loading zone
|
|
LDFLAGS+=-Wl,-segaddr,__STD_PROG_ZONE,0x1000 -image_base 0x0e000000
|
|
|
|
LIBS+=-lmx
|
|
|
|
obj-y = main.o commpage.o machload.o mmap.o signal.o syscall.o thunk.o \
|
|
gdbstub.o gdbstub-xml.o
|
|
|
|
obj-i386-y += ioport-user.o
|
|
|
|
ARLIBS=libqemu.a
|
|
|
|
endif #CONFIG_DARWIN_USER
|
|
|
|
#########################################################
|
|
# BSD user emulator target
|
|
|
|
ifdef CONFIG_BSD_USER
|
|
|
|
VPATH+=:$(SRC_PATH)/bsd-user
|
|
QEMU_CFLAGS+=-I$(SRC_PATH)/bsd-user -I$(SRC_PATH)/bsd-user/$(TARGET_ARCH)
|
|
|
|
obj-y = main.o bsdload.o elfload.o mmap.o signal.o strace.o syscall.o \
|
|
gdbstub.o gdbstub-xml.o uaccess.o
|
|
|
|
obj-i386-y += ioport-user.o
|
|
|
|
ARLIBS=libqemu.a ../libqemu_user.a
|
|
|
|
endif #CONFIG_BSD_USER
|
|
|
|
#########################################################
|
|
# System emulator target
|
|
ifdef CONFIG_SOFTMMU
|
|
|
|
obj-y = vl.o osdep.o monitor.o pci.o loader.o isa_mmio.o machine.o \
|
|
gdbstub.o gdbstub-xml.o msix.o ioport.o qemu-config.o
|
|
# virtio has to be here due to weird dependency between PCI and virtio-net.
|
|
# need to fix this properly
|
|
obj-y += virtio-blk.o virtio-balloon.o virtio-net.o virtio-console.o
|
|
obj-$(CONFIG_KVM) += kvm.o kvm-all.o
|
|
|
|
LIBS+=-lz
|
|
|
|
sound-obj-y =
|
|
sound-obj-$(CONFIG_SB16) += sb16.o
|
|
sound-obj-$(CONFIG_ES1370) += es1370.o
|
|
sound-obj-$(CONFIG_AC97) += ac97.o
|
|
sound-obj-$(CONFIG_ADLIB) += fmopl.o adlib.o
|
|
sound-obj-$(CONFIG_GUS) += gus.o gusemu_hal.o gusemu_mixer.o
|
|
sound-obj-$(CONFIG_CS4231A) += cs4231a.o
|
|
|
|
adlib.o fmopl.o: QEMU_CFLAGS += -DBUILD_Y8950=0
|
|
|
|
QEMU_CFLAGS += $(VNC_TLS_CFLAGS)
|
|
QEMU_CFLAGS += $(VNC_SASL_CFLAGS)
|
|
|
|
# xen backend driver support
|
|
obj-$(CONFIG_XEN) += xen_machine_pv.o xen_domainbuild.o
|
|
|
|
# USB layer
|
|
obj-y += usb-ohci.o
|
|
|
|
# PCI network cards
|
|
obj-y += eepro100.o
|
|
obj-y += ne2000.o
|
|
obj-y += pcnet.o
|
|
obj-y += rtl8139.o
|
|
obj-y += e1000.o
|
|
|
|
# Generic watchdog support and some watchdog devices
|
|
obj-y += wdt_ib700.o wdt_i6300esb.o
|
|
|
|
# Hardware support
|
|
obj-i386-y = ide.o pckbd.o vga.o $(sound-obj-y) dma.o isa-bus.o
|
|
obj-i386-y += fdc.o mc146818rtc.o serial.o i8259.o i8254.o pcspk.o pc.o
|
|
obj-i386-y += cirrus_vga.o apic.o ioapic.o parallel.o acpi.o piix_pci.o
|
|
obj-i386-y += usb-uhci.o vmmouse.o vmport.o vmware_vga.o hpet.o
|
|
obj-i386-y += device-hotplug.o pci-hotplug.o smbios.o
|
|
|
|
# shared objects
|
|
obj-ppc-y = ppc.o ide.o vga.o $(sound-obj-y) dma.o isa-bus.o openpic.o
|
|
# PREP target
|
|
obj-ppc-y += pckbd.o serial.o i8259.o i8254.o fdc.o mc146818rtc.o
|
|
obj-ppc-y += prep_pci.o ppc_prep.o
|
|
# Mac shared devices
|
|
obj-ppc-y += macio.o cuda.o adb.o mac_nvram.o mac_dbdma.o
|
|
# OldWorld PowerMac
|
|
obj-ppc-y += heathrow_pic.o grackle_pci.o ppc_oldworld.o
|
|
# NewWorld PowerMac
|
|
obj-ppc-y += unin_pci.o ppc_newworld.o
|
|
# PowerPC 4xx boards
|
|
obj-ppc-y += pflash_cfi02.o ppc4xx_devs.o ppc4xx_pci.o ppc405_uc.o ppc405_boards.o
|
|
obj-ppc-y += ppc440.o ppc440_bamboo.o
|
|
# PowerPC E500 boards
|
|
obj-ppc-y += ppce500_pci.o ppce500_mpc8544ds.o
|
|
obj-ppc-$(CONFIG_KVM) += kvm_ppc.o
|
|
obj-ppc-$(CONFIG_FDT) += device_tree.o
|
|
|
|
obj-mips-y = mips_r4k.o mips_jazz.o mips_malta.o mips_mipssim.o
|
|
obj-mips-y += mips_timer.o mips_int.o dma.o vga.o serial.o i8254.o i8259.o rc4030.o
|
|
obj-mips-y += g364fb.o jazz_led.o dp8393x.o
|
|
obj-mips-y += ide.o gt64xxx.o pckbd.o fdc.o mc146818rtc.o usb-uhci.o acpi.o ds1225y.o
|
|
obj-mips-y += piix_pci.o parallel.o cirrus_vga.o isa-bus.o pcspk.o $(sound-obj-y)
|
|
obj-mips-y += mipsnet.o
|
|
obj-mips-y += pflash_cfi01.o
|
|
obj-mips-y += vmware_vga.o
|
|
|
|
obj-microblaze-y = petalogix_s3adsp1800_mmu.o
|
|
|
|
obj-microblaze-y += microblaze_pic_cpu.o
|
|
obj-microblaze-y += xilinx_intc.o
|
|
obj-microblaze-y += xilinx_timer.o
|
|
obj-microblaze-y += xilinx_uartlite.o
|
|
obj-microblaze-y += xilinx_ethlite.o
|
|
|
|
obj-microblaze-y += pflash_cfi02.o
|
|
|
|
obj-microblaze-$(CONFIG_FDT) += device_tree.o
|
|
|
|
# Boards
|
|
obj-cris-y = cris_pic_cpu.o etraxfs.o axis_dev88.o
|
|
|
|
# IO blocks
|
|
obj-cris-y += etraxfs_dma.o
|
|
obj-cris-y += etraxfs_pic.o
|
|
obj-cris-y += etraxfs_eth.o
|
|
obj-cris-y += etraxfs_timer.o
|
|
obj-cris-y += etraxfs_ser.o
|
|
|
|
obj-cris-y += pflash_cfi02.o
|
|
|
|
ifeq ($(TARGET_ARCH), sparc64)
|
|
obj-sparc-y = sun4u.o ide.o isa-bus.o pckbd.o vga.o apb_pci.o
|
|
obj-sparc-y += fdc.o mc146818rtc.o serial.o
|
|
obj-sparc-y += cirrus_vga.o parallel.o
|
|
else
|
|
obj-sparc-y = sun4m.o tcx.o iommu.o slavio_intctl.o
|
|
obj-sparc-y += slavio_timer.o slavio_misc.o fdc.o isa-bus.o sparc32_dma.o
|
|
obj-sparc-y += cs4231.o eccmemctl.o sbi.o sun4c_intctl.o
|
|
endif
|
|
|
|
obj-arm-y = integratorcp.o versatilepb.o smc91c111.o arm_pic.o arm_timer.o
|
|
obj-arm-y += arm_boot.o pl011.o pl031.o pl050.o pl080.o pl110.o pl181.o pl190.o
|
|
obj-arm-y += versatile_pci.o
|
|
obj-arm-y += realview_gic.o realview.o arm_sysctl.o mpcore.o
|
|
obj-arm-y += armv7m.o armv7m_nvic.o stellaris.o pl022.o stellaris_enet.o
|
|
obj-arm-y += pl061.o
|
|
obj-arm-y += arm-semi.o
|
|
obj-arm-y += pxa2xx.o pxa2xx_pic.o pxa2xx_gpio.o pxa2xx_timer.o pxa2xx_dma.o
|
|
obj-arm-y += pxa2xx_lcd.o pxa2xx_mmci.o pxa2xx_pcmcia.o pxa2xx_keypad.o
|
|
obj-arm-y += pflash_cfi01.o gumstix.o
|
|
obj-arm-y += zaurus.o ide.o serial.o spitz.o tosa.o tc6393xb.o
|
|
obj-arm-y += omap1.o omap_lcdc.o omap_dma.o omap_clk.o omap_mmc.o omap_i2c.o
|
|
obj-arm-y += omap2.o omap_dss.o soc_dma.o
|
|
obj-arm-y += omap_sx1.o palm.o tsc210x.o
|
|
obj-arm-y += nseries.o blizzard.o onenand.o vga.o cbus.o tusb6010.o usb-musb.o
|
|
obj-arm-y += mst_fpga.o mainstone.o
|
|
obj-arm-y += musicpal.o pflash_cfi02.o bitbang_i2c.o marvell_88w8618_audio.o
|
|
obj-arm-y += framebuffer.o
|
|
obj-arm-y += syborg.o syborg_fb.o syborg_interrupt.o syborg_keyboard.o
|
|
obj-arm-y += syborg_serial.o syborg_timer.o syborg_pointer.o syborg_rtc.o
|
|
obj-arm-y += syborg_virtio.o
|
|
|
|
obj-sh4-y = shix.o r2d.o sh7750.o sh7750_regnames.o tc58128.o
|
|
obj-sh4-y += sh_timer.o sh_serial.o sh_intc.o sh_pci.o sm501.o serial.o
|
|
obj-sh4-y += ide.o
|
|
|
|
obj-m68k-y = an5206.o mcf5206.o mcf_uart.o mcf_intc.o mcf5208.o mcf_fec.o
|
|
obj-m68k-y += m68k-semi.o dummy_m68k.o
|
|
|
|
main.o vl.o: QEMU_CFLAGS+=$(GPROF_CFLAGS)
|
|
|
|
vl.o: QEMU_CFLAGS+=$(SDL_CFLAGS)
|
|
|
|
vl.o: qemu-options.h
|
|
|
|
monitor.o: qemu-monitor.h
|
|
|
|
ARLIBS=../libqemu_common.a libqemu.a $(HWLIB)
|
|
|
|
endif # CONFIG_SOFTMMU
|
|
|
|
$(QEMU_PROG): $(obj-y) $(obj-$(TARGET_BASE_ARCH)-y) $(ARLIBS)
|
|
$(call LINK,$(obj-y) $(obj-$(TARGET_BASE_ARCH)-y))
|
|
|
|
|
|
gdbstub-xml.c: $(TARGET_XML_FILES) feature_to_c.sh
|
|
ifeq ($(TARGET_XML_FILES),)
|
|
$(call quiet-command,rm -f $@ && echo > $@," GEN $(TARGET_DIR)$@")
|
|
else
|
|
$(call quiet-command,rm -f $@ && $(SHELL) $(SRC_PATH)/feature_to_c.sh $@ $(TARGET_XML_FILES)," GEN $(TARGET_DIR)$@")
|
|
endif
|
|
|
|
qemu-options.h: $(SRC_PATH)/qemu-options.hx
|
|
$(call quiet-command,sh $(SRC_PATH)/hxtool -h < $< > $@," GEN $(TARGET_DIR)$@")
|
|
|
|
qemu-monitor.h: $(SRC_PATH)/qemu-monitor.hx
|
|
$(call quiet-command,sh $(SRC_PATH)/hxtool -h < $< > $@," GEN $(TARGET_DIR)$@")
|
|
|
|
clean:
|
|
rm -f *.o *.a *~ $(PROGS) nwfpe/*.o fpu/*.o
|
|
rm -f *.d */*.d tcg/*.o
|
|
rm -f qemu-options.h qemu-monitor.h gdbstub-xml.c
|
|
|
|
install: all
|
|
ifneq ($(PROGS),)
|
|
$(INSTALL) -m 755 $(STRIP_OPT) $(PROGS) "$(DESTDIR)$(bindir)"
|
|
endif
|
|
|
|
# Include automatically generated dependency files
|
|
-include $(wildcard *.d */*.d)
|