Makefile 33.0 KB
Newer Older
1 2
# Makefile for QEMU.

S
Stefan Weil 已提交
3 4
# Always point to the root of the build tree (needs GNU make).
BUILD_DIR=$(CURDIR)
5

F
Fam Zheng 已提交
6 7 8
# Before including a proper config-host.mak, assume we are in the source tree
SRC_PATH=.

F
Fam Zheng 已提交
9
UNCHECKED_GOALS := %clean TAGS cscope ctags docker docker-%
F
Fam Zheng 已提交
10

11
# All following code might depend on configuration variables
12
ifneq ($(wildcard config-host.mak),)
P
Paul Brook 已提交
13
# Put the all: rule here so that config-host.mak can contain dependencies.
S
Stefan Weil 已提交
14
all:
P
pbrook 已提交
15
include config-host.mak
16

17 18 19 20
git-submodule-update:

.PHONY: git-submodule-update

21 22 23 24 25
git_module_status := $(shell \
  cd '$(SRC_PATH)' && \
  GIT="$(GIT)" ./scripts/git-submodule.sh status $(GIT_SUBMODULES); \
  echo $$?; \
)
26 27

ifeq (1,$(git_module_status))
28 29 30 31 32 33 34 35 36 37
ifeq (no,$(GIT_UPDATE))
git-submodule-update:
	$(call quiet-command, \
            echo && \
            echo "GIT submodule checkout is out of date. Please run" && \
            echo "  scripts/git-submodule.sh update $(GIT_SUBMODULES)" && \
            echo "from the source directory checkout $(SRC_PATH)" && \
            echo && \
            exit 1)
else
38 39
git-submodule-update:
	$(call quiet-command, \
40
          (cd $(SRC_PATH) && GIT="$(GIT)" ./scripts/git-submodule.sh update $(GIT_SUBMODULES)), \
41 42 43 44
          "GIT","$(GIT_SUBMODULES)")
endif
endif

45
.git-submodule-status: git-submodule-update config-host.mak
46

47 48 49 50 51 52 53 54 55 56
# Check that we're not trying to do an out-of-tree build from
# a tree that's been used for an in-tree build.
ifneq ($(realpath $(SRC_PATH)),$(realpath .))
ifneq ($(wildcard $(SRC_PATH)/config-host.mak),)
$(error This is an out of tree build but your source tree ($(SRC_PATH)) \
seems to have been used for an in-tree build. You can fix this by running \
"make distclean && rm -rf *-linux-user *-softmmu" in your source tree)
endif
endif

57 58
CONFIG_SOFTMMU := $(if $(filter %-softmmu,$(TARGET_DIRS)),y)
CONFIG_USER_ONLY := $(if $(filter %-user,$(TARGET_DIRS)),y)
59
CONFIG_XEN := $(CONFIG_XEN_BACKEND)
60 61 62 63
CONFIG_ALL=y
-include config-all-devices.mak
-include config-all-disas.mak

64
config-host.mak: $(SRC_PATH)/configure $(SRC_PATH)/pc-bios
65
	@echo $@ is out-of-date, running configure
66 67 68 69 70 71 72 73
	@# TODO: The next lines include code which supports a smooth
	@# transition from old configurations without config.status.
	@# This code can be removed after QEMU 1.7.
	@if test -x config.status; then \
	    ./config.status; \
        else \
	    sed -n "/.*Configured with/s/[^:]*: //p" $@ | sh; \
	fi
74 75
else
config-host.mak:
F
Fam Zheng 已提交
76
ifneq ($(filter-out $(UNCHECKED_GOALS),$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fail))
77 78 79
	@echo "Please call configure before running make!"
	@exit 1
endif
80
endif
B
bellard 已提交
81

F
Fam Zheng 已提交
82 83
include $(SRC_PATH)/rules.mak

84 85 86 87 88
GENERATED_FILES = qemu-version.h config-host.h qemu-options.def
GENERATED_FILES += qmp-commands.h qapi-types.h qapi-visit.h qapi-event.h
GENERATED_FILES += qmp-marshal.c qapi-types.c qapi-visit.c qapi-event.c
GENERATED_FILES += qmp-introspect.h
GENERATED_FILES += qmp-introspect.c
89

90
GENERATED_FILES += trace/generated-tcg-tracers.h
91

92 93 94
GENERATED_FILES += trace/generated-helpers-wrappers.h
GENERATED_FILES += trace/generated-helpers.h
GENERATED_FILES += trace/generated-helpers.c
95

96
ifdef CONFIG_TRACE_UST
97 98
GENERATED_FILES += trace-ust-all.h
GENERATED_FILES += trace-ust-all.c
99 100
endif

101
GENERATED_FILES += module_block.h
102

103 104 105 106 107 108 109 110 111 112 113
TRACE_HEADERS = trace-root.h $(trace-events-subdirs:%=%/trace.h)
TRACE_SOURCES = trace-root.c $(trace-events-subdirs:%=%/trace.c)
TRACE_DTRACE =
ifdef CONFIG_TRACE_DTRACE
TRACE_HEADERS += trace-dtrace-root.h $(trace-events-subdirs:%=%/trace-dtrace.h)
TRACE_DTRACE += trace-dtrace-root.dtrace $(trace-events-subdirs:%=%/trace-dtrace.dtrace)
endif
ifdef CONFIG_TRACE_UST
TRACE_HEADERS += trace-ust-root.h $(trace-events-subdirs:%=%/trace-ust.h)
endif

114 115
GENERATED_FILES += $(TRACE_HEADERS)
GENERATED_FILES += $(TRACE_SOURCES)
116
GENERATED_FILES += $(BUILD_DIR)/trace-events-all
117
GENERATED_FILES += .git-submodule-status
118 119 120

trace-group-name = $(shell dirname $1 | sed -e 's/[^a-zA-Z0-9]/_/g')

121 122 123
tracetool-y = $(SRC_PATH)/scripts/tracetool.py
tracetool-y += $(shell find $(SRC_PATH)/scripts/tracetool -name "*.py")

124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224
%/trace.h: %/trace.h-timestamp
	@cmp $< $@ >/dev/null 2>&1 || cp $< $@
%/trace.h-timestamp: $(SRC_PATH)/%/trace-events $(tracetool-y)
	$(call quiet-command,$(TRACETOOL) \
		--group=$(call trace-group-name,$@) \
		--format=h \
		--backends=$(TRACE_BACKENDS) \
		$< > $@,"GEN","$(@:%-timestamp=%)")

%/trace.c: %/trace.c-timestamp
	@cmp $< $@ >/dev/null 2>&1 || cp $< $@
%/trace.c-timestamp: $(SRC_PATH)/%/trace-events $(tracetool-y)
	$(call quiet-command,$(TRACETOOL) \
		--group=$(call trace-group-name,$@) \
		--format=c \
		--backends=$(TRACE_BACKENDS) \
		$< > $@,"GEN","$(@:%-timestamp=%)")

