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

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

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

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

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

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

23 24
PYTHON_UTF8 = LC_ALL= LANG=C LC_CTYPE=en_US.UTF-8 $(PYTHON)

25 26 27 28
git-submodule-update:

.PHONY: git-submodule-update

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

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

53
.git-submodule-status: git-submodule-update config-host.mak
54

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

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

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

F
Fam Zheng 已提交
90 91
include $(SRC_PATH)/rules.mak

92
GENERATED_FILES = qemu-version.h config-host.h qemu-options.def
93 94 95 96 97 98 99
GENERATED_FILES += qapi-builtin-types.h qapi-builtin-types.c
GENERATED_FILES += qapi-types.h qapi-types.c
GENERATED_FILES += qapi-builtin-visit.h qapi-builtin-visit.c
GENERATED_FILES += qapi-visit.h qapi-visit.c
GENERATED_FILES += qmp-commands.h qmp-commands.c
GENERATED_FILES += qapi-event.h qapi-event.c
GENERATED_FILES += qmp-introspect.c qmp-introspect.h
100
GENERATED_FILES += qapi-doc.texi
101

102
GENERATED_FILES += trace/generated-tcg-tracers.h
103

104 105 106
GENERATED_FILES += trace/generated-helpers-wrappers.h
GENERATED_FILES += trace/generated-helpers.h
GENERATED_FILES += trace/generated-helpers.c
107

108
ifdef CONFIG_TRACE_UST
109 110
GENERATED_FILES += trace-ust-all.h
GENERATED_FILES += trace-ust-all.c
111 112
endif

113
GENERATED_FILES += module_block.h
114

115 116 117 118 119 120 121 122 123 124 125
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

126 127
GENERATED_FILES += $(TRACE_HEADERS)
GENERATED_FILES += $(TRACE_SOURCES)
128
GENERATED_FILES += $(BUILD_DIR)/trace-events-all
129
GENERATED_FILES += .git-submodule-status
130 131 132

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

133 134 135
tracetool-y = $(SRC_PATH)/scripts/tracetool.py
tracetool-y += $(shell find $(SRC_PATH)/scripts/tracetool -name "*.py")

136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236
%/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

237 238 239 240
KEYCODEMAP_GEN = $(SRC_PATH)/ui/keycodemapdb/tools/keymap-gen
KEYCODEMAP_CSV = $(SRC_PATH)/ui/keycodemapdb/data/keymaps.csv

KEYCODEMAP_FILES = \
241
		 ui/input-keymap-atset1-to-qcode.c \
242
		 ui/input-keymap-linux-to-qcode.c \
243 244 245
		 ui/input-keymap-qcode-to-atset1.c \
		 ui/input-keymap-qcode-to-atset2.c \
		 ui/input-keymap-qcode-to-atset3.c \
246
		 ui/input-keymap-qcode-to-linux.c \
247
		 ui/input-keymap-qcode-to-qnum.c \
248
		 ui/input-keymap-qcode-to-sun.c \
249
		 ui/input-keymap-qnum-to-qcode.c \
250
		 ui/input-keymap-usb-to-qcode.c \
251 252 253 254 255 256
		 ui/input-keymap-win32-to-qcode.c \
		 ui/input-keymap-x11-to-qcode.c \
		 ui/input-keymap-xorgevdev-to-qcode.c \
		 ui/input-keymap-xorgkbd-to-qcode.c \
		 ui/input-keymap-xorgxquartz-to-qcode.c \
		 ui/input-keymap-xorgxwin-to-qcode.c \
257 258 259 260 261 262
		 $(NULL)

GENERATED_FILES += $(KEYCODEMAP_FILES)

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

274 275 276 277 278
# Don't try to regenerate Makefile or configure
# We don't generate any of them
Makefile: ;
configure: ;

279
.PHONY: all clean cscope distclean html info install install-doc \
280
	pdf txt recurse-all dist msi FORCE
281

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

J
Juan Quintela 已提交
284
LIBS+=-lz $(LIBS_TOOLS)
285

286 287
HELPERS-$(CONFIG_LINUX) = qemu-bridge-helper$(EXESUF)

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

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

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

P
Paul Brook 已提交
315 316
-include $(SUBDIR_DEVICES_MAK_DEP)

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

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

