Makefile 33.6 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=.

9 10
UNCHECKED_GOALS := %clean TAGS cscope ctags dist \
    html info pdf txt \
11
    help check-help print-% \
12
    docker docker-% vm-test vm-build-%
F
Fam Zheng 已提交
13

14 15 16
print-%:
	@echo '$*=$($*)'

17
# All following code might depend on configuration variables
18
ifneq ($(wildcard config-host.mak),)
P
Paul Brook 已提交
19
# Put the all: rule here so that config-host.mak can contain dependencies.
S
Stefan Weil 已提交
20
all:
P
pbrook 已提交
21
include config-host.mak
22

23 24 25 26
git-submodule-update:

.PHONY: git-submodule-update

27 28 29 30 31
git_module_status := $(shell \
  cd '$(SRC_PATH)' && \
  GIT="$(GIT)" ./scripts/git-submodule.sh status $(GIT_SUBMODULES); \
  echo $$?; \
)
32 33

ifeq (1,$(git_module_status))
34 35 36 37 38 39 40 41 42 43
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
44 45
git-submodule-update:
	$(call quiet-command, \
46
          (cd $(SRC_PATH) && GIT="$(GIT)" ./scripts/git-submodule.sh update $(GIT_SUBMODULES)), \
47 48 49 50
          "GIT","$(GIT_SUBMODULES)")
endif
endif

51
.git-submodule-status: git-submodule-update config-host.mak
52

53 54 55 56 57 58
# 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 \
59
"$(MAKE) distclean && rm -rf *-linux-user *-softmmu" in your source tree)
60 61 62
endif
endif

63 64
CONFIG_SOFTMMU := $(if $(filter %-softmmu,$(TARGET_DIRS)),y)
CONFIG_USER_ONLY := $(if $(filter %-user,$(TARGET_DIRS)),y)
65
CONFIG_XEN := $(CONFIG_XEN_BACKEND)
66 67 68 69
CONFIG_ALL=y
-include config-all-devices.mak
-include config-all-disas.mak

70
config-host.mak: $(SRC_PATH)/configure $(SRC_PATH)/pc-bios
71
	@echo $@ is out-of-date, running configure
72 73 74 75 76 77 78 79
	@# 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
80 81
else
config-host.mak:
F
Fam Zheng 已提交
82
ifneq ($(filter-out $(UNCHECKED_GOALS),$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fail))
83 84 85
	@echo "Please call configure before running make!"
	@exit 1
endif
86
endif
B
bellard 已提交
87

F
Fam Zheng 已提交
88 89
include $(SRC_PATH)/rules.mak

90 91 92 93 94
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
95

96
GENERATED_FILES += trace/generated-tcg-tracers.h
97

98 99 100
GENERATED_FILES += trace/generated-helpers-wrappers.h
GENERATED_FILES += trace/generated-helpers.h
GENERATED_FILES += trace/generated-helpers.c
101

102
ifdef CONFIG_TRACE_UST
103 104
GENERATED_FILES += trace-ust-all.h
GENERATED_FILES += trace-ust-all.c
105 106
endif

107
GENERATED_FILES += module_block.h
108

109 110 111 112 113 114 115 116 117 118 119
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

120 121
GENERATED_FILES += $(TRACE_HEADERS)
GENERATED_FILES += $(TRACE_SOURCES)
122
GENERATED_FILES += $(BUILD_DIR)/trace-events-all
123
GENERATED_FILES += .git-submodule-status
124 125 126

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

127 128 129
tracetool-y = $(SRC_PATH)/scripts/tracetool.py
tracetool-y += $(shell find $(SRC_PATH)/scripts/tracetool -name "*.py")

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 225 226 227 228 229 230
%/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

231 232 233 234
KEYCODEMAP_GEN = $(SRC_PATH)/ui/keycodemapdb/tools/keymap-gen
KEYCODEMAP_CSV = $(SRC_PATH)/ui/keycodemapdb/data/keymaps.csv

KEYCODEMAP_FILES = \
235
		 ui/input-keymap-atset1-to-qcode.c \
236
		 ui/input-keymap-linux-to-qcode.c \
