Makefile 30.1 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
include $(SRC_PATH)/tests/Makefile.include
285

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

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

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

317
SUBDIR_RULES=$(patsubst %,subdir-%, $(TARGET_DIRS))
318 319
SOFTMMU_SUBDIR_RULES=$(filter %-softmmu,$(SUBDIR_RULES))

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

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

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

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

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

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

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

dtc/%:
	mkdir -p $@

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

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

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

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

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

362
Makefile: $(version-obj-y)
363 364

######################################################################
365
# Build libraries
366 367

libqemustub.a: $(stub-obj-y)
368
libqemuutil.a: $(util-obj-y) $(trace-obj-y)
369

A
Alon Levy 已提交
370
######################################################################
B
bellard 已提交
371

372
COMMON_LDADDS = libqemuutil.a libqemustub.a
373

J
Juan Quintela 已提交
374
qemu-img.o: qemu-img-cmds.h
375

376 377 378
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)
379

380
qemu-bridge-helper$(EXESUF): qemu-bridge-helper.o $(COMMON_LDADDS)
381

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

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

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

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

393 394
qapi-py = $(SRC_PATH)/scripts/qapi.py $(SRC_PATH)/scripts/ordereddict.py

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

411
qapi-modules = $(SRC_PATH)/qapi-schema.json $(SRC_PATH)/qapi/common.json \
412
               $(SRC_PATH)/qapi/block.json $(SRC_PATH)/qapi/block-core.json \
413
               $(SRC_PATH)/qapi/char.json \
414
               $(SRC_PATH)/qapi/crypto.json \
415
               $(SRC_PATH)/qapi/event.json $(SRC_PATH)/qapi/introspect.json \
416
               $(SRC_PATH)/qapi/migration.json \
417
               $(SRC_PATH)/qapi/net.json \
418
               $(SRC_PATH)/qapi/rocker.json \
419
               $(SRC_PATH)/qapi/run-state.json \
420
               $(SRC_PATH)/qapi/sockets.json \
421
               $(SRC_PATH)/qapi/tpm.json \
422
               $(SRC_PATH)/qapi/trace.json \
423
               $(SRC_PATH)/qapi/transaction.json \
424
               $(SRC_PATH)/qapi/ui.json
425

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

452
QGALIB_GEN=$(addprefix qga/qapi-generated/, qga-qapi-types.h qga-qapi-visit.h qga-qmp-commands.h)
453
$(qga-obj-y): $(QGALIB_GEN)
454

455
qemu-ga$(EXESUF): $(qga-obj-y) $(COMMON_LDADDS)
456
	$(call LINK, $^)
M
Michael Roth 已提交
457

458 459 460
ifdef QEMU_GA_MSI_ENABLED
QEMU_GA_MSI=qemu-ga-$(ARCH).msi

461
msi: $(QEMU_GA_MSI)
462

463
$(QEMU_GA_MSI): qemu-ga.exe $(QGA_VSS_PROVIDER)
464 465 466

$(QEMU_GA_MSI): config-host.mak

467 468
$(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)" \
469
	wixl -o $@ $(QEMU_GA_MSI_ARCH) $(QEMU_GA_MSI_WITH_VSS) $(QEMU_GA_MSI_MINGW_DLL_PATH) $<,"WIXL","$@")
470 471
else
msi:
472
	@echo "MSI build not configured or dependency resolution failed (reconfigure with --enable-guest-agent-msi option)"
473 474
endif

475 476 477 478 479
ifneq ($(EXESUF),)
.PHONY: qemu-ga
qemu-ga: qemu-ga$(EXESUF) $(QGA_VSS_PROVIDER) $(QEMU_GA_MSI)
endif

480
ifdef CONFIG_IVSHMEM
481
ivshmem-client$(EXESUF): $(ivshmem-client-obj-y) $(COMMON_LDADDS)
482
	$(call LINK, $^)
483
ivshmem-server$(EXESUF): $(ivshmem-server-obj-y) $(COMMON_LDADDS)
484
	$(call LINK, $^)
485
endif
486 487
vhost-user-scsi$(EXESUF): $(vhost-user-scsi-obj-y)
	$(call LINK, $^)
488

489 490 491
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))), \
492
	"GEN","$@")
493

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

516 517 518 519 520 521 522
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 已提交
523
distclean: clean
524
	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