%/trace-ust.h: %/trace-ust.h-timestamp
	@cmp $< $@ >/dev/null 2>&1 || cp $< $@
%/trace-ust.h-timestamp: $(SRC_PATH)/%/trace-events $(tracetool-y)
	$(call quiet-command,$(TRACETOOL) \
		--group=$(call trace-group-name,$@) \
		--format=ust-events-h \
		--backends=$(TRACE_BACKENDS) \
		$< > $@,"GEN","$(@:%-timestamp=%)")

%/trace-dtrace.dtrace: %/trace-dtrace.dtrace-timestamp
	@cmp $< $@ >/dev/null 2>&1 || cp $< $@
%/trace-dtrace.dtrace-timestamp: $(SRC_PATH)/%/trace-events $(BUILD_DIR)/config-host.mak $(tracetool-y)
	$(call quiet-command,$(TRACETOOL) \
		--group=$(call trace-group-name,$@) \
		--format=d \
		--backends=$(TRACE_BACKENDS) \
		$< > $@,"GEN","$(@:%-timestamp=%)")

%/trace-dtrace.h: %/trace-dtrace.dtrace $(tracetool-y)
	$(call quiet-command,dtrace -o $@ -h -s $<, "GEN","$@")

%/trace-dtrace.o: %/trace-dtrace.dtrace $(tracetool-y)


trace-root.h: trace-root.h-timestamp
	@cmp $< $@ >/dev/null 2>&1 || cp $< $@
trace-root.h-timestamp: $(SRC_PATH)/trace-events $(tracetool-y)
	$(call quiet-command,$(TRACETOOL) \
		--group=root \
		--format=h \
		--backends=$(TRACE_BACKENDS) \
		$< > $@,"GEN","$(@:%-timestamp=%)")

trace-root.c: trace-root.c-timestamp
	@cmp $< $@ >/dev/null 2>&1 || cp $< $@
trace-root.c-timestamp: $(SRC_PATH)/trace-events $(tracetool-y)
	$(call quiet-command,$(TRACETOOL) \
		--group=root \
		--format=c \
		--backends=$(TRACE_BACKENDS) \
		$< > $@,"GEN","$(@:%-timestamp=%)")

trace-ust-root.h: trace-ust-root.h-timestamp
	@cmp $< $@ >/dev/null 2>&1 || cp $< $@
trace-ust-root.h-timestamp: $(SRC_PATH)/trace-events $(tracetool-y)
	$(call quiet-command,$(TRACETOOL) \
		--group=root \
		--format=ust-events-h \
		--backends=$(TRACE_BACKENDS) \
		$< > $@,"GEN","$(@:%-timestamp=%)")

trace-ust-all.h: trace-ust-all.h-timestamp
	@cmp $< $@ >/dev/null 2>&1 || cp $< $@
trace-ust-all.h-timestamp: $(trace-events-files) $(tracetool-y)
	$(call quiet-command,$(TRACETOOL) \
		--group=all \
		--format=ust-events-h \
		--backends=$(TRACE_BACKENDS) \
		$(trace-events-files) > $@,"GEN","$(@:%-timestamp=%)")

trace-ust-all.c: trace-ust-all.c-timestamp
	@cmp $< $@ >/dev/null 2>&1 || cp $< $@
trace-ust-all.c-timestamp: $(trace-events-files) $(tracetool-y)
	$(call quiet-command,$(TRACETOOL) \
		--group=all \
		--format=ust-events-c \
		--backends=$(TRACE_BACKENDS) \
		$(trace-events-files) > $@,"GEN","$(@:%-timestamp=%)")

trace-dtrace-root.dtrace: trace-dtrace-root.dtrace-timestamp
	@cmp $< $@ >/dev/null 2>&1 || cp $< $@
trace-dtrace-root.dtrace-timestamp: $(SRC_PATH)/trace-events $(BUILD_DIR)/config-host.mak $(tracetool-y)
	$(call quiet-command,$(TRACETOOL) \
		--group=root \
		--format=d \
		--backends=$(TRACE_BACKENDS) \
		$< > $@,"GEN","$(@:%-timestamp=%)")

trace-dtrace-root.h: trace-dtrace-root.dtrace
	$(call quiet-command,dtrace -o $@ -h -s $<, "GEN","$@")

trace-dtrace-root.o: trace-dtrace-root.dtrace

225 226 227 228
KEYCODEMAP_GEN = $(SRC_PATH)/ui/keycodemapdb/tools/keymap-gen
KEYCODEMAP_CSV = $(SRC_PATH)/ui/keycodemapdb/data/keymaps.csv

KEYCODEMAP_FILES = \
229 230 231
		 ui/input-keymap-linux-to-qcode.c \
		 ui/input-keymap-qcode-to-qnum.c \
		 ui/input-keymap-qnum-to-qcode.c \
232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249
		 $(NULL)

GENERATED_FILES += $(KEYCODEMAP_FILES)

ui/input-keymap-%.c: $(KEYCODEMAP_GEN) $(KEYCODEMAP_CSV) $(SRC_PATH)/ui/Makefile.objs
	$(call quiet-command,\
	    src=$$(echo $@ | sed -E -e "s,^ui/input-keymap-(.+)-to-(.+)\.c$$,\1,") && \
	    dst=$$(echo $@ | sed -E -e "s,^ui/input-keymap-(.+)-to-(.+)\.c$$,\2,") && \
	    test -e $(KEYCODEMAP_GEN) && \
	    $(PYTHON) $(KEYCODEMAP_GEN) \
	          --lang glib2 \
	          --varname qemu_input_map_$${src}_to_$${dst} \
	          code-map $(KEYCODEMAP_CSV) $${src} $${dst} \
	        > $@ || rm -f $@, "GEN", "$@")

$(KEYCODEMAP_GEN): .git-submodule-status
$(KEYCODEMAP_CSV): .git-submodule-status

250 251 252 253 254
# Don't try to regenerate Makefile or configure
# We don't generate any of them
Makefile: ;
configure: ;

255
.PHONY: all clean cscope distclean html info install install-doc \
256
	pdf txt recurse-all speed test dist msi FORCE
257

P
Paolo Bonzini 已提交
258
$(call set-vpath, $(SRC_PATH))
P
pbrook 已提交
259

J
Juan Quintela 已提交
260
LIBS+=-lz $(LIBS_TOOLS)
261

262 263
HELPERS-$(CONFIG_LINUX) = qemu-bridge-helper$(EXESUF)

264
ifdef BUILD_DOCS
265
DOCS=qemu-doc.html qemu-doc.txt qemu.1 qemu-img.1 qemu-nbd.8 qemu-ga.8
266 267
DOCS+=docs/interop/qemu-qmp-ref.html docs/interop/qemu-qmp-ref.txt docs/interop/qemu-qmp-ref.7
DOCS+=docs/interop/qemu-ga-ref.html docs/interop/qemu-ga-ref.txt docs/interop/qemu-ga-ref.7
268
DOCS+=docs/qemu-block-drivers.7
269
ifdef CONFIG_VIRTFS
270
DOCS+=fsdev/virtfs-proxy-helper.1
271
endif
272 273 274
else
DOCS=
endif
B
bellard 已提交
275

