Makefile 33.8 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 259 260 261 262 263 264 265 266 267 268 269 270
		 $(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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

######################################################################
450
# Build libraries
451

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

556
msi: $(QEMU_GA_MSI)
557

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

$(QEMU_GA_MSI): config-host.mak

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

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

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

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

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

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

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

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

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

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

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

711

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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