Makefile 32.6 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 24 25 26 27 28 29 30 31 32 33 34 35
git-submodule-update:

.PHONY: git-submodule-update

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

ifeq (1,$(git_module_status))
git-submodule-update:
	$(call quiet-command, \
          (cd $(SRC_PATH) && ./scripts/git-submodule.sh update $(GIT_SUBMODULES)), \
          "GIT","$(GIT_SUBMODULES)")
endif
endif

36
.git-submodule-status: git-submodule-update config-host.mak
37

38 39 40 41 42 43 44 45 46 47
# 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

48 49
CONFIG_SOFTMMU := $(if $(filter %-softmmu,$(TARGET_DIRS)),y)
CONFIG_USER_ONLY := $(if $(filter %-user,$(TARGET_DIRS)),y)
50
CONFIG_XEN := $(CONFIG_XEN_BACKEND)
51 52 53 54
CONFIG_ALL=y
-include config-all-devices.mak
-include config-all-disas.mak

55
config-host.mak: $(SRC_PATH)/configure $(SRC_PATH)/pc-bios
56
	@echo $@ is out-of-date, running configure
57 58 59 60 61 62 63 64
	@# 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
65 66
else
config-host.mak:
F
Fam Zheng 已提交
67
ifneq ($(filter-out $(UNCHECKED_GOALS),$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fail))
68 69 70
	@echo "Please call configure before running make!"
	@exit 1
endif
71
endif
B
bellard 已提交
72

F
Fam Zheng 已提交
73 74
include $(SRC_PATH)/rules.mak

75 76 77 78 79
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
80

81
GENERATED_FILES += trace/generated-tcg-tracers.h
82

83 84 85
GENERATED_FILES += trace/generated-helpers-wrappers.h
GENERATED_FILES += trace/generated-helpers.h
GENERATED_FILES += trace/generated-helpers.c
86

87
ifdef CONFIG_TRACE_UST
88 89
GENERATED_FILES += trace-ust-all.h
GENERATED_FILES += trace-ust-all.c
90 91
endif

92
GENERATED_FILES += module_block.h
93

94 95 96 97 98 99 100 101 102 103 104
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

105 106
GENERATED_FILES += $(TRACE_HEADERS)
GENERATED_FILES += $(TRACE_SOURCES)
107
GENERATED_FILES += $(BUILD_DIR)/trace-events-all
108
GENERATED_FILES += .git-submodule-status
109 110 111

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

112 113 114
tracetool-y = $(SRC_PATH)/scripts/tracetool.py
tracetool-y += $(shell find $(SRC_PATH)/scripts/tracetool -name "*.py")

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

216 217 218 219
KEYCODEMAP_GEN = $(SRC_PATH)/ui/keycodemapdb/tools/keymap-gen
KEYCODEMAP_CSV = $(SRC_PATH)/ui/keycodemapdb/data/keymaps.csv

KEYCODEMAP_FILES = \
220 221 222
		 ui/input-keymap-linux-to-qcode.c \
		 ui/input-keymap-qcode-to-qnum.c \
		 ui/input-keymap-qnum-to-qcode.c \
