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

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

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

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

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

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

23 24 25 26
git-submodule-update:

.PHONY: git-submodule-update

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

ifeq (1,$(git_module_status))
34 35 36 37 38 39 40 41 42 43
ifeq (no,$(GIT_UPDATE))
git-submodule-update:
	$(call quiet-command, \
            echo && \
            echo "GIT submodule checkout is out of date. Please run" && \
            echo "  scripts/git-submodule.sh update $(GIT_SUBMODULES)" && \
            echo "from the source directory checkout $(SRC_PATH)" && \
            echo && \
            exit 1)
else
44 45
git-submodule-update:
	$(call quiet-command, \
46
          (cd $(SRC_PATH) && GIT="$(GIT)" ./scripts/git-submodule.sh update $(GIT_SUBMODULES)), \
47 48 49 50
          "GIT","$(GIT_SUBMODULES)")
endif
endif

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

53 54 55 56 57 58
# Check that we're not trying to do an out-of-tree build from
# a tree that's been used for an in-tree build.
ifneq ($(realpath $(SRC_PATH)),$(realpath .))
ifneq ($(wildcard $(SRC_PATH)/config-host.mak),)
$(error This is an out of tree build but your source tree ($(SRC_PATH)) \
seems to have been used for an in-tree build. You can fix this by running \
59
"$(MAKE) distclean && rm -rf *-linux-user *-softmmu" in your source tree)
60 61 62
endif
endif

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

70
config-host.mak: $(SRC_PATH)/configure $(SRC_PATH)/pc-bios
71
	@echo $@ is out-of-date, running configure
72 73 74 75 76 77 78 79
	@# TODO: The next lines include code which supports a smooth
	@# transition from old configurations without config.status.
	@# This code can be removed after QEMU 1.7.
	@if test -x config.status; then \
	    ./config.status; \
        else \
	    sed -n "/.*Configured with/s/[^:]*: //p" $@ | sh; \
	fi
80 81
else
config-host.mak:
F
Fam Zheng 已提交
82
ifneq ($(filter-out $(UNCHECKED_GOALS),$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fail))
83 84 85
	@echo "Please call configure before running make!"
	@exit 1
endif
86
endif
B
bellard 已提交
87

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

90 91 92 93 94
GENERATED_FILES = qemu-version.h config-host.h qemu-options.def
GENERATED_FILES += qmp-commands.h qapi-types.h qapi-visit.h qapi-event.h
GENERATED_FILES += qmp-marshal.c qapi-types.c qapi-visit.c qapi-event.c
GENERATED_FILES += qmp-introspect.h
GENERATED_FILES += qmp-introspect.c
95

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

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

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

107
GENERATED_FILES += module_block.h
108

109 110 111 112 113 114 115 116 117 118 119
TRACE_HEADERS = trace-root.h $(trace-events-subdirs:%=%/trace.h)
TRACE_SOURCES = trace-root.c $(trace-events-subdirs:%=%/trace.c)
TRACE_DTRACE =
ifdef CONFIG_TRACE_DTRACE
TRACE_HEADERS += trace-dtrace-root.h $(trace-events-subdirs:%=%/trace-dtrace.h)
TRACE_DTRACE += trace-dtrace-root.dtrace $(trace-events-subdirs:%=%/trace-dtrace.dtrace)
endif
ifdef CONFIG_TRACE_UST
TRACE_HEADERS += trace-ust-root.h $(trace-events-subdirs:%=%/trace-ust.h)
endif

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

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

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

130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230
%/trace.h: %/trace.h-timestamp
	@cmp $< $@ >/dev/null 2>&1 || cp $< $@
%/trace.h-timestamp: $(SRC_PATH)/%/trace-events $(tracetool-y)
	$(call quiet-command,$(TRACETOOL) \
		--group=$(call trace-group-name,$@) \
		--format=h \
		--backends=$(TRACE_BACKENDS) \
		$< > $@,"GEN","$(@:%-timestamp=%)")

