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

Stefan Weil's avatar
Stefan Weil committed
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),)
8
# Put the all: rule here so that config-host.mak can contain dependencies.
9
all:
pbrook's avatar
pbrook committed
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

28
include $(SRC_PATH)/rules.mak
29
config-host.mak: $(SRC_PATH)/configure
30
	@echo $@ is out-of-date, running configure
31 32 33 34 35 36 37 38
	@# 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
39 40
else
config-host.mak:
41
ifneq ($(filter-out %clean,$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fail))
42 43 44
	@echo "Please call configure before running make!"
	@exit 1
endif
45
endif
bellard's avatar
bellard committed
46

47 48 49 50
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

51 52 53
GENERATED_HEADERS += trace/generated-events.h
GENERATED_SOURCES += trace/generated-events.c

54
GENERATED_HEADERS += trace/generated-tracers.h
55
ifeq ($(TRACE_BACKEND),dtrace)
56
GENERATED_HEADERS += trace/generated-tracers-dtrace.h
57
endif
58
GENERATED_SOURCES += trace/generated-tracers.c
59

60 61 62 63 64
# Don't try to regenerate Makefile or configure
# We don't generate any of them
Makefile: ;
configure: ;

65
.PHONY: all clean cscope distclean dvi html info install install-doc \
66
	pdf recurse-all speed test dist
67

68
$(call set-vpath, $(SRC_PATH))
pbrook's avatar
pbrook committed
69

Juan Quintela's avatar
Juan Quintela committed
70
LIBS+=-lz $(LIBS_TOOLS)
71

72 73
HELPERS-$(CONFIG_LINUX) = qemu-bridge-helper$(EXESUF)

74
ifdef BUILD_DOCS
75
DOCS=qemu-doc.html qemu-tech.html qemu.1 qemu-img.1 qemu-nbd.8 qmp-commands.txt
76
ifdef CONFIG_VIRTFS
77
DOCS+=fsdev/virtfs-proxy-helper.1
78
endif
79 80 81
else
DOCS=
endif
bellard's avatar
bellard committed
82

83
SUBDIR_MAKEFLAGS=$(if $(V),,--no-print-directory) BUILD_DIR=$(BUILD_DIR)
84
SUBDIR_DEVICES_MAK=$(patsubst %, %/config-devices.mak, $(TARGET_DIRS))
85
SUBDIR_DEVICES_MAK_DEP=$(patsubst %, %-config-devices.mak.d, $(TARGET_DIRS))
86

87 88 89 90
ifeq ($(SUBDIR_DEVICES_MAK),)
config-all-devices.mak:
	$(call quiet-command,echo '# no devices' > $@,"  GEN   $@")
else
91
config-all-devices.mak: $(SUBDIR_DEVICES_MAK)
92 93 94 95
	$(call quiet-command, sed -n \
             's|^\([^=]*\)=\(.*\)$$|\1:=$$(findstring y,$$(\1)\2)|p' \
             $(SUBDIR_DEVICES_MAK) | sort -u > $@, \
             "  GEN   $@")
96
endif
97

98 99
-include $(SUBDIR_DEVICES_MAK_DEP)

100
%/config-devices.mak: default-configs/%.mak
Blue Swirl's avatar
Blue Swirl committed
101
	$(call quiet-command,$(SHELL) $(SRC_PATH)/scripts/make_device_config.sh $@ $<, "  GEN   $@")
102
	@if test -f $@; then \
103
	  if cmp -s $@.old $@; then \
104 105
	    mv $@.tmp $@; \
	    cp -p $@ $@.old; \
106 107 108 109 110 111 112 113 114
	  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; \
115
	 else \
116 117
	  mv $@.tmp $@; \
	  cp -p $@ $@.old; \
118 119 120 121 122
	 fi

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

123 124 125 126 127 128 129 130
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

131
all: $(DOCS) $(TOOLS) $(HELPERS-y) recurse-all
pbrook's avatar
pbrook committed
132

