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=.

F
Fam Zheng 已提交
9
UNCHECKED_GOALS := %clean TAGS cscope ctags docker docker-%
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 21 22 23
git-submodule-update:

.PHONY: git-submodule-update

ifeq (0,$(MAKELEVEL))
  git_module_status := $(shell \
    cd '$(SRC_PATH)' && \
24
    GIT="$(GIT)" ./scripts/git-submodule.sh status $(GIT_SUBMODULES); \
25 26 27 28
    echo $$?; \
  )

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

47
.git-submodule-status: git-submodule-update config-host.mak
48

49 50 51 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 \
"make distclean && rm -rf *-linux-user *-softmmu" in your source tree)
endif
endif

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

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

F
Fam Zheng 已提交
84 85
include $(SRC_PATH)/rules.mak

86 87 88 89 90
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
91

92
GENERATED_FILES += trace/generated-tcg-tracers.h
93

94 95 96
GENERATED_FILES += trace/generated-helpers-wrappers.h
GENERATED_FILES += trace/generated-helpers.h
GENERATED_FILES += trace/generated-helpers.c
97

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

103
GENERATED_FILES += module_block.h
104

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

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

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

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

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 225 226
%/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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

397 398 399 400 401 402 403 404 405 406 407 408 409 410 411
# 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
	$(call quiet-command,$(MAKE) -C $(SRC_PATH)/capstone CAPSTONE_SHARED=no BUILDDIR="$(BUILD_DIR)/capstone" CC="$(CC)" AR="$(AR)" LD="$(LD)" CFLAGS="$(CAP_CFLAGS)" $(SUBDIR_MAKEFLAGS) $(BUILD_DIR)/capstone/$(LIBCAPSTONE))

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

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

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

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

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

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

######################################################################
430
# Build libraries
431

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

536
msi: $(QEMU_GA_MSI)
537

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

$(QEMU_GA_MSI): config-host.mak

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

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

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

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

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

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

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

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

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

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

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

688

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

B
bellard 已提交
721
# various test targets
B
bellard 已提交
722
test speed: all
A
Anthony Liguori 已提交
723
	$(MAKE) -C tests/tcg $@
724

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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