237 238 239
		 ui/input-keymap-qcode-to-atset1.c \
		 ui/input-keymap-qcode-to-atset2.c \
		 ui/input-keymap-qcode-to-atset3.c \
240
		 ui/input-keymap-qcode-to-linux.c \
241
		 ui/input-keymap-qcode-to-qnum.c \
242
		 ui/input-keymap-qcode-to-sun.c \
243
		 ui/input-keymap-qnum-to-qcode.c \
244
		 ui/input-keymap-usb-to-qcode.c \
245 246 247 248 249 250
		 ui/input-keymap-win32-to-qcode.c \
		 ui/input-keymap-x11-to-qcode.c \
		 ui/input-keymap-xorgevdev-to-qcode.c \
		 ui/input-keymap-xorgkbd-to-qcode.c \
		 ui/input-keymap-xorgxquartz-to-qcode.c \
		 ui/input-keymap-xorgxwin-to-qcode.c \
251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268
		 $(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

269 270 271 272 273
# Don't try to regenerate Makefile or configure
# We don't generate any of them
Makefile: ;
configure: ;

274
.PHONY: all clean cscope distclean html info install install-doc \
275
	pdf txt recurse-all dist msi FORCE
276

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

J
Juan Quintela 已提交
279
LIBS+=-lz $(LIBS_TOOLS)
280

281 282
HELPERS-$(CONFIG_LINUX) = qemu-bridge-helper$(EXESUF)

283
ifdef BUILD_DOCS
284
DOCS=qemu-doc.html qemu-doc.txt qemu.1 qemu-img.1 qemu-nbd.8 qemu-ga.8
285 286
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
287
DOCS+=docs/qemu-block-drivers.7
288
ifdef CONFIG_VIRTFS
289
DOCS+=fsdev/virtfs-proxy-helper.1
290
endif
291 292 293
else
DOCS=
endif
B
bellard 已提交
294

295
SUBDIR_MAKEFLAGS=BUILD_DIR=$(BUILD_DIR)
296
SUBDIR_DEVICES_MAK=$(patsubst %, %/config-devices.mak, $(TARGET_DIRS))
297
SUBDIR_DEVICES_MAK_DEP=$(patsubst %, %-config-devices.mak.d, $(TARGET_DIRS))
298

299 300
ifeq ($(SUBDIR_DEVICES_MAK),)
config-all-devices.mak:
301
	$(call quiet-command,echo '# no devices' > $@,"GEN","$@")
302
else
303
config-all-devices.mak: $(SUBDIR_DEVICES_MAK)
304 305 306
	$(call quiet-command, sed -n \
             's|^\([^=]*\)=\(.*\)$$|\1:=$$(findstring y,$$(\1)\2)|p' \
             $(SUBDIR_DEVICES_MAK) | sort -u > $@, \
307
             "GEN","$@")
308
endif
309

P
Paul Brook 已提交
310 311
-include $(SUBDIR_DEVICES_MAK_DEP)

312
%/config-devices.mak: default-configs/%.mak $(SRC_PATH)/scripts/make_device_config.sh
313
	$(call quiet-command, \
314
            $(SHELL) $(SRC_PATH)/scripts/make_device_config.sh $< $*-config-devices.mak.d $@ > $@.tmp,"GEN","$@.tmp")
315
	$(call quiet-command, if test -f $@; then \
316
	  if cmp -s $@.old $@; then \
P
Paul Brook 已提交
317 318
	    mv $@.tmp $@; \
	    cp -p $@ $@.old; \
319 320 321 322 323 324
	  else \
	    if test -f $@.old; then \
	      echo "WARNING: $@ (user modified) out of date.";\
	    else \
	      echo "WARNING: $@ out of date.";\
	    fi; \
325
	    echo "Run \"$(MAKE) defconfig\" to regenerate."; \
326 327
	    rm $@.tmp; \
	  fi; \
328
	 else \
329 330
	  mv $@.tmp $@; \
	  cp -p $@ $@.old; \
331
	 fi,"GEN","$@");
332 333 334 335

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

336 337
ifneq ($(wildcard config-host.mak),)
include $(SRC_PATH)/Makefile.objs
338 339 340 341
endif

dummy := $(call unnest-vars,, \
                stub-obj-y \
M
Marc-André Lureau 已提交
342
                chardev-obj-y \
343 344
                util-obj-y \
                qga-obj-y \
345 346
                ivshmem-client-obj-y \
                ivshmem-server-obj-y \
M
Marc-André Lureau 已提交
347
                libvhost-user-obj-y \
348
                vhost-user-scsi-obj-y \
349
                vhost-user-blk-obj-y \
350
                qga-vss-dll-obj-y \
351
                block-obj-y \
352
                block-obj-m \
353 354
                crypto-obj-y \
                crypto-aes-obj-y \
355
                qom-obj-y \
356
                io-obj-y \
357
                common-obj-y \
358 359
                common-obj-m \
                trace-obj-y)
360

361
include $(SRC_PATH)/tests/Makefile.include
362

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

365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382
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)
383 384 385 386 387
	$(call quiet-command, if ! cmp -s $@ $@.tmp; then \
	  mv $@.tmp $@; \
	 else \
	  rm $@.tmp; \
	 fi)
