Makefile 29.7 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 21 22 23 24 25 26

# 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

27 28
CONFIG_SOFTMMU := $(if $(filter %-softmmu,$(TARGET_DIRS)),y)
CONFIG_USER_ONLY := $(if $(filter %-user,$(TARGET_DIRS)),y)
29
CONFIG_XEN := $(CONFIG_XEN_BACKEND)
30 31 32 33
CONFIG_ALL=y
-include config-all-devices.mak
-include config-all-disas.mak

34
config-host.mak: $(SRC_PATH)/configure $(SRC_PATH)/pc-bios
35
	@echo $@ is out-of-date, running configure
36 37 38 39 40 41 42 43
	@# 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
44 45
else
config-host.mak:
F
Fam Zheng 已提交
46
ifneq ($(filter-out $(UNCHECKED_GOALS),$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fail))
47 48 49
	@echo "Please call configure before running make!"
	@exit 1
endif
50
endif
B
bellard 已提交
51

F
Fam Zheng 已提交
52 53
include $(SRC_PATH)/rules.mak

54 55 56 57 58
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
59

60
GENERATED_FILES += trace/generated-tcg-tracers.h
61

62 63 64
GENERATED_FILES += trace/generated-helpers-wrappers.h
GENERATED_FILES += trace/generated-helpers.h
GENERATED_FILES += trace/generated-helpers.c
65

66
ifdef CONFIG_TRACE_UST
67 68
GENERATED_FILES += trace-ust-all.h
GENERATED_FILES += trace-ust-all.c
69 70
endif

71
GENERATED_FILES += module_block.h
72

73 74 75 76 77 78 79 80 81 82 83
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

84 85
GENERATED_FILES += $(TRACE_HEADERS)
GENERATED_FILES += $(TRACE_SOURCES)
86
GENERATED_FILES += $(BUILD_DIR)/trace-events-all
87 88 89

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

90 91 92
tracetool-y = $(SRC_PATH)/scripts/tracetool.py
tracetool-y += $(shell find $(SRC_PATH)/scripts/tracetool -name "*.py")

93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 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
%/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

194 195 196 197 198
# Don't try to regenerate Makefile or configure
# We don't generate any of them
Makefile: ;
configure: ;

199
.PHONY: all clean cscope distclean html info install install-doc \
200
	pdf txt recurse-all speed test dist msi FORCE
201

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

J
Juan Quintela 已提交
204
LIBS+=-lz $(LIBS_TOOLS)
205

206 207
HELPERS-$(CONFIG_LINUX) = qemu-bridge-helper$(EXESUF)

208
ifdef BUILD_DOCS
209
DOCS=qemu-doc.html qemu-doc.txt qemu.1 qemu-img.1 qemu-nbd.8 qemu-ga.8
210 211
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
212
ifdef CONFIG_VIRTFS
213
DOCS+=fsdev/virtfs-proxy-helper.1
214
endif
215 216 217
else
DOCS=
endif
B
bellard 已提交
218

219
SUBDIR_MAKEFLAGS=$(if $(V),,--no-print-directory) BUILD_DIR=$(BUILD_DIR)
220
SUBDIR_DEVICES_MAK=$(patsubst %, %/config-devices.mak, $(TARGET_DIRS))
221
SUBDIR_DEVICES_MAK_DEP=$(patsubst %, %-config-devices.mak.d, $(TARGET_DIRS))
222

223 224
ifeq ($(SUBDIR_DEVICES_MAK),)
config-all-devices.mak:
225
	$(call quiet-command,echo '# no devices' > $@,"GEN","$@")
226
else
227
config-all-devices.mak: $(SUBDIR_DEVICES_MAK)
228 229 230
	$(call quiet-command, sed -n \
             's|^\([^=]*\)=\(.*\)$$|\1:=$$(findstring y,$$(\1)\2)|p' \
             $(SUBDIR_DEVICES_MAK) | sort -u > $@, \
231
             "GEN","$@")
232
endif
233

P
Paul Brook 已提交
234 235
-include $(SUBDIR_DEVICES_MAK_DEP)