%/trace.c: %/trace.c-timestamp
	@cmp $< $@ >/dev/null 2>&1 || cp $< $@
%/trace.c-timestamp: $(SRC_PATH)/%/trace-events $(tracetool-y)
	$(call quiet-command,$(TRACETOOL) \
		--group=$(call trace-group-name,$@) \
		--format=c \
		--backends=$(TRACE_BACKENDS) \
		$< > $@,"GEN","$(@:%-timestamp=%)")

%/trace-ust.h: %/trace-ust.h-timestamp
	@cmp $< $@ >/dev/null 2>&1 || cp $< $@
%/trace-ust.h-timestamp: $(SRC_PATH)/%/trace-events $(tracetool-y)
	$(call quiet-command,$(TRACETOOL) \
		--group=$(call trace-group-name,$@) \
		--format=ust-events-h \
		--backends=$(TRACE_BACKENDS) \
		$< > $@,"GEN","$(@:%-timestamp=%)")

%/trace-dtrace.dtrace: %/trace-dtrace.dtrace-timestamp
	@cmp $< $@ >/dev/null 2>&1 || cp $< $@
%/trace-dtrace.dtrace-timestamp: $(SRC_PATH)/%/trace-events $(BUILD_DIR)/config-host.mak $(tracetool-y)
	$(call quiet-command,$(TRACETOOL) \
		--group=$(call trace-group-name,$@) \
		--format=d \
		--backends=$(TRACE_BACKENDS) \
		$< > $@,"GEN","$(@:%-timestamp=%)")

%/trace-dtrace.h: %/trace-dtrace.dtrace $(tracetool-y)
	$(call quiet-command,dtrace -o $@ -h -s $<, "GEN","$@")

%/trace-dtrace.o: %/trace-dtrace.dtrace $(tracetool-y)


trace-root.h: trace-root.h-timestamp
	@cmp $< $@ >/dev/null 2>&1 || cp $< $@
trace-root.h-timestamp: $(SRC_PATH)/trace-events $(tracetool-y)
	$(call quiet-command,$(TRACETOOL) \
		--group=root \
		--format=h \
		--backends=$(TRACE_BACKENDS) \
		$< > $@,"GEN","$(@:%-timestamp=%)")

trace-root.c: trace-root.c-timestamp
	@cmp $< $@ >/dev/null 2>&1 || cp $< $@
trace-root.c-timestamp: $(SRC_PATH)/trace-events $(tracetool-y)
	$(call quiet-command,$(TRACETOOL) \
		--group=root \
		--format=c \
		--backends=$(TRACE_BACKENDS) \
		$< > $@,"GEN","$(@:%-timestamp=%)")

trace-ust-root.h: trace-ust-root.h-timestamp
	@cmp $< $@ >/dev/null 2>&1 || cp $< $@
trace-ust-root.h-timestamp: $(SRC_PATH)/trace-events $(tracetool-y)
	$(call quiet-command,$(TRACETOOL) \
		--group=root \
		--format=ust-events-h \
		--backends=$(TRACE_BACKENDS) \
		$< > $@,"GEN","$(@:%-timestamp=%)")

trace-ust-all.h: trace-ust-all.h-timestamp
	@cmp $< $@ >/dev/null 2>&1 || cp $< $@
trace-ust-all.h-timestamp: $(trace-events-files) $(tracetool-y)
	$(call quiet-command,$(TRACETOOL) \
		--group=all \
		--format=ust-events-h \
		--backends=$(TRACE_BACKENDS) \
		$(trace-events-files) > $@,"GEN","$(@:%-timestamp=%)")

trace-ust-all.c: trace-ust-all.c-timestamp
	@cmp $< $@ >/dev/null 2>&1 || cp $< $@