133 134
config-host.h: config-host.h-timestamp
config-host.h-timestamp: config-host.mak
Blue Swirl's avatar
Blue Swirl committed
135
qemu-options.def: $(SRC_PATH)/qemu-options.hx
Blue Swirl's avatar
Blue Swirl committed
136
	$(call quiet-command,sh $(SRC_PATH)/scripts/hxtool -h < $< > $@,"  GEN   $@")
137

138
SUBDIR_RULES=$(patsubst %,subdir-%, $(TARGET_DIRS))
139 140 141
SOFTMMU_SUBDIR_RULES=$(filter %-softmmu,$(SUBDIR_RULES))

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

143
subdir-%:
144
	$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C $* V="$(V)" TARGET_DIR="$*/" all,)
pbrook's avatar
pbrook committed
145

146 147 148 149
subdir-pixman: pixman/Makefile
	$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C pixman V="$(V)" all,)

pixman/Makefile: $(SRC_PATH)/pixman/configure
150
	(cd pixman; CFLAGS="$(CFLAGS) -fPIC $(extra_cflags) $(extra_ldflags)" $(SRC_PATH)/pixman/configure $(AUTOCONF_HOST) --disable-gtk --disable-shared --enable-static)
151 152 153 154

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

155
DTC_MAKE_ARGS=-I$(SRC_PATH)/dtc VPATH=$(SRC_PATH)/dtc -C dtc V="$(V)" LIBFDT_srcdir=$(SRC_PATH)/dtc/libfdt
156 157
DTC_CFLAGS=$(CFLAGS) $(QEMU_CFLAGS)
DTC_CPPFLAGS=-I$(BUILD_DIR)/dtc -I$(SRC_PATH)/dtc -I$(SRC_PATH)/dtc/libfdt
158 159

subdir-dtc:dtc/libfdt dtc/tests
160
	$(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,)
161 162 163 164

dtc/%:
	mkdir -p $@

165
$(SUBDIR_RULES): libqemuutil.a libqemustub.a $(common-obj-y)
166

Paul Brook's avatar
Paul Brook committed
167 168 169 170 171 172 173
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)
bellard's avatar
bellard committed
174

175
bt-host.o: QEMU_CFLAGS += $(BLUEZ_CFLAGS)
bellard's avatar
bellard committed
176

177
$(BUILD_DIR)/version.o: $(SRC_PATH)/version.rc $(BUILD_DIR)/config-host.h | $(BUILD_DIR)/version.lo
178
	$(call quiet-command,$(WINDRES) -I$(BUILD_DIR) -o $@ $<,"  RC    version.o")
179
$(BUILD_DIR)/version.lo: $(SRC_PATH)/version.rc $(BUILD_DIR)/config-host.h
180
	$(call quiet-command,$(WINDRES) -I$(BUILD_DIR) -o $@ $<,"  RC    version.lo")
181

182
Makefile: $(version-obj-y) $(version-lobj-y)
183 184

######################################################################
185
# Build libraries
186 187

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

190
######################################################################
bellard's avatar
bellard committed
191

192
qemu-img.o: qemu-img-cmds.h
193

194 195
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
196
qemu-io$(EXESUF): qemu-io.o $(block-obj-y) libqemuutil.a libqemustub.a
197

198 199
qemu-bridge-helper$(EXESUF): qemu-bridge-helper.o

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

203
qemu-img-cmds.h: $(SRC_PATH)/qemu-img-cmds.hx
Blue Swirl's avatar
Blue Swirl committed
204
	$(call quiet-command,sh $(SRC_PATH)/scripts/hxtool -h < $< > $@,"  GEN   $@")
205

206
qemu-ga$(EXESUF): LIBS = $(LIBS_QGA)
207
qemu-ga$(EXESUF): QEMU_CFLAGS += -I qga/qapi-generated
208

209
gen-out-type = $(subst .,-,$(suffix $@))
210

211 212
qapi-py = $(SRC_PATH)/scripts/qapi.py $(SRC_PATH)/scripts/ordereddict.py

