Makefile 17.1 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

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

# 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

22 23 24 25 26 27
CONFIG_SOFTMMU := $(if $(filter %-softmmu,$(TARGET_DIRS)),y)
CONFIG_USER_ONLY := $(if $(filter %-user,$(TARGET_DIRS)),y)
CONFIG_ALL=y
-include config-all-devices.mak
-include config-all-disas.mak

A
aliguori 已提交
28
include $(SRC_PATH)/rules.mak
29
config-host.mak: $(SRC_PATH)/configure
30 31
	@echo $@ is out-of-date, running configure
	@sed -n "/.*Configured with/s/[^:]*: //p" $@ | sh
32 33
else
config-host.mak:
34
ifneq ($(filter-out %clean,$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fail))
35 36 37
	@echo "Please call configure before running make!"
	@exit 1
endif
38
endif
B
bellard 已提交
39

40 41 42 43
GENERATED_HEADERS = config-host.h qemu-options.def
GENERATED_HEADERS += qmp-commands.h qapi-types.h qapi-visit.h
GENERATED_SOURCES += qmp-marshal.c qapi-types.c qapi-visit.c

44 45 46
GENERATED_HEADERS += trace/generated-events.h
GENERATED_SOURCES += trace/generated-events.c

47
GENERATED_HEADERS += trace/generated-tracers.h
48
ifeq ($(TRACE_BACKEND),dtrace)
49
GENERATED_HEADERS += trace/generated-tracers-dtrace.h
50
endif
51
GENERATED_SOURCES += trace/generated-tracers.c
52

53 54 55 56 57
# Don't try to regenerate Makefile or configure
# We don't generate any of them
Makefile: ;
configure: ;

58
.PHONY: all clean cscope distclean dvi html info install install-doc \
59
	pdf recurse-all speed test dist
60

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

J
Juan Quintela 已提交
63
LIBS+=-lz $(LIBS_TOOLS)
64

65 66
HELPERS-$(CONFIG_LINUX) = qemu-bridge-helper$(EXESUF)

67
ifdef BUILD_DOCS
68
DOCS=qemu-doc.html qemu-tech.html qemu.1 qemu-img.1 qemu-nbd.8 qmp-commands.txt
69
ifdef CONFIG_VIRTFS
70
DOCS+=fsdev/virtfs-proxy-helper.1
71
endif
72 73 74
else
DOCS=
endif
B
bellard 已提交
75

76
SUBDIR_MAKEFLAGS=$(if $(V),,--no-print-directory) BUILD_DIR=$(BUILD_DIR)
77
SUBDIR_DEVICES_MAK=$(patsubst %, %/config-devices.mak, $(TARGET_DIRS))
78
SUBDIR_DEVICES_MAK_DEP=$(patsubst %, %-config-devices.mak.d, $(TARGET_DIRS))
79

80 81 82 83
ifeq ($(SUBDIR_DEVICES_MAK),)
config-all-devices.mak:
	$(call quiet-command,echo '# no devices' > $@,"  GEN   $@")
else
84
config-all-devices.mak: $(SUBDIR_DEVICES_MAK)
85 86 87 88
	$(call quiet-command, sed -n \
             's|^\([^=]*\)=\(.*\)$$|\1:=$$(findstring y,$$(\1)\2)|p' \
             $(SUBDIR_DEVICES_MAK) | sort -u > $@, \
             "  GEN   $@")
89
endif
90

P
Paul Brook 已提交
91 92
-include $(SUBDIR_DEVICES_MAK_DEP)

93
%/config-devices.mak: default-configs/%.mak
B
Blue Swirl 已提交
94
	$(call quiet-command,$(SHELL) $(SRC_PATH)/scripts/make_device_config.sh $@ $<, "  GEN   $@")
95
	@if test -f $@; then \
96
	  if cmp -s $@.old $@; then \
P
Paul Brook 已提交
97 98
	    mv $@.tmp $@; \
	    cp -p $@ $@.old; \
99 100 101 102 103 104 105 106 107
	  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; \
108
	 else \
109 110
	  mv $@.tmp $@; \
	  cp -p $@ $@.old; \
111 112 113 114 115
	 fi

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