trace-ust-all.c-timestamp: $(trace-events-files) $(tracetool-y)
	$(call quiet-command,$(TRACETOOL) \
		--group=all \
		--format=ust-events-c \
		--backends=$(TRACE_BACKENDS) \
		$(trace-events-files) > $@,"GEN","$(@:%-timestamp=%)")

trace-dtrace-root.dtrace: trace-dtrace-root.dtrace-timestamp
	@cmp $< $@ >/dev/null 2>&1 || cp $< $@
trace-dtrace-root.dtrace-timestamp: $(SRC_PATH)/trace-events $(BUILD_DIR)/config-host.mak $(tracetool-y)
	$(call quiet-command,$(TRACETOOL) \
		--group=root \
		--format=d \
		--backends=$(TRACE_BACKENDS) \
		$< > $@,"GEN","$(@:%-timestamp=%)")

trace-dtrace-root.h: trace-dtrace-root.dtrace
	$(call quiet-command,dtrace -o $@ -h -s $<, "GEN","$@")

trace-dtrace-root.o: trace-dtrace-root.dtrace

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

KEYCODEMAP_FILES = \
235 236 237
		 ui/input-keymap-linux-to-qcode.c \
		 ui/input-keymap-qcode-to-qnum.c \
		 ui/input-keymap-qnum-to-qcode.c \
O
Owen Smith 已提交
238
		 ui/input-keymap-qcode-to-linux.c \
239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256
		 $(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

257 258 259 260 261
# Don't try to regenerate Makefile or configure
# We don't generate any of them
Makefile: ;
configure: ;

262
.PHONY: all clean cscope distclean html info install install-doc \
263
	pdf txt recurse-all dist msi FORCE
264

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

J
Juan Quintela 已提交
267
LIBS+=-lz $(LIBS_TOOLS)
268

269 270
HELPERS-$(CONFIG_LINUX) = qemu-bridge-helper$(EXESUF)

271
ifdef BUILD_DOCS
272
DOCS=qemu-doc.html qemu-doc.txt qemu.1 qemu-img.1 qemu-nbd.8 qemu-ga.8
273 274
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
275
DOCS+=docs/qemu-block-drivers.7
276
ifdef CONFIG_VIRTFS
277
DOCS+=fsdev/virtfs-proxy-helper.1
278
endif
279 280 281
else
DOCS=
endif
B
bellard 已提交
282

283
SUBDIR_MAKEFLAGS=BUILD_DIR=$(BUILD_DIR)
284
SUBDIR_DEVICES_MAK=$(patsubst %, %/config-devices.mak, $(TARGET_DIRS))
285
SUBDIR_DEVICES_MAK_DEP=$(patsubst %, %-config-devices.mak.d, $(TARGET_DIRS))
286

287 288
ifeq ($(SUBDIR_DEVICES_MAK),)
config-all-devices.mak:
289
	$(call quiet-command,echo '# no devices' > $@,"GEN","$@")
290
else
291
config-all-devices.mak: $(SUBDIR_DEVICES_MAK)
292 293 294
	$(call quiet-command, sed -n \
             's|^\([^=]*\)=\(.*\)$$|\1:=$$(findstring y,$$(\1)\2)|p' \
             $(SUBDIR_DEVICES_MAK) | sort -u > $@, \
295
             "GEN","$@")
296
endif
297

P
Paul Brook 已提交
298 299
-include $(SUBDIR_DEVICES_MAK_DEP)

300
%/config-devices.mak: default-configs/%.mak $(SRC_PATH)/scripts/make_device_config.sh
301
	$(call quiet-command, \
302
            $(SHELL) $(SRC_PATH)/scripts/make_device_config.sh $< $*-config-devices.mak.d $@ > $@.tmp,"GEN","$@.tmp")
303
	$(call quiet-command, if test -f $@; then \
304
	  if cmp -s $@.old $@; then \
P
Paul Brook 已提交
305 306
	    mv $@.tmp $@; \
	    cp -p $@ $@.old; \
307 308 309 310 311 312
	  else \
	    if test -f $@.old; then \
	      echo "WARNING: $@ (user modified) out of date.";\
	    else \
	      echo "WARNING: $@ out of date.";\
	    fi; \
313
	    echo "Run \"$(MAKE) defconfig\" to regenerate."; \
314 315
	    rm $@.tmp; \
	  fi; \
316
	 else \
317 318
	  mv $@.tmp $@; \
	  cp -p $@ $@.old; \
319
	 fi,"GEN","$@");
320 321 322 323

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

324 325
ifneq ($(wildcard config-host.mak),)
include $(SRC_PATH)/Makefile.objs
326 327 328 329
endif

dummy := $(call unnest-vars,, \
                stub-obj-y \
M
Marc-André Lureau 已提交
330
                chardev-obj-y \
331 332
                util-obj-y \
                qga-obj-y \
333 334
                ivshmem-client-obj-y \
                ivshmem-server-obj-y \
M
Marc-André Lureau 已提交
335
                libvhost-user-obj-y \
336
                vhost-user-scsi-obj-y \
337
                qga-vss-dll-obj-y \
338
                block-obj-y \
339
                block-obj-m \
340 341
                crypto-obj-y \
                crypto-aes-obj-y \
342
                qom-obj-y \
343
                io-obj-y \
344
                common-obj-y \
345 346
                common-obj-m \
                trace-obj-y)
347

348
include $(SRC_PATH)/tests/Makefile.include
349

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

352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369
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)
370 371 372 373 374
	$(call quiet-command, if ! cmp -s $@ $@.tmp; then \
	  mv $@.tmp $@; \
	 else \
	  rm $@.tmp; \
	 fi)