276
SUBDIR_MAKEFLAGS=$(if $(V),,--no-print-directory) BUILD_DIR=$(BUILD_DIR)
277
SUBDIR_DEVICES_MAK=$(patsubst %, %/config-devices.mak, $(TARGET_DIRS))
278
SUBDIR_DEVICES_MAK_DEP=$(patsubst %, %-config-devices.mak.d, $(TARGET_DIRS))
279

280 281
ifeq ($(SUBDIR_DEVICES_MAK),)
config-all-devices.mak:
282
	$(call quiet-command,echo '# no devices' > $@,"GEN","$@")
283
else
284
config-all-devices.mak: $(SUBDIR_DEVICES_MAK)
285 286 287
	$(call quiet-command, sed -n \
             's|^\([^=]*\)=\(.*\)$$|\1:=$$(findstring y,$$(\1)\2)|p' \
             $(SUBDIR_DEVICES_MAK) | sort -u > $@, \
288
             "GEN","$@")
289
endif
290

P
Paul Brook 已提交
291 292
-include $(SUBDIR_DEVICES_MAK_DEP)

293
%/config-devices.mak: default-configs/%.mak $(SRC_PATH)/scripts/make_device_config.sh
294
	$(call quiet-command, \
295
            $(SHELL) $(SRC_PATH)/scripts/make_device_config.sh $< $*-config-devices.mak.d $@ > $@.tmp,"GEN","$@.tmp")
296
	$(call quiet-command, if test -f $@; then \
297
	  if cmp -s $@.old $@; then \
P
Paul Brook 已提交
298 299
	    mv $@.tmp $@; \
	    cp -p $@ $@.old; \
300 301 302 303 304 305 306 307 308
	  else \
	    if test -f $@.old; then \
	      echo "WARNING: $@ (user modified) out of date.";\
	    else \
	      echo "WARNING: $@ out of date.";\
	    fi; \
	    echo "Run \"make defconfig\" to regenerate."; \
	    rm $@.tmp; \
	  fi; \
309
	 else \
310 311
	  mv $@.tmp $@; \
	  cp -p $@ $@.old; \
312
	 fi,"GEN","$@");
313 314 315 316

defconfig:
	rm -f config-all-devices.mak $(SUBDIR_DEVICES_MAK)

317 318
ifneq ($(wildcard config-host.mak),)
include $(SRC_PATH)/Makefile.objs
319 320 321 322
endif

dummy := $(call unnest-vars,, \
                stub-obj-y \
M
Marc-André Lureau 已提交
323
                chardev-obj-y \
324 325
                util-obj-y \
                qga-obj-y \
326 327
                ivshmem-client-obj-y \
                ivshmem-server-obj-y \
M
Marc-André Lureau 已提交
328
                libvhost-user-obj-y \
329
                vhost-user-scsi-obj-y \
330
                qga-vss-dll-obj-y \
331
                block-obj-y \
332
                block-obj-m \
333 334
                crypto-obj-y \
                crypto-aes-obj-y \
335
                qom-obj-y \
336
                io-obj-y \
337
                common-obj-y \
338 339
                common-obj-m \
                trace-obj-y)
340

341
include $(SRC_PATH)/tests/Makefile.include
342

F
Fam Zheng 已提交
343
all: $(DOCS) $(TOOLS) $(HELPERS-y) recurse-all modules
P
pbrook 已提交
344

345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362
qemu-version.h: FORCE
	$(call quiet-command, \
		(cd $(SRC_PATH); \
		printf '#define QEMU_PKGVERSION '; \
		if test -n "$(PKGVERSION)"; then \
			printf '"$(PKGVERSION)"\n'; \
		else \
			if test -d .git; then \
				printf '" ('; \
				git describe --match 'v*' 2>/dev/null | tr -d '\n'; \
				if ! git diff-index --quiet HEAD &>/dev/null; then \
					printf -- '-dirty'; \
				fi; \
				printf ')"\n'; \
			else \
				printf '""\n'; \
			fi; \
		fi) > $@.tmp)
363 364 365 366 367
	$(call quiet-command, if ! cmp -s $@ $@.tmp; then \
	  mv $@.tmp $@; \
	 else \
	  rm $@.tmp; \
	 fi)
368

369 370
config-host.h: config-host.h-timestamp
config-host.h-timestamp: config-host.mak
371
qemu-options.def: $(SRC_PATH)/qemu-options.hx $(SRC_PATH)/scripts/hxtool
372
	$(call quiet-command,sh $(SRC_PATH)/scripts/hxtool -h < $< > $@,"GEN","$@")
373

374
SUBDIR_RULES=$(patsubst %,subdir-%, $(TARGET_DIRS))
375 376
SOFTMMU_SUBDIR_RULES=$(filter %-softmmu,$(SUBDIR_RULES))

377
$(SOFTMMU_SUBDIR_RULES): $(block-obj-y)
378
$(SOFTMMU_SUBDIR_RULES): $(crypto-obj-y)
379
$(SOFTMMU_SUBDIR_RULES): $(io-obj-y)
380
$(SOFTMMU_SUBDIR_RULES): config-all-devices.mak
381

382
subdir-%:
P
Paul Brook 已提交
383
	$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C $* V="$(V)" TARGET_DIR="$*/" all,)
P
pbrook 已提交
384

385
DTC_MAKE_ARGS=-I$(SRC_PATH)/dtc VPATH=$(SRC_PATH)/dtc -C dtc V="$(V)" LIBFDT_srcdir=$(SRC_PATH)/dtc/libfdt
386 387
DTC_CFLAGS=$(CFLAGS) $(QEMU_CFLAGS)
DTC_CPPFLAGS=-I$(BUILD_DIR)/dtc -I$(SRC_PATH)/dtc -I$(SRC_PATH)/dtc/libfdt
388

389
subdir-dtc: .git-submodule-status dtc/libfdt dtc/tests
390
	$(call quiet-command,$(MAKE) $(DTC_MAKE_ARGS) CPPFLAGS="$(DTC_CPPFLAGS)" CFLAGS="$(DTC_CFLAGS)" LDFLAGS="$(LDFLAGS)" ARFLAGS="$(ARFLAGS)" CC="$(CC)" AR="$(AR)" LD="$(LD)" $(SUBDIR_MAKEFLAGS) libfdt/libfdt.a,)
391

392
dtc/%: .git-submodule-status
393 394
	mkdir -p $@

395 396 397 398 399 400 401 402 403 404 405 406 407 408 409
# Overriding CFLAGS causes us to lose defines added in the sub-makefile.
# Not overriding CFLAGS leads to mis-matches between compilation modes.
# Therefore we replicate some of the logic in the sub-makefile.
# Remove all the extra -Warning flags that QEMU uses that Capstone doesn't;
# no need to annoy QEMU developers with such things.
CAP_CFLAGS = $(patsubst -W%,,$(CFLAGS) $(QEMU_CFLAGS))
CAP_CFLAGS += -DCAPSTONE_USE_SYS_DYN_MEM
CAP_CFLAGS += -DCAPSTONE_HAS_ARM
CAP_CFLAGS += -DCAPSTONE_HAS_ARM64
CAP_CFLAGS += -DCAPSTONE_HAS_POWERPC
CAP_CFLAGS += -DCAPSTONE_HAS_X86