388

389 390
config-host.h: config-host.h-timestamp
config-host.h-timestamp: config-host.mak
391
qemu-options.def: $(SRC_PATH)/qemu-options.hx $(SRC_PATH)/scripts/hxtool
392
	$(call quiet-command,sh $(SRC_PATH)/scripts/hxtool -h < $< > $@,"GEN","$@")
393

394
SUBDIR_RULES=$(patsubst %,subdir-%, $(TARGET_DIRS))
395 396
SOFTMMU_SUBDIR_RULES=$(filter %-softmmu,$(SUBDIR_RULES))

397
$(SOFTMMU_SUBDIR_RULES): $(block-obj-y)
398
$(SOFTMMU_SUBDIR_RULES): $(crypto-obj-y)
399
$(SOFTMMU_SUBDIR_RULES): $(io-obj-y)
400
$(SOFTMMU_SUBDIR_RULES): config-all-devices.mak
401

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

405
DTC_MAKE_ARGS=-I$(SRC_PATH)/dtc VPATH=$(SRC_PATH)/dtc -C dtc V="$(V)" LIBFDT_srcdir=$(SRC_PATH)/dtc/libfdt
406 407
DTC_CFLAGS=$(CFLAGS) $(QEMU_CFLAGS)
DTC_CPPFLAGS=-I$(BUILD_DIR)/dtc -I$(SRC_PATH)/dtc -I$(SRC_PATH)/dtc/libfdt
408

409
subdir-dtc: .git-submodule-status dtc/libfdt dtc/tests
410
	$(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,)
411

412
dtc/%: .git-submodule-status
413 414
	mkdir -p $@

415 416 417 418 419 420 421 422 423 424 425 426 427
# 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
428
	$(call quiet-command,$(MAKE) -C $(SRC_PATH)/capstone CAPSTONE_SHARED=no BUILDDIR="$(BUILD_DIR)/capstone" CC="$(CC)" AR="$(AR)" LD="$(LD)" RANLIB="$(RANLIB)" CFLAGS="$(CAP_CFLAGS)" $(SUBDIR_MAKEFLAGS) $(BUILD_DIR)/capstone/$(LIBCAPSTONE))
429

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

P
Paul Brook 已提交
433
ROMSUBDIR_RULES=$(patsubst %,romsubdir-%, $(ROMS))
434
# Only keep -O and -g cflags
P
Paul Brook 已提交
435
romsubdir-%:
436
	$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C pc-bios/$* V="$(V)" TARGET_DIR="$*/" CFLAGS="$(filter -O% -g%,$(CFLAGS))",)
P
Paul Brook 已提交
437 438 439 440

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

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

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

445
Makefile: $(version-obj-y)
446 447

######################################################################
448
# Build libraries
449

P
Paolo Bonzini 已提交
450
libqemuutil.a: $(util-obj-y) $(trace-obj-y) $(stub-obj-y)
451
libvhost-user.a: $(libvhost-user-obj-y)
452

A
Alon Levy 已提交
453
######################################################################
B
bellard 已提交
454

P
Paolo Bonzini 已提交
455
COMMON_LDADDS = libqemuutil.a
456

J
Juan Quintela 已提交
457
qemu-img.o: qemu-img-cmds.h
458

459 460 461
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)
462