213
qga/qapi-generated/qga-qapi-types.c qga/qapi-generated/qga-qapi-types.h :\
214
$(SRC_PATH)/qga/qapi-schema.json $(SRC_PATH)/scripts/qapi-types.py $(qapi-py)
215 216
	$(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 :\
217
$(SRC_PATH)/qga/qapi-schema.json $(SRC_PATH)/scripts/qapi-visit.py $(qapi-py)
218 219
	$(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 :\
220
$(SRC_PATH)/qga/qapi-schema.json $(SRC_PATH)/scripts/qapi-commands.py $(qapi-py)
221
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-commands.py $(gen-out-type) -o qga/qapi-generated -p "qga-" < $<, "  GEN   $@")
222

223
qapi-types.c qapi-types.h :\
224
$(SRC_PATH)/qapi-schema.json $(SRC_PATH)/scripts/qapi-types.py $(qapi-py)
225
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-types.py $(gen-out-type) -o "." -b < $<, "  GEN   $@")
226
qapi-visit.c qapi-visit.h :\
227
$(SRC_PATH)/qapi-schema.json $(SRC_PATH)/scripts/qapi-visit.py $(qapi-py)
228
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-visit.py $(gen-out-type) -o "." -b < $<, "  GEN   $@")
229
qmp-commands.h qmp-marshal.c :\
230
$(SRC_PATH)/qapi-schema.json $(SRC_PATH)/scripts/qapi-commands.py $(qapi-py)
231
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-commands.py $(gen-out-type) -m -o "." < $<, "  GEN   $@")
232

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

236
qemu-ga$(EXESUF): $(qga-obj-y) libqemuutil.a libqemustub.a
237
	$(call LINK, $^)
238

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

261 262 263 264 265 266 267
VERSION ?= $(shell cat VERSION)

dist: qemu-$(VERSION).tar.bz2

qemu-%.tar.bz2:
	$(SRC_PATH)/scripts/make-release "$(SRC_PATH)" "$(patsubst qemu-%.tar.bz2,%,$@)"

bellard's avatar
bellard committed
268
distclean: clean
Magnus Damm's avatar
Magnus Damm committed
269
	rm -f config-host.mak config-host.h* config-host.ld $(DOCS) qemu-options.texi qemu-img-cmds.texi qemu-monitor.texi
270
	rm -f config-all-devices.mak config-all-disas.mak