236
%/config-devices.mak: default-configs/%.mak $(SRC_PATH)/scripts/make_device_config.sh
237
	$(call quiet-command, \
238
            $(SHELL) $(SRC_PATH)/scripts/make_device_config.sh $< $*-config-devices.mak.d $@ > $@.tmp,"GEN","$@.tmp")
239
	$(call quiet-command, if test -f $@; then \
240
	  if cmp -s $@.old $@; then \
P
Paul Brook 已提交
241 242
	    mv $@.tmp $@; \
	    cp -p $@ $@.old; \
243 244 245 246 247 248 249 250 251
	  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; \
252
	 else \
253 254
	  mv $@.tmp $@; \
	  cp -p $@ $@.old; \
255
	 fi,"GEN","$@");
256 257 258 259

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

260 261
ifneq ($(wildcard config-host.mak),)
include $(SRC_PATH)/Makefile.objs
262 263 264 265
endif

dummy := $(call unnest-vars,, \
                stub-obj-y \
M
Marc-André Lureau 已提交
266
                chardev-obj-y \
267 268
                util-obj-y \
                qga-obj-y \
269 270
                ivshmem-client-obj-y \
                ivshmem-server-obj-y \
M
Marc-André Lureau 已提交
271
                libvhost-user-obj-y \
272
                vhost-user-scsi-obj-y \
273
                qga-vss-dll-obj-y \
274
                block-obj-y \
275
                block-obj-m \
276 277
                crypto-obj-y \
                crypto-aes-obj-y \
278
                qom-obj-y \
279
                io-obj-y \
280
                common-obj-y \
281 282
                common-obj-m \
                trace-obj-y)
283 284

ifneq ($(wildcard config-host.mak),)
285
include $(SRC_PATH)/tests/Makefile.include
286 287
endif

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

290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307
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)
308 309 310 311 312
	$(call quiet-command, if ! cmp -s $@ $@.tmp; then \
	  mv $@.tmp $@; \
	 else \
	  rm $@.tmp; \
	 fi)
313

314 315
config-host.h: config-host.h-timestamp
config-host.h-timestamp: config-host.mak
316
qemu-options.def: $(SRC_PATH)/qemu-options.hx $(SRC_PATH)/scripts/hxtool
317
	$(call quiet-command,sh $(SRC_PATH)/scripts/hxtool -h < $< > $@,"GEN","$@")
318

319
SUBDIR_RULES=$(patsubst %,subdir-%, $(TARGET_DIRS))
320 321
SOFTMMU_SUBDIR_RULES=$(filter %-softmmu,$(SUBDIR_RULES))

322
$(SOFTMMU_SUBDIR_RULES): $(block-obj-y)
323
$(SOFTMMU_SUBDIR_RULES): $(crypto-obj-y)
324
$(SOFTMMU_SUBDIR_RULES): $(io-obj-y)
325
$(SOFTMMU_SUBDIR_RULES): config-all-devices.mak
326

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

330 331 332 333
subdir-pixman: pixman/Makefile
	$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C pixman V="$(V)" all,)

pixman/Makefile: $(SRC_PATH)/pixman/configure
334
	(cd pixman; CFLAGS="$(CFLAGS) -fPIC $(extra_cflags) $(extra_ldflags)" $(SRC_PATH)/pixman/configure $(AUTOCONF_HOST) --disable-gtk --disable-shared --enable-static)
335 336 337 338

$(SRC_PATH)/pixman/configure:
	(cd $(SRC_PATH)/pixman; autoreconf -v --install)

339
DTC_MAKE_ARGS=-I$(SRC_PATH)/dtc VPATH=$(SRC_PATH)/dtc -C dtc V="$(V)" LIBFDT_srcdir=$(SRC_PATH)/dtc/libfdt
340 341
DTC_CFLAGS=$(CFLAGS) $(QEMU_CFLAGS)
DTC_CPPFLAGS=-I$(BUILD_DIR)/dtc -I$(SRC_PATH)/dtc -I$(SRC_PATH)/dtc/libfdt
342 343