525 526
	rm -f config-all-devices.mak config-all-disas.mak config.status
	rm -f po/*.mo tests/qemu-iotests/common.env
M
Magnus Damm 已提交
527
	rm -f roms/seabios/config.mak roms/vgabios/config.mak
528
	rm -f qemu-doc.info qemu-doc.aux qemu-doc.cp qemu-doc.cps
B
Brad Hards 已提交
529 530
	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
531
	rm -f qemu-doc.vr qemu-doc.txt
532
	rm -f config.log
533
	rm -f linux-headers/asm
534 535 536 537 538 539
	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 已提交
540
	for d in $(TARGET_DIRS); do \
B
bellard 已提交
541
	rm -rf $$d || exit 1 ; \
B
updated  
bellard 已提交
542
        done
543
	rm -Rf .sdk
E
Ed Maste 已提交
544 545
	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 已提交
546

B
bellard 已提交
547 548
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 \
549
common  de-ch  es     fo  fr-ca  hu     ja  mk  nl-be      pt  sl     tr \
J
Jan Krupa 已提交
550
bepo    cz
B
bellard 已提交
551

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

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

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

605 606 607 608 609 610 611
install-localstatedir:
ifdef CONFIG_POSIX
ifneq (,$(findstring qemu-ga,$(TOOLS)))
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_localstatedir)"/run
endif
endif

612

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

B
bellard 已提交
645
# various test targets
B
bellard 已提交
646
test speed: all
A
Anthony Liguori 已提交
647
	$(MAKE) -C tests/tcg $@
648

F
Fam Zheng 已提交
649 650
.PHONY: ctags
ctags:
651
	rm -f tags
F
Fam Zheng 已提交
652 653
	find "$(SRC_PATH)" -name '*.[hc]' -exec ctags --append {} +

A
Alexandre Bique 已提交
654
.PHONY: TAGS
655
TAGS:
656
	rm -f TAGS
D
David Gibson 已提交
657
	find "$(SRC_PATH)" -name '*.[hc]' -exec etags --append {} +
658

B
bellard 已提交
659
cscope:
F
Fam Zheng 已提交
660 661 662
	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 已提交
663

664 665 666 667 668
# 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 $< > $@,\
669
		"VERT","$@")
670 671 672 673 674

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 $< > $@,\
675
		"FRAG","$@")
676

677 678 679
ui/console-gl.o: $(SRC_PATH)/ui/console-gl.c \
	ui/shader/texture-blit-vert.h ui/shader/texture-blit-frag.h

B
bellard 已提交
680
# documentation
681
MAKEINFO=makeinfo
682 683
MAKEINFOINCLUDES= -I docs -I $(<D) -I $(@D)
MAKEINFOFLAGS=--no-split --number-sections $(MAKEINFOINCLUDES)
P
Paolo Bonzini 已提交
684
TEXI2PODFLAGS=$(MAKEINFOINCLUDES) "-DVERSION=$(VERSION)"
685
TEXI2PDFFLAGS=$(if $(V),,--quiet) -I $(SRC_PATH) $(MAKEINFOINCLUDES)
686

687
docs/version.texi: $(SRC_PATH)/VERSION
688 689
	$(call quiet-command,echo "@set VERSION $(VERSION)" > $@,"GEN","$@")

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

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

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

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

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

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

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

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

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

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

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

724
qemu.1: qemu-doc.texi qemu-options.texi qemu-monitor.texi qemu-monitor-info.texi
725
qemu.1: qemu-option-trace.texi
726
qemu-img.1: qemu-img.texi qemu-option-trace.texi qemu-img-cmds.texi
727
fsdev/virtfs-proxy-helper.1: fsdev/virtfs-proxy-helper.texi
728
qemu-nbd.8: qemu-nbd.texi qemu-option-trace.texi
M
Marc-André Lureau 已提交
729 730
qemu-ga.8: qemu-ga.texi

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

736
qemu-doc.html qemu-doc.info qemu-doc.pdf qemu-doc.txt: \
737
	qemu-img.texi qemu-nbd.texi qemu-options.texi qemu-option-trace.texi \
738 739
	qemu-monitor.texi qemu-img-cmds.texi qemu-ga.texi \
	qemu-monitor-info.texi
740

741 742 743 744
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
745

746 747 748 749
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
750 751


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

808 809
# Add a dependency on the generated files, so that they are always
# rebuilt before other object files
810
ifneq ($(wildcard config-host.mak),)
F
Fam Zheng 已提交
811
ifneq ($(filter-out $(UNCHECKED_GOALS),$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fail))
812
Makefile: $(GENERATED_FILES)
813
endif
814
endif
815

816 817 818 819
.SECONDARY: $(TRACE_HEADERS) $(TRACE_HEADERS:%=%-timestamp) \
	$(TRACE_SOURCES) $(TRACE_SOURCES:%=%-timestamp) \
	$(TRACE_DTRACE) $(TRACE_DTRACE:%=%-timestamp)

B
bellard 已提交
820
# Include automatically generated dependency files
821 822
# Dependencies in Makefile.objs files come from our recursive subdir rules
-include $(wildcard *.d tests/*.d)
F
Fam Zheng 已提交
823 824

include $(SRC_PATH)/tests/docker/Makefile.include
825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849

.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:'
850
	@echo  '  html info pdf txt'
851 852 853 854
	@echo  '                  - Build documentation in specified format'
	@echo  ''
ifdef CONFIG_WIN32
	@echo  'Windows targets:'
855
	@echo  '  installer       - Build NSIS-based installer for QEMU'
856 857 858 859 860 861
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'