116 117 118 119 120 121 122 123
ifneq ($(wildcard config-host.mak),)
include $(SRC_PATH)/Makefile.objs
include $(SRC_PATH)/tests/Makefile
endif
ifeq ($(CONFIG_SMARTCARD_NSS),y)
include $(SRC_PATH)/libcacard/Makefile
endif

S
Stefan Weil 已提交
124
all: $(DOCS) $(TOOLS) $(HELPERS-y) recurse-all
P
pbrook 已提交
125

126 127
config-host.h: config-host.h-timestamp
config-host.h-timestamp: config-host.mak
B
Blue Swirl 已提交
128
qemu-options.def: $(SRC_PATH)/qemu-options.hx
B
Blue Swirl 已提交
129
	$(call quiet-command,sh $(SRC_PATH)/scripts/hxtool -h < $< > $@,"  GEN   $@")
130

131
SUBDIR_RULES=$(patsubst %,subdir-%, $(TARGET_DIRS))
132 133 134
SOFTMMU_SUBDIR_RULES=$(filter %-softmmu,$(SUBDIR_RULES))

$(SOFTMMU_SUBDIR_RULES): config-all-devices.mak
135

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

139 140 141 142
subdir-pixman: pixman/Makefile
	$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C pixman V="$(V)" all,)

pixman/Makefile: $(SRC_PATH)/pixman/configure
143
	(cd pixman; CFLAGS="$(CFLAGS) -fPIC $(extra_cflags) $(extra_ldflags)" $(SRC_PATH)/pixman/configure $(AUTOCONF_HOST) --disable-gtk --disable-shared --enable-static)
144 145 146 147

$(SRC_PATH)/pixman/configure:
	(cd $(SRC_PATH)/pixman; autoreconf -v --install)

148
DTC_MAKE_ARGS=-I$(SRC_PATH)/dtc VPATH=$(SRC_PATH)/dtc -C dtc V="$(V)" LIBFDT_srcdir=$(SRC_PATH)/dtc/libfdt
149 150
DTC_CFLAGS=$(CFLAGS) $(QEMU_CFLAGS)
DTC_CPPFLAGS=-I$(BUILD_DIR)/dtc -I$(SRC_PATH)/dtc -I$(SRC_PATH)/dtc/libfdt
151 152

subdir-dtc:dtc/libfdt dtc/tests
153
	$(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,)
154 155 156 157

dtc/%:
	mkdir -p $@

P
Paolo Bonzini 已提交
158
$(SUBDIR_RULES): libqemuutil.a libqemustub.a $(common-obj-y)
159

P
Paul Brook 已提交
160 161 162 163 164 165 166
ROMSUBDIR_RULES=$(patsubst %,romsubdir-%, $(ROMS))
romsubdir-%:
	$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C pc-bios/$* V="$(V)" TARGET_DIR="$*/",)

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

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

J
Juan Quintela 已提交
168
bt-host.o: QEMU_CFLAGS += $(BLUEZ_CFLAGS)
B
bellard 已提交
169

170
$(BUILD_DIR)/version.o: $(SRC_PATH)/version.rc $(BUILD_DIR)/config-host.h | $(BUILD_DIR)/version.lo
171
	$(call quiet-command,$(WINDRES) -I$(BUILD_DIR) -o $@ $<,"  RC    version.o")
172
$(BUILD_DIR)/version.lo: $(SRC_PATH)/version.rc $(BUILD_DIR)/config-host.h
173
	$(call quiet-command,$(WINDRES) -I$(BUILD_DIR) -o $@ $<,"  RC    version.lo")
174

P
Paolo Bonzini 已提交
175
Makefile: $(version-obj-y) $(version-lobj-y)
176 177

######################################################################
178
# Build libraries
179 180

libqemustub.a: $(stub-obj-y)
181
libqemuutil.a: $(util-obj-y) qapi-types.o qapi-visit.o
182

A
Alon Levy 已提交
183
######################################################################
B
bellard 已提交
184

J
Juan Quintela 已提交
185
qemu-img.o: qemu-img-cmds.h
186

187 188
qemu-img$(EXESUF): qemu-img.o $(block-obj-y) libqemuutil.a libqemustub.a
qemu-nbd$(EXESUF): qemu-nbd.o $(block-obj-y) libqemuutil.a libqemustub.a
189
qemu-io$(EXESUF): qemu-io.o $(block-obj-y) libqemuutil.a libqemustub.a
190