463
qemu-bridge-helper$(EXESUF): qemu-bridge-helper.o $(COMMON_LDADDS)
464

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

467
fsdev/virtfs-proxy-helper$(EXESUF): fsdev/virtfs-proxy-helper.o fsdev/9p-marshal.o fsdev/9p-iov-marshal.o $(COMMON_LDADDS)
468 469
fsdev/virtfs-proxy-helper$(EXESUF): LIBS += -lcap

P
Paolo Bonzini 已提交
470
scsi/qemu-pr-helper$(EXESUF): scsi/qemu-pr-helper.o scsi/utils.o $(crypto-obj-y) $(io-obj-y) $(qom-obj-y) $(COMMON_LDADDS)
471 472 473
ifdef CONFIG_MPATH
scsi/qemu-pr-helper$(EXESUF): LIBS += -ludev -lmultipath -lmpathpersist
endif
P
Paolo Bonzini 已提交
474

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

478
qemu-ga$(EXESUF): LIBS = $(LIBS_QGA)
479
qemu-ga$(EXESUF): QEMU_CFLAGS += -I qga/qapi-generated
480

G
Gerd Hoffmann 已提交
481 482 483
qemu-keymap$(EXESUF): LIBS += $(XKBCOMMON_LIBS)
qemu-keymap$(EXESUF): QEMU_CFLAGS += $(XKBCOMMON_CFLAGS)

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

486 487
qapi-py = $(SRC_PATH)/scripts/qapi.py $(SRC_PATH)/scripts/ordereddict.py

488
qga/qapi-generated/qga-qapi-types.c qga/qapi-generated/qga-qapi-types.h :\
489
$(SRC_PATH)/qga/qapi-schema.json $(SRC_PATH)/scripts/qapi-types.py $(qapi-py)
490
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-types.py \
491
		$(gen-out-type) -o qga/qapi-generated -p "qga-" $<, \
492
		"GEN","$@")
493
qga/qapi-generated/qga-qapi-visit.c qga/qapi-generated/qga-qapi-visit.h :\
494
$(SRC_PATH)/qga/qapi-schema.json $(SRC_PATH)/scripts/qapi-visit.py $(qapi-py)
495
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-visit.py \
496
		$(gen-out-type) -o qga/qapi-generated -p "qga-" $<, \
497
		"GEN","$@")
498
qga/qapi-generated/qga-qmp-commands.h qga/qapi-generated/qga-qmp-marshal.c :\
499
$(SRC_PATH)/qga/qapi-schema.json $(SRC_PATH)/scripts/qapi-commands.py $(qapi-py)
500
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-commands.py \
501
		$(gen-out-type) -o qga/qapi-generated -p "qga-" $<, \
502
		"GEN","$@")
503

504
qapi-modules = $(SRC_PATH)/qapi-schema.json $(SRC_PATH)/qapi/common.json \
505
               $(SRC_PATH)/qapi/block.json $(SRC_PATH)/qapi/block-core.json \
506
               $(SRC_PATH)/qapi/char.json \
507
               $(SRC_PATH)/qapi/crypto.json \
508
               $(SRC_PATH)/qapi/introspect.json \
509
               $(SRC_PATH)/qapi/migration.json \
510
               $(SRC_PATH)/qapi/net.json \
511
               $(SRC_PATH)/qapi/rocker.json \
512
               $(SRC_PATH)/qapi/run-state.json \
513
               $(SRC_PATH)/qapi/sockets.json \
514
               $(SRC_PATH)/qapi/tpm.json \
515
               $(SRC_PATH)/qapi/trace.json \
516
               $(SRC_PATH)/qapi/transaction.json \
517
               $(SRC_PATH)/qapi/ui.json
518

519
qapi-types.c qapi-types.h :\
520
$(qapi-modules) $(SRC_PATH)/scripts/qapi-types.py $(qapi-py)
521
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-types.py \
522
		$(gen-out-type) -o "." -b $<, \
523
		"GEN","$@")
524
qapi-visit.c qapi-visit.h :\
525
$(qapi-modules) $(SRC_PATH)/scripts/qapi-visit.py $(qapi-py)
526
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-visit.py \
527
		$(gen-out-type) -o "." -b $<, \