223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240
		 $(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

241 242 243 244 245
# Don't try to regenerate Makefile or configure
# We don't generate any of them
Makefile: ;
configure: ;

246
.PHONY: all clean cscope distclean html info install install-doc \
247
	pdf txt recurse-all speed test dist msi FORCE
248

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

J
Juan Quintela 已提交
251
LIBS+=-lz $(LIBS_TOOLS)
252

253 254
HELPERS-$(CONFIG_LINUX) = qemu-bridge-helper$(EXESUF)

255
ifdef BUILD_DOCS
256
DOCS=qemu-doc.html qemu-doc.txt qemu.1 qemu-img.1 qemu-nbd.8 qemu-ga.8
257 258
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
259
DOCS+=docs/qemu-block-drivers.7
260
ifdef CONFIG_VIRTFS
261
DOCS+=fsdev/virtfs-proxy-helper.1
262
endif
263 264 265
else
DOCS=
endif
B
bellard 已提交
266

267
SUBDIR_MAKEFLAGS=$(if $(V),,--no-print-directory) BUILD_DIR=$(BUILD_DIR)
268
SUBDIR_DEVICES_MAK=$(patsubst %, %/config-devices.mak, $(TARGET_DIRS))
269
SUBDIR_DEVICES_MAK_DEP=$(patsubst %, %-config-devices.mak.d, $(TARGET_DIRS))
270

271 272
ifeq ($(SUBDIR_DEVICES_MAK),)
config-all-devices.mak:
273
	$(call quiet-command,echo '# no devices' > $@,"GEN","$@")
274
else
275
config-all-devices.mak: $(SUBDIR_DEVICES_MAK)
276 277 278
	$(call quiet-command, sed -n \
             's|^\([^=]*\)=\(.*\)$$|\1:=$$(findstring y,$$(\1)\2)|p' \
             $(SUBDIR_DEVICES_MAK) | sort -u > $@, \
279
             "GEN","$@")
280
endif
281

P
Paul Brook 已提交
282 283
-include $(SUBDIR_DEVICES_MAK_DEP)

284
%/config-devices.mak: default-configs/%.mak $(SRC_PATH)/scripts/make_device_config.sh
285
	$(call quiet-command, \
286
            $(SHELL) $(SRC_PATH)/scripts/make_device_config.sh $< $*-config-devices.mak.d $@ > $@.tmp,"GEN","$@.tmp")
287
	$(call quiet-command, if test -f $@; then \
288
	  if cmp -s $@.old $@; then \
P
Paul Brook 已提交
289 290
	    mv $@.tmp $@; \
	    cp -p $@ $@.old; \
291 292 293 294 295 296 297 298 299
	  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; \
300
	 else \
301 302
	  mv $@.tmp $@; \
	  cp -p $@ $@.old; \
303
	 fi,"GEN","$@");
304 305 306 307

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

308 309
ifneq ($(wildcard config-host.mak),)
include $(SRC_PATH)/Makefile.objs
310 311 312 313
endif

dummy := $(call unnest-vars,, \
                stub-obj-y \
M
Marc-André Lureau 已提交
314
                chardev-obj-y \
315 316
                util-obj-y \
                qga-obj-y \
317 318
                ivshmem-client-obj-y \
                ivshmem-server-obj-y \
M
Marc-André Lureau 已提交
319
                libvhost-user-obj-y \
320
                vhost-user-scsi-obj-y \
321
                qga-vss-dll-obj-y \
322
                block-obj-y \
323
                block-obj-m \
324 325
                crypto-obj-y \
                crypto-aes-obj-y \
326
                qom-obj-y \
327
                io-obj-y \
328
                common-obj-y \
329 330
                common-obj-m \
                trace-obj-y)
331

332
include $(SRC_PATH)/tests/Makefile.include
333

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

336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353
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)
354 355 356 357 358
	$(call quiet-command, if ! cmp -s $@ $@.tmp; then \
	  mv $@.tmp $@; \
	 else \
	  rm $@.tmp; \
	 fi)
359

360 361
config-host.h: config-host.h-timestamp
config-host.h-timestamp: config-host.mak
362
qemu-options.def: $(SRC_PATH)/qemu-options.hx $(SRC_PATH)/scripts/hxtool
363
	$(call quiet-command,sh $(SRC_PATH)/scripts/hxtool -h < $< > $@,"GEN","$@")
364

365
SUBDIR_RULES=$(patsubst %,subdir-%, $(TARGET_DIRS))
366 367
SOFTMMU_SUBDIR_RULES=$(filter %-softmmu,$(SUBDIR_RULES))

368
$(SOFTMMU_SUBDIR_RULES): $(block-obj-y)
369
$(SOFTMMU_SUBDIR_RULES): $(crypto-obj-y)
370
$(SOFTMMU_SUBDIR_RULES): $(io-obj-y)
371
$(SOFTMMU_SUBDIR_RULES): config-all-devices.mak
372

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

376
DTC_MAKE_ARGS=-I$(SRC_PATH)/dtc VPATH=$(SRC_PATH)/dtc -C dtc V="$(V)" LIBFDT_srcdir=$(SRC_PATH)/dtc/libfdt
377 378
DTC_CFLAGS=$(CFLAGS) $(QEMU_CFLAGS)
DTC_CPPFLAGS=-I$(BUILD_DIR)/dtc -I$(SRC_PATH)/dtc -I$(SRC_PATH)/dtc/libfdt
379

380
subdir-dtc: .git-submodule-status dtc/libfdt dtc/tests
381
	$(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,)
382

383
dtc/%: .git-submodule-status
384 385
	mkdir -p $@

