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 238
	find . -name '*.[oda]' -type f -exec rm -f {} +
	find . -name '*.l[oa]' -type f -exec rm -f {} +
	rm -f $(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
	if test -f pixman/config.log; then make -C pixman distclean; fi
276
	if test -f dtc/version_gen.h; then make $(DTC_MAKE_ARGS) clean; fi
B
bellard 已提交
277

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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