191 192
qemu-bridge-helper$(EXESUF): qemu-bridge-helper.o

193
fsdev/virtfs-proxy-helper$(EXESUF): fsdev/virtfs-proxy-helper.o fsdev/virtio-9p-marshal.o libqemuutil.a libqemustub.a
194 195
fsdev/virtfs-proxy-helper$(EXESUF): LIBS += -lcap

196
qemu-img-cmds.h: $(SRC_PATH)/qemu-img-cmds.hx
B
Blue Swirl 已提交
197
	$(call quiet-command,sh $(SRC_PATH)/scripts/hxtool -h < $< > $@,"  GEN   $@")
198

199
qemu-ga$(EXESUF): LIBS = $(LIBS_QGA)
200
qemu-ga$(EXESUF): QEMU_CFLAGS += -I qga/qapi-generated
201

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

204 205
qapi-py = $(SRC_PATH)/scripts/qapi.py $(SRC_PATH)/scripts/ordereddict.py

206
qga/qapi-generated/qga-qapi-types.c qga/qapi-generated/qga-qapi-types.h :\
207
$(SRC_PATH)/qga/qapi-schema.json $(SRC_PATH)/scripts/qapi-types.py $(qapi-py)
208 209
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-types.py $(gen-out-type) -o qga/qapi-generated -p "qga-" < $<, "  GEN   $@")
qga/qapi-generated/qga-qapi-visit.c qga/qapi-generated/qga-qapi-visit.h :\
210
$(SRC_PATH)/qga/qapi-schema.json $(SRC_PATH)/scripts/qapi-visit.py $(qapi-py)
211 212
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-visit.py $(gen-out-type) -o qga/qapi-generated -p "qga-" < $<, "  GEN   $@")
qga/qapi-generated/qga-qmp-commands.h qga/qapi-generated/qga-qmp-marshal.c :\
213
$(SRC_PATH)/qga/qapi-schema.json $(SRC_PATH)/scripts/qapi-commands.py $(qapi-py)
214
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-commands.py $(gen-out-type) -o qga/qapi-generated -p "qga-" < $<, "  GEN   $@")
215

216
qapi-types.c qapi-types.h :\
217
$(SRC_PATH)/qapi-schema.json $(SRC_PATH)/scripts/qapi-types.py $(qapi-py)
218
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-types.py $(gen-out-type) -o "." -b < $<, "  GEN   $@")
219
qapi-visit.c qapi-visit.h :\
220
$(SRC_PATH)/qapi-schema.json $(SRC_PATH)/scripts/qapi-visit.py $(qapi-py)
221
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-visit.py $(gen-out-type) -o "." -b < $<, "  GEN   $@")
222
qmp-commands.h qmp-marshal.c :\
223
$(SRC_PATH)/qapi-schema.json $(SRC_PATH)/scripts/qapi-commands.py $(qapi-py)
224
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-commands.py $(gen-out-type) -m -o "." < $<, "  GEN   $@")
225

226
QGALIB_GEN=$(addprefix qga/qapi-generated/, qga-qapi-types.h qga-qapi-visit.h qga-qmp-commands.h)
227
$(qga-obj-y) qemu-ga.o: $(QGALIB_GEN)
228

229
qemu-ga$(EXESUF): $(qga-obj-y) libqemuutil.a libqemustub.a
230
	$(call LINK, $^)
M
Michael Roth 已提交
231

232
clean:
233
# avoid old build problems by removing potentially incorrect old files
234
	rm -f config.mak op-i386.h opc-i386.h gen-op-i386.h op-arm.h opc-arm.h gen-op-arm.h
235
	rm -f qemu-options.def
236 237
	find . -name '*.[oda]' -type f -exec rm -f {} +
	find . -name '*.l[oa]' -type f -exec rm -f {} +
238
	rm -f $(filter-out %.tlb,$(TOOLS)) $(HELPERS-y) qemu-ga TAGS cscope.* *.pod *~ */*~
239 240
	rm -f fsdev/*.pod
	rm -rf .libs */.libs
B
Blue Swirl 已提交
241
	rm -f qemu-img-cmds.h
