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

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

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

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
PYTHON_UTF8 = LC_ALL= LANG=C LC_CTYPE=en_US.UTF-8 $(PYTHON)

25 26 27 28
git-submodule-update:

.PHONY: git-submodule-update

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

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

53
.git-submodule-status: git-submodule-update config-host.mak
54

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

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

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

F
Fam Zheng 已提交
90 91
include $(SRC_PATH)/rules.mak

92 93 94 95 96
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
97

98
GENERATED_FILES += trace/generated-tcg-tracers.h
99

100 101 102
GENERATED_FILES += trace/generated-helpers-wrappers.h
GENERATED_FILES += trace/generated-helpers.h
GENERATED_FILES += trace/generated-helpers.c
103

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

109
GENERATED_FILES += module_block.h
110

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

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

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

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

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 231 232
%/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

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

KEYCODEMAP_FILES = \
237
		 ui/input-keymap-atset1-to-qcode.c \
238
		 ui/input-keymap-linux-to-qcode.c \
239 240 241
		 ui/input-keymap-qcode-to-atset1.c \
		 ui/input-keymap-qcode-to-atset2.c \
		 ui/input-keymap-qcode-to-atset3.c \
242
		 ui/input-keymap-qcode-to-linux.c \
243
		 ui/input-keymap-qcode-to-qnum.c \
244
		 ui/input-keymap-qcode-to-sun.c \
245
		 ui/input-keymap-qnum-to-qcode.c \
246
		 ui/input-keymap-usb-to-qcode.c \
247 248 249 250 251 252
		 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 \
253 254 255 256 257 258
		 $(NULL)

GENERATED_FILES += $(KEYCODEMAP_FILES)

ui/input-keymap-%.c: $(KEYCODEMAP_GEN) $(KEYCODEMAP_CSV) $(SRC_PATH)/ui/Makefile.objs
	$(call quiet-command,\
J
Jan Beulich 已提交
259
	    stem=$* && src=$${stem%-to-*} dst=$${stem#*-to-} && \
260 261 262 263 264 265 266 267 268 269
	    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

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

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

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

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

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

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

296
SUBDIR_MAKEFLAGS=$(if $(V),,--no-print-directory --quiet) BUILD_DIR=$(BUILD_DIR)
297
SUBDIR_DEVICES_MAK=$(patsubst %, %/config-devices.mak, $(TARGET_DIRS))
298
SUBDIR_DEVICES_MAK_DEP=$(patsubst %, %-config-devices.mak.d, $(TARGET_DIRS))
299

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

416 417 418 419 420 421 422 423 424 425 426 427 428
# 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
429
	$(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))
430

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

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

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

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

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

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

######################################################################
449
# Build libraries
450

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

555
msi: $(QEMU_GA_MSI)
556

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

$(QEMU_GA_MSI): config-host.mak

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

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

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

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

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

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

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

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

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

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

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

710

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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