375

376 377
config-host.h: config-host.h-timestamp
config-host.h-timestamp: config-host.mak
378
qemu-options.def: $(SRC_PATH)/qemu-options.hx $(SRC_PATH)/scripts/hxtool
379
	$(call quiet-command,sh $(SRC_PATH)/scripts/hxtool -h < $< > $@,"GEN","$@")
380

381
SUBDIR_RULES=$(patsubst %,subdir-%, $(TARGET_DIRS))
382 383
SOFTMMU_SUBDIR_RULES=$(filter %-softmmu,$(SUBDIR_RULES))

384
$(SOFTMMU_SUBDIR_RULES): $(block-obj-y)
385
$(SOFTMMU_SUBDIR_RULES): $(crypto-obj-y)
386
$(SOFTMMU_SUBDIR_RULES): $(io-obj-y)
387
$(SOFTMMU_SUBDIR_RULES): config-all-devices.mak
388

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

392
DTC_MAKE_ARGS=-I$(SRC_PATH)/dtc VPATH=$(SRC_PATH)/dtc -C dtc V="$(V)" LIBFDT_srcdir=$(SRC_PATH)/dtc/libfdt
393 394
DTC_CFLAGS=$(CFLAGS) $(QEMU_CFLAGS)
DTC_CPPFLAGS=-I$(BUILD_DIR)/dtc -I$(SRC_PATH)/dtc -I$(SRC_PATH)/dtc/libfdt
395

396
subdir-dtc: .git-submodule-status dtc/libfdt dtc/tests
397
	$(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,)
398

399
dtc/%: .git-submodule-status
400 401
	mkdir -p $@

402 403 404 405 406 407 408 409 410 411 412 413 414
# 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
415
	$(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))
416

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

P
Paul Brook 已提交
420
ROMSUBDIR_RULES=$(patsubst %,romsubdir-%, $(ROMS))
421
# Only keep -O and -g cflags
P
Paul Brook 已提交
422
romsubdir-%:
423
	$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C pc-bios/$* V="$(V)" TARGET_DIR="$*/" CFLAGS="$(filter -O% -g%,$(CFLAGS))",)
