1# -*- Mode: makefile -*- 2 3BUILD_DIR?=$(CURDIR)/.. 4 5include ../config-host.mak 6include config-target.mak 7include $(SRC_PATH)/rules.mak 8 9ifdef CONFIG_SOFTMMU 10include config-devices.mak 11endif 12 13$(call set-vpath, $(SRC_PATH):$(BUILD_DIR)) 14ifdef CONFIG_LINUX 15QEMU_CFLAGS += -I../linux-headers 16endif 17QEMU_CFLAGS += -iquote .. -iquote $(SRC_PATH)/target/$(TARGET_BASE_ARCH) -DNEED_CPU_H 18 19QEMU_CFLAGS+=-iquote $(SRC_PATH)/include 20 21ifdef CONFIG_USER_ONLY 22# user emulator name 23QEMU_PROG=qemu-$(TARGET_NAME) 24QEMU_PROG_BUILD = $(QEMU_PROG) 25else 26# system emulator name 27QEMU_PROG=qemu-system-$(TARGET_NAME)$(EXESUF) 28ifneq (,$(findstring -mwindows,$(SDL_LIBS))) 29# Terminate program name with a 'w' because the linker builds a windows executable. 30QEMU_PROGW=qemu-system-$(TARGET_NAME)w$(EXESUF) 31$(QEMU_PROG): $(QEMU_PROGW) 32 $(call quiet-command,$(OBJCOPY) --subsystem console $(QEMU_PROGW) $(QEMU_PROG),"GEN","$(TARGET_DIR)$(QEMU_PROG)") 33QEMU_PROG_BUILD = $(QEMU_PROGW) 34else 35QEMU_PROG_BUILD = $(QEMU_PROG) 36endif 37endif 38 39PROGS=$(QEMU_PROG) $(QEMU_PROGW) 40STPFILES= 41 42# Makefile Tests 43include $(SRC_PATH)/tests/tcg/Makefile.include 44 45config-target.h: config-target.h-timestamp 46config-target.h-timestamp: config-target.mak 47 48ifdef CONFIG_TRACE_SYSTEMTAP 49stap: $(QEMU_PROG).stp-installed $(QEMU_PROG).stp $(QEMU_PROG)-simpletrace.stp $(QEMU_PROG)-log.stp 50 51ifdef CONFIG_USER_ONLY 52TARGET_TYPE=user 53else 54TARGET_TYPE=system 55endif 56 57tracetool-y = $(SRC_PATH)/scripts/tracetool.py 58tracetool-y += $(shell find $(SRC_PATH)/scripts/tracetool -name "*.py") 59 60$(QEMU_PROG).stp-installed: $(BUILD_DIR)/trace-events-all $(tracetool-y) 61 $(call quiet-command,$(TRACETOOL) \ 62 --group=all \ 63 --format=stap \ 64 --backends=$(TRACE_BACKENDS) \ 65 --binary=$(bindir)/$(QEMU_PROG) \ 66 --target-name=$(TARGET_NAME) \ 67 --target-type=$(TARGET_TYPE) \ 68 $< > $@,"GEN","$(TARGET_DIR)$(QEMU_PROG).stp-installed") 69 70$(QEMU_PROG).stp: $(BUILD_DIR)/trace-events-all $(tracetool-y) 71 $(call quiet-command,$(TRACETOOL) \ 72 --group=all \ 73 --format=stap \ 74 --backends=$(TRACE_BACKENDS) \ 75 --binary=$(realpath .)/$(QEMU_PROG) \ 76 --target-name=$(TARGET_NAME) \ 77 --target-type=$(TARGET_TYPE) \ 78 $< > $@,"GEN","$(TARGET_DIR)$(QEMU_PROG).stp") 79 80$(QEMU_PROG)-simpletrace.stp: $(BUILD_DIR)/trace-events-all $(tracetool-y) 81 $(call quiet-command,$(TRACETOOL) \ 82 --group=all \ 83 --format=simpletrace-stap \ 84 --backends=$(TRACE_BACKENDS) \ 85 --probe-prefix=qemu.$(TARGET_TYPE).$(TARGET_NAME) \ 86 $< > $@,"GEN","$(TARGET_DIR)$(QEMU_PROG)-simpletrace.stp") 87 88$(QEMU_PROG)-log.stp: $(BUILD_DIR)/trace-events-all $(tracetool-y) 89 $(call quiet-command,$(TRACETOOL) \ 90 --group=all \ 91 --format=log-stap \ 92 --backends=$(TRACE_BACKENDS) \ 93 --probe-prefix=qemu.$(TARGET_TYPE).$(TARGET_NAME) \ 94 $< > $@,"GEN","$(TARGET_DIR)$(QEMU_PROG)-log.stp") 95 96else 97stap: 98endif 99.PHONY: stap 100 101all: $(PROGS) stap 102 103# Dummy command so that make thinks it has done something 104 @true 105 106obj-y += trace/ 107 108######################################################### 109# cpu emulator library 110obj-y += exec.o 111obj-y += accel/ 112obj-$(CONFIG_TCG) += tcg/tcg.o tcg/tcg-op.o tcg/tcg-op-vec.o tcg/tcg-op-gvec.o 113obj-$(CONFIG_TCG) += tcg/tcg-common.o tcg/optimize.o 114obj-$(CONFIG_TCG_INTERPRETER) += tcg/tci.o 115obj-$(CONFIG_TCG_INTERPRETER) += disas/tci.o 116obj-$(CONFIG_TCG) += fpu/softfloat.o 117obj-y += target/$(TARGET_BASE_ARCH)/ 118obj-y += disas.o 119obj-$(call notempty,$(TARGET_XML_FILES)) += gdbstub-xml.o 120 121######################################################### 122# Linux user emulator target 123 124ifdef CONFIG_LINUX_USER 125 126QEMU_CFLAGS+=-I$(SRC_PATH)/linux-user/$(TARGET_ABI_DIR) \ 127 -I$(SRC_PATH)/linux-user/host/$(ARCH) \ 128 -I$(SRC_PATH)/linux-user 129 130obj-y += linux-user/ 131obj-y += gdbstub.o thunk.o 132 133endif #CONFIG_LINUX_USER 134 135######################################################### 136# BSD user emulator target 137 138ifdef CONFIG_BSD_USER 139 140QEMU_CFLAGS+=-I$(SRC_PATH)/bsd-user -I$(SRC_PATH)/bsd-user/$(TARGET_ABI_DIR) \ 141 -I$(SRC_PATH)/bsd-user/$(HOST_VARIANT_DIR) 142 143obj-y += bsd-user/ 144obj-y += gdbstub.o 145 146endif #CONFIG_BSD_USER 147 148######################################################### 149# System emulator target 150ifdef CONFIG_SOFTMMU 151obj-y += arch_init.o cpus.o monitor.o gdbstub.o balloon.o ioport.o numa.o 152obj-y += qtest.o 153obj-y += hw/ 154obj-y += qapi/ 155obj-y += memory.o 156obj-y += memory_mapping.o 157obj-y += dump.o 158obj-$(TARGET_X86_64) += win_dump.o 159obj-y += migration/ram.o 160LIBS := $(libs_softmmu) $(LIBS) 161 162# Hardware support 163ifeq ($(TARGET_NAME), sparc64) 164obj-y += hw/sparc64/ 165else 166obj-y += hw/$(TARGET_BASE_ARCH)/ 167endif 168 169GENERATED_FILES += hmp-commands.h hmp-commands-info.h 170 171endif # CONFIG_SOFTMMU 172 173dummy := $(call unnest-vars,,obj-y) 174all-obj-y := $(obj-y) 175 176include $(SRC_PATH)/Makefile.objs 177dummy := $(call unnest-vars,.., \ 178 authz-obj-y \ 179 block-obj-y \ 180 block-obj-m \ 181 chardev-obj-y \ 182 crypto-obj-y \ 183 crypto-aes-obj-y \ 184 qom-obj-y \ 185 io-obj-y \ 186 common-obj-y \ 187 common-obj-m) 188all-obj-y += $(common-obj-y) 189all-obj-y += $(qom-obj-y) 190all-obj-$(CONFIG_SOFTMMU) += $(authz-obj-y) 191all-obj-$(CONFIG_SOFTMMU) += $(block-obj-y) $(chardev-obj-y) 192all-obj-$(CONFIG_USER_ONLY) += $(crypto-aes-obj-y) 193all-obj-$(CONFIG_SOFTMMU) += $(crypto-obj-y) 194all-obj-$(CONFIG_SOFTMMU) += $(io-obj-y) 195 196ifdef CONFIG_SOFTMMU 197$(QEMU_PROG_BUILD): config-devices.mak 198endif 199 200COMMON_LDADDS = ../libqemuutil.a 201 202# build either PROG or PROGW 203$(QEMU_PROG_BUILD): $(all-obj-y) $(COMMON_LDADDS) 204 $(call LINK, $(filter-out %.mak, $^)) 205ifdef CONFIG_DARWIN 206 $(call quiet-command,Rez -append $(SRC_PATH)/pc-bios/qemu.rsrc -o $@,"REZ","$(TARGET_DIR)$@") 207 $(call quiet-command,SetFile -a C $@,"SETFILE","$(TARGET_DIR)$@") 208endif 209 210gdbstub-xml.c: $(TARGET_XML_FILES) $(SRC_PATH)/scripts/feature_to_c.sh 211 $(call quiet-command,rm -f $@ && $(SHELL) $(SRC_PATH)/scripts/feature_to_c.sh $@ $(TARGET_XML_FILES),"GEN","$(TARGET_DIR)$@") 212 213hmp-commands.h: $(SRC_PATH)/hmp-commands.hx $(SRC_PATH)/scripts/hxtool 214 $(call quiet-command,sh $(SRC_PATH)/scripts/hxtool -h < $< > $@,"GEN","$(TARGET_DIR)$@") 215 216hmp-commands-info.h: $(SRC_PATH)/hmp-commands-info.hx $(SRC_PATH)/scripts/hxtool 217 $(call quiet-command,sh $(SRC_PATH)/scripts/hxtool -h < $< > $@,"GEN","$(TARGET_DIR)$@") 218 219clean: clean-target 220 rm -f *.a *~ $(PROGS) 221 rm -f $(shell find . -name '*.[od]') 222 rm -f hmp-commands.h gdbstub-xml.c 223 rm -f trace/generated-helpers.c trace/generated-helpers.c-timestamp 224ifdef CONFIG_TRACE_SYSTEMTAP 225 rm -f *.stp 226endif 227 228install: all 229ifneq ($(PROGS),) 230 $(call install-prog,$(PROGS),$(DESTDIR)$(bindir)) 231endif 232ifdef CONFIG_TRACE_SYSTEMTAP 233 $(INSTALL_DIR) "$(DESTDIR)$(qemu_datadir)/../systemtap/tapset" 234 $(INSTALL_DATA) $(QEMU_PROG).stp-installed "$(DESTDIR)$(qemu_datadir)/../systemtap/tapset/$(QEMU_PROG).stp" 235 $(INSTALL_DATA) $(QEMU_PROG)-simpletrace.stp "$(DESTDIR)$(qemu_datadir)/../systemtap/tapset/$(QEMU_PROG)-simpletrace.stp" 236 $(INSTALL_DATA) $(QEMU_PROG)-log.stp "$(DESTDIR)$(qemu_datadir)/../systemtap/tapset/$(QEMU_PROG)-log.stp" 237endif 238 239GENERATED_FILES += config-target.h 240Makefile: $(GENERATED_FILES) 241