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
UNCHECKED_GOALS := %clean TAGS cscope ctags docker docker-% help
F
Fam Zheng 已提交
10

11
# All following code might depend on configuration variables
12
ifneq ($(wildcard config-host.mak),)
P
Paul Brook 已提交
13
# Put the all: rule here so that config-host.mak can contain dependencies.
S
Stefan Weil 已提交
14
all:
P
pbrook 已提交
15
include config-host.mak
16

17 18 19 20
git-submodule-update:

.PHONY: git-submodule-update

21 22 23 24 25
git_module_status := $(shell \
  cd '$(SRC_PATH)' && \
  GIT="$(GIT)" ./scripts/git-submodule.sh status $(GIT_SUBMODULES); \
  echo $$?; \
)
26 27

ifeq (1,$(git_module_status))
28 29 30 31 32 33 34 35 36 37
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
38 39
git-submodule-update:
	$(call quiet-command, \
40
          (cd $(SRC_PATH) && GIT="$(GIT)" ./scripts/git-submodule.sh update $(GIT_SUBMODULES)), \
41 42 43 44
          "GIT","$(GIT_SUBMODULES)")
endif
endif

45
.git-submodule-status: git-submodule-update config-host.mak
46

47 48 49 50 51 52
# 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 \
53
"$(MAKE) distclean && rm -rf *-linux-user *-softmmu" in your source tree)
54 55 56
endif
endif

57 58
CONFIG_SOFTMMU := $(if $(filter %-softmmu,$(TARGET_DIRS)),y)
CONFIG_USER_ONLY := $(if $(filter %-user,$(TARGET_DIRS)),y)
59
CONFIG_XEN := $(CONFIG_XEN_BACKEND)
60 61 62 63
CONFIG_ALL=y
-include config-all-devices.mak
-include config-all-disas.mak

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

F
Fam Zheng 已提交
82 83
include $(SRC_PATH)/rules.mak

84 85 86 87 88
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
89

90
GENERATED_FILES += trace/generated-tcg-tracers.h
91

92 93 94
GENERATED_FILES += trace/generated-helpers-wrappers.h
GENERATED_FILES += trace/generated-helpers.h
GENERATED_FILES += trace/generated-helpers.c
95

96
ifdef CONFIG_TRACE_UST
97 98
GENERATED_FILES += trace-ust-all.h
GENERATED_FILES += trace-ust-all.c
99 100
endif

101
GENERATED_FILES += module_block.h
102

103 104 105 106 107 108 109 110 111 112 113
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

114 115
GENERATED_FILES += $(TRACE_HEADERS)
GENERATED_FILES += $(TRACE_SOURCES)
116
GENERATED_FILES += $(BUILD_DIR)/trace-events-all
117
GENERATED_FILES += .git-submodule-status
118 119 120

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

121 122 123
tracetool-y = $(SRC_PATH)/scripts/tracetool.py
tracetool-y += $(shell find $(SRC_PATH)/scripts/tracetool -name "*.py")

124 125 126 127 128 129 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
%/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

225 226 227 228
KEYCODEMAP_GEN = $(SRC_PATH)/ui/keycodemapdb/tools/keymap-gen
KEYCODEMAP_CSV = $(SRC_PATH)/ui/keycodemapdb/data/keymaps.csv

KEYCODEMAP_FILES = \
229 230 231
		 ui/input-keymap-linux-to-qcode.c \
		 ui/input-keymap-qcode-to-qnum.c \
		 ui/input-keymap-qnum-to-qcode.c \
O
Owen Smith 已提交
232
		 ui/input-keymap-qcode-to-linux.c \