386 387 388 389 390 391 392 393 394 395 396 397 398 399 400
# 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 已提交
401
$(SUBDIR_RULES): libqemuutil.a $(common-obj-y) $(chardev-obj-y) \
402
	$(qom-obj-y) $(crypto-aes-obj-$(CONFIG_USER_ONLY))
403

P
Paul Brook 已提交
404
ROMSUBDIR_RULES=$(patsubst %,romsubdir-%, $(ROMS))
405
# Only keep -O and -g cflags
P
Paul Brook 已提交
406
romsubdir-%:
407
	$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C pc-bios/$* V="$(V)" TARGET_DIR="$*/" CFLAGS="$(filter -O% -g%,$(CFLAGS))",)
P
Paul Brook 已提交
408 409 410 411

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

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

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

416
Makefile: $(version-obj-y)
417 418

######################################################################
419
# Build libraries
420

P
Paolo Bonzini 已提交
421
libqemuutil.a: $(util-obj-y) $(trace-obj-y) $(stub-obj-y)
422
libvhost-user.a: $(libvhost-user-obj-y)
423

A
Alon Levy 已提交
424
######################################################################
B
bellard 已提交
425

P
Paolo Bonzini 已提交
426
COMMON_LDADDS = libqemuutil.a
427

J
Juan Quintela 已提交
428
qemu-img.o: qemu-img-cmds.h
429

430 431 432
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)
433

434
qemu-bridge-helper$(EXESUF): qemu-bridge-helper.o $(COMMON_LDADDS)
435

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

438
fsdev/virtfs-proxy-helper$(EXESUF): fsdev/virtfs-proxy-helper.o fsdev/9p-marshal.o fsdev/9p-iov-marshal.o $(COMMON_LDADDS)
439 440
fsdev/virtfs-proxy-helper$(EXESUF): LIBS += -lcap

P
Paolo Bonzini 已提交
441
scsi/qemu-pr-helper$(EXESUF): scsi/qemu-pr-helper.o scsi/utils.o $(crypto-obj-y) $(io-obj-y) $(qom-obj-y) $(COMMON_LDADDS)
442 443 444
ifdef CONFIG_MPATH
scsi/qemu-pr-helper$(EXESUF): LIBS += -ludev -lmultipath -lmpathpersist
endif
P
Paolo Bonzini 已提交
445

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

449
qemu-ga$(EXESUF): LIBS = $(LIBS_QGA)
450
qemu-ga$(EXESUF): QEMU_CFLAGS += -I qga/qapi-generated
451

G
Gerd Hoffmann 已提交
452 453 454
qemu-keymap$(EXESUF): LIBS += $(XKBCOMMON_LIBS)
qemu-keymap$(EXESUF): QEMU_CFLAGS += $(XKBCOMMON_CFLAGS)

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

457 458
qapi-py = $(SRC_PATH)/scripts/qapi.py $(SRC_PATH)/scripts/ordereddict.py

459
qga/qapi-generated/qga-qapi-types.c qga/qapi-generated/qga-qapi-types.h :\
460
$(SRC_PATH)/qga/qapi-schema.json $(SRC_PATH)/scripts/qapi-types.py $(qapi-py)
461
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-types.py \
462
		$(gen-out-type) -o qga/qapi-generated -p "qga-" $<, \
463
		"GEN","$@")
464
qga/qapi-generated/qga-qapi-visit.c qga/qapi-generated/qga-qapi-visit.h :\
465
$(SRC_PATH)/qga/qapi-schema.json $(SRC_PATH)/scripts/qapi-visit.py $(qapi-py)
466
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-visit.py \
467
		$(gen-out-type) -o qga/qapi-generated -p "qga-" $<, \
468
		"GEN","$@")
469
qga/qapi-generated/qga-qmp-commands.h qga/qapi-generated/qga-qmp-marshal.c :\
470
$(SRC_PATH)/qga/qapi-schema.json $(SRC_PATH)/scripts/qapi-commands.py $(qapi-py)
471
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-commands.py \
472
		$(gen-out-type) -o qga/qapi-generated -p "qga-" $<, \
473
		"GEN","$@")
474

475
qapi-modules = $(SRC_PATH)/qapi-schema.json $(SRC_PATH)/qapi/common.json \
476
               $(SRC_PATH)/qapi/block.json $(SRC_PATH)/qapi/block-core.json \
477
               $(SRC_PATH)/qapi/char.json \
478
               $(SRC_PATH)/qapi/crypto.json \
479
               $(SRC_PATH)/qapi/introspect.json \