341 342
ifneq ($(wildcard config-host.mak),)
include $(SRC_PATH)/Makefile.objs
343 344 345 346
endif

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

366
include $(SRC_PATH)/tests/Makefile.include
367

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

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

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

399
SUBDIR_RULES=$(patsubst %,subdir-%, $(TARGET_DIRS))
400 401
SOFTMMU_SUBDIR_RULES=$(filter %-softmmu,$(SUBDIR_RULES))

402
$(SOFTMMU_SUBDIR_RULES): $(block-obj-y)
403
$(SOFTMMU_SUBDIR_RULES): $(crypto-obj-y)
404
$(SOFTMMU_SUBDIR_RULES): $(io-obj-y)
405
$(SOFTMMU_SUBDIR_RULES): config-all-devices.mak
406

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

410
DTC_MAKE_ARGS=-I$(SRC_PATH)/dtc VPATH=$(SRC_PATH)/dtc -C dtc V="$(V)" LIBFDT_srcdir=$(SRC_PATH)/dtc/libfdt
411 412
DTC_CFLAGS=$(CFLAGS) $(QEMU_CFLAGS)
DTC_CPPFLAGS=-I$(BUILD_DIR)/dtc -I$(SRC_PATH)/dtc -I$(SRC_PATH)/dtc/libfdt
413

414
subdir-dtc: .git-submodule-status dtc/libfdt dtc/tests
415
	$(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,)
416

417
dtc/%: .git-submodule-status
418 419
	mkdir -p $@

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

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

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

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

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

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

450
Makefile: $(version-obj-y)
451 452

######################################################################
453
# Build libraries
454

P
Paolo Bonzini 已提交
455
libqemuutil.a: $(util-obj-y) $(trace-obj-y) $(stub-obj-y)
456
libvhost-user.a: $(libvhost-user-obj-y)
457

A
Alon Levy 已提交
458
######################################################################
B
bellard 已提交
459

P
Paolo Bonzini 已提交
460
COMMON_LDADDS = libqemuutil.a
461

J
Juan Quintela 已提交
462
qemu-img.o: qemu-img-cmds.h
463

464 465 466
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)
467

468
qemu-bridge-helper$(EXESUF): qemu-bridge-helper.o $(COMMON_LDADDS)
469

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

472
fsdev/virtfs-proxy-helper$(EXESUF): fsdev/virtfs-proxy-helper.o fsdev/9p-marshal.o fsdev/9p-iov-marshal.o $(COMMON_LDADDS)
473 474
fsdev/virtfs-proxy-helper$(EXESUF): LIBS += -lcap

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

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

483
qemu-ga$(EXESUF): LIBS = $(LIBS_QGA)
484
qemu-ga$(EXESUF): QEMU_CFLAGS += -I qga/qapi-generated
485

G
Gerd Hoffmann 已提交
486 487 488
qemu-keymap$(EXESUF): LIBS += $(XKBCOMMON_LIBS)
qemu-keymap$(EXESUF): QEMU_CFLAGS += $(XKBCOMMON_CFLAGS)

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

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

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

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

540
QGALIB_GEN=$(addprefix qga/qapi-generated/, qga-qapi-types.h qga-qapi-visit.h qga-qmp-commands.h)
541
$(qga-obj-y): $(QGALIB_GEN)
542

543
qemu-ga$(EXESUF): $(qga-obj-y) $(COMMON_LDADDS)
544
	$(call LINK, $^)
M
Michael Roth 已提交
545

546 547 548
ifdef QEMU_GA_MSI_ENABLED
QEMU_GA_MSI=qemu-ga-$(ARCH).msi

549
msi: $(QEMU_GA_MSI)
550

551
$(QEMU_GA_MSI): qemu-ga.exe $(QGA_VSS_PROVIDER)
552 553 554

$(QEMU_GA_MSI): config-host.mak

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

563 564 565 566 567
ifneq ($(EXESUF),)
.PHONY: qemu-ga
qemu-ga: qemu-ga$(EXESUF) $(QGA_VSS_PROVIDER) $(QEMU_GA_MSI)
endif

568
ifdef CONFIG_IVSHMEM
569
ivshmem-client$(EXESUF): $(ivshmem-client-obj-y) $(COMMON_LDADDS)
570
	$(call LINK, $^)
571
ivshmem-server$(EXESUF): $(ivshmem-server-obj-y) $(COMMON_LDADDS)
572
	$(call LINK, $^)
