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/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 *~ */*~
A
Alon Levy 已提交
239
	rm -Rf .libs
B
Blue Swirl 已提交
240
	rm -f qemu-img-cmds.h
241
	@# May not be present in GENERATED_HEADERS
242 243
	rm -f trace/generated-tracers-dtrace.dtrace*
	rm -f trace/generated-tracers-dtrace.h*
244 245
	rm -f $(foreach f,$(GENERATED_HEADERS),$(f) $(f)-timestamp)
	rm -f $(foreach f,$(GENERATED_SOURCES),$(f) $(f)-timestamp)
S
Stefan Weil 已提交
246
	rm -rf qapi-generated
247
	rm -rf qga/qapi-generated
A
Anthony Liguori 已提交
248
	$(MAKE) -C tests/tcg clean
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
M
Magnus Damm 已提交
264
	rm -f roms/seabios/config.mak roms/vgabios/config.mak
B
Brad Hards 已提交
265 266 267 268
	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
269
	rm -f config.log
270
	rm -f linux-headers/asm
271
	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 已提交
272
	for d in $(TARGET_DIRS); do \
B
bellard 已提交
273
	rm -rf $$d || exit 1 ; \
B
updated  
bellard 已提交
274
        done
275
	rm -Rf .sdk
276
	if test -f pixman/config.log; then make -C pixman distclean; fi
277
	if test -f dtc/version_gen.h; then make $(DTC_MAKE_ARGS) clean; fi
B
bellard 已提交
278

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

419 420 421
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 已提交
422
	  $(POD2MAN) --section=1 --center=" " --release=" " fsdev/virtfs-proxy-helper.pod > $@, \
423 424
	  "  GEN   $@")

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

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

436 437 438
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
439

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

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

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