233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250
		 $(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

251 252 253 254 255
# Don't try to regenerate Makefile or configure
# We don't generate any of them
Makefile: ;
configure: ;

256
.PHONY: all clean cscope distclean html info install install-doc \
257
	pdf txt recurse-all dist msi FORCE
258

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

J
Juan Quintela 已提交
261
LIBS+=-lz $(LIBS_TOOLS)
262

263 264
HELPERS-$(CONFIG_LINUX) = qemu-bridge-helper$(EXESUF)

265
ifdef BUILD_DOCS
266
DOCS=qemu-doc.html qemu-doc.txt qemu.1 qemu-img.1 qemu-nbd.8 qemu-ga.8
267 268
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
269
DOCS+=docs/qemu-block-drivers.7
270
ifdef CONFIG_VIRTFS
271
DOCS+=fsdev/virtfs-proxy-helper.1
272
endif
273 274 275
else
DOCS=
endif
B
bellard 已提交
276

277
SUBDIR_MAKEFLAGS=$(if $(V),,--no-print-directory) BUILD_DIR=$(BUILD_DIR)
278
SUBDIR_DEVICES_MAK=$(patsubst %, %/config-devices.mak, $(TARGET_DIRS))
279
SUBDIR_DEVICES_MAK_DEP=$(patsubst %, %-config-devices.mak.d, $(TARGET_DIRS))
280

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

P
Paul Brook 已提交
292 293
-include $(SUBDIR_DEVICES_MAK_DEP)

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

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

318 319
ifneq ($(wildcard config-host.mak),)
include $(SRC_PATH)/Makefile.objs
320 321 322 323
endif

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

342
include $(SRC_PATH)/tests/Makefile.include
343

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

346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363
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)
364 365 366 367 368
	$(call quiet-command, if ! cmp -s $@ $@.tmp; then \
	  mv $@.tmp $@; \
	 else \
	  rm $@.tmp; \
	 fi)
369

370 371
config-host.h: config-host.h-timestamp
config-host.h-timestamp: config-host.mak
372
qemu-options.def: $(SRC_PATH)/qemu-options.hx $(SRC_PATH)/scripts/hxtool
373
	$(call quiet-command,sh $(SRC_PATH)/scripts/hxtool -h < $< > $@,"GEN","$@")
374

375
SUBDIR_RULES=$(patsubst %,subdir-%, $(TARGET_DIRS))
376 377
SOFTMMU_SUBDIR_RULES=$(filter %-softmmu,$(SUBDIR_RULES))

378
$(SOFTMMU_SUBDIR_RULES): $(block-obj-y)
379
$(SOFTMMU_SUBDIR_RULES): $(crypto-obj-y)
380
$(SOFTMMU_SUBDIR_RULES): $(io-obj-y)
381
$(SOFTMMU_SUBDIR_RULES): config-all-devices.mak
382

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

386
DTC_MAKE_ARGS=-I$(SRC_PATH)/dtc VPATH=$(SRC_PATH)/dtc -C dtc V="$(V)" LIBFDT_srcdir=$(SRC_PATH)/dtc/libfdt
387 388
DTC_CFLAGS=$(CFLAGS) $(QEMU_CFLAGS)
DTC_CPPFLAGS=-I$(BUILD_DIR)/dtc -I$(SRC_PATH)/dtc -I$(SRC_PATH)/dtc/libfdt
389

390
subdir-dtc: .git-submodule-status dtc/libfdt dtc/tests
391
	$(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,)
392

393
dtc/%: .git-submodule-status
394 395
	mkdir -p $@

396 397 398 399 400 401 402 403 404 405 406 407 408
# 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
409
	$(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))
410

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

P
Paul Brook 已提交
414
ROMSUBDIR_RULES=$(patsubst %,romsubdir-%, $(ROMS))
415
# Only keep -O and -g cflags
P
Paul Brook 已提交
416
romsubdir-%:
417
	$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C pc-bios/$* V="$(V)" TARGET_DIR="$*/" CFLAGS="$(filter -O% -g%,$(CFLAGS))",)
P
Paul Brook 已提交
418 419 420 421

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

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

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

426
Makefile: $(version-obj-y)
427 428

######################################################################
429
# Build libraries
430