242
	@# May not be present in GENERATED_HEADERS
243 244
	rm -f trace/generated-tracers-dtrace.dtrace*
	rm -f trace/generated-tracers-dtrace.h*
245 246
	rm -f $(foreach f,$(GENERATED_HEADERS),$(f) $(f)-timestamp)
	rm -f $(foreach f,$(GENERATED_SOURCES),$(f) $(f)-timestamp)
S
Stefan Weil 已提交
247
	rm -rf qapi-generated
248
	rm -rf qga/qapi-generated
249
	for d in $(ALL_SUBDIRS); do \
M
Magnus Damm 已提交
250
	if test -d $$d; then $(MAKE) -C $$d $@ || exit 1; fi; \
251
	rm -f $$d/qemu-options.def; \
B
bellard 已提交
252
        done
253

254 255 256 257 258 259 260
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 已提交
261
distclean: clean
M
Magnus Damm 已提交
262
	rm -f config-host.mak config-host.h* config-host.ld $(DOCS) qemu-options.texi qemu-img-cmds.texi qemu-monitor.texi
263
	rm -f config-all-devices.mak config-all-disas.mak
264
	rm -f po/*.mo
M
Magnus Damm 已提交
265
	rm -f roms/seabios/config.mak roms/vgabios/config.mak
B
Brad Hards 已提交
266 267 268 269
	rm -f qemu-doc.info qemu-doc.aux qemu-doc.cp qemu-doc.cps qemu-doc.dvi
	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
	rm -f qemu-doc.vr
270
	rm -f config.log
271
	rm -f linux-headers/asm
272
	rm -f qemu-tech.info qemu-tech.aux qemu-tech.cp qemu-tech.dvi qemu-tech.fn qemu-tech.info qemu-tech.ky qemu-tech.log qemu-tech.pdf qemu-tech.pg qemu-tech.toc qemu-tech.tp qemu-tech.vr
P
Paolo Bonzini 已提交
273
	for d in $(TARGET_DIRS); do \
B
bellard 已提交
274
	rm -rf $$d || exit 1 ; \
B
updated  
bellard 已提交
275
        done
276
	rm -Rf .sdk
277
	if test -f pixman/config.log; then make -C pixman distclean; fi
278
	if test -f dtc/version_gen.h; then make $(DTC_MAKE_ARGS) clean; fi
B
bellard 已提交
279

B
bellard 已提交
280 281
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 \
282 283
common  de-ch  es     fo  fr-ca  hu     ja  mk  nl-be      pt  sl     tr \
bepo
B
bellard 已提交
284

T
ths 已提交
285
ifdef INSTALL_BLOBS
P
Paolo Bonzini 已提交
286
BLOBS=bios.bin sgabios.bin vgabios.bin vgabios-cirrus.bin \
G
Gerd Hoffmann 已提交
287
vgabios-stdvga.bin vgabios-vmware.bin vgabios-qxl.bin \
288
acpi-dsdt.aml q35-acpi-dsdt.aml \
289
ppc_rom.bin openbios-sparc32 openbios-sparc64 openbios-ppc \
290 291
pxe-e1000.rom pxe-eepro100.rom pxe-ne2k_pci.rom \
pxe-pcnet.rom pxe-rtl8139.rom pxe-virtio.rom \
292 293
efi-e1000.rom efi-eepro100.rom efi-ne2k_pci.rom \
efi-pcnet.rom efi-rtl8139.rom efi-virtio.rom \
A
Anthony Liguori 已提交
294
qemu-icon.bmp qemu_logo_no_text.svg \
295
bamboo.dtb petalogix-s3adsp1800.dtb petalogix-ml605.dtb \
J
Jan Kiszka 已提交
296
multiboot.bin linuxboot.bin kvmvapic.bin \
297
s390-zipl.rom \
298
s390-ccw.img \
299 300
spapr-rtas.bin slof.bin \
palcode-clipper
T
ths 已提交
301 302 303 304
else
BLOBS=
endif

305
install-doc: $(DOCS)
306 307
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_docdir)"
	$(INSTALL_DATA) qemu-doc.html  qemu-tech.html "$(DESTDIR)$(qemu_docdir)"
308
	$(INSTALL_DATA) qmp-commands.txt "$(DESTDIR)$(qemu_docdir)"
309
ifdef CONFIG_POSIX
310
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man1"
311 312 313
	$(INSTALL_DATA) qemu.1 "$(DESTDIR)$(mandir)/man1"
ifneq ($(TOOLS),)
	$(INSTALL_DATA) qemu-img.1 "$(DESTDIR)$(mandir)/man1"
314 315
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man8"
	$(INSTALL_DATA) qemu-nbd.8 "$(DESTDIR)$(mandir)/man8"
316
endif
317
endif
318 319 320 321
ifdef CONFIG_VIRTFS
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man1"
	$(INSTALL_DATA) fsdev/virtfs-proxy-helper.1 "$(DESTDIR)$(mandir)/man1"
endif
322 323 324 325

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

326 327 328 329 330 331 332
install-localstatedir:
ifdef CONFIG_POSIX
ifneq (,$(findstring qemu-ga,$(TOOLS)))
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_localstatedir)"/run
endif
endif

333
install-confdir:
334
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_confdir)"
335 336

install-sysconfig: install-datadir install-confdir
337
	$(INSTALL_DATA) $(SRC_PATH)/sysconfigs/target/target-x86_64.conf "$(DESTDIR)$(qemu_confdir)"
338

339 340
install: all $(if $(BUILD_DOCS),install-doc) install-sysconfig \
install-datadir install-localstatedir
341
	$(INSTALL_DIR) "$(DESTDIR)$(bindir)"
342
ifneq ($(TOOLS),)
343
	$(INSTALL_PROG) $(STRIP_OPT) $(TOOLS) "$(DESTDIR)$(bindir)"
344
endif
345 346 347 348
ifneq ($(HELPERS-y),)
	$(INSTALL_DIR) "$(DESTDIR)$(libexecdir)"
	$(INSTALL_PROG) $(STRIP_OPT) $(HELPERS-y) "$(DESTDIR)$(libexecdir)"
endif
T
ths 已提交
349 350
ifneq ($(BLOBS),)
	set -e; for x in $(BLOBS); do \
351
		$(INSTALL_DATA) $(SRC_PATH)/pc-bios/$$x "$(DESTDIR)$(qemu_datadir)"; \
P
pbrook 已提交
352
	done
353 354 355
endif
ifeq ($(CONFIG_GTK),y)
	$(MAKE) -C po $@
T
ths 已提交
356
endif
357
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_datadir)/keymaps"
358
	set -e; for x in $(KEYMAPS); do \
359
		$(INSTALL_DATA) $(SRC_PATH)/pc-bios/keymaps/$$x "$(DESTDIR)$(qemu_datadir)/keymaps"; \
P
pbrook 已提交
360
	done
B
bellard 已提交
361
	for d in $(TARGET_DIRS); do \
B
bellard 已提交
362
	$(MAKE) -C $$d $@ || exit 1 ; \
B
bellard 已提交
363
        done
B
bellard 已提交
364

B
bellard 已提交
365
# various test targets
B
bellard 已提交
366
test speed: all
A
Anthony Liguori 已提交
367
	$(MAKE) -C tests/tcg $@
368

A
Alexandre Bique 已提交
369
.PHONY: TAGS
370
TAGS:
D
David Gibson 已提交
371 372
	rm -f $@
	find "$(SRC_PATH)" -name '*.[hc]' -exec etags --append {} +
373

B
bellard 已提交
374 375
cscope:
	rm -f ./cscope.*
376
	find "$(SRC_PATH)" -name "*.[chsS]" -print | sed 's,^\./,,' > ./cscope.files
B
bellard 已提交
377 378
	cscope -b

B
bellard 已提交
379
# documentation
380 381
MAKEINFO=makeinfo
MAKEINFOFLAGS=--no-headers --no-split --number-sections
382 383 384 385
TEXIFLAG=$(if $(V),,--quiet)
%.dvi: %.texi
	$(call quiet-command,texi2dvi $(TEXIFLAG) -I . $<,"  GEN   $@")

B
bellard 已提交
386
%.html: %.texi
387
	$(call quiet-command,LC_ALL=C $(MAKEINFO) $(MAKEINFOFLAGS) --html $< -o $@, \
388
	"  GEN   $@")
B
bellard 已提交
389

B
bellard 已提交
390
%.info: %.texi
391
	$(call quiet-command,$(MAKEINFO) $< -o $@,"  GEN   $@")
B
bellard 已提交
392

393 394
%.pdf: %.texi
	$(call quiet-command,texi2pdf $(TEXIFLAG) -I . $<,"  GEN   $@")
395 396

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

399
qemu-monitor.texi: $(SRC_PATH)/hmp-commands.hx
B
Blue Swirl 已提交
400
	$(call quiet-command,sh $(SRC_PATH)/scripts/hxtool -t < $< > $@,"  GEN   $@")
401

402
qmp-commands.txt: $(SRC_PATH)/qmp-commands.hx
B
Blue Swirl 已提交
403
	$(call quiet-command,sh $(SRC_PATH)/scripts/hxtool -q < $< > $@,"  GEN   $@")
404

405
qemu-img-cmds.texi: $(SRC_PATH)/qemu-img-cmds.hx
B
Blue Swirl 已提交
406
	$(call quiet-command,sh $(SRC_PATH)/scripts/hxtool -t < $< > $@,"  GEN   $@")
407

408
qemu.1: qemu-doc.texi qemu-options.texi qemu-monitor.texi
409
	$(call quiet-command, \
B
Blue Swirl 已提交
410
	  perl -Ww -- $(SRC_PATH)/scripts/texi2pod.pl $< qemu.pod && \
M
Michael Tokarev 已提交
411
	  $(POD2MAN) --section=1 --center=" " --release=" " qemu.pod > $@, \
412
	  "  GEN   $@")
413

414
qemu-img.1: qemu-img.texi qemu-img-cmds.texi
415
	$(call quiet-command, \
B
Blue Swirl 已提交
416
	  perl -Ww -- $(SRC_PATH)/scripts/texi2pod.pl $< qemu-img.pod && \
M
Michael Tokarev 已提交
417
	  $(POD2MAN) --section=1 --center=" " --release=" " qemu-img.pod > $@, \
418
	  "  GEN   $@")
B
bellard 已提交
419

420 421 422
fsdev/virtfs-proxy-helper.1: fsdev/virtfs-proxy-helper.texi
	$(call quiet-command, \
	  perl -Ww -- $(SRC_PATH)/scripts/texi2pod.pl $< fsdev/virtfs-proxy-helper.pod && \
M
Michael Tokarev 已提交
423
	  $(POD2MAN) --section=1 --center=" " --release=" " fsdev/virtfs-proxy-helper.pod > $@, \
424 425
	  "  GEN   $@")

B
bellard 已提交
426
qemu-nbd.8: qemu-nbd.texi
427
	$(call quiet-command, \
B
Blue Swirl 已提交
428
	  perl -Ww -- $(SRC_PATH)/scripts/texi2pod.pl $< qemu-nbd.pod && \
M
Michael Tokarev 已提交
429
	  $(POD2MAN) --section=8 --center=" " --release=" " qemu-nbd.pod > $@, \
430
	  "  GEN   $@")
B
bellard 已提交
431

432 433
dvi: qemu-doc.dvi qemu-tech.dvi
html: qemu-doc.html qemu-tech.html
434 435
info: qemu-doc.info qemu-tech.info
pdf: qemu-doc.pdf qemu-tech.pdf
436

437 438 439
qemu-doc.dvi qemu-doc.html qemu-doc.info qemu-doc.pdf: \
	qemu-img.texi qemu-nbd.texi qemu-options.texi \
	qemu-monitor.texi qemu-img-cmds.texi
440

441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495
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
	make install prefix=${INSTDIR}
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)" \
                $(SRC_PATH)/qemu.nsi
	rm -r ${INSTDIR}
ifdef SIGNCODE
	$(SIGNCODE) $(INSTALLER)
endif # SIGNCODE
endif # CONFIG_WIN

496 497
# Add a dependency on the generated files, so that they are always
# rebuilt before other object files
498
ifneq ($(filter-out %clean,$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fail))
499
Makefile: $(GENERATED_HEADERS)
500
endif
501

B
bellard 已提交
502
# Include automatically generated dependency files
503 504
# Dependencies in Makefile.objs files come from our recursive subdir rules
-include $(wildcard *.d tests/*.d)