271
	rm -f po/*.mo
Magnus Damm's avatar
Magnus Damm committed
272
	rm -f roms/seabios/config.mak roms/vgabios/config.mak
273 274 275 276
	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
277
	rm -f config.log
278
	rm -f linux-headers/asm
279
	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
Paolo Bonzini's avatar
Paolo Bonzini committed
280
	for d in $(TARGET_DIRS); do \
bellard's avatar
bellard committed
281
	rm -rf $$d || exit 1 ; \
bellard's avatar
bellard committed
282
        done
283
	rm -Rf .sdk
284
	if test -f pixman/config.log; then make -C pixman distclean; fi
285
	if test -f dtc/version_gen.h; then make $(DTC_MAKE_ARGS) clean; fi
bellard's avatar
bellard committed
286

bellard's avatar
bellard committed
287 288
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 \
289
common  de-ch  es     fo  fr-ca  hu     ja  mk  nl-be      pt  sl     tr \
290
bepo    cz
bellard's avatar
bellard committed
291

292
ifdef INSTALL_BLOBS
293
BLOBS=bios.bin bios-256k.bin sgabios.bin vgabios.bin vgabios-cirrus.bin \
294
vgabios-stdvga.bin vgabios-vmware.bin vgabios-qxl.bin \
295
acpi-dsdt.aml q35-acpi-dsdt.aml \
296
ppc_rom.bin openbios-sparc32 openbios-sparc64 openbios-ppc QEMU,tcx.bin \
297 298
pxe-e1000.rom pxe-eepro100.rom pxe-ne2k_pci.rom \
pxe-pcnet.rom pxe-rtl8139.rom pxe-virtio.rom \
299 300
efi-e1000.rom efi-eepro100.rom efi-ne2k_pci.rom \
efi-pcnet.rom efi-rtl8139.rom efi-virtio.rom \
Anthony Liguori's avatar
Anthony Liguori committed
301
qemu-icon.bmp qemu_logo_no_text.svg \
302
bamboo.dtb petalogix-s3adsp1800.dtb petalogix-ml605.dtb \
Jan Kiszka's avatar
Jan Kiszka committed
303
multiboot.bin linuxboot.bin kvmvapic.bin \
304
s390-zipl.rom \
305
s390-ccw.img \
306 307
spapr-rtas.bin slof.bin \
palcode-clipper
308 309 310 311
else
BLOBS=
endif

312
install-doc: $(DOCS)
313 314
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_docdir)"
	$(INSTALL_DATA) qemu-doc.html  qemu-tech.html "$(DESTDIR)$(qemu_docdir)"
315
	$(INSTALL_DATA) qmp-commands.txt "$(DESTDIR)$(qemu_docdir)"
316
ifdef CONFIG_POSIX
317
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man1"
318 319 320
	$(INSTALL_DATA) qemu.1 "$(DESTDIR)$(mandir)/man1"
ifneq ($(TOOLS),)
	$(INSTALL_DATA) qemu-img.1 "$(DESTDIR)$(mandir)/man1"
321 322
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man8"
	$(INSTALL_DATA) qemu-nbd.8 "$(DESTDIR)$(mandir)/man8"
323
endif
324
endif
325 326 327 328
ifdef CONFIG_VIRTFS
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man1"
	$(INSTALL_DATA) fsdev/virtfs-proxy-helper.1 "$(DESTDIR)$(mandir)/man1"
endif
329 330 331 332

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

333 334 335 336 337 338 339
install-localstatedir:
ifdef CONFIG_POSIX
ifneq (,$(findstring qemu-ga,$(TOOLS)))
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_localstatedir)"/run
endif
endif

340
install-confdir:
341
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_confdir)"
342 343

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

346 347
install: all $(if $(BUILD_DOCS),install-doc) install-sysconfig \
install-datadir install-localstatedir
348
	$(INSTALL_DIR) "$(DESTDIR)$(bindir)"
349
ifneq ($(TOOLS),)
350
	$(INSTALL_PROG) $(STRIP_OPT) $(TOOLS) "$(DESTDIR)$(bindir)"
351
endif
352 353 354 355
ifneq ($(HELPERS-y),)
	$(INSTALL_DIR) "$(DESTDIR)$(libexecdir)"
	$(INSTALL_PROG) $(STRIP_OPT) $(HELPERS-y) "$(DESTDIR)$(libexecdir)"
endif
356 357
ifneq ($(BLOBS),)
	set -e; for x in $(BLOBS); do \
358
		$(INSTALL_DATA) $(SRC_PATH)/pc-bios/$$x "$(DESTDIR)$(qemu_datadir)"; \
pbrook's avatar
pbrook committed
359
	done
360 361 362
endif
ifeq ($(CONFIG_GTK),y)
	$(MAKE) -C po $@
363
endif
364
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_datadir)/keymaps"
365
	set -e; for x in $(KEYMAPS); do \
366
		$(INSTALL_DATA) $(SRC_PATH)/pc-bios/keymaps/$$x "$(DESTDIR)$(qemu_datadir)/keymaps"; \
pbrook's avatar
pbrook committed
367
	done
368
	for d in $(TARGET_DIRS); do \
bellard's avatar
bellard committed
369
	$(MAKE) -C $$d $@ || exit 1 ; \
370
        done
bellard's avatar
bellard committed
371

bellard's avatar
bellard committed
372
# various test targets
bellard's avatar
bellard committed
373
test speed: all
374
	$(MAKE) -C tests/tcg $@
375

376
.PHONY: TAGS
377
TAGS:
David Gibson's avatar
David Gibson committed
378 379
	rm -f $@
	find "$(SRC_PATH)" -name '*.[hc]' -exec etags --append {} +
380

bellard's avatar
bellard committed
381 382
cscope:
	rm -f ./cscope.*
383
	find "$(SRC_PATH)" -name "*.[chsS]" -print | sed 's,^\./,,' > ./cscope.files
bellard's avatar
bellard committed
384 385
	cscope -b

bellard's avatar
bellard committed
386
# documentation
387 388
MAKEINFO=makeinfo
MAKEINFOFLAGS=--no-headers --no-split --number-sections
389 390 391 392
TEXIFLAG=$(if $(V),,--quiet)
%.dvi: %.texi
	$(call quiet-command,texi2dvi $(TEXIFLAG) -I . $<,"  GEN   $@")

bellard's avatar
bellard committed
393
%.html: %.texi
394
	$(call quiet-command,LC_ALL=C $(MAKEINFO) $(MAKEINFOFLAGS) --html $< -o $@, \
395
	"  GEN   $@")
bellard's avatar
bellard committed
396

bellard's avatar
bellard committed
397
%.info: %.texi
398
	$(call quiet-command,$(MAKEINFO) $< -o $@,"  GEN   $@")
bellard's avatar
bellard committed
399

400 401
%.pdf: %.texi
	$(call quiet-command,texi2pdf $(TEXIFLAG) -I . $<,"  GEN   $@")
402 403

qemu-options.texi: $(SRC_PATH)/qemu-options.hx
Blue Swirl's avatar
Blue Swirl committed
404
	$(call quiet-command,sh $(SRC_PATH)/scripts/hxtool -t < $< > $@,"  GEN   $@")
bellard's avatar
bellard committed
405

406
qemu-monitor.texi: $(SRC_PATH)/hmp-commands.hx
Blue Swirl's avatar
Blue Swirl committed
407
	$(call quiet-command,sh $(SRC_PATH)/scripts/hxtool -t < $< > $@,"  GEN   $@")
408

409
qmp-commands.txt: $(SRC_PATH)/qmp-commands.hx
Blue Swirl's avatar
Blue Swirl committed
410
	$(call quiet-command,sh $(SRC_PATH)/scripts/hxtool -q < $< > $@,"  GEN   $@")
411

412
qemu-img-cmds.texi: $(SRC_PATH)/qemu-img-cmds.hx
Blue Swirl's avatar
Blue Swirl committed
413
	$(call quiet-command,sh $(SRC_PATH)/scripts/hxtool -t < $< > $@,"  GEN   $@")
414

415
qemu.1: qemu-doc.texi qemu-options.texi qemu-monitor.texi
416
	$(call quiet-command, \
Blue Swirl's avatar
Blue Swirl committed
417
	  perl -Ww -- $(SRC_PATH)/scripts/texi2pod.pl $< qemu.pod && \
418
	  $(POD2MAN) --section=1 --center=" " --release=" " qemu.pod > $@, \
419
	  "  GEN   $@")
420

421
qemu-img.1: qemu-img.texi qemu-img-cmds.texi
422
	$(call quiet-command, \
Blue Swirl's avatar
Blue Swirl committed
423
	  perl -Ww -- $(SRC_PATH)/scripts/texi2pod.pl $< qemu-img.pod && \
424
	  $(POD2MAN) --section=1 --center=" " --release=" " qemu-img.pod > $@, \
425
	  "  GEN   $@")
426

427 428 429
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 && \
430
	  $(POD2MAN) --section=1 --center=" " --release=" " fsdev/virtfs-proxy-helper.pod > $@, \
431 432
	  "  GEN   $@")

433
qemu-nbd.8: qemu-nbd.texi
434
	$(call quiet-command, \
Blue Swirl's avatar
Blue Swirl committed
435
	  perl -Ww -- $(SRC_PATH)/scripts/texi2pod.pl $< qemu-nbd.pod && \
436
	  $(POD2MAN) --section=8 --center=" " --release=" " qemu-nbd.pod > $@, \
437
	  "  GEN   $@")
438

439 440
dvi: qemu-doc.dvi qemu-tech.dvi
html: qemu-doc.html qemu-tech.html
441 442
info: qemu-doc.info qemu-tech.info
pdf: qemu-doc.pdf qemu-tech.pdf
443

444 445 446
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
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 496 497 498 499 500 501 502
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

503 504
# Add a dependency on the generated files, so that they are always
# rebuilt before other object files
505
ifneq ($(filter-out %clean,$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fail))
506
Makefile: $(GENERATED_HEADERS)
507
endif
508

bellard's avatar
bellard committed
509
# Include automatically generated dependency files
510 511
# Dependencies in Makefile.objs files come from our recursive subdir rules
-include $(wildcard *.d tests/*.d)