P
Paolo Bonzini 已提交
431
libqemuutil.a: $(util-obj-y) $(trace-obj-y) $(stub-obj-y)
432
libvhost-user.a: $(libvhost-user-obj-y)
433

A
Alon Levy 已提交
434
######################################################################
B
bellard 已提交
435

P
Paolo Bonzini 已提交
436
COMMON_LDADDS = libqemuutil.a
437

J
Juan Quintela 已提交
438
qemu-img.o: qemu-img-cmds.h
439

440 441 442
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)
443

444
qemu-bridge-helper$(EXESUF): qemu-bridge-helper.o $(COMMON_LDADDS)
445

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

448
fsdev/virtfs-proxy-helper$(EXESUF): fsdev/virtfs-proxy-helper.o fsdev/9p-marshal.o fsdev/9p-iov-marshal.o $(COMMON_LDADDS)
449 450
fsdev/virtfs-proxy-helper$(EXESUF): LIBS += -lcap

P
Paolo Bonzini 已提交
451
scsi/qemu-pr-helper$(EXESUF): scsi/qemu-pr-helper.o scsi/utils.o $(crypto-obj-y) $(io-obj-y) $(qom-obj-y) $(COMMON_LDADDS)
452 453 454
ifdef CONFIG_MPATH
scsi/qemu-pr-helper$(EXESUF): LIBS += -ludev -lmultipath -lmpathpersist
endif
P
Paolo Bonzini 已提交
455

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

459
qemu-ga$(EXESUF): LIBS = $(LIBS_QGA)
460
qemu-ga$(EXESUF): QEMU_CFLAGS += -I qga/qapi-generated
461

G
Gerd Hoffmann 已提交
462 463 464
qemu-keymap$(EXESUF): LIBS += $(XKBCOMMON_LIBS)
qemu-keymap$(EXESUF): QEMU_CFLAGS += $(XKBCOMMON_CFLAGS)

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

467 468
qapi-py = $(SRC_PATH)/scripts/qapi.py $(SRC_PATH)/scripts/ordereddict.py

469
qga/qapi-generated/qga-qapi-types.c qga/qapi-generated/qga-qapi-types.h :\
470
$(SRC_PATH)/qga/qapi-schema.json $(SRC_PATH)/scripts/qapi-types.py $(qapi-py)
471
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-types.py \
472
		$(gen-out-type) -o qga/qapi-generated -p "qga-" $<, \
473
		"GEN","$@")
474
qga/qapi-generated/qga-qapi-visit.c qga/qapi-generated/qga-qapi-visit.h :\
475
$(SRC_PATH)/qga/qapi-schema.json $(SRC_PATH)/scripts/qapi-visit.py $(qapi-py)
476
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-visit.py \
477
		$(gen-out-type) -o qga/qapi-generated -p "qga-" $<, \
478
		"GEN","$@")
479
qga/qapi-generated/qga-qmp-commands.h qga/qapi-generated/qga-qmp-marshal.c :\
480
$(SRC_PATH)/qga/qapi-schema.json $(SRC_PATH)/scripts/qapi-commands.py $(qapi-py)
481
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-commands.py \
482
		$(gen-out-type) -o qga/qapi-generated -p "qga-" $<, \
483
		"GEN","$@")
484

485
qapi-modules = $(SRC_PATH)/qapi-schema.json $(SRC_PATH)/qapi/common.json \
486
               $(SRC_PATH)/qapi/block.json $(SRC_PATH)/qapi/block-core.json \
487
               $(SRC_PATH)/qapi/char.json \
488
               $(SRC_PATH)/qapi/crypto.json \
489
               $(SRC_PATH)/qapi/introspect.json \
490
               $(SRC_PATH)/qapi/migration.json \
491
               $(SRC_PATH)/qapi/net.json \
492
               $(SRC_PATH)/qapi/rocker.json \
493
               $(SRC_PATH)/qapi/run-state.json \
494
               $(SRC_PATH)/qapi/sockets.json \