subdir-dtc:dtc/libfdt dtc/tests
344
	$(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,)
345 346 347 348

dtc/%:
	mkdir -p $@

M
Marc-André Lureau 已提交
349
$(SUBDIR_RULES): libqemuutil.a libqemustub.a $(common-obj-y) $(chardev-obj-y) \
350
	$(qom-obj-y) $(crypto-aes-obj-$(CONFIG_USER_ONLY))
351

P
Paul Brook 已提交
352
ROMSUBDIR_RULES=$(patsubst %,romsubdir-%, $(ROMS))
353
# Only keep -O and -g cflags
P
Paul Brook 已提交
354
romsubdir-%:
355
	$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C pc-bios/$* V="$(V)" TARGET_DIR="$*/" CFLAGS="$(filter -O% -g%,$(CFLAGS))",)
P
Paul Brook 已提交
356 357 358 359

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

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

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

364
Makefile: $(version-obj-y)
365 366

######################################################################
367
# Build libraries
368 369

libqemustub.a: $(stub-obj-y)
370
libqemuutil.a: $(util-obj-y) $(trace-obj-y)
371

A
Alon Levy 已提交
372
######################################################################
B
bellard 已提交
373

374
COMMON_LDADDS = libqemuutil.a libqemustub.a
375

J
Juan Quintela 已提交
376
qemu-img.o: qemu-img-cmds.h
377

378 379 380
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)
381

382
qemu-bridge-helper$(EXESUF): qemu-bridge-helper.o $(COMMON_LDADDS)
383

384
fsdev/virtfs-proxy-helper$(EXESUF): fsdev/virtfs-proxy-helper.o fsdev/9p-marshal.o fsdev/9p-iov-marshal.o $(COMMON_LDADDS)
385 386
fsdev/virtfs-proxy-helper$(EXESUF): LIBS += -lcap

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

390
qemu-ga$(EXESUF): LIBS = $(LIBS_QGA)
391
qemu-ga$(EXESUF): QEMU_CFLAGS += -I qga/qapi-generated
392

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

395 396
qapi-py = $(SRC_PATH)/scripts/qapi.py $(SRC_PATH)/scripts/ordereddict.py

397
qga/qapi-generated/qga-qapi-types.c qga/qapi-generated/qga-qapi-types.h :\
398
$(SRC_PATH)/qga/qapi-schema.json $(SRC_PATH)/scripts/qapi-types.py $(qapi-py)
399
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-types.py \
400
		$(gen-out-type) -o qga/qapi-generated -p "qga-" $<, \
401
		"GEN","$@")
402
qga/qapi-generated/qga-qapi-visit.c qga/qapi-generated/qga-qapi-visit.h :\
403
$(SRC_PATH)/qga/qapi-schema.json $(SRC_PATH)/scripts/qapi-visit.py $(qapi-py)
404
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-visit.py \
405
		$(gen-out-type) -o qga/qapi-generated -p "qga-" $<, \
406
		"GEN","$@")
407
qga/qapi-generated/qga-qmp-commands.h qga/qapi-generated/qga-qmp-marshal.c :\
408
$(SRC_PATH)/qga/qapi-schema.json $(SRC_PATH)/scripts/qapi-commands.py $(qapi-py)
409
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-commands.py \
410
		$(gen-out-type) -o qga/qapi-generated -p "qga-" $<, \
411
		"GEN","$@")
412

413
qapi-modules = $(SRC_PATH)/qapi-schema.json $(SRC_PATH)/qapi/common.json \
414
               $(SRC_PATH)/qapi/block.json $(SRC_PATH)/qapi/block-core.json \
415
               $(SRC_PATH)/qapi/event.json $(SRC_PATH)/qapi/introspect.json \
416 417
               $(SRC_PATH)/qapi/crypto.json $(SRC_PATH)/qapi/rocker.json \
               $(SRC_PATH)/qapi/trace.json
418

419
qapi-types.c qapi-types.h :\
420
$(qapi-modules) $(SRC_PATH)/scripts/qapi-types.py $(qapi-py)
421
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-types.py \
422
		$(gen-out-type) -o "." -b $<, \