P
Paul Brook 已提交
424 425 426 427

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

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

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

432
Makefile: $(version-obj-y)
433 434

######################################################################
435
# Build libraries
436

P
Paolo Bonzini 已提交
437
libqemuutil.a: $(util-obj-y) $(trace-obj-y) $(stub-obj-y)
438
libvhost-user.a: $(libvhost-user-obj-y)
439

A
Alon Levy 已提交
440
######################################################################
B
bellard 已提交
441

P
Paolo Bonzini 已提交
442
COMMON_LDADDS = libqemuutil.a
443

J
Juan Quintela 已提交
444
qemu-img.o: qemu-img-cmds.h
445

446 447 448
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)
449

450
qemu-bridge-helper$(EXESUF): qemu-bridge-helper.o $(COMMON_LDADDS)
451

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

454
fsdev/virtfs-proxy-helper$(EXESUF): fsdev/virtfs-proxy-helper.o fsdev/9p-marshal.o fsdev/9p-iov-marshal.o $(COMMON_LDADDS)
455 456
fsdev/virtfs-proxy-helper$(EXESUF): LIBS += -lcap

P
Paolo Bonzini 已提交
457
scsi/qemu-pr-helper$(EXESUF): scsi/qemu-pr-helper.o scsi/utils.o $(crypto-obj-y) $(io-obj-y) $(qom-obj-y) $(COMMON_LDADDS)
458 459 460
ifdef CONFIG_MPATH
scsi/qemu-pr-helper$(EXESUF): LIBS += -ludev -lmultipath -lmpathpersist
endif
P
Paolo Bonzini 已提交
461

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

465
qemu-ga$(EXESUF): LIBS = $(LIBS_QGA)
466
qemu-ga$(EXESUF): QEMU_CFLAGS += -I qga/qapi-generated
467

G
Gerd Hoffmann 已提交
468 469 470
qemu-keymap$(EXESUF): LIBS += $(XKBCOMMON_LIBS)
qemu-keymap$(EXESUF): QEMU_CFLAGS += $(XKBCOMMON_CFLAGS)

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

473 474
qapi-py = $(SRC_PATH)/scripts/qapi.py $(SRC_PATH)/scripts/ordereddict.py

475
qga/qapi-generated/qga-qapi-types.c qga/qapi-generated/qga-qapi-types.h :\
476
$(SRC_PATH)/qga/qapi-schema.json $(SRC_PATH)/scripts/qapi-types.py $(qapi-py)
477
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-types.py \
478
		$(gen-out-type) -o qga/qapi-generated -p "qga-" $<, \
479
		"GEN","$@")
480
qga/qapi-generated/qga-qapi-visit.c qga/qapi-generated/qga-qapi-visit.h :\
481
$(SRC_PATH)/qga/qapi-schema.json $(SRC_PATH)/scripts/qapi-visit.py $(qapi-py)
482
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-visit.py \
483
		$(gen-out-type) -o qga/qapi-generated -p "qga-" $<, \
484
		"GEN","$@")
485
qga/qapi-generated/qga-qmp-commands.h qga/qapi-generated/qga-qmp-marshal.c :\
486
$(SRC_PATH)/qga/qapi-schema.json $(SRC_PATH)/scripts/qapi-commands.py $(qapi-py)
487
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-commands.py \
488
		$(gen-out-type) -o qga/qapi-generated -p "qga-" $<, \
489
		"GEN","$@")
490

491
qapi-modules = $(SRC_PATH)/qapi-schema.json $(SRC_PATH)/qapi/common.json \
492
               $(SRC_PATH)/qapi/block.json $(SRC_PATH)/qapi/block-core.json \
493
               $(SRC_PATH)/qapi/char.json \
494
               $(SRC_PATH)/qapi/crypto.json \
495
               $(SRC_PATH)/qapi/introspect.json \
496
               $(SRC_PATH)/qapi/migration.json \