495
               $(SRC_PATH)/qapi/tpm.json \
496
               $(SRC_PATH)/qapi/trace.json \
497
               $(SRC_PATH)/qapi/transaction.json \
498
               $(SRC_PATH)/qapi/ui.json
499

500
qapi-types.c qapi-types.h :\
501
$(qapi-modules) $(SRC_PATH)/scripts/qapi-types.py $(qapi-py)
502
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-types.py \
503
		$(gen-out-type) -o "." -b $<, \
504
		"GEN","$@")
505
qapi-visit.c qapi-visit.h :\
506
$(qapi-modules) $(SRC_PATH)/scripts/qapi-visit.py $(qapi-py)
507
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-visit.py \
508
		$(gen-out-type) -o "." -b $<, \
509
		"GEN","$@")
W
Wenchao Xia 已提交
510 511 512
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 \
513
		$(gen-out-type) -o "." $<, \
514
		"GEN","$@")
515
qmp-commands.h qmp-marshal.c :\
516
$(qapi-modules) $(SRC_PATH)/scripts/qapi-commands.py $(qapi-py)
517
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-commands.py \
518
		$(gen-out-type) -o "." $<, \
519
		"GEN","$@")
520 521 522 523
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 "." $<, \
524
		"GEN","$@")
525

526
QGALIB_GEN=$(addprefix qga/qapi-generated/, qga-qapi-types.h qga-qapi-visit.h qga-qmp-commands.h)
527
$(qga-obj-y): $(QGALIB_GEN)
528

529
qemu-ga$(EXESUF): $(qga-obj-y) $(COMMON_LDADDS)
530
	$(call LINK, $^)
M
Michael Roth 已提交
531

532 533 534
ifdef QEMU_GA_MSI_ENABLED
QEMU_GA_MSI=qemu-ga-$(ARCH).msi

535
msi: $(QEMU_GA_MSI)
536

537
$(QEMU_GA_MSI): qemu-ga.exe $(QGA_VSS_PROVIDER)
538 539 540

$(QEMU_GA_MSI): config-host.mak

541 542
$(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)" \
543
	wixl -o $@ $(QEMU_GA_MSI_ARCH) $(QEMU_GA_MSI_WITH_VSS) $(QEMU_GA_MSI_MINGW_DLL_PATH) $<,"WIXL","$@")
544 545
else
msi:
546
	@echo "MSI build not configured or dependency resolution failed (reconfigure with --enable-guest-agent-msi option)"
547 548
endif

549 550 551 552 553
ifneq ($(EXESUF),)
.PHONY: qemu-ga
qemu-ga: qemu-ga$(EXESUF) $(QGA_VSS_PROVIDER) $(QEMU_GA_MSI)
endif

554
ifdef CONFIG_IVSHMEM
555
ivshmem-client$(EXESUF): $(ivshmem-client-obj-y) $(COMMON_LDADDS)
556
	$(call LINK, $^)
557
ivshmem-server$(EXESUF): $(ivshmem-server-obj-y) $(COMMON_LDADDS)
558
	$(call LINK, $^)
559
endif
560
vhost-user-scsi$(EXESUF): $(vhost-user-scsi-obj-y) libvhost-user.a
561
	$(call LINK, $^)
562

563 564 565
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))), \
566
	"GEN","$@")
567

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

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

B
bellard 已提交
621 622
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 \
623
common  de-ch  es     fo  fr-ca  hu     ja  mk  nl-be      pt  sl     tr \
J
Jan Krupa 已提交
624
bepo    cz
B
bellard 已提交
625

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

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

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

680 681 682 683 684 685 686
install-localstatedir:
ifdef CONFIG_POSIX
ifneq (,$(findstring qemu-ga,$(TOOLS)))
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_localstatedir)"/run
endif
endif

687

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

F
Fam Zheng 已提交
720 721
.PHONY: ctags
ctags:
722
	rm -f tags