423
		"GEN","$@")
424
qapi-visit.c qapi-visit.h :\
425
$(qapi-modules) $(SRC_PATH)/scripts/qapi-visit.py $(qapi-py)
426
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-visit.py \
427
		$(gen-out-type) -o "." -b $<, \
428
		"GEN","$@")
W
Wenchao Xia 已提交
429 430 431
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 \
432
		$(gen-out-type) -o "." $<, \
433
		"GEN","$@")
434
qmp-commands.h qmp-marshal.c :\
435
$(qapi-modules) $(SRC_PATH)/scripts/qapi-commands.py $(qapi-py)
436
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-commands.py \
437
		$(gen-out-type) -o "." $<, \
438
		"GEN","$@")
439 440 441 442
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 "." $<, \
443
		"GEN","$@")
444

445
QGALIB_GEN=$(addprefix qga/qapi-generated/, qga-qapi-types.h qga-qapi-visit.h qga-qmp-commands.h)
446
$(qga-obj-y) qemu-ga.o: $(QGALIB_GEN)
447

448
qemu-ga$(EXESUF): $(qga-obj-y) $(COMMON_LDADDS)
449
	$(call LINK, $^)
M
Michael Roth 已提交
450

451 452 453
ifdef QEMU_GA_MSI_ENABLED
QEMU_GA_MSI=qemu-ga-$(ARCH).msi

454
msi: $(QEMU_GA_MSI)
455

456
$(QEMU_GA_MSI): qemu-ga.exe $(QGA_VSS_PROVIDER)
457 458 459

$(QEMU_GA_MSI): config-host.mak

460 461
$(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)" \
462
	wixl -o $@ $(QEMU_GA_MSI_ARCH) $(QEMU_GA_MSI_WITH_VSS) $(QEMU_GA_MSI_MINGW_DLL_PATH) $<,"WIXL","$@")
463 464
else
msi:
465
	@echo "MSI build not configured or dependency resolution failed (reconfigure with --enable-guest-agent-msi option)"
466 467
endif

468 469 470 471 472
ifneq ($(EXESUF),)
.PHONY: qemu-ga
qemu-ga: qemu-ga$(EXESUF) $(QGA_VSS_PROVIDER) $(QEMU_GA_MSI)
endif

473
ivshmem-client$(EXESUF): $(ivshmem-client-obj-y) $(COMMON_LDADDS)
474
	$(call LINK, $^)
475
ivshmem-server$(EXESUF): $(ivshmem-server-obj-y) $(COMMON_LDADDS)
476
	$(call LINK, $^)
477 478
vhost-user-scsi$(EXESUF): $(vhost-user-scsi-obj-y)
	$(call LINK, $^)
479

480 481 482
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))), \
483
	"GEN","$@")
484

485
clean:
486
# avoid old build problems by removing potentially incorrect old files
487
	rm -f config.mak op-i386.h opc-i386.h gen-op-i386.h op-arm.h opc-arm.h gen-op-arm.h
488
	rm -f qemu-options.def
489
	rm -f *.msi
490
	find . \( -name '*.so' -o -name '*.dll' -o -name '*.mo' -o -name '*.[oda]' \) -type f -exec rm {} +
