mirror of
https://github.com/qemu/qemu.git
synced 2024-11-29 14:53:35 +08:00
409dbce54b
A few machines need to translate the ELF header addresses into physical addresses. Currently the only possibility is to add a value to the addresses. This patch replaces the addend argument by and a translation function and an opaque passed to the function. A NULL function does not translate the address. The patch also convert all machines that have an addend, simplify the PowerPC kernel loading and fix the MIPS kernel loading using this new feature. Other machines may benefit from this feature. Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
363 lines
11 KiB
Makefile
363 lines
11 KiB
Makefile
# -*- Mode: makefile -*-
|
|
|
|
GENERATED_HEADERS = config-target.h
|
|
|
|
include ../config-host.mak
|
|
include config-devices.mak
|
|
include config-target.mak
|
|
include $(SRC_PATH)/rules.mak
|
|
ifneq ($(HWDIR),)
|
|
include $(HWDIR)/config.mak
|
|
endif
|
|
|
|
TARGET_PATH=$(SRC_PATH)/target-$(TARGET_BASE_ARCH)
|
|
$(call set-vpath, $(SRC_PATH):$(TARGET_PATH):$(SRC_PATH)/hw)
|
|
QEMU_CFLAGS+= -I.. -I$(TARGET_PATH) -DNEED_CPU_H
|
|
|
|
include $(SRC_PATH)/Makefile.objs
|
|
|
|
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)
|
|
|
|
LIBS+=-lm
|
|
|
|
kvm.o kvm-all.o: QEMU_CFLAGS+=$(KVM_CFLAGS)
|
|
|
|
config-target.h: config-target.h-timestamp
|
|
config-target.h-timestamp: config-target.mak
|
|
|
|
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
|
|
libobj-$(CONFIG_SOFTFLOAT) += fpu/softfloat.o
|
|
libobj-$(CONFIG_NOSOFTFLOAT) += fpu/softfloat-native.o
|
|
libobj-y += op_helper.o helper.o
|
|
ifeq ($(TARGET_BASE_ARCH), i386)
|
|
libobj-y += cpuid.o
|
|
endif
|
|
libobj-$(CONFIG_NEED_MMU) += mmu.o
|
|
libobj-$(TARGET_ARM) += neon_helper.o iwmmxt_helper.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
|
|
|
|
$(libobj-y): $(GENERATED_HEADERS)
|
|
|
|
# libqemu
|
|
|
|
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
|
|
|
|
$(call set-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 cpu-uname.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
|
|
|
|
$(obj-y) $(obj-$(TARGET_BASE_ARCH)-y): $(GENERATED_HEADERS)
|
|
|
|
obj-y += $(addprefix ../libuser/, $(user-obj-y))
|
|
obj-y += $(libobj-y)
|
|
|
|
endif #CONFIG_LINUX_USER
|
|
|
|
#########################################################
|
|
# Darwin user emulator target
|
|
|
|
ifdef CONFIG_DARWIN_USER
|
|
|
|
$(call set-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
|
|
|
|
obj-i386-y += ioport-user.o
|
|
|
|
$(obj-y) $(obj-$(TARGET_BASE_ARCH)-y): $(GENERATED_HEADERS)
|
|
|
|
obj-y += $(addprefix ../libuser/, $(user-obj-y))
|
|
obj-y += $(libobj-y)
|
|
|
|
endif #CONFIG_DARWIN_USER
|
|
|
|
#########################################################
|
|
# BSD user emulator target
|
|
|
|
ifdef CONFIG_BSD_USER
|
|
|
|
$(call set-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 uaccess.o
|
|
|
|
obj-i386-y += ioport-user.o
|
|
|
|
$(obj-y) $(obj-$(TARGET_BASE_ARCH)-y): $(GENERATED_HEADERS)
|
|
|
|
obj-y += $(addprefix ../libuser/, $(user-obj-y))
|
|
obj-y += $(libobj-y)
|
|
|
|
endif #CONFIG_BSD_USER
|
|
|
|
#########################################################
|
|
# System emulator target
|
|
ifdef CONFIG_SOFTMMU
|
|
|
|
obj-y = vl.o async.o monitor.o pci.o pci_host.o pcie_host.o machine.o gdbstub.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-pci.o virtio-serial-bus.o
|
|
obj-y += rwhandler.o
|
|
obj-$(CONFIG_KVM) += kvm.o kvm-all.o
|
|
obj-$(CONFIG_ISA_MMIO) += isa_mmio.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-$(CONFIG_USB_OHCI) += usb-ohci.o
|
|
|
|
# PCI network cards
|
|
obj-y += eepro100.o
|
|
obj-y += pcnet.o
|
|
obj-y += rtl8139.o
|
|
obj-y += e1000.o
|
|
|
|
# Hardware support
|
|
obj-i386-y = ide/core.o ide/qdev.o ide/isa.o ide/pci.o ide/piix.o
|
|
obj-i386-y += pckbd.o $(sound-obj-y) dma.o
|
|
obj-i386-y += vga.o vga-pci.o vga-isa.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 wdt_ib700.o
|
|
obj-i386-y += ne2000-isa.o debugcon.o multiboot.o
|
|
|
|
# shared objects
|
|
obj-ppc-y = ppc.o ide/core.o ide/qdev.o ide/isa.o ide/pci.o ide/macio.o
|
|
obj-ppc-y += ide/cmd646.o
|
|
obj-ppc-y += vga.o vga-pci.o $(sound-obj-y) dma.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 ne2000-isa.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 dec_pci.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_addr.o mips_timer.o mips_int.o
|
|
obj-mips-y += dma.o vga.o serial.o i8254.o i8259.o rc4030.o
|
|
obj-mips-y += vga-pci.o vga-isa.o vga-isa-mm.o
|
|
obj-mips-y += g364fb.o jazz_led.o dp8393x.o
|
|
obj-mips-y += ide/core.o ide/qdev.o ide/isa.o ide/pci.o ide/piix.o
|
|
obj-mips-y += gt64xxx.o pckbd.o fdc.o mc146818rtc.o usb-uhci.o acpi.o ds1225y.o
|
|
obj-mips-y += piix4.o parallel.o cirrus_vga.o pcspk.o $(sound-obj-y)
|
|
obj-mips-y += mipsnet.o ne2000-isa.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_cfi01.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 pckbd.o apb_pci.o
|
|
obj-sparc-y += ide/core.o ide/qdev.o ide/pci.o ide/cmd646.o
|
|
obj-sparc-y += vga.o vga-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 lance.o tcx.o iommu.o slavio_intctl.o
|
|
obj-sparc-y += slavio_timer.o slavio_misc.o fdc.o sparc32_dma.o
|
|
obj-sparc-y += cs4231.o eccmemctl.o sbi.o sun4c_intctl.o
|
|
endif
|
|
|
|
obj-arm-y = integratorcp.o versatilepb.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 arm11mpcore.o a9mpcore.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/core.o ide/microdrive.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/core.o ide/mmio.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
|
|
|
|
obj-s390x-y = s390-virtio-bus.o s390-virtio.o
|
|
|
|
obj-alpha-y = alpha_palcode.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
|
|
|
|
$(obj-y) $(obj-$(TARGET_BASE_ARCH)-y): $(GENERATED_HEADERS)
|
|
|
|
obj-y += $(addprefix ../, $(common-obj-y))
|
|
obj-y += $(libobj-y)
|
|
obj-y += $(addprefix $(HWDIR)/, $(hw-obj-y))
|
|
|
|
endif # CONFIG_SOFTMMU
|
|
|
|
obj-$(CONFIG_GDBSTUB_XML) += gdbstub-xml.o
|
|
|
|
$(QEMU_PROG): $(obj-y) $(obj-$(TARGET_BASE_ARCH)-y)
|
|
$(call LINK,$(obj-y) $(obj-$(TARGET_BASE_ARCH)-y))
|
|
|
|
|
|
gdbstub-xml.c: $(TARGET_XML_FILES) $(SRC_PATH)/feature_to_c.sh
|
|
$(call quiet-command,rm -f $@ && $(SHELL) $(SRC_PATH)/feature_to_c.sh $@ $(TARGET_XML_FILES)," GEN $(TARGET_DIR)$@")
|
|
|
|
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 ide/*.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)
|