F
Fam Zheng 已提交
723 724
	find "$(SRC_PATH)" -name '*.[hc]' -exec ctags --append {} +

A
Alexandre Bique 已提交
725
.PHONY: TAGS
726
TAGS:
727
	rm -f TAGS
D
David Gibson 已提交
728
	find "$(SRC_PATH)" -name '*.[hc]' -exec etags --append {} +
729

B
bellard 已提交
730
cscope:
F
Fam Zheng 已提交
731 732 733
	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 已提交
734

735 736 737 738 739
# 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 $< > $@,\
740
		"VERT","$@")
741 742 743 744 745

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 $< > $@,\
746
		"FRAG","$@")
747

748
ui/shader.o: $(SRC_PATH)/ui/shader.c \
G
Gerd Hoffmann 已提交
749 750 751
	ui/shader/texture-blit-vert.h \
	ui/shader/texture-blit-flip-vert.h \
	ui/shader/texture-blit-frag.h
752

B
bellard 已提交
753
# documentation
754
MAKEINFO=makeinfo
755 756
MAKEINFOINCLUDES= -I docs -I $(<D) -I $(@D)
MAKEINFOFLAGS=--no-split --number-sections $(MAKEINFOINCLUDES)
P
Paolo Bonzini 已提交
757
TEXI2PODFLAGS=$(MAKEINFOINCLUDES) "-DVERSION=$(VERSION)"
758
TEXI2PDFFLAGS=$(if $(V),,--quiet) -I $(SRC_PATH) $(MAKEINFOINCLUDES)
759

760
docs/version.texi: $(SRC_PATH)/VERSION
761 762
	$(call quiet-command,echo "@set VERSION $(VERSION)" > $@,"GEN","$@")

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

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

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

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

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

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

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

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

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

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

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

797
qemu.1: qemu-doc.texi qemu-options.texi qemu-monitor.texi qemu-monitor-info.texi
798
qemu.1: qemu-option-trace.texi
799
qemu-img.1: qemu-img.texi qemu-option-trace.texi qemu-img-cmds.texi
800
fsdev/virtfs-proxy-helper.1: fsdev/virtfs-proxy-helper.texi
801
qemu-nbd.8: qemu-nbd.texi qemu-option-trace.texi
M
Marc-André Lureau 已提交
802
qemu-ga.8: qemu-ga.texi
803
docs/qemu-block-drivers.7: docs/qemu-block-drivers.texi
M
Marc-André Lureau 已提交
804

805 806 807 808
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
809

810
qemu-doc.html qemu-doc.info qemu-doc.pdf qemu-doc.txt: \
811
	qemu-img.texi qemu-nbd.texi qemu-options.texi qemu-option-trace.texi \
812
	qemu-monitor.texi qemu-img-cmds.texi qemu-ga.texi \
813
	qemu-monitor-info.texi docs/qemu-block-drivers.texi
814

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

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


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

882 883
# Add a dependency on the generated files, so that they are always
# rebuilt before other object files
884
ifneq ($(wildcard config-host.mak),)
F
Fam Zheng 已提交
885
ifneq ($(filter-out $(UNCHECKED_GOALS),$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fail))
886
Makefile: $(GENERATED_FILES)
887
endif
888
endif
889

890 891 892 893
.SECONDARY: $(TRACE_HEADERS) $(TRACE_HEADERS:%=%-timestamp) \
	$(TRACE_SOURCES) $(TRACE_SOURCES:%=%-timestamp) \
	$(TRACE_DTRACE) $(TRACE_DTRACE:%=%-timestamp)

B
bellard 已提交
894
# Include automatically generated dependency files
895 896
# Dependencies in Makefile.objs files come from our recursive subdir rules
-include $(wildcard *.d tests/*.d)
F
Fam Zheng 已提交
897 898

include $(SRC_PATH)/tests/docker/Makefile.include
F
Fam Zheng 已提交
899
include $(SRC_PATH)/tests/vm/Makefile.include
900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922

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