528
		"GEN","$@")
W
Wenchao Xia 已提交
529 530 531
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 \
532
		$(gen-out-type) -o "." $<, \
533
		"GEN","$@")
534
qmp-commands.h qmp-marshal.c :\
535
$(qapi-modules) $(SRC_PATH)/scripts/qapi-commands.py $(qapi-py)
536
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-commands.py \
537
		$(gen-out-type) -o "." $<, \
538
		"GEN","$@")
539 540 541 542
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 "." $<, \
543
		"GEN","$@")
544

545
QGALIB_GEN=$(addprefix qga/qapi-generated/, qga-qapi-types.h qga-qapi-visit.h qga-qmp-commands.h)
546
$(qga-obj-y): $(QGALIB_GEN)
547

548
qemu-ga$(EXESUF): $(qga-obj-y) $(COMMON_LDADDS)
549
	$(call LINK, $^)
M
Michael Roth 已提交
550

551 552 553
ifdef QEMU_GA_MSI_ENABLED
QEMU_GA_MSI=qemu-ga-$(ARCH).msi

554
msi: $(QEMU_GA_MSI)
555

556
$(QEMU_GA_MSI): qemu-ga.exe $(QGA_VSS_PROVIDER)
557 558 559

$(QEMU_GA_MSI): config-host.mak

560 561
$(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)" \
562
	wixl -o $@ $(QEMU_GA_MSI_ARCH) $(QEMU_GA_MSI_WITH_VSS) $(QEMU_GA_MSI_MINGW_DLL_PATH) $<,"WIXL","$@")
563 564
else
msi:
565
	@echo "MSI build not configured or dependency resolution failed (reconfigure with --enable-guest-agent-msi option)"
566 567
endif

568 569 570 571 572
ifneq ($(EXESUF),)
.PHONY: qemu-ga
qemu-ga: qemu-ga$(EXESUF) $(QGA_VSS_PROVIDER) $(QEMU_GA_MSI)
endif

573
ifdef CONFIG_IVSHMEM
574
ivshmem-client$(EXESUF): $(ivshmem-client-obj-y) $(COMMON_LDADDS)
575
	$(call LINK, $^)
576
ivshmem-server$(EXESUF): $(ivshmem-server-obj-y) $(COMMON_LDADDS)
577
	$(call LINK, $^)
578
endif
579
vhost-user-scsi$(EXESUF): $(vhost-user-scsi-obj-y) libvhost-user.a
580
	$(call LINK, $^)
581 582
vhost-user-blk$(EXESUF): $(vhost-user-blk-obj-y) libvhost-user.a
	$(call LINK, $^)
583

584 585 586
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))), \
587
	"GEN","$@")
588

589
clean:
590
# avoid old build problems by removing potentially incorrect old files
591
	rm -f config.mak op-i386.h opc-i386.h gen-op-i386.h op-arm.h opc-arm.h gen-op-arm.h
592
	rm -f qemu-options.def
593
	rm -f *.msi
594
	find . \( -name '*.so' -o -name '*.dll' -o -name '*.mo' -o -name '*.[oda]' \) -type f -exec rm {} +
