Makefile 32.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
GENERATED_FILES += qapi-doc.texi
98

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

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

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

110
GENERATED_FILES += module_block.h
111

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

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

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

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

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 233
%/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

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

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

GENERATED_FILES += $(KEYCODEMAP_FILES)

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

486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505
qapi-py = $(SRC_PATH)/scripts/qapi/commands.py \
$(SRC_PATH)/scripts/qapi/events.py \
$(SRC_PATH)/scripts/qapi/introspect.py \
$(SRC_PATH)/scripts/qapi/types.py \
$(SRC_PATH)/scripts/qapi/visit.py \
$(SRC_PATH)/scripts/qapi/common.py \
$(SRC_PATH)/scripts/qapi/doc.py \
$(SRC_PATH)/scripts/ordereddict.py \
$(SRC_PATH)/scripts/qapi-gen.py

qga/qapi-generated/qga-qapi-types.c qga/qapi-generated/qga-qapi-types.h \
qga/qapi-generated/qga-qapi-visit.c qga/qapi-generated/qga-qapi-visit.h \
qga/qapi-generated/qga-qmp-commands.h qga/qapi-generated/qga-qmp-marshal.c \
qga/qapi-generated/qga-qapi-doc.texi: \
qga/qapi-generated/qapi-gen-timestamp ;
qga/qapi-generated/qapi-gen-timestamp: $(SRC_PATH)/qga/qapi-schema.json $(qapi-py)
	$(call quiet-command,$(PYTHON_UTF8) $(SRC_PATH)/scripts/qapi-gen.py \
		-o qga/qapi-generated -p "qga-" $<, \
		"GEN","$(@:%-timestamp=%)")
	@>$@
506

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

522 523 524 525 526 527 528 529 530 531 532 533
qapi-types.c qapi-types.h \
qapi-visit.c qapi-visit.h \
qmp-commands.h qmp-marshal.c \
qapi-event.c qapi-event.h \
qmp-introspect.h qmp-introspect.c \
qapi-doc.texi: \
qapi-gen-timestamp ;
qapi-gen-timestamp: $(qapi-modules) $(qapi-py)
	$(call quiet-command,$(PYTHON_UTF8) $(SRC_PATH)/scripts/qapi-gen.py \
		-o "." -b $<, \
		"GEN","$(@:%-timestamp=%)")
	@>$@
534

535
QGALIB_GEN=$(addprefix qga/qapi-generated/, qga-qapi-types.h qga-qapi-visit.h qga-qmp-commands.h)
536
$(qga-obj-y): $(QGALIB_GEN)
537

538
qemu-ga$(EXESUF): $(qga-obj-y) $(COMMON_LDADDS)
539
	$(call LINK, $^)
M
Michael Roth 已提交
540

541 542 543
ifdef QEMU_GA_MSI_ENABLED
QEMU_GA_MSI=qemu-ga-$(ARCH).msi

544
msi: $(QEMU_GA_MSI)
545

546
$(QEMU_GA_MSI): qemu-ga.exe $(QGA_VSS_PROVIDER)
547 548 549

$(QEMU_GA_MSI): config-host.mak

550 551
$(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)" \
552
	wixl -o $@ $(QEMU_GA_MSI_ARCH) $(QEMU_GA_MSI_WITH_VSS) $(QEMU_GA_MSI_MINGW_DLL_PATH) $<,"WIXL","$@")
553 554
else
msi:
555
	@echo "MSI build not configured or dependency resolution failed (reconfigure with --enable-guest-agent-msi option)"
556 557
endif

558 559 560 561 562
ifneq ($(EXESUF),)
.PHONY: qemu-ga
qemu-ga: qemu-ga$(EXESUF) $(QGA_VSS_PROVIDER) $(QEMU_GA_MSI)
endif

563
ifdef CONFIG_IVSHMEM
564
ivshmem-client$(EXESUF): $(ivshmem-client-obj-y) $(COMMON_LDADDS)
565
	$(call LINK, $^)
566
ivshmem-server$(EXESUF): $(ivshmem-server-obj-y) $(COMMON_LDADDS)
567
	$(call LINK, $^)
568
endif
569
vhost-user-scsi$(EXESUF): $(vhost-user-scsi-obj-y) libvhost-user.a
570
	$(call LINK, $^)
571 572
vhost-user-blk$(EXESUF): $(vhost-user-blk-obj-y) libvhost-user.a
	$(call LINK, $^)
573

574 575 576
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))), \
577
	"GEN","$@")
578

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

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

B
bellard 已提交
633 634
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 \
635
common  de-ch  es     fo  fr-ca  hu     ja  mk  nl-be      pt  sl     tr \
J
Jan Krupa 已提交
636
bepo    cz
B
bellard 已提交
637

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

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

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

693 694 695 696 697 698 699
install-localstatedir:
ifdef CONFIG_POSIX
ifneq (,$(findstring qemu-ga,$(TOOLS)))
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_localstatedir)"/run
endif
endif

700

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

F
Fam Zheng 已提交
733 734
.PHONY: ctags
ctags:
735
	rm -f tags