subdir-capstone: .git-submodule-status
	$(call quiet-command,$(MAKE) -C $(SRC_PATH)/capstone CAPSTONE_SHARED=no BUILDDIR="$(BUILD_DIR)/capstone" CC="$(CC)" AR="$(AR)" LD="$(LD)" CFLAGS="$(CAP_CFLAGS)" $(SUBDIR_MAKEFLAGS) $(BUILD_DIR)/capstone/$(LIBCAPSTONE))

P
Paolo Bonzini 已提交
410
$(SUBDIR_RULES): libqemuutil.a $(common-obj-y) $(chardev-obj-y) \
411
	$(qom-obj-y) $(crypto-aes-obj-$(CONFIG_USER_ONLY))
412

P
Paul Brook 已提交
413
ROMSUBDIR_RULES=$(patsubst %,romsubdir-%, $(ROMS))
414
# Only keep -O and -g cflags
P
Paul Brook 已提交
415
romsubdir-%:
416
	$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C pc-bios/$* V="$(V)" TARGET_DIR="$*/" CFLAGS="$(filter -O% -g%,$(CFLAGS))",)
P
Paul Brook 已提交
417 418 419 420

ALL_SUBDIRS=$(TARGET_DIRS) $(patsubst %,pc-bios/%, $(ROMS))

recurse-all: $(SUBDIR_RULES) $(ROMSUBDIR_RULES)
B
bellard 已提交
421

422
$(BUILD_DIR)/version.o: $(SRC_PATH)/version.rc config-host.h
423
	$(call quiet-command,$(WINDRES) -I$(BUILD_DIR) -o $@ $<,"RC","version.o")
424

425
Makefile: $(version-obj-y)
426 427

######################################################################
428
# Build libraries
429

P
Paolo Bonzini 已提交
430
libqemuutil.a: $(util-obj-y) $(trace-obj-y) $(stub-obj-y)
431
libvhost-user.a: $(libvhost-user-obj-y)
432

A
Alon Levy 已提交
433
######################################################################
B
bellard 已提交
434

P
Paolo Bonzini 已提交
435
COMMON_LDADDS = libqemuutil.a
436

J
Juan Quintela 已提交
437
qemu-img.o: qemu-img-cmds.h
438

439 440 441
qemu-img$(EXESUF): qemu-img.o $(block-obj-y) $(crypto-obj-y) $(io-obj-y) $(qom-obj-y) $(COMMON_LDADDS)
qemu-nbd$(EXESUF): qemu-nbd.o $(block-obj-y) $(crypto-obj-y) $(io-obj-y) $(qom-obj-y) $(COMMON_LDADDS)
qemu-io$(EXESUF): qemu-io.o $(block-obj-y) $(crypto-obj-y) $(io-obj-y) $(qom-obj-y) $(COMMON_LDADDS)
442

443
qemu-bridge-helper$(EXESUF): qemu-bridge-helper.o $(COMMON_LDADDS)
444

G
Gerd Hoffmann 已提交
445 446
qemu-keymap$(EXESUF): qemu-keymap.o ui/input-keymap.o $(COMMON_LDADDS)

447
fsdev/virtfs-proxy-helper$(EXESUF): fsdev/virtfs-proxy-helper.o fsdev/9p-marshal.o fsdev/9p-iov-marshal.o $(COMMON_LDADDS)
448 449
fsdev/virtfs-proxy-helper$(EXESUF): LIBS += -lcap

P
Paolo Bonzini 已提交
450
scsi/qemu-pr-helper$(EXESUF): scsi/qemu-pr-helper.o scsi/utils.o $(crypto-obj-y) $(io-obj-y) $(qom-obj-y) $(COMMON_LDADDS)
451 452 453
ifdef CONFIG_MPATH
scsi/qemu-pr-helper$(EXESUF): LIBS += -ludev -lmultipath -lmpathpersist
endif
P
Paolo Bonzini 已提交
454

455
qemu-img-cmds.h: $(SRC_PATH)/qemu-img-cmds.hx $(SRC_PATH)/scripts/hxtool
456
	$(call quiet-command,sh $(SRC_PATH)/scripts/hxtool -h < $< > $@,"GEN","$@")
457

458
qemu-ga$(EXESUF): LIBS = $(LIBS_QGA)
459
qemu-ga$(EXESUF): QEMU_CFLAGS += -I qga/qapi-generated
460

G
Gerd Hoffmann 已提交
461 462 463
qemu-keymap$(EXESUF): LIBS += $(XKBCOMMON_LIBS)
qemu-keymap$(EXESUF): QEMU_CFLAGS += $(XKBCOMMON_CFLAGS)

A
Avi Kivity 已提交
464
gen-out-type = $(subst .,-,$(suffix $@))
465

466 467
qapi-py = $(SRC_PATH)/scripts/qapi.py $(SRC_PATH)/scripts/ordereddict.py

468
qga/qapi-generated/qga-qapi-types.c qga/qapi-generated/qga-qapi-types.h :\
469
$(SRC_PATH)/qga/qapi-schema.json $(SRC_PATH)/scripts/qapi-types.py $(qapi-py)
470
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-types.py \
471
		$(gen-out-type) -o qga/qapi-generated -p "qga-" $<, \
472
		"GEN","$@")
473
qga/qapi-generated/qga-qapi-visit.c qga/qapi-generated/qga-qapi-visit.h :\
474
$(SRC_PATH)/qga/qapi-schema.json $(SRC_PATH)/scripts/qapi-visit.py $(qapi-py)
475
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-visit.py \
476
		$(gen-out-type) -o qga/qapi-generated -p "qga-" $<, \
477
		"GEN","$@")
478
qga/qapi-generated/qga-qmp-commands.h qga/qapi-generated/qga-qmp-marshal.c :\
479
$(SRC_PATH)/qga/qapi-schema.json $(SRC_PATH)/scripts/qapi-commands.py $(qapi-py)
480
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-commands.py \
481
		$(gen-out-type) -o qga/qapi-generated -p "qga-" $<, \
482
		"GEN","$@")
483

484
qapi-modules = $(SRC_PATH)/qapi-schema.json $(SRC_PATH)/qapi/common.json \
485
               $(SRC_PATH)/qapi/block.json $(SRC_PATH)/qapi/block-core.json \
486
               $(SRC_PATH)/qapi/char.json \
487
               $(SRC_PATH)/qapi/crypto.json \
488
               $(SRC_PATH)/qapi/introspect.json \
489
               $(SRC_PATH)/qapi/migration.json \
490
               $(SRC_PATH)/qapi/net.json \
491
               $(SRC_PATH)/qapi/rocker.json \