480
               $(SRC_PATH)/qapi/migration.json \
481
               $(SRC_PATH)/qapi/net.json \
482
               $(SRC_PATH)/qapi/rocker.json \
483
               $(SRC_PATH)/qapi/run-state.json \
484
               $(SRC_PATH)/qapi/sockets.json \
485
               $(SRC_PATH)/qapi/tpm.json \
486
               $(SRC_PATH)/qapi/trace.json \
487
               $(SRC_PATH)/qapi/transaction.json \
488
               $(SRC_PATH)/qapi/ui.json
489

490
qapi-types.c qapi-types.h :\
491
$(qapi-modules) $(SRC_PATH)/scripts/qapi-types.py $(qapi-py)
492
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-types.py \
493
		$(gen-out-type) -o "." -b $<, \
494
		"GEN","$@")
495
qapi-visit.c qapi-visit.h :\
496
$(qapi-modules) $(SRC_PATH)/scripts/qapi-visit.py $(qapi-py)
497
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-visit.py \
498
		$(gen-out-type) -o "." -b $<, \
499
		"GEN","$@")
W
Wenchao Xia 已提交
500 501 502
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 \
503
		$(gen-out-type) -o "." $<, \
504
		"GEN","$@")
505
qmp-commands.h qmp-marshal.c :\
506
$(qapi-modules) $(SRC_PATH)/scripts/qapi-commands.py $(qapi-py)
507
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-commands.py \
508
		$(gen-out-type) -o "." $<, \
509
		"GEN","$@")
510 511 512 513
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 "." $<, \
514
		"GEN","$@")
515

516
QGALIB_GEN=$(addprefix qga/qapi-generated/, qga-qapi-types.h qga-qapi-visit.h qga-qmp-commands.h)
517
$(qga-obj-y): $(QGALIB_GEN)
518

519
qemu-ga$(EXESUF): $(qga-obj-y) $(COMMON_LDADDS)
520
	$(call LINK, $^)
M
Michael Roth 已提交
521

522 523 524
ifdef QEMU_GA_MSI_ENABLED
QEMU_GA_MSI=qemu-ga-$(ARCH).msi

525
msi: $(QEMU_GA_MSI)
526

527
$(QEMU_GA_MSI): qemu-ga.exe $(QGA_VSS_PROVIDER)
528 529 530

$(QEMU_GA_MSI): config-host.mak

531 532
$(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)" \
533
	wixl -o $@ $(QEMU_GA_MSI_ARCH) $(QEMU_GA_MSI_WITH_VSS) $(QEMU_GA_MSI_MINGW_DLL_PATH) $<,"WIXL","$@")
534 535
else
msi:
536
	@echo "MSI build not configured or dependency resolution failed (reconfigure with --enable-guest-agent-msi option)"
537 538
endif

539 540 541 542 543
ifneq ($(EXESUF),)
.PHONY: qemu-ga
qemu-ga: qemu-ga$(EXESUF) $(QGA_VSS_PROVIDER) $(QEMU_GA_MSI)
endif

544
ifdef CONFIG_IVSHMEM
545
ivshmem-client$(EXESUF): $(ivshmem-client-obj-y) $(COMMON_LDADDS)
546
	$(call LINK, $^)
547
ivshmem-server$(EXESUF): $(ivshmem-server-obj-y) $(COMMON_LDADDS)
548
	$(call LINK, $^)
549
endif
550
vhost-user-scsi$(EXESUF): $(vhost-user-scsi-obj-y) libvhost-user.a
551
	$(call LINK, $^)
552

553 554 555
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))), \
556
	"GEN","$@")
557

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

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

B
bellard 已提交
611 612
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 \
613
common  de-ch  es     fo  fr-ca  hu     ja  mk  nl-be      pt  sl     tr \
J
Jan Krupa 已提交
614
bepo    cz
B
bellard 已提交
615

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

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

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

670 671 672 673 674 675 676
install-localstatedir:
ifdef CONFIG_POSIX
ifneq (,$(findstring qemu-ga,$(TOOLS)))
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_localstatedir)"/run
endif
endif

677

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

B
bellard 已提交
710
# various test targets
B
bellard 已提交
711
test speed: all
A
Anthony Liguori 已提交
712
	$(MAKE) -C tests/tcg $@
713

F
Fam Zheng 已提交
714 715
.PHONY: ctags
ctags:
716
	rm -f tags