F
Fam Zheng 已提交
736 737
	find "$(SRC_PATH)" -name '*.[hc]' -exec ctags --append {} +

A
Alexandre Bique 已提交
738
.PHONY: TAGS
739
TAGS:
740
	rm -f TAGS
D
David Gibson 已提交
741
	find "$(SRC_PATH)" -name '*.[hc]' -exec etags --append {} +
742

B
bellard 已提交
743
cscope:
F
Fam Zheng 已提交
744 745 746
	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 已提交
747

748 749 750 751 752
# 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 $< > $@,\
753
		"VERT","$@")
754 755 756 757 758

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 $< > $@,\
759
		"FRAG","$@")
760

761
ui/shader.o: $(SRC_PATH)/ui/shader.c \
G
Gerd Hoffmann 已提交
762 763 764
	ui/shader/texture-blit-vert.h \
	ui/shader/texture-blit-flip-vert.h \
	ui/shader/texture-blit-frag.h
765

B
bellard 已提交
766
# documentation
767
MAKEINFO=makeinfo
768 769
MAKEINFOINCLUDES= -I docs -I $(<D) -I $(@D)
MAKEINFOFLAGS=--no-split --number-sections $(MAKEINFOINCLUDES)
P
Paolo Bonzini 已提交
770
TEXI2PODFLAGS=$(MAKEINFOINCLUDES) "-DVERSION=$(VERSION)"
771
TEXI2PDFFLAGS=$(if $(V),,--quiet) -I $(SRC_PATH) $(MAKEINFOINCLUDES)
772

773
docs/version.texi: $(SRC_PATH)/VERSION
774 775
	$(call quiet-command,echo "@set VERSION $(VERSION)" > $@,"GEN","$@")

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

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

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

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

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

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

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

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

802 803
docs/interop/qemu-qmp-qapi.texi: qapi-doc.texi
	@cp -p $< $@
804

805 806
docs/interop/qemu-ga-qapi.texi: qga/qapi-generated/qga-qapi-doc.texi
	@cp -p $< $@
807

808
qemu.1: qemu-doc.texi qemu-options.texi qemu-monitor.texi qemu-monitor-info.texi
809
qemu.1: qemu-option-trace.texi
810
qemu-img.1: qemu-img.texi qemu-option-trace.texi qemu-img-cmds.texi
811
fsdev/virtfs-proxy-helper.1: fsdev/virtfs-proxy-helper.texi
812
qemu-nbd.8: qemu-nbd.texi qemu-option-trace.texi
M
Marc-André Lureau 已提交
813
qemu-ga.8: qemu-ga.texi
814
docs/qemu-block-drivers.7: docs/qemu-block-drivers.texi
M
Marc-André Lureau 已提交
815

816 817 818 819
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
820

821
qemu-doc.html qemu-doc.info qemu-doc.pdf qemu-doc.txt: \
822
	qemu-img.texi qemu-nbd.texi qemu-options.texi qemu-option-trace.texi \
823
	qemu-monitor.texi qemu-img-cmds.texi qemu-ga.texi \
824
	qemu-monitor-info.texi docs/qemu-block-drivers.texi
825

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

831 832 833 834
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
835 836


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

893 894
# Add a dependency on the generated files, so that they are always
# rebuilt before other object files
895
ifneq ($(wildcard config-host.mak),)
F
Fam Zheng 已提交
896
ifneq ($(filter-out $(UNCHECKED_GOALS),$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fail))
897
Makefile: $(GENERATED_FILES)
898
endif
899
endif
900

901 902 903 904
.SECONDARY: $(TRACE_HEADERS) $(TRACE_HEADERS:%=%-timestamp) \
	$(TRACE_SOURCES) $(TRACE_SOURCES:%=%-timestamp) \
	$(TRACE_DTRACE) $(TRACE_DTRACE:%=%-timestamp)

B
bellard 已提交
905
# Include automatically generated dependency files
906 907
# Dependencies in Makefile.objs files come from our recursive subdir rules
-include $(wildcard *.d tests/*.d)
F
Fam Zheng 已提交
908 909

include $(SRC_PATH)/tests/docker/Makefile.include
F
Fam Zheng 已提交
910
include $(SRC_PATH)/tests/vm/Makefile.include
911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933

.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 已提交
934
	@echo  '  vm-test         - Help about targets running tests inside VM'
935 936
	@echo  ''
	@echo  'Documentation targets:'
937
	@echo  '  html info pdf txt'
938 939 940 941
	@echo  '                  - Build documentation in specified format'
	@echo  ''
ifdef CONFIG_WIN32
	@echo  'Windows targets:'
942
	@echo  '  installer       - Build NSIS-based installer for QEMU'
943 944 945 946 947
ifdef QEMU_GA_MSI_ENABLED
	@echo  '  msi             - Build MSI-based installer for qemu-ga'
endif
	@echo  ''
endif
948 949
	@echo  '  $(MAKE) [targets]      (quiet build, default)'
	@echo  '  $(MAKE) V=1 [targets]  (verbose build)'