491
	rm -f $(filter-out %.tlb,$(TOOLS)) $(HELPERS-y) qemu-ga TAGS cscope.* *.pod *~ */*~
492
	rm -f fsdev/*.pod
B
Blue Swirl 已提交
493
	rm -f qemu-img-cmds.h
494
	rm -f ui/shader/*-vert.h ui/shader/*-frag.h
495
	@# May not be present in GENERATED_FILES
496 497
	rm -f trace/generated-tracers-dtrace.dtrace*
	rm -f trace/generated-tracers-dtrace.h*
498
	rm -f $(foreach f,$(GENERATED_FILES),$(f) $(f)-timestamp)
S
Stefan Weil 已提交
499
	rm -rf qapi-generated
500
	rm -rf qga/qapi-generated
501
	for d in $(ALL_SUBDIRS); do \
M
Magnus Damm 已提交
502
	if test -d $$d; then $(MAKE) -C $$d $@ || exit 1; fi; \
503
	rm -f $$d/qemu-options.def; \
B
bellard 已提交
504
        done
505
	rm -f $(SUBDIR_DEVICES_MAK) config-all-devices.mak
506

507 508 509 510 511 512 513
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 已提交
514
distclean: clean
515
	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
516 517
	rm -f config-all-devices.mak config-all-disas.mak config.status
	rm -f po/*.mo tests/qemu-iotests/common.env
M
Magnus Damm 已提交
518
	rm -f roms/seabios/config.mak roms/vgabios/config.mak
519
	rm -f qemu-doc.info qemu-doc.aux qemu-doc.cp qemu-doc.cps
B
Brad Hards 已提交
520 521
	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
522
	rm -f qemu-doc.vr qemu-doc.txt
523
	rm -f config.log
524
	rm -f linux-headers/asm
525 526 527 528 529 530
	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
P
Paolo Bonzini 已提交
531
	for d in $(TARGET_DIRS); do \
B
bellard 已提交
532
	rm -rf $$d || exit 1 ; \
B
updated  
bellard 已提交
533
        done
534
	rm -Rf .sdk
E
Ed Maste 已提交
535 536
	if test -f pixman/config.log; then $(MAKE) -C pixman distclean; fi
	if test -f dtc/version_gen.h; then $(MAKE) $(DTC_MAKE_ARGS) clean; fi
B
bellard 已提交
537

B
bellard 已提交
538 539
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 \
540
common  de-ch  es     fo  fr-ca  hu     ja  mk  nl-be      pt  sl     tr \
J
Jan Krupa 已提交
541
bepo    cz
B
bellard 已提交
542

T
ths 已提交
543
ifdef INSTALL_BLOBS
544
BLOBS=bios.bin bios-256k.bin sgabios.bin vgabios.bin vgabios-cirrus.bin \
545
vgabios-stdvga.bin vgabios-vmware.bin vgabios-qxl.bin vgabios-virtio.bin \
546
acpi-dsdt.aml \
547
ppc_rom.bin openbios-sparc32 openbios-sparc64 openbios-ppc QEMU,tcx.bin QEMU,cgthree.bin \
548 549
pxe-e1000.rom pxe-eepro100.rom pxe-ne2k_pci.rom \
pxe-pcnet.rom pxe-rtl8139.rom pxe-virtio.rom \
550 551
efi-e1000.rom efi-eepro100.rom efi-ne2k_pci.rom \
efi-pcnet.rom efi-rtl8139.rom efi-virtio.rom \
G
Gerd Hoffmann 已提交
552
efi-e1000e.rom efi-vmxnet3.rom \
A
Anthony Liguori 已提交
553
qemu-icon.bmp qemu_logo_no_text.svg \
554
bamboo.dtb petalogix-s3adsp1800.dtb petalogix-ml605.dtb \
555
multiboot.bin linuxboot.bin linuxboot_dma.bin kvmvapic.bin \
556
s390-ccw.img \
557
spapr-rtas.bin slof.bin skiboot.lid \
558
palcode-clipper \
559 560
u-boot.e500 \
qemu_vga.ndrv
T
ths 已提交
561 562 563 564
else
BLOBS=
endif

565
install-doc: $(DOCS)
566
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_docdir)"
567
	$(INSTALL_DATA) qemu-doc.html "$(DESTDIR)$(qemu_docdir)"
568
	$(INSTALL_DATA) qemu-doc.txt "$(DESTDIR)$(qemu_docdir)"
569 570
	$(INSTALL_DATA) docs/interop/qemu-qmp-ref.html "$(DESTDIR)$(qemu_docdir)"
	$(INSTALL_DATA) docs/interop/qemu-qmp-ref.txt "$(DESTDIR)$(qemu_docdir)"
571
ifdef CONFIG_POSIX
572
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man1"
573
	$(INSTALL_DATA) qemu.1 "$(DESTDIR)$(mandir)/man1"
574
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man7"
575
	$(INSTALL_DATA) docs/interop/qemu-qmp-ref.7 "$(DESTDIR)$(mandir)/man7"
576 577
ifneq ($(TOOLS),)
	$(INSTALL_DATA) qemu-img.1 "$(DESTDIR)$(mandir)/man1"
578 579
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man8"
	$(INSTALL_DATA) qemu-nbd.8 "$(DESTDIR)$(mandir)/man8"
580
endif
M
Marc-André Lureau 已提交
581 582
ifneq (,$(findstring qemu-ga,$(TOOLS)))
	$(INSTALL_DATA) qemu-ga.8 "$(DESTDIR)$(mandir)/man8"
583 584 585
	$(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 已提交
586
endif
587
endif
588 589 590 591
ifdef CONFIG_VIRTFS
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man1"
	$(INSTALL_DATA) fsdev/virtfs-proxy-helper.1 "$(DESTDIR)$(mandir)/man1"
endif
592 593 594 595

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

596 597 598 599 600 601 602
install-localstatedir:
ifdef CONFIG_POSIX
ifneq (,$(findstring qemu-ga,$(TOOLS)))
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_localstatedir)"/run
endif
endif

603

604
install: all $(if $(BUILD_DOCS),install-doc) install-datadir install-localstatedir
605
ifneq ($(TOOLS),)
606
	$(call install-prog,$(subst qemu-ga,qemu-ga$(EXESUF),$(TOOLS)),$(DESTDIR)$(bindir))
607
endif
608 609
ifneq ($(CONFIG_MODULES),)
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_moddir)"
610 611
	for s in $(modules-m:.mo=$(DSOSUF)); do \
		t="$(DESTDIR)$(qemu_moddir)/$$(echo $$s | tr / -)"; \
612
		$(INSTALL_LIB) $$s "$$t"; \
613
		test -z "$(STRIP)" || $(STRIP) "$$t"; \
614 615
	done
endif
616
ifneq ($(HELPERS-y),)
617
	$(call install-prog,$(HELPERS-y),$(DESTDIR)$(libexecdir))
618
endif
T
ths 已提交
619 620
ifneq ($(BLOBS),)
	set -e; for x in $(BLOBS); do \
621
		$(INSTALL_DATA) $(SRC_PATH)/pc-bios/$$x "$(DESTDIR)$(qemu_datadir)"; \
P
pbrook 已提交
622
	done
623 624 625
endif
ifeq ($(CONFIG_GTK),y)
	$(MAKE) -C po $@
T
ths 已提交
626
endif
627
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_datadir)/keymaps"
628
	set -e; for x in $(KEYMAPS); do \
629
		$(INSTALL_DATA) $(SRC_PATH)/pc-bios/keymaps/$$x "$(DESTDIR)$(qemu_datadir)/keymaps"; \
P
pbrook 已提交
630
	done
631
	$(INSTALL_DATA) $(BUILD_DIR)/trace-events-all "$(DESTDIR)$(qemu_datadir)/trace-events-all"
B
bellard 已提交
632
	for d in $(TARGET_DIRS); do \
633
	$(MAKE) $(SUBDIR_MAKEFLAGS) TARGET_DIR=$$d/ -C $$d $@ || exit 1 ; \
B
bellard 已提交
634
        done
B
bellard 已提交
635

B
bellard 已提交
636
# various test targets
B
bellard 已提交
637
test speed: all
A
Anthony Liguori 已提交
638
	$(MAKE) -C tests/tcg $@
639

F
Fam Zheng 已提交
640 641
.PHONY: ctags
ctags:
642
	rm -f tags
F
Fam Zheng 已提交
643 644
	find "$(SRC_PATH)" -name '*.[hc]' -exec ctags --append {} +

A
Alexandre Bique 已提交
645
.PHONY: TAGS
646
TAGS:
647
	rm -f TAGS
D
David Gibson 已提交
648
	find "$(SRC_PATH)" -name '*.[hc]' -exec etags --append {} +
649

B
bellard 已提交
650
cscope:
F
Fam Zheng 已提交
651 652 653
	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 已提交
654

655 656 657 658 659
# 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 $< > $@,\
660
		"VERT","$@")
661 662 663 664 665

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 $< > $@,\
666
		"FRAG","$@")
667

668 669 670
ui/console-gl.o: $(SRC_PATH)/ui/console-gl.c \
	ui/shader/texture-blit-vert.h ui/shader/texture-blit-frag.h

B
bellard 已提交
671
# documentation
672
MAKEINFO=makeinfo
673 674
MAKEINFOINCLUDES= -I docs -I $(<D) -I $(@D)
MAKEINFOFLAGS=--no-split --number-sections $(MAKEINFOINCLUDES)
P
Paolo Bonzini 已提交
675
TEXI2PODFLAGS=$(MAKEINFOINCLUDES) "-DVERSION=$(VERSION)"
676
TEXI2PDFFLAGS=$(if $(V),,--quiet) -I $(SRC_PATH) $(MAKEINFOINCLUDES)
677

678
docs/version.texi: $(SRC_PATH)/VERSION
679 680
	$(call quiet-command,echo "@set VERSION $(VERSION)" > $@,"GEN","$@")

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

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

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

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

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

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

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

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

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

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

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

715
qemu.1: qemu-doc.texi qemu-options.texi qemu-monitor.texi qemu-monitor-info.texi
716
qemu.1: qemu-option-trace.texi
717
qemu-img.1: qemu-img.texi qemu-option-trace.texi qemu-img-cmds.texi
718
fsdev/virtfs-proxy-helper.1: fsdev/virtfs-proxy-helper.texi
719
qemu-nbd.8: qemu-nbd.texi qemu-option-trace.texi
M
Marc-André Lureau 已提交
720 721
qemu-ga.8: qemu-ga.texi

722 723 724 725
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
726

727
qemu-doc.html qemu-doc.info qemu-doc.pdf qemu-doc.txt: \
728
	qemu-img.texi qemu-nbd.texi qemu-options.texi qemu-option-trace.texi \
729 730
	qemu-monitor.texi qemu-img-cmds.texi qemu-ga.texi \
	qemu-monitor-info.texi
731

732 733 734 735
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
736

737 738 739 740
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
741 742


743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765
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 已提交
766
	$(MAKE) install prefix=${INSTDIR}
767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790
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)" \
791
                -DDISPLAYVERSION="$(VERSION)" \
792 793 794 795 796 797 798
                $(SRC_PATH)/qemu.nsi
	rm -r ${INSTDIR}
ifdef SIGNCODE
	$(SIGNCODE) $(INSTALLER)
endif # SIGNCODE
endif # CONFIG_WIN

799 800
# Add a dependency on the generated files, so that they are always
# rebuilt before other object files
801
ifneq ($(wildcard config-host.mak),)
F
Fam Zheng 已提交
802
ifneq ($(filter-out $(UNCHECKED_GOALS),$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fail))
803
Makefile: $(GENERATED_FILES)
804
endif
805
endif
806

807 808 809 810
.SECONDARY: $(TRACE_HEADERS) $(TRACE_HEADERS:%=%-timestamp) \
	$(TRACE_SOURCES) $(TRACE_SOURCES:%=%-timestamp) \
	$(TRACE_DTRACE) $(TRACE_DTRACE:%=%-timestamp)

B
bellard 已提交
811
# Include automatically generated dependency files
812 813
# Dependencies in Makefile.objs files come from our recursive subdir rules
-include $(wildcard *.d tests/*.d)
F
Fam Zheng 已提交
814 815

include $(SRC_PATH)/tests/docker/Makefile.include
816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840

.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'
	@echo  ''
	@echo  'Documentation targets:'
841
	@echo  '  html info pdf txt'
842 843 844 845
	@echo  '                  - Build documentation in specified format'
	@echo  ''
ifdef CONFIG_WIN32
	@echo  'Windows targets:'
846
	@echo  '  installer       - Build NSIS-based installer for QEMU'
847 848 849 850 851 852
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'