F
Fam Zheng 已提交
717 718
	find "$(SRC_PATH)" -name '*.[hc]' -exec ctags --append {} +

A
Alexandre Bique 已提交
719
.PHONY: TAGS
720
TAGS:
721
	rm -f TAGS
D
David Gibson 已提交
722
	find "$(SRC_PATH)" -name '*.[hc]' -exec etags --append {} +
723

B
bellard 已提交
724
cscope:
F
Fam Zheng 已提交
725 726 727
	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 已提交
728

729 730 731 732 733
# 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 $< > $@,\
734
		"VERT","$@")
735 736 737 738 739

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 $< > $@,\
740
		"FRAG","$@")
741

742
ui/shader.o: $(SRC_PATH)/ui/shader.c \
G
Gerd Hoffmann 已提交
743 744 745
	ui/shader/texture-blit-vert.h \
	ui/shader/texture-blit-flip-vert.h \
	ui/shader/texture-blit-frag.h
746

B
bellard 已提交
747
# documentation
748
MAKEINFO=makeinfo
749 750
MAKEINFOINCLUDES= -I docs -I $(<D) -I $(@D)
MAKEINFOFLAGS=--no-split --number-sections $(MAKEINFOINCLUDES)
P
Paolo Bonzini 已提交
751
TEXI2PODFLAGS=$(MAKEINFOINCLUDES) "-DVERSION=$(VERSION)"
752
TEXI2PDFFLAGS=$(if $(V),,--quiet) -I $(SRC_PATH) $(MAKEINFOINCLUDES)
753

754
docs/version.texi: $(SRC_PATH)/VERSION
755 756
	$(call quiet-command,echo "@set VERSION $(VERSION)" > $@,"GEN","$@")

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

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

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

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

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

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

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

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

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

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

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

791
qemu.1: qemu-doc.texi qemu-options.texi qemu-monitor.texi qemu-monitor-info.texi
792
qemu.1: qemu-option-trace.texi
793
qemu-img.1: qemu-img.texi qemu-option-trace.texi qemu-img-cmds.texi
794
fsdev/virtfs-proxy-helper.1: fsdev/virtfs-proxy-helper.texi
795
qemu-nbd.8: qemu-nbd.texi qemu-option-trace.texi
M
Marc-André Lureau 已提交
796
qemu-ga.8: qemu-ga.texi
797
docs/qemu-block-drivers.7: docs/qemu-block-drivers.texi
M
Marc-André Lureau 已提交
798

799 800 801 802
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
803

804
qemu-doc.html qemu-doc.info qemu-doc.pdf qemu-doc.txt: \
805
	qemu-img.texi qemu-nbd.texi qemu-options.texi qemu-option-trace.texi \
806
	qemu-monitor.texi qemu-img-cmds.texi qemu-ga.texi \
807
	qemu-monitor-info.texi docs/qemu-block-drivers.texi
808

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

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


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

876 877
# Add a dependency on the generated files, so that they are always
# rebuilt before other object files
878
ifneq ($(wildcard config-host.mak),)
F
Fam Zheng 已提交
879
ifneq ($(filter-out $(UNCHECKED_GOALS),$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fail))
880
Makefile: $(GENERATED_FILES)
881
endif
882
endif
883

884 885 886 887
.SECONDARY: $(TRACE_HEADERS) $(TRACE_HEADERS:%=%-timestamp) \
	$(TRACE_SOURCES) $(TRACE_SOURCES:%=%-timestamp) \
	$(TRACE_DTRACE) $(TRACE_DTRACE:%=%-timestamp)

B
bellard 已提交
888
# Include automatically generated dependency files
889 890
# Dependencies in Makefile.objs files come from our recursive subdir rules
-include $(wildcard *.d tests/*.d)
F
Fam Zheng 已提交
891 892

include $(SRC_PATH)/tests/docker/Makefile.include
F
Fam Zheng 已提交
893
include $(SRC_PATH)/tests/vm/Makefile.include
894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916

.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 已提交
917
	@echo  '  vm-test         - Help about targets running tests inside VM'
918 919
	@echo  ''
	@echo  'Documentation targets:'
920
	@echo  '  html info pdf txt'
921 922 923 924
	@echo  '                  - Build documentation in specified format'
	@echo  ''
ifdef CONFIG_WIN32
	@echo  'Windows targets:'
925
	@echo  '  installer       - Build NSIS-based installer for QEMU'
926 927 928 929 930 931
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'