492
               $(SRC_PATH)/qapi/run-state.json \
493
               $(SRC_PATH)/qapi/sockets.json \
494
               $(SRC_PATH)/qapi/tpm.json \
495
               $(SRC_PATH)/qapi/trace.json \
496
               $(SRC_PATH)/qapi/transaction.json \
497
               $(SRC_PATH)/qapi/ui.json
498

499
qapi-types.c qapi-types.h :\
500
$(qapi-modules) $(SRC_PATH)/scripts/qapi-types.py $(qapi-py)
501
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-types.py \
502
		$(gen-out-type) -o "." -b $<, \
503
		"GEN","$@")
504
qapi-visit.c qapi-visit.h :\
505
$(qapi-modules) $(SRC_PATH)/scripts/qapi-visit.py $(qapi-py)
506
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-visit.py \
507
		$(gen-out-type) -o "." -b $<, \
508
		"GEN","$@")
W
Wenchao Xia 已提交
509 510 511
qapi-event.c qapi-event.h :\
$(qapi-modules) $(SRC_PATH)/scripts/qapi-event.py $(qapi-py)
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-event.py \
512
		$(gen-out-type) -o "." $<, \
513
		"GEN","$@")
514
qmp-commands.h qmp-marshal.c :\
515
$(qapi-modules) $(SRC_PATH)/scripts/qapi-commands.py $(qapi-py)
516
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-commands.py \
517
		$(gen-out-type) -o "." $<, \
518
		"GEN","$@")
519 520 521 522
qmp-introspect.h qmp-introspect.c :\
$(qapi-modules) $(SRC_PATH)/scripts/qapi-introspect.py $(qapi-py)
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-introspect.py \
		$(gen-out-type) -o "." $<, \
523
		"GEN","$@")
524

525
QGALIB_GEN=$(addprefix qga/qapi-generated/, qga-qapi-types.h qga-qapi-visit.h qga-qmp-commands.h)
526
$(qga-obj-y): $(QGALIB_GEN)
527

528
qemu-ga$(EXESUF): $(qga-obj-y) $(COMMON_LDADDS)
529
	$(call LINK, $^)
M
Michael Roth 已提交
530

531 532 533
ifdef QEMU_GA_MSI_ENABLED
QEMU_GA_MSI=qemu-ga-$(ARCH).msi

534
msi: $(QEMU_GA_MSI)
535

536
$(QEMU_GA_MSI): qemu-ga.exe $(QGA_VSS_PROVIDER)
537 538 539

$(QEMU_GA_MSI): config-host.mak

540 541
$(QEMU_GA_MSI):  $(SRC_PATH)/qga/installer/qemu-ga.wxs
	$(call quiet-command,QEMU_GA_VERSION="$(QEMU_GA_VERSION)" QEMU_GA_MANUFACTURER="$(QEMU_GA_MANUFACTURER)" QEMU_GA_DISTRO="$(QEMU_GA_DISTRO)" BUILD_DIR="$(BUILD_DIR)" \
542
	wixl -o $@ $(QEMU_GA_MSI_ARCH) $(QEMU_GA_MSI_WITH_VSS) $(QEMU_GA_MSI_MINGW_DLL_PATH) $<,"WIXL","$@")
543 544
else
msi:
545
	@echo "MSI build not configured or dependency resolution failed (reconfigure with --enable-guest-agent-msi option)"
546 547
endif

548 549 550 551 552
ifneq ($(EXESUF),)
.PHONY: qemu-ga
qemu-ga: qemu-ga$(EXESUF) $(QGA_VSS_PROVIDER) $(QEMU_GA_MSI)
endif

553
ifdef CONFIG_IVSHMEM
554
ivshmem-client$(EXESUF): $(ivshmem-client-obj-y) $(COMMON_LDADDS)
555
	$(call LINK, $^)
556
ivshmem-server$(EXESUF): $(ivshmem-server-obj-y) $(COMMON_LDADDS)
557
	$(call LINK, $^)
558
endif
559
vhost-user-scsi$(EXESUF): $(vhost-user-scsi-obj-y) libvhost-user.a
560
	$(call LINK, $^)
561

562 563 564
module_block.h: $(SRC_PATH)/scripts/modules/module_block.py config-host.mak
	$(call quiet-command,$(PYTHON) $< $@ \
	$(addprefix $(SRC_PATH)/,$(patsubst %.mo,%.c,$(block-obj-m))), \
565
	"GEN","$@")
566

567
clean:
568
# avoid old build problems by removing potentially incorrect old files
569
	rm -f config.mak op-i386.h opc-i386.h gen-op-i386.h op-arm.h opc-arm.h gen-op-arm.h
570
	rm -f qemu-options.def
571
	rm -f *.msi
572
	find . \( -name '*.so' -o -name '*.dll' -o -name '*.mo' -o -name '*.[oda]' \) -type f -exec rm {} +