497
               $(SRC_PATH)/qapi/net.json \
498
               $(SRC_PATH)/qapi/rocker.json \
499
               $(SRC_PATH)/qapi/run-state.json \
500
               $(SRC_PATH)/qapi/sockets.json \
501
               $(SRC_PATH)/qapi/tpm.json \
502
               $(SRC_PATH)/qapi/trace.json \
503
               $(SRC_PATH)/qapi/transaction.json \
504
               $(SRC_PATH)/qapi/ui.json
505

506
qapi-types.c qapi-types.h :\
507
$(qapi-modules) $(SRC_PATH)/scripts/qapi-types.py $(qapi-py)
508
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-types.py \
509
		$(gen-out-type) -o "." -b $<, \
510
		"GEN","$@")
511
qapi-visit.c qapi-visit.h :\
512
$(qapi-modules) $(SRC_PATH)/scripts/qapi-visit.py $(qapi-py)
513
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-visit.py \
514
		$(gen-out-type) -o "." -b $<, \
515
		"GEN","$@")
W
Wenchao Xia 已提交
516 517 518
qapi-event.c qapi-event.h :\
$(qapi-modules) $(SRC_PATH)/scripts/qapi-event.py $(qapi-py)
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-event.py \
519
		$(gen-out-type) -o "." $<, \
520
		"GEN","$@")
521
qmp-commands.h qmp-marshal.c :\
522
$(qapi-modules) $(SRC_PATH)/scripts/qapi-commands.py $(qapi-py)
523
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-commands.py \
524
		$(gen-out-type) -o "." $<, \
525
		"GEN","$@")
526 527 528 529
qmp-introspect.h qmp-introspect.c :\
$(qapi-modules) $(SRC_PATH)/scripts/qapi-introspect.py $(qapi-py)
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-introspect.py \
		$(gen-out-type) -o "." $<, \
530
		"GEN","$@")
531

532
QGALIB_GEN=$(addprefix qga/qapi-generated/, qga-qapi-types.h qga-qapi-visit.h qga-qmp-commands.h)
533
$(qga-obj-y): $(QGALIB_GEN)
534

535
qemu-ga$(EXESUF): $(qga-obj-y) $(COMMON_LDADDS)
536
	$(call LINK, $^)
M
Michael Roth 已提交
537

538 539 540
ifdef QEMU_GA_MSI_ENABLED
QEMU_GA_MSI=qemu-ga-$(ARCH).msi

541
msi: $(QEMU_GA_MSI)
542

543
$(QEMU_GA_MSI): qemu-ga.exe $(QGA_VSS_PROVIDER)
544 545 546

$(QEMU_GA_MSI): config-host.mak

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

555 556 557 558 559
ifneq ($(EXESUF),)
.PHONY: qemu-ga
qemu-ga: qemu-ga$(EXESUF) $(QGA_VSS_PROVIDER) $(QEMU_GA_MSI)
endif

560
ifdef CONFIG_IVSHMEM
561
ivshmem-client$(EXESUF): $(ivshmem-client-obj-y) $(COMMON_LDADDS)
562
	$(call LINK, $^)
563
ivshmem-server$(EXESUF): $(ivshmem-server-obj-y) $(COMMON_LDADDS)
564
	$(call LINK, $^)
565
endif
566
vhost-user-scsi$(EXESUF): $(vhost-user-scsi-obj-y) libvhost-user.a
567
	$(call LINK, $^)
568

569 570 571
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))), \
572
	"GEN","$@")
573

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

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

B
bellard 已提交
627 628
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 \
629
common  de-ch  es     fo  fr-ca  hu     ja  mk  nl-be      pt  sl     tr \
J
Jan Krupa 已提交
630
bepo    cz
B
bellard 已提交
631

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

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

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

686 687 688 689 690 691 692
install-localstatedir:
ifdef CONFIG_POSIX
ifneq (,$(findstring qemu-ga,$(TOOLS)))
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_localstatedir)"/run
endif
endif

