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-qnum.c \
241
		 ui/input-keymap-qcode-to-sun.c \
242
		 ui/input-keymap-qnum-to-qcode.c \
O
Owen Smith 已提交
243
		 ui/input-keymap-qcode-to-linux.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 664
u-boot.e500 \
qemu_vga.ndrv
T
ths 已提交
665 666 667 668
else
BLOBS=
endif

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

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

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

708

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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