573
endif
574
vhost-user-scsi$(EXESUF): $(vhost-user-scsi-obj-y) libvhost-user.a
575
	$(call LINK, $^)
576 577
vhost-user-blk$(EXESUF): $(vhost-user-blk-obj-y) libvhost-user.a
	$(call LINK, $^)
578

579 580 581
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))), \
582
	"GEN","$@")
583

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

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

B
bellard 已提交
638 639
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 \
640
common  de-ch  es     fo  fr-ca  hu     ja  mk  nl-be      pt  sl     tr \
J
Jan Krupa 已提交
641
bepo    cz
B
bellard 已提交
642

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

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

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

698 699 700 701 702 703 704
install-localstatedir:
ifdef CONFIG_POSIX
ifneq (,$(findstring qemu-ga,$(TOOLS)))
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_localstatedir)"/run
endif
endif

705

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

F
Fam Zheng 已提交
738 739
.PHONY: ctags
ctags:
740
	rm -f tags
F
Fam Zheng 已提交
741 742
	find "$(SRC_PATH)" -name '*.[hc]' -exec ctags --append {} +

A
Alexandre Bique 已提交
743
.PHONY: TAGS
744
TAGS:
745
	rm -f TAGS
D
David Gibson 已提交
746
	find "$(SRC_PATH)" -name '*.[hc]' -exec etags --append {} +
747

B
bellard 已提交
748
cscope:
F
Fam Zheng 已提交
749 750 751
	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 已提交
752

753 754 755 756 757
# 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 $< > $@,\
758
		"VERT","$@")
759 760 761 762 763

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 $< > $@,\
764
		"FRAG","$@")
765

766
ui/shader.o: $(SRC_PATH)/ui/shader.c \
G
Gerd Hoffmann 已提交
767 768 769
	ui/shader/texture-blit-vert.h \
	ui/shader/texture-blit-flip-vert.h \
	ui/shader/texture-blit-frag.h
770

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

778
docs/version.texi: $(SRC_PATH)/VERSION
779 780
	$(call quiet-command,echo "@set VERSION $(VERSION)" > $@,"GEN","$@")

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

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

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

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

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

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

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

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

807 808
docs/interop/qemu-qmp-qapi.texi: qapi-doc.texi
	@cp -p $< $@
809

810 811
docs/interop/qemu-ga-qapi.texi: qga/qapi-generated/qga-qapi-doc.texi
	@cp -p $< $@
812

813
qemu.1: qemu-doc.texi qemu-options.texi qemu-monitor.texi qemu-monitor-info.texi
814
qemu.1: qemu-option-trace.texi
815
qemu-img.1: qemu-img.texi qemu-option-trace.texi qemu-img-cmds.texi
816
fsdev/virtfs-proxy-helper.1: fsdev/virtfs-proxy-helper.texi
817
qemu-nbd.8: qemu-nbd.texi qemu-option-trace.texi
M
Marc-André Lureau 已提交
818
qemu-ga.8: qemu-ga.texi
819
docs/qemu-block-drivers.7: docs/qemu-block-drivers.texi
M
Marc-André Lureau 已提交
820

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

826
qemu-doc.html qemu-doc.info qemu-doc.pdf qemu-doc.txt: \
827
	qemu-img.texi qemu-nbd.texi qemu-options.texi qemu-option-trace.texi \
828
	qemu-monitor.texi qemu-img-cmds.texi qemu-ga.texi \
829
	qemu-monitor-info.texi docs/qemu-block-drivers.texi
830

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

836 837 838 839
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
840 841


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

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

906 907 908 909
.SECONDARY: $(TRACE_HEADERS) $(TRACE_HEADERS:%=%-timestamp) \
	$(TRACE_SOURCES) $(TRACE_SOURCES:%=%-timestamp) \
	$(TRACE_DTRACE) $(TRACE_DTRACE:%=%-timestamp)

B
bellard 已提交
910
# Include automatically generated dependency files
911 912
# Dependencies in Makefile.objs files come from our recursive subdir rules
-include $(wildcard *.d tests/*.d)
F
Fam Zheng 已提交
913 914

include $(SRC_PATH)/tests/docker/Makefile.include
F
Fam Zheng 已提交
915
include $(SRC_PATH)/tests/vm/Makefile.include
916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938

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