573
	rm -f $(filter-out %.tlb,$(TOOLS)) $(HELPERS-y) qemu-ga TAGS cscope.* *.pod *~ */*~
P
Paolo Bonzini 已提交
574
	rm -f fsdev/*.pod scsi/*.pod
B
Blue Swirl 已提交
575
	rm -f qemu-img-cmds.h
576
	rm -f ui/shader/*-vert.h ui/shader/*-frag.h
577
	@# May not be present in GENERATED_FILES
578 579
	rm -f trace/generated-tracers-dtrace.dtrace*
	rm -f trace/generated-tracers-dtrace.h*
580
	rm -f $(foreach f,$(GENERATED_FILES),$(f) $(f)-timestamp)
S
Stefan Weil 已提交
581
	rm -rf qapi-generated
582
	rm -rf qga/qapi-generated
583
	for d in $(ALL_SUBDIRS); do \
M
Magnus Damm 已提交
584
	if test -d $$d; then $(MAKE) -C $$d $@ || exit 1; fi; \
585
	rm -f $$d/qemu-options.def; \
B
bellard 已提交
586
        done
587
	rm -f $(SUBDIR_DEVICES_MAK) config-all-devices.mak
588

589 590 591 592 593 594 595
VERSION ?= $(shell cat VERSION)

dist: qemu-$(VERSION).tar.bz2

qemu-%.tar.bz2:
	$(SRC_PATH)/scripts/make-release "$(SRC_PATH)" "$(patsubst qemu-%.tar.bz2,%,$@)"

B
bellard 已提交
596
distclean: clean
597
	rm -f config-host.mak config-host.h* config-host.ld $(DOCS) qemu-options.texi qemu-img-cmds.texi qemu-monitor.texi qemu-monitor-info.texi
598 599
	rm -f config-all-devices.mak config-all-disas.mak config.status
	rm -f po/*.mo tests/qemu-iotests/common.env
M
Magnus Damm 已提交
600
	rm -f roms/seabios/config.mak roms/vgabios/config.mak
601
	rm -f qemu-doc.info qemu-doc.aux qemu-doc.cp qemu-doc.cps
B
Brad Hards 已提交
602 603
	rm -f qemu-doc.fn qemu-doc.fns qemu-doc.info qemu-doc.ky qemu-doc.kys
	rm -f qemu-doc.log qemu-doc.pdf qemu-doc.pg qemu-doc.toc qemu-doc.tp
604
	rm -f qemu-doc.vr qemu-doc.txt
605
	rm -f config.log
606
	rm -f linux-headers/asm
607 608 609 610 611 612
	rm -f docs/version.texi
	rm -f docs/interop/qemu-ga-qapi.texi docs/interop/qemu-qmp-qapi.texi
	rm -f docs/interop/qemu-qmp-ref.7 docs/interop/qemu-ga-ref.7
	rm -f docs/interop/qemu-qmp-ref.txt docs/interop/qemu-ga-ref.txt
	rm -f docs/interop/qemu-qmp-ref.pdf docs/interop/qemu-ga-ref.pdf
	rm -f docs/interop/qemu-qmp-ref.html docs/interop/qemu-ga-ref.html
613
	rm -f docs/qemu-block-drivers.7
P
Paolo Bonzini 已提交
614
	for d in $(TARGET_DIRS); do \
B
bellard 已提交
615
	rm -rf $$d || exit 1 ; \
B
updated  
bellard 已提交
616
        done
617
	rm -Rf .sdk
E
Ed Maste 已提交
618
	if test -f dtc/version_gen.h; then $(MAKE) $(DTC_MAKE_ARGS) clean; fi
B
bellard 已提交
619

B
bellard 已提交
620 621
KEYMAPS=da     en-gb  et  fr     fr-ch  is  lt  modifiers  no  pt-br  sv \
ar      de     en-us  fi  fr-be  hr     it  lv  nl         pl  ru     th \
622
common  de-ch  es     fo  fr-ca  hu     ja  mk  nl-be      pt  sl     tr \
J
Jan Krupa 已提交
623
bepo    cz
B
bellard 已提交
624

T
ths 已提交
625
ifdef INSTALL_BLOBS
626
BLOBS=bios.bin bios-256k.bin sgabios.bin vgabios.bin vgabios-cirrus.bin \
627
vgabios-stdvga.bin vgabios-vmware.bin vgabios-qxl.bin vgabios-virtio.bin \
628
acpi-dsdt.aml \
629
ppc_rom.bin openbios-sparc32 openbios-sparc64 openbios-ppc QEMU,tcx.bin QEMU,cgthree.bin \
630 631
pxe-e1000.rom pxe-eepro100.rom pxe-ne2k_pci.rom \
pxe-pcnet.rom pxe-rtl8139.rom pxe-virtio.rom \
632 633
efi-e1000.rom efi-eepro100.rom efi-ne2k_pci.rom \
efi-pcnet.rom efi-rtl8139.rom efi-virtio.rom \
G
Gerd Hoffmann 已提交
634
efi-e1000e.rom efi-vmxnet3.rom \
A
Anthony Liguori 已提交
635
qemu-icon.bmp qemu_logo_no_text.svg \
636
bamboo.dtb petalogix-s3adsp1800.dtb petalogix-ml605.dtb \
637
multiboot.bin linuxboot.bin linuxboot_dma.bin kvmvapic.bin \
638
s390-ccw.img s390-netboot.img \
639
spapr-rtas.bin slof.bin skiboot.lid \
640
palcode-clipper \
641 642
u-boot.e500 \
qemu_vga.ndrv
T
ths 已提交
643 644 645 646
else
BLOBS=
endif

647
install-doc: $(DOCS)
648
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_docdir)"
649
	$(INSTALL_DATA) qemu-doc.html "$(DESTDIR)$(qemu_docdir)"
650
	$(INSTALL_DATA) qemu-doc.txt "$(DESTDIR)$(qemu_docdir)"
651 652
	$(INSTALL_DATA) docs/interop/qemu-qmp-ref.html "$(DESTDIR)$(qemu_docdir)"
	$(INSTALL_DATA) docs/interop/qemu-qmp-ref.txt "$(DESTDIR)$(qemu_docdir)"
653
ifdef CONFIG_POSIX
654
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man1"
655
	$(INSTALL_DATA) qemu.1 "$(DESTDIR)$(mandir)/man1"
656
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man7"
657
	$(INSTALL_DATA) docs/interop/qemu-qmp-ref.7 "$(DESTDIR)$(mandir)/man7"
658
	$(INSTALL_DATA) docs/qemu-block-drivers.7 "$(DESTDIR)$(mandir)/man7"
659 660
ifneq ($(TOOLS),)
	$(INSTALL_DATA) qemu-img.1 "$(DESTDIR)$(mandir)/man1"
661 662
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man8"
	$(INSTALL_DATA) qemu-nbd.8 "$(DESTDIR)$(mandir)/man8"
663
endif
M
Marc-André Lureau 已提交
664 665
ifneq (,$(findstring qemu-ga,$(TOOLS)))
	$(INSTALL_DATA) qemu-ga.8 "$(DESTDIR)$(mandir)/man8"
666 667 668
	$(INSTALL_DATA) docs/interop/qemu-ga-ref.html "$(DESTDIR)$(qemu_docdir)"
	$(INSTALL_DATA) docs/interop/qemu-ga-ref.txt "$(DESTDIR)$(qemu_docdir)"
	$(INSTALL_DATA) docs/interop/qemu-ga-ref.7 "$(DESTDIR)$(mandir)/man7"
M
Marc-André Lureau 已提交
669
endif
670
endif
671 672 673 674
ifdef CONFIG_VIRTFS
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man1"
	$(INSTALL_DATA) fsdev/virtfs-proxy-helper.1 "$(DESTDIR)$(mandir)/man1"
endif
675 676 677 678

install-datadir:
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_datadir)"

679 680 681 682 683 684 685
install-localstatedir:
ifdef CONFIG_POSIX
ifneq (,$(findstring qemu-ga,$(TOOLS)))
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_localstatedir)"/run
endif
endif

686

687
install: all $(if $(BUILD_DOCS),install-doc) install-datadir install-localstatedir
688
ifneq ($(TOOLS),)
689
	$(call install-prog,$(subst qemu-ga,qemu-ga$(EXESUF),$(TOOLS)),$(DESTDIR)$(bindir))
690
endif
691 692
ifneq ($(CONFIG_MODULES),)
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_moddir)"
693 694
	for s in $(modules-m:.mo=$(DSOSUF)); do \
		t="$(DESTDIR)$(qemu_moddir)/$$(echo $$s | tr / -)"; \
695
		$(INSTALL_LIB) $$s "$$t"; \
696
		test -z "$(STRIP)" || $(STRIP) "$$t"; \
697 698
	done
endif
699
ifneq ($(HELPERS-y),)
700
	$(call install-prog,$(HELPERS-y),$(DESTDIR)$(libexecdir))
701
endif
T
ths 已提交
702 703
ifneq ($(BLOBS),)
	set -e; for x in $(BLOBS); do \
704
		$(INSTALL_DATA) $(SRC_PATH)/pc-bios/$$x "$(DESTDIR)$(qemu_datadir)"; \
P
pbrook 已提交
705
	done
706 707 708
endif
ifeq ($(CONFIG_GTK),y)
	$(MAKE) -C po $@
T
ths 已提交
709
endif
710
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_datadir)/keymaps"
711
	set -e; for x in $(KEYMAPS); do \
712
		$(INSTALL_DATA) $(SRC_PATH)/pc-bios/keymaps/$$x "$(DESTDIR)$(qemu_datadir)/keymaps"; \
P
pbrook 已提交
713
	done
714
	$(INSTALL_DATA) $(BUILD_DIR)/trace-events-all "$(DESTDIR)$(qemu_datadir)/trace-events-all"
B
bellard 已提交
715
	for d in $(TARGET_DIRS); do \
716
	$(MAKE) $(SUBDIR_MAKEFLAGS) TARGET_DIR=$$d/ -C $$d $@ || exit 1 ; \
B
bellard 已提交
717
        done
B
bellard 已提交
718

B
bellard 已提交
719
# various test targets
B
bellard 已提交
720
test speed: all
A
Anthony Liguori 已提交
721
	$(MAKE) -C tests/tcg $@
722

F
Fam Zheng 已提交
723 724
.PHONY: ctags
ctags:
725
	rm -f tags
F
Fam Zheng 已提交
726 727
	find "$(SRC_PATH)" -name '*.[hc]' -exec ctags --append {} +

A
Alexandre Bique 已提交
728
.PHONY: TAGS
729
TAGS:
730
	rm -f TAGS
D
David Gibson 已提交
731
	find "$(SRC_PATH)" -name '*.[hc]' -exec etags --append {} +
732

B
bellard 已提交
733
cscope:
F
Fam Zheng 已提交
734 735 736
	rm -f "$(SRC_PATH)"/cscope.*
	find "$(SRC_PATH)/" -name "*.[chsS]" -print | sed 's,^\./,,' > "$(SRC_PATH)/cscope.files"
	cscope -b -i"$(SRC_PATH)/cscope.files"
B
bellard 已提交
737

738 739 740 741 742
# opengl shader programs
ui/shader/%-vert.h: $(SRC_PATH)/ui/shader/%.vert $(SRC_PATH)/scripts/shaderinclude.pl
	@mkdir -p $(dir $@)
	$(call quiet-command,\
		perl $(SRC_PATH)/scripts/shaderinclude.pl $< > $@,\
743
		"VERT","$@")
744 745 746 747 748

ui/shader/%-frag.h: $(SRC_PATH)/ui/shader/%.frag $(SRC_PATH)/scripts/shaderinclude.pl
	@mkdir -p $(dir $@)
	$(call quiet-command,\
		perl $(SRC_PATH)/scripts/shaderinclude.pl $< > $@,\
749
		"FRAG","$@")
750

751
ui/shader.o: $(SRC_PATH)/ui/shader.c \
G
Gerd Hoffmann 已提交
752 753 754
	ui/shader/texture-blit-vert.h \
	ui/shader/texture-blit-flip-vert.h \
	ui/shader/texture-blit-frag.h
755

B
bellard 已提交
756
# documentation
757
MAKEINFO=makeinfo
758 759
MAKEINFOINCLUDES= -I docs -I $(<D) -I $(@D)
MAKEINFOFLAGS=--no-split --number-sections $(MAKEINFOINCLUDES)
P
Paolo Bonzini 已提交
760
TEXI2PODFLAGS=$(MAKEINFOINCLUDES) "-DVERSION=$(VERSION)"
761
TEXI2PDFFLAGS=$(if $(V),,--quiet) -I $(SRC_PATH) $(MAKEINFOINCLUDES)
762

763
docs/version.texi: $(SRC_PATH)/VERSION
764 765
	$(call quiet-command,echo "@set VERSION $(VERSION)" > $@,"GEN","$@")

P
Paolo Bonzini 已提交
766
%.html: %.texi docs/version.texi
767 768
	$(call quiet-command,LC_ALL=C $(MAKEINFO) $(MAKEINFOFLAGS) --no-headers \
	--html $< -o $@,"GEN","$@")
B
bellard 已提交
769

P
Paolo Bonzini 已提交
770
%.info: %.texi docs/version.texi
771
	$(call quiet-command,$(MAKEINFO) $(MAKEINFOFLAGS) $< -o $@,"GEN","$@")
B
bellard 已提交
772

P
Paolo Bonzini 已提交
773
%.txt: %.texi docs/version.texi
774 775 776
	$(call quiet-command,LC_ALL=C $(MAKEINFO) $(MAKEINFOFLAGS) --no-headers \
	--plaintext $< -o $@,"GEN","$@")

P
Paolo Bonzini 已提交
777
%.pdf: %.texi docs/version.texi
778
	$(call quiet-command,texi2pdf $(TEXI2PDFFLAGS) $< -o $@,"GEN","$@")
779

780
qemu-options.texi: $(SRC_PATH)/qemu-options.hx $(SRC_PATH)/scripts/hxtool
781
	$(call quiet-command,sh $(SRC_PATH)/scripts/hxtool -t < $< > $@,"GEN","$@")
B
bellard 已提交
782

783
qemu-monitor.texi: $(SRC_PATH)/hmp-commands.hx $(SRC_PATH)/scripts/hxtool
784
	$(call quiet-command,sh $(SRC_PATH)/scripts/hxtool -t < $< > $@,"GEN","$@")
785

786
qemu-monitor-info.texi: $(SRC_PATH)/hmp-commands-info.hx $(SRC_PATH)/scripts/hxtool
787
	$(call quiet-command,sh $(SRC_PATH)/scripts/hxtool -t < $< > $@,"GEN","$@")
788

789
qemu-img-cmds.texi: $(SRC_PATH)/qemu-img-cmds.hx $(SRC_PATH)/scripts/hxtool
790
	$(call quiet-command,sh $(SRC_PATH)/scripts/hxtool -t < $< > $@,"GEN","$@")
791

792
docs/interop/qemu-qmp-qapi.texi docs/interop/qemu-ga-qapi.texi: $(SRC_PATH)/scripts/qapi2texi.py $(qapi-py)
793

794
docs/interop/qemu-qmp-qapi.texi: $(qapi-modules)
795
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi2texi.py $< > $@,"GEN","$@")
796

797
docs/interop/qemu-ga-qapi.texi: $(SRC_PATH)/qga/qapi-schema.json
798 799
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi2texi.py $< > $@,"GEN","$@")

800
qemu.1: qemu-doc.texi qemu-options.texi qemu-monitor.texi qemu-monitor-info.texi
801
qemu.1: qemu-option-trace.texi
802
qemu-img.1: qemu-img.texi qemu-option-trace.texi qemu-img-cmds.texi
803
fsdev/virtfs-proxy-helper.1: fsdev/virtfs-proxy-helper.texi
804
qemu-nbd.8: qemu-nbd.texi qemu-option-trace.texi
M
Marc-André Lureau 已提交
805
qemu-ga.8: qemu-ga.texi
806
docs/qemu-block-drivers.7: docs/qemu-block-drivers.texi
M
Marc-André Lureau 已提交
807

808 809 810 811
html: qemu-doc.html docs/interop/qemu-qmp-ref.html docs/interop/qemu-ga-ref.html
info: qemu-doc.info docs/interop/qemu-qmp-ref.info docs/interop/qemu-ga-ref.info
pdf: qemu-doc.pdf docs/interop/qemu-qmp-ref.pdf docs/interop/qemu-ga-ref.pdf
txt: qemu-doc.txt docs/interop/qemu-qmp-ref.txt docs/interop/qemu-ga-ref.txt
812

813
qemu-doc.html qemu-doc.info qemu-doc.pdf qemu-doc.txt: \
814
	qemu-img.texi qemu-nbd.texi qemu-options.texi qemu-option-trace.texi \
815
	qemu-monitor.texi qemu-img-cmds.texi qemu-ga.texi \
816
	qemu-monitor-info.texi docs/qemu-block-drivers.texi
817

818 819 820 821
docs/interop/qemu-ga-ref.dvi docs/interop/qemu-ga-ref.html \
    docs/interop/qemu-ga-ref.info docs/interop/qemu-ga-ref.pdf \
    docs/interop/qemu-ga-ref.txt docs/interop/qemu-ga-ref.7: \
	docs/interop/qemu-ga-ref.texi docs/interop/qemu-ga-qapi.texi
822

823 824 825 826
docs/interop/qemu-qmp-ref.dvi docs/interop/qemu-qmp-ref.html \
    docs/interop/qemu-qmp-ref.info docs/interop/qemu-qmp-ref.pdf \
    docs/interop/qemu-qmp-ref.txt docs/interop/qemu-qmp-ref.7: \
	docs/interop/qemu-qmp-ref.texi docs/interop/qemu-qmp-qapi.texi
827 828


829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851
ifdef CONFIG_WIN32

INSTALLER = qemu-setup-$(VERSION)$(EXESUF)

nsisflags = -V2 -NOCD

ifneq ($(wildcard $(SRC_PATH)/dll),)
ifeq ($(ARCH),x86_64)
# 64 bit executables
DLL_PATH = $(SRC_PATH)/dll/w64
nsisflags += -DW64
else
# 32 bit executables
DLL_PATH = $(SRC_PATH)/dll/w32
endif
endif

.PHONY: installer
installer: $(INSTALLER)

INSTDIR=/tmp/qemu-nsis

$(INSTALLER): $(SRC_PATH)/qemu.nsi
E
Ed Maste 已提交
852
	$(MAKE) install prefix=${INSTDIR}
853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876
ifdef SIGNCODE
	(cd ${INSTDIR}; \
         for i in *.exe; do \
           $(SIGNCODE) $${i}; \
         done \
        )
endif # SIGNCODE
	(cd ${INSTDIR}; \
         for i in qemu-system-*.exe; do \
           arch=$${i%.exe}; \
           arch=$${arch#qemu-system-}; \
           echo Section \"$$arch\" Section_$$arch; \
           echo SetOutPath \"\$$INSTDIR\"; \
           echo File \"\$${BINDIR}\\$$i\"; \
           echo SectionEnd; \
         done \
        ) >${INSTDIR}/system-emulations.nsh
	makensis $(nsisflags) \
                $(if $(BUILD_DOCS),-DCONFIG_DOCUMENTATION="y") \
                $(if $(CONFIG_GTK),-DCONFIG_GTK="y") \
                -DBINDIR="${INSTDIR}" \
                $(if $(DLL_PATH),-DDLLDIR="$(DLL_PATH)") \
                -DSRCDIR="$(SRC_PATH)" \
                -DOUTFILE="$(INSTALLER)" \
877
                -DDISPLAYVERSION="$(VERSION)" \
878 879 880 881 882 883 884
                $(SRC_PATH)/qemu.nsi
	rm -r ${INSTDIR}
ifdef SIGNCODE
	$(SIGNCODE) $(INSTALLER)
endif # SIGNCODE
endif # CONFIG_WIN

885 886
# Add a dependency on the generated files, so that they are always
# rebuilt before other object files
887
ifneq ($(wildcard config-host.mak),)
F
Fam Zheng 已提交
888
ifneq ($(filter-out $(UNCHECKED_GOALS),$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fail))
889
Makefile: $(GENERATED_FILES)
890
endif
891
endif
892

893 894 895 896
.SECONDARY: $(TRACE_HEADERS) $(TRACE_HEADERS:%=%-timestamp) \
	$(TRACE_SOURCES) $(TRACE_SOURCES:%=%-timestamp) \
	$(TRACE_DTRACE) $(TRACE_DTRACE:%=%-timestamp)

B
bellard 已提交
897
# Include automatically generated dependency files
898 899
# Dependencies in Makefile.objs files come from our recursive subdir rules
-include $(wildcard *.d tests/*.d)
F
Fam Zheng 已提交
900 901

include $(SRC_PATH)/tests/docker/Makefile.include
F
Fam Zheng 已提交
902
include $(SRC_PATH)/tests/vm/Makefile.include
903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925

.PHONY: help
help:
	@echo  'Generic targets:'
	@echo  '  all             - Build all'
	@echo  '  dir/file.o      - Build specified target only'
	@echo  '  install         - Install QEMU, documentation and tools'
	@echo  '  ctags/TAGS      - Generate tags file for editors'
	@echo  '  cscope          - Generate cscope index'
	@echo  ''
	@$(if $(TARGET_DIRS), \
		echo 'Architecture specific targets:'; \
		$(foreach t, $(TARGET_DIRS), \
		printf "  %-30s - Build for %s\\n" $(patsubst %,subdir-%,$(t)) $(t);) \
		echo '')
	@echo  'Cleaning targets:'
	@echo  '  clean           - Remove most generated files but keep the config'
	@echo  '  distclean       - Remove all generated files'
	@echo  '  dist            - Build a distributable tarball'
	@echo  ''
	@echo  'Test targets:'
	@echo  '  check           - Run all tests (check-help for details)'
	@echo  '  docker          - Help about targets running tests inside Docker containers'
F
Fam Zheng 已提交
926
	@echo  '  vm-test         - Help about targets running tests inside VM'
927 928
	@echo  ''
	@echo  'Documentation targets:'
929
	@echo  '  html info pdf txt'
930 931 932 933
	@echo  '                  - Build documentation in specified format'
	@echo  ''
ifdef CONFIG_WIN32
	@echo  'Windows targets:'
934
	@echo  '  installer       - Build NSIS-based installer for QEMU'
935 936 937 938 939 940
ifdef QEMU_GA_MSI_ENABLED
	@echo  '  msi             - Build MSI-based installer for qemu-ga'
endif
	@echo  ''
endif
	@echo  '  make V=0|1 [targets] 0 => quiet build (default), 1 => verbose build'