595
	rm -f $(filter-out %.tlb,$(TOOLS)) $(HELPERS-y) qemu-ga TAGS cscope.* *.pod *~ */*~
P
Paolo Bonzini 已提交
596
	rm -f fsdev/*.pod scsi/*.pod
B
Blue Swirl 已提交
597
	rm -f qemu-img-cmds.h
598
	rm -f ui/shader/*-vert.h ui/shader/*-frag.h
599
	@# May not be present in GENERATED_FILES
600 601
	rm -f trace/generated-tracers-dtrace.dtrace*
	rm -f trace/generated-tracers-dtrace.h*
602
	rm -f $(foreach f,$(GENERATED_FILES),$(f) $(f)-timestamp)
S
Stefan Weil 已提交
603
	rm -rf qapi-generated
604
	rm -rf qga/qapi-generated
605
	for d in $(ALL_SUBDIRS); do \
M
Magnus Damm 已提交
606
	if test -d $$d; then $(MAKE) -C $$d $@ || exit 1; fi; \
607
	rm -f $$d/qemu-options.def; \
B
bellard 已提交
608
        done
609
	rm -f $(SUBDIR_DEVICES_MAK) config-all-devices.mak
610

611 612 613 614 615 616 617
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 已提交
618
distclean: clean
619
	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
620 621
	rm -f config-all-devices.mak config-all-disas.mak config.status
	rm -f po/*.mo tests/qemu-iotests/common.env
M
Magnus Damm 已提交
622
	rm -f roms/seabios/config.mak roms/vgabios/config.mak
623
	rm -f qemu-doc.info qemu-doc.aux qemu-doc.cp qemu-doc.cps
B
Brad Hards 已提交
624 625
	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
626
	rm -f qemu-doc.vr qemu-doc.txt
627
	rm -f config.log
628
	rm -f linux-headers/asm
629 630 631 632 633 634
	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
635
	rm -f docs/qemu-block-drivers.7
P
Paolo Bonzini 已提交
636
	for d in $(TARGET_DIRS); do \
B
bellard 已提交
637
	rm -rf $$d || exit 1 ; \
B
updated  
bellard 已提交
638
        done
639
	rm -Rf .sdk
E
Ed Maste 已提交
640
	if test -f dtc/version_gen.h; then $(MAKE) $(DTC_MAKE_ARGS) clean; fi
B
bellard 已提交
641

B
bellard 已提交
642 643
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 \
644
common  de-ch  es     fo  fr-ca  hu     ja  mk  nl-be      pt  sl     tr \
J
Jan Krupa 已提交
645
bepo    cz
B
bellard 已提交
646

T
ths 已提交
647
ifdef INSTALL_BLOBS
648
BLOBS=bios.bin bios-256k.bin sgabios.bin vgabios.bin vgabios-cirrus.bin \
649
vgabios-stdvga.bin vgabios-vmware.bin vgabios-qxl.bin vgabios-virtio.bin \
650
acpi-dsdt.aml \
651
ppc_rom.bin openbios-sparc32 openbios-sparc64 openbios-ppc QEMU,tcx.bin QEMU,cgthree.bin \
652 653
pxe-e1000.rom pxe-eepro100.rom pxe-ne2k_pci.rom \
pxe-pcnet.rom pxe-rtl8139.rom pxe-virtio.rom \
654 655
efi-e1000.rom efi-eepro100.rom efi-ne2k_pci.rom \
efi-pcnet.rom efi-rtl8139.rom efi-virtio.rom \
G
Gerd Hoffmann 已提交
656
efi-e1000e.rom efi-vmxnet3.rom \
A
Anthony Liguori 已提交
657
qemu-icon.bmp qemu_logo_no_text.svg \
658
bamboo.dtb petalogix-s3adsp1800.dtb petalogix-ml605.dtb \
659
multiboot.bin linuxboot.bin linuxboot_dma.bin kvmvapic.bin \
660
s390-ccw.img s390-netboot.img \
661
spapr-rtas.bin slof.bin skiboot.lid \
662
palcode-clipper \
663
u-boot.e500 \
664 665
qemu_vga.ndrv \
hppa-firmware.img
T
ths 已提交
666 667 668 669
else
BLOBS=
endif

670
install-doc: $(DOCS)
671
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_docdir)"
672
	$(INSTALL_DATA) qemu-doc.html "$(DESTDIR)$(qemu_docdir)"
673
	$(INSTALL_DATA) qemu-doc.txt "$(DESTDIR)$(qemu_docdir)"
674 675
	$(INSTALL_DATA) docs/interop/qemu-qmp-ref.html "$(DESTDIR)$(qemu_docdir)"
	$(INSTALL_DATA) docs/interop/qemu-qmp-ref.txt "$(DESTDIR)$(qemu_docdir)"
676
ifdef CONFIG_POSIX
677
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man1"
678
	$(INSTALL_DATA) qemu.1 "$(DESTDIR)$(mandir)/man1"
679
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man7"
680
	$(INSTALL_DATA) docs/interop/qemu-qmp-ref.7 "$(DESTDIR)$(mandir)/man7"
681
	$(INSTALL_DATA) docs/qemu-block-drivers.7 "$(DESTDIR)$(mandir)/man7"
682 683
ifneq ($(TOOLS),)
	$(INSTALL_DATA) qemu-img.1 "$(DESTDIR)$(mandir)/man1"
684 685
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man8"
	$(INSTALL_DATA) qemu-nbd.8 "$(DESTDIR)$(mandir)/man8"
686
endif
M
Marc-André Lureau 已提交
687 688
ifneq (,$(findstring qemu-ga,$(TOOLS)))
	$(INSTALL_DATA) qemu-ga.8 "$(DESTDIR)$(mandir)/man8"
689 690 691
	$(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 已提交
692
endif
693
endif
694 695 696 697
ifdef CONFIG_VIRTFS
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man1"
	$(INSTALL_DATA) fsdev/virtfs-proxy-helper.1 "$(DESTDIR)$(mandir)/man1"
endif
698 699 700 701

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

702 703 704 705 706 707 708
install-localstatedir:
ifdef CONFIG_POSIX
ifneq (,$(findstring qemu-ga,$(TOOLS)))
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_localstatedir)"/run
endif
endif

709

710
install: all $(if $(BUILD_DOCS),install-doc) install-datadir install-localstatedir
711
ifneq ($(TOOLS),)
712
	$(call install-prog,$(subst qemu-ga,qemu-ga$(EXESUF),$(TOOLS)),$(DESTDIR)$(bindir))
713
endif
714 715
ifneq ($(CONFIG_MODULES),)
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_moddir)"
716 717
	for s in $(modules-m:.mo=$(DSOSUF)); do \
		t="$(DESTDIR)$(qemu_moddir)/$$(echo $$s | tr / -)"; \
718
		$(INSTALL_LIB) $$s "$$t"; \
719
		test -z "$(STRIP)" || $(STRIP) "$$t"; \
720 721
	done
endif
722
ifneq ($(HELPERS-y),)
723
	$(call install-prog,$(HELPERS-y),$(DESTDIR)$(libexecdir))
724
endif
T
ths 已提交
725 726
ifneq ($(BLOBS),)
	set -e; for x in $(BLOBS); do \
727
		$(INSTALL_DATA) $(SRC_PATH)/pc-bios/$$x "$(DESTDIR)$(qemu_datadir)"; \
P
pbrook 已提交
728
	done
729 730 731
endif
ifeq ($(CONFIG_GTK),y)
	$(MAKE) -C po $@
T
ths 已提交
732
endif
733
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_datadir)/keymaps"
734
	set -e; for x in $(KEYMAPS); do \
735
		$(INSTALL_DATA) $(SRC_PATH)/pc-bios/keymaps/$$x "$(DESTDIR)$(qemu_datadir)/keymaps"; \
P
pbrook 已提交
736
	done
737
	$(INSTALL_DATA) $(BUILD_DIR)/trace-events-all "$(DESTDIR)$(qemu_datadir)/trace-events-all"
B
bellard 已提交
738
	for d in $(TARGET_DIRS); do \
739
	$(MAKE) $(SUBDIR_MAKEFLAGS) TARGET_DIR=$$d/ -C $$d $@ || exit 1 ; \
B
bellard 已提交
740
        done
B
bellard 已提交
741

F
Fam Zheng 已提交
742 743
.PHONY: ctags
ctags:
744
	rm -f tags
F
Fam Zheng 已提交
745 746
	find "$(SRC_PATH)" -name '*.[hc]' -exec ctags --append {} +

A
Alexandre Bique 已提交
747
.PHONY: TAGS
748
TAGS:
749
	rm -f TAGS
D
David Gibson 已提交
750
	find "$(SRC_PATH)" -name '*.[hc]' -exec etags --append {} +
751

B
bellard 已提交
752
cscope:
F
Fam Zheng 已提交
753 754 755
	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 已提交
756

757 758 759 760 761
# 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 $< > $@,\
762
		"VERT","$@")
763 764 765 766 767

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 $< > $@,\
768
		"FRAG","$@")
769

770
ui/shader.o: $(SRC_PATH)/ui/shader.c \
G
Gerd Hoffmann 已提交
771 772 773
	ui/shader/texture-blit-vert.h \
	ui/shader/texture-blit-flip-vert.h \
	ui/shader/texture-blit-frag.h
774

B
bellard 已提交
775
# documentation
776
MAKEINFO=makeinfo
777 778
MAKEINFOINCLUDES= -I docs -I $(<D) -I $(@D)
MAKEINFOFLAGS=--no-split --number-sections $(MAKEINFOINCLUDES)
P
Paolo Bonzini 已提交
779
TEXI2PODFLAGS=$(MAKEINFOINCLUDES) "-DVERSION=$(VERSION)"
780
TEXI2PDFFLAGS=$(if $(V),,--quiet) -I $(SRC_PATH) $(MAKEINFOINCLUDES)
781

782
docs/version.texi: $(SRC_PATH)/VERSION
783 784
	$(call quiet-command,echo "@set VERSION $(VERSION)" > $@,"GEN","$@")

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

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

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

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

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

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

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

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

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

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

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

819
qemu.1: qemu-doc.texi qemu-options.texi qemu-monitor.texi qemu-monitor-info.texi
820
qemu.1: qemu-option-trace.texi
821
qemu-img.1: qemu-img.texi qemu-option-trace.texi qemu-img-cmds.texi
822
fsdev/virtfs-proxy-helper.1: fsdev/virtfs-proxy-helper.texi
823
qemu-nbd.8: qemu-nbd.texi qemu-option-trace.texi
M
Marc-André Lureau 已提交
824
qemu-ga.8: qemu-ga.texi
825
docs/qemu-block-drivers.7: docs/qemu-block-drivers.texi
M
Marc-André Lureau 已提交
826

827 828 829 830
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
831

832
qemu-doc.html qemu-doc.info qemu-doc.pdf qemu-doc.txt: \
833
	qemu-img.texi qemu-nbd.texi qemu-options.texi qemu-option-trace.texi \
834
	qemu-monitor.texi qemu-img-cmds.texi qemu-ga.texi \
835
	qemu-monitor-info.texi docs/qemu-block-drivers.texi
836

837 838 839 840
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
841

842 843 844 845
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
846 847


848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870
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 已提交
871
	$(MAKE) install prefix=${INSTDIR}
872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895
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)" \
896
                -DDISPLAYVERSION="$(VERSION)" \
897 898 899 900 901 902 903
                $(SRC_PATH)/qemu.nsi
	rm -r ${INSTDIR}
ifdef SIGNCODE
	$(SIGNCODE) $(INSTALLER)
endif # SIGNCODE
endif # CONFIG_WIN

904 905
# Add a dependency on the generated files, so that they are always
# rebuilt before other object files
906
ifneq ($(wildcard config-host.mak),)
F
Fam Zheng 已提交
907
ifneq ($(filter-out $(UNCHECKED_GOALS),$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fail))
908
Makefile: $(GENERATED_FILES)
909
endif
910
endif
911

912 913 914 915
.SECONDARY: $(TRACE_HEADERS) $(TRACE_HEADERS:%=%-timestamp) \
	$(TRACE_SOURCES) $(TRACE_SOURCES:%=%-timestamp) \
	$(TRACE_DTRACE) $(TRACE_DTRACE:%=%-timestamp)

B
bellard 已提交
916
# Include automatically generated dependency files
917 918
# Dependencies in Makefile.objs files come from our recursive subdir rules
-include $(wildcard *.d tests/*.d)
F
Fam Zheng 已提交
919 920

include $(SRC_PATH)/tests/docker/Makefile.include
F
Fam Zheng 已提交
921
include $(SRC_PATH)/tests/vm/Makefile.include
922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944

.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 已提交
945
	@echo  '  vm-test         - Help about targets running tests inside VM'
946 947
	@echo  ''
	@echo  'Documentation targets:'
948
	@echo  '  html info pdf txt'
949 950 951 952
	@echo  '                  - Build documentation in specified format'
	@echo  ''
ifdef CONFIG_WIN32
	@echo  'Windows targets:'
953
	@echo  '  installer       - Build NSIS-based installer for QEMU'
954 955 956 957 958
ifdef QEMU_GA_MSI_ENABLED
	@echo  '  msi             - Build MSI-based installer for qemu-ga'
endif
	@echo  ''
endif
959
	@echo  '  $(MAKE) V=0|1 [targets] 0 => quiet build (default), 1 => verbose build'