693

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

F
Fam Zheng 已提交
726 727
.PHONY: ctags
ctags:
728
	rm -f tags
F
Fam Zheng 已提交
729 730
	find "$(SRC_PATH)" -name '*.[hc]' -exec ctags --append {} +

A
Alexandre Bique 已提交
731
.PHONY: TAGS
732
TAGS:
733
	rm -f TAGS
D
David Gibson 已提交
734
	find "$(SRC_PATH)" -name '*.[hc]' -exec etags --append {} +
735

B
bellard 已提交
736
cscope:
F
Fam Zheng 已提交
737 738 739
	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 已提交
740

741 742 743 744 745
# 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 $< > $@,\
746
		"VERT","$@")
747 748 749 750 751

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 $< > $@,\
752
		"FRAG","$@")
753

754
ui/shader.o: $(SRC_PATH)/ui/shader.c \
G
Gerd Hoffmann 已提交
755 756 757
	ui/shader/texture-blit-vert.h \
	ui/shader/texture-blit-flip-vert.h \
	ui/shader/texture-blit-frag.h
758

B
bellard 已提交
759
# documentation
760
MAKEINFO=makeinfo
761 762
MAKEINFOINCLUDES= -I docs -I $(<D) -I $(@D)
MAKEINFOFLAGS=--no-split --number-sections $(MAKEINFOINCLUDES)
P
Paolo Bonzini 已提交
763
TEXI2PODFLAGS=$(MAKEINFOINCLUDES) "-DVERSION=$(VERSION)"
764
TEXI2PDFFLAGS=$(if $(V),,--quiet) -I $(SRC_PATH) $(MAKEINFOINCLUDES)
765

766
docs/version.texi: $(SRC_PATH)/VERSION
767 768
	$(call quiet-command,echo "@set VERSION $(VERSION)" > $@,"GEN","$@")

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

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

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

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

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

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

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

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

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

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

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

803
qemu.1: qemu-doc.texi qemu-options.texi qemu-monitor.texi qemu-monitor-info.texi
804
qemu.1: qemu-option-trace.texi
805
qemu-img.1: qemu-img.texi qemu-option-trace.texi qemu-img-cmds.texi
806
fsdev/virtfs-proxy-helper.1: fsdev/virtfs-proxy-helper.texi
807
qemu-nbd.8: qemu-nbd.texi qemu-option-trace.texi
M
Marc-André Lureau 已提交
808
qemu-ga.8: qemu-ga.texi
809
docs/qemu-block-drivers.7: docs/qemu-block-drivers.texi
M
Marc-André Lureau 已提交
810

811 812 813 814
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
815

816
qemu-doc.html qemu-doc.info qemu-doc.pdf qemu-doc.txt: \
817
	qemu-img.texi qemu-nbd.texi qemu-options.texi qemu-option-trace.texi \
818
	qemu-monitor.texi qemu-img-cmds.texi qemu-ga.texi \
819
	qemu-monitor-info.texi docs/qemu-block-drivers.texi
820

821 822 823 824
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
825

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


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

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

896 897 898 899
.SECONDARY: $(TRACE_HEADERS) $(TRACE_HEADERS:%=%-timestamp) \
	$(TRACE_SOURCES) $(TRACE_SOURCES:%=%-timestamp) \
	$(TRACE_DTRACE) $(TRACE_DTRACE:%=%-timestamp)

B
bellard 已提交
900
# Include automatically generated dependency files
901 902
# Dependencies in Makefile.objs files come from our recursive subdir rules
-include $(wildcard *.d tests/*.d)
F
Fam Zheng 已提交
903 904

include $(SRC_PATH)/tests/docker/Makefile.include
F
Fam Zheng 已提交
905
include $(SRC_PATH)/tests/vm/Makefile.include
906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928

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