Makefile 19.3 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
	@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
B
bellard 已提交
46

47
GENERATED_HEADERS = config-host.h qemu-options.def
W
Wenchao Xia 已提交
48 49
GENERATED_HEADERS += qmp-commands.h qapi-types.h qapi-visit.h qapi-event.h
GENERATED_SOURCES += qmp-marshal.c qapi-types.c qapi-visit.c qapi-event.c
50

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

54
GENERATED_HEADERS += trace/generated-tracers.h
L
Lluís Vilanova 已提交
55
ifeq ($(findstring dtrace,$(TRACE_BACKENDS)),dtrace)
56
GENERATED_HEADERS += trace/generated-tracers-dtrace.h
57
endif
58
GENERATED_SOURCES += trace/generated-tracers.c
59

60 61
GENERATED_HEADERS += trace/generated-tcg-tracers.h

62
GENERATED_HEADERS += trace/generated-helpers-wrappers.h
63
GENERATED_HEADERS += trace/generated-helpers.h
64
GENERATED_SOURCES += trace/generated-helpers.c
65

L
Lluís Vilanova 已提交
66
ifeq ($(findstring ust,$(TRACE_BACKENDS)),ust)
67 68 69 70
GENERATED_HEADERS += trace/generated-ust-provider.h
GENERATED_SOURCES += trace/generated-ust.c
endif

71 72 73 74 75
# Don't try to regenerate Makefile or configure
# We don't generate any of them
Makefile: ;
configure: ;

76
.PHONY: all clean cscope distclean dvi html info install install-doc \
77
	pdf recurse-all speed test dist
78

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

J
Juan Quintela 已提交
81
LIBS+=-lz $(LIBS_TOOLS)
82

83 84
HELPERS-$(CONFIG_LINUX) = qemu-bridge-helper$(EXESUF)

85
ifdef BUILD_DOCS
86
DOCS=qemu-doc.html qemu-tech.html qemu.1 qemu-img.1 qemu-nbd.8 qmp-commands.txt
87 88 89
ifdef CONFIG_LINUX
DOCS+=kvm_stat.1
endif
90
ifdef CONFIG_VIRTFS
91
DOCS+=fsdev/virtfs-proxy-helper.1
92
endif
93 94 95
else
DOCS=
endif
B
bellard 已提交
96

97
SUBDIR_MAKEFLAGS=$(if $(V),,--no-print-directory) BUILD_DIR=$(BUILD_DIR)
98
SUBDIR_DEVICES_MAK=$(patsubst %, %/config-devices.mak, $(TARGET_DIRS))
99
SUBDIR_DEVICES_MAK_DEP=$(patsubst %, %-config-devices.mak.d, $(TARGET_DIRS))
100

101 102 103 104
ifeq ($(SUBDIR_DEVICES_MAK),)
config-all-devices.mak:
	$(call quiet-command,echo '# no devices' > $@,"  GEN   $@")
else
105
config-all-devices.mak: $(SUBDIR_DEVICES_MAK)
106 107 108 109
	$(call quiet-command, sed -n \
             's|^\([^=]*\)=\(.*\)$$|\1:=$$(findstring y,$$(\1)\2)|p' \
             $(SUBDIR_DEVICES_MAK) | sort -u > $@, \
             "  GEN   $@")
110
endif
111

P
Paul Brook 已提交
112 113
-include $(SUBDIR_DEVICES_MAK_DEP)

114
%/config-devices.mak: default-configs/%.mak
115 116
	$(call quiet-command,$(SHELL) $(SRC_PATH)/scripts/make_device_config.sh $@.tmp $<, "  GEN   $@.tmp")
	$(call quiet-command, if test -f $@; then \
117
	  if cmp -s $@.old $@; then \
P
Paul Brook 已提交
118 119
	    mv $@.tmp $@; \
	    cp -p $@ $@.old; \
120 121 122 123 124 125 126 127 128
	  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; \
129
	 else \
130 131
	  mv $@.tmp $@; \
	  cp -p $@ $@.old; \
132
	 fi, "  GEN  $@");
133 134 135 136

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

137 138
ifneq ($(wildcard config-host.mak),)
include $(SRC_PATH)/Makefile.objs
139 140 141 142 143 144
endif

dummy := $(call unnest-vars,, \
                stub-obj-y \
                util-obj-y \
                qga-obj-y \
145
                qga-vss-dll-obj-y \
146
                block-obj-y \
147 148 149
                block-obj-m \
                common-obj-y \
                common-obj-m)
150 151

ifneq ($(wildcard config-host.mak),)
152 153 154 155 156 157
include $(SRC_PATH)/tests/Makefile
endif
ifeq ($(CONFIG_SMARTCARD_NSS),y)
include $(SRC_PATH)/libcacard/Makefile
endif

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

160 161
config-host.h: config-host.h-timestamp
config-host.h-timestamp: config-host.mak
B
Blue Swirl 已提交
162
qemu-options.def: $(SRC_PATH)/qemu-options.hx
B
Blue Swirl 已提交
163
	$(call quiet-command,sh $(SRC_PATH)/scripts/hxtool -h < $< > $@,"  GEN   $@")
164

165
SUBDIR_RULES=$(patsubst %,subdir-%, $(TARGET_DIRS))
166 167
SOFTMMU_SUBDIR_RULES=$(filter %-softmmu,$(SUBDIR_RULES))

168
$(SOFTMMU_SUBDIR_RULES): $(block-obj-y)
169
$(SOFTMMU_SUBDIR_RULES): config-all-devices.mak
170

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

174 175 176 177
subdir-pixman: pixman/Makefile
	$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C pixman V="$(V)" all,)

pixman/Makefile: $(SRC_PATH)/pixman/configure
178
	(cd pixman; CFLAGS="$(CFLAGS) -fPIC $(extra_cflags) $(extra_ldflags)" $(SRC_PATH)/pixman/configure $(AUTOCONF_HOST) --disable-gtk --disable-shared --enable-static)
179 180 181 182

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

183
DTC_MAKE_ARGS=-I$(SRC_PATH)/dtc VPATH=$(SRC_PATH)/dtc -C dtc V="$(V)" LIBFDT_srcdir=$(SRC_PATH)/dtc/libfdt
184 185
DTC_CFLAGS=$(CFLAGS) $(QEMU_CFLAGS)
DTC_CPPFLAGS=-I$(BUILD_DIR)/dtc -I$(SRC_PATH)/dtc -I$(SRC_PATH)/dtc/libfdt
186 187

subdir-dtc:dtc/libfdt dtc/tests
188
	$(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,)
189 190 191 192

dtc/%:
	mkdir -p $@

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

P
Paul Brook 已提交
195 196 197 198 199 200 201
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 已提交
202

203
$(BUILD_DIR)/version.o: $(SRC_PATH)/version.rc config-host.h | $(BUILD_DIR)/version.lo
204
	$(call quiet-command,$(WINDRES) -I$(BUILD_DIR) -o $@ $<,"  RC    version.o")
205
$(BUILD_DIR)/version.lo: $(SRC_PATH)/version.rc config-host.h
206
	$(call quiet-command,$(WINDRES) -I$(BUILD_DIR) -o $@ $<,"  RC    version.lo")
207

P
Paolo Bonzini 已提交
208
Makefile: $(version-obj-y) $(version-lobj-y)
209 210

######################################################################
211
# Build libraries
212 213

libqemustub.a: $(stub-obj-y)
214
libqemuutil.a: $(util-obj-y)
215

F
Fam Zheng 已提交
216 217 218
block-modules = $(foreach o,$(block-obj-m),"$(basename $(subst /,-,$o))",) NULL
util/module.o-cflags = -D'CONFIG_BLOCK_MODULES=$(block-modules)'

A
Alon Levy 已提交
219
######################################################################
B
bellard 已提交
220

J
Juan Quintela 已提交
221
qemu-img.o: qemu-img-cmds.h
222

223 224
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
225
qemu-io$(EXESUF): qemu-io.o $(block-obj-y) libqemuutil.a libqemustub.a
226

227 228
qemu-bridge-helper$(EXESUF): qemu-bridge-helper.o

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

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

235
qemu-ga$(EXESUF): LIBS = $(LIBS_QGA)
236
qemu-ga$(EXESUF): QEMU_CFLAGS += -I qga/qapi-generated
237

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

240 241
qapi-py = $(SRC_PATH)/scripts/qapi.py $(SRC_PATH)/scripts/ordereddict.py

242
qga/qapi-generated/qga-qapi-types.c qga/qapi-generated/qga-qapi-types.h :\
243
$(SRC_PATH)/qga/qapi-schema.json $(SRC_PATH)/scripts/qapi-types.py $(qapi-py)
244
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-types.py \
245
		$(gen-out-type) -o qga/qapi-generated -p "qga-" -i $<, \
246
		"  GEN   $@")
247
qga/qapi-generated/qga-qapi-visit.c qga/qapi-generated/qga-qapi-visit.h :\
248
$(SRC_PATH)/qga/qapi-schema.json $(SRC_PATH)/scripts/qapi-visit.py $(qapi-py)
249
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-visit.py \
250
		$(gen-out-type) -o qga/qapi-generated -p "qga-" -i $<, \
251
		"  GEN   $@")
252
qga/qapi-generated/qga-qmp-commands.h qga/qapi-generated/qga-qmp-marshal.c :\
253
$(SRC_PATH)/qga/qapi-schema.json $(SRC_PATH)/scripts/qapi-commands.py $(qapi-py)
254
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-commands.py \
255
		$(gen-out-type) -o qga/qapi-generated -p "qga-" -i $<, \
256
		"  GEN   $@")
257

258
qapi-modules = $(SRC_PATH)/qapi-schema.json $(SRC_PATH)/qapi/common.json \
259
               $(SRC_PATH)/qapi/block.json $(SRC_PATH)/qapi/block-core.json \
W
Wenchao Xia 已提交
260
               $(SRC_PATH)/qapi/event.json
261

262
qapi-types.c qapi-types.h :\
263
$(qapi-modules) $(SRC_PATH)/scripts/qapi-types.py $(qapi-py)
264
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-types.py \
265
		$(gen-out-type) -o "." -b -i $<, \
266
		"  GEN   $@")
267
qapi-visit.c qapi-visit.h :\
268
$(qapi-modules) $(SRC_PATH)/scripts/qapi-visit.py $(qapi-py)
269
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-visit.py \
270
		$(gen-out-type) -o "." -b -i $<, \
271
		"  GEN   $@")
W
Wenchao Xia 已提交
272 273 274 275 276
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 \
		$(gen-out-type) -o "." -b -i $<, \
		"  GEN   $@")
277
qmp-commands.h qmp-marshal.c :\
278
$(qapi-modules) $(SRC_PATH)/scripts/qapi-commands.py $(qapi-py)
279
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-commands.py \
280
		$(gen-out-type) -o "." -m -i $<, \
281
		"  GEN   $@")
282

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

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

289
clean:
290
# avoid old build problems by removing potentially incorrect old files
291
	rm -f config.mak op-i386.h opc-i386.h gen-op-i386.h op-arm.h opc-arm.h gen-op-arm.h
292
	rm -f qemu-options.def
F
Fam Zheng 已提交
293
	find . \( -name '*.l[oa]' -o -name '*.so' -o -name '*.dll' -o -name '*.mo' -o -name '*.[oda]' \) -type f -exec rm {} +
294
	rm -f $(filter-out %.tlb,$(TOOLS)) $(HELPERS-y) qemu-ga TAGS cscope.* *.pod *~ */*~
295 296
	rm -f fsdev/*.pod
	rm -rf .libs */.libs
B
Blue Swirl 已提交
297
	rm -f qemu-img-cmds.h
298
	@# May not be present in GENERATED_HEADERS
299 300
	rm -f trace/generated-tracers-dtrace.dtrace*
	rm -f trace/generated-tracers-dtrace.h*
301 302
	rm -f $(foreach f,$(GENERATED_HEADERS),$(f) $(f)-timestamp)
	rm -f $(foreach f,$(GENERATED_SOURCES),$(f) $(f)-timestamp)
S
Stefan Weil 已提交
303
	rm -rf qapi-generated
304
	rm -rf qga/qapi-generated
305
	for d in $(ALL_SUBDIRS); do \
M
Magnus Damm 已提交
306
	if test -d $$d; then $(MAKE) -C $$d $@ || exit 1; fi; \
307
	rm -f $$d/qemu-options.def; \
B
bellard 已提交
308
        done
309

310 311 312 313 314 315 316
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 已提交
317
distclean: clean
M
Magnus Damm 已提交
318
	rm -f config-host.mak config-host.h* config-host.ld $(DOCS) qemu-options.texi qemu-img-cmds.texi qemu-monitor.texi
319 320
	rm -f config-all-devices.mak config-all-disas.mak config.status
	rm -f po/*.mo tests/qemu-iotests/common.env
M
Magnus Damm 已提交
321
	rm -f roms/seabios/config.mak roms/vgabios/config.mak
B
Brad Hards 已提交
322 323 324 325
	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
326
	rm -f config.log
327
	rm -f linux-headers/asm
328
	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 已提交
329
	for d in $(TARGET_DIRS); do \
B
bellard 已提交
330
	rm -rf $$d || exit 1 ; \
B
updated  
bellard 已提交
331
        done
332
	rm -Rf .sdk
333
	if test -f pixman/config.log; then make -C pixman distclean; fi
334
	if test -f dtc/version_gen.h; then make $(DTC_MAKE_ARGS) clean; fi
B
bellard 已提交
335

B
bellard 已提交
336 337
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 \
338
common  de-ch  es     fo  fr-ca  hu     ja  mk  nl-be      pt  sl     tr \
J
Jan Krupa 已提交
339
bepo    cz
B
bellard 已提交
340

T
ths 已提交
341
ifdef INSTALL_BLOBS
342
BLOBS=bios.bin bios-256k.bin sgabios.bin vgabios.bin vgabios-cirrus.bin \
G
Gerd Hoffmann 已提交
343
vgabios-stdvga.bin vgabios-vmware.bin vgabios-qxl.bin \
344
acpi-dsdt.aml q35-acpi-dsdt.aml \
345
ppc_rom.bin openbios-sparc32 openbios-sparc64 openbios-ppc QEMU,tcx.bin QEMU,cgthree.bin \
346 347
pxe-e1000.rom pxe-eepro100.rom pxe-ne2k_pci.rom \
pxe-pcnet.rom pxe-rtl8139.rom pxe-virtio.rom \
348 349
efi-e1000.rom efi-eepro100.rom efi-ne2k_pci.rom \
efi-pcnet.rom efi-rtl8139.rom efi-virtio.rom \
A
Anthony Liguori 已提交
350
qemu-icon.bmp qemu_logo_no_text.svg \
351
bamboo.dtb petalogix-s3adsp1800.dtb petalogix-ml605.dtb \
J
Jan Kiszka 已提交
352
multiboot.bin linuxboot.bin kvmvapic.bin \
353
s390-zipl.rom \
354
s390-ccw.img \
355
spapr-rtas.bin slof.bin \
356 357
palcode-clipper \
u-boot.e500
T
ths 已提交
358 359 360 361
else
BLOBS=
endif

362
install-doc: $(DOCS)
363 364
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_docdir)"
	$(INSTALL_DATA) qemu-doc.html  qemu-tech.html "$(DESTDIR)$(qemu_docdir)"
365
	$(INSTALL_DATA) qmp-commands.txt "$(DESTDIR)$(qemu_docdir)"
366
ifdef CONFIG_POSIX
367
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man1"
368 369 370
	$(INSTALL_DATA) qemu.1 "$(DESTDIR)$(mandir)/man1"
ifneq ($(TOOLS),)
	$(INSTALL_DATA) qemu-img.1 "$(DESTDIR)$(mandir)/man1"
371 372
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man8"
	$(INSTALL_DATA) qemu-nbd.8 "$(DESTDIR)$(mandir)/man8"
373
endif
374
endif
375 376 377 378
ifdef CONFIG_VIRTFS
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man1"
	$(INSTALL_DATA) fsdev/virtfs-proxy-helper.1 "$(DESTDIR)$(mandir)/man1"
endif
379 380 381 382

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

383 384 385 386 387 388 389
install-localstatedir:
ifdef CONFIG_POSIX
ifneq (,$(findstring qemu-ga,$(TOOLS)))
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_localstatedir)"/run
endif
endif

390
install-confdir:
391
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_confdir)"
392 393

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

396 397
install: all $(if $(BUILD_DOCS),install-doc) install-sysconfig \
install-datadir install-localstatedir
398
ifneq ($(TOOLS),)
399
	$(call install-prog,$(TOOLS),$(DESTDIR)$(bindir))
400
endif
401 402
ifneq ($(CONFIG_MODULES),)
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_moddir)"
403 404
	for s in $(modules-m:.mo=$(DSOSUF)); do \
		t="$(DESTDIR)$(qemu_moddir)/$$(echo $$s | tr / -)"; \
405
		$(INSTALL_LIB) $$s "$$t"; \
406
		test -z "$(STRIP)" || $(STRIP) "$$t"; \
407 408
	done
endif
409
ifneq ($(HELPERS-y),)
410
	$(call install-prog,$(HELPERS-y),$(DESTDIR)$(libexecdir))
411
endif
T
ths 已提交
412 413
ifneq ($(BLOBS),)
	set -e; for x in $(BLOBS); do \
414
		$(INSTALL_DATA) $(SRC_PATH)/pc-bios/$$x "$(DESTDIR)$(qemu_datadir)"; \
P
pbrook 已提交
415
	done
416 417 418
endif
ifeq ($(CONFIG_GTK),y)
	$(MAKE) -C po $@
T
ths 已提交
419
endif
420
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_datadir)/keymaps"
421
	set -e; for x in $(KEYMAPS); do \
422
		$(INSTALL_DATA) $(SRC_PATH)/pc-bios/keymaps/$$x "$(DESTDIR)$(qemu_datadir)/keymaps"; \
P
pbrook 已提交
423
	done
424
	$(INSTALL_DATA) $(SRC_PATH)/trace-events "$(DESTDIR)$(qemu_datadir)/trace-events"
B
bellard 已提交
425
	for d in $(TARGET_DIRS); do \
426
	$(MAKE) $(SUBDIR_MAKEFLAGS) TARGET_DIR=$$d/ -C $$d $@ || exit 1 ; \
B
bellard 已提交
427
        done
B
bellard 已提交
428

B
bellard 已提交
429
# various test targets
B
bellard 已提交
430
test speed: all
A
Anthony Liguori 已提交
431
	$(MAKE) -C tests/tcg $@
432

A
Alexandre Bique 已提交
433
.PHONY: TAGS
434
TAGS:
D
David Gibson 已提交
435 436
	rm -f $@
	find "$(SRC_PATH)" -name '*.[hc]' -exec etags --append {} +
437

B
bellard 已提交
438 439
cscope:
	rm -f ./cscope.*
440
	find "$(SRC_PATH)" -name "*.[chsS]" -print | sed 's,^\./,,' > ./cscope.files
B
bellard 已提交
441 442
	cscope -b

B
bellard 已提交
443
# documentation
444 445
MAKEINFO=makeinfo
MAKEINFOFLAGS=--no-headers --no-split --number-sections
446 447 448 449
TEXIFLAG=$(if $(V),,--quiet)
%.dvi: %.texi
	$(call quiet-command,texi2dvi $(TEXIFLAG) -I . $<,"  GEN   $@")

B
bellard 已提交
450
%.html: %.texi
451
	$(call quiet-command,LC_ALL=C $(MAKEINFO) $(MAKEINFOFLAGS) --html $< -o $@, \
452
	"  GEN   $@")
B
bellard 已提交
453

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

457 458
%.pdf: %.texi
	$(call quiet-command,texi2pdf $(TEXIFLAG) -I . $<,"  GEN   $@")
459 460

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

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

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

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

472
qemu.1: qemu-doc.texi qemu-options.texi qemu-monitor.texi
473
	$(call quiet-command, \
B
Blue Swirl 已提交
474
	  perl -Ww -- $(SRC_PATH)/scripts/texi2pod.pl $< qemu.pod && \
M
Michael Tokarev 已提交
475
	  $(POD2MAN) --section=1 --center=" " --release=" " qemu.pod > $@, \
476
	  "  GEN   $@")
477

478
qemu-img.1: qemu-img.texi qemu-img-cmds.texi
479
	$(call quiet-command, \
B
Blue Swirl 已提交
480
	  perl -Ww -- $(SRC_PATH)/scripts/texi2pod.pl $< qemu-img.pod && \
M
Michael Tokarev 已提交
481
	  $(POD2MAN) --section=1 --center=" " --release=" " qemu-img.pod > $@, \
482
	  "  GEN   $@")
B
bellard 已提交
483

484 485 486
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 已提交
487
	  $(POD2MAN) --section=1 --center=" " --release=" " fsdev/virtfs-proxy-helper.pod > $@, \
488 489
	  "  GEN   $@")

B
bellard 已提交
490
qemu-nbd.8: qemu-nbd.texi
491
	$(call quiet-command, \
B
Blue Swirl 已提交
492
	  perl -Ww -- $(SRC_PATH)/scripts/texi2pod.pl $< qemu-nbd.pod && \
M
Michael Tokarev 已提交
493
	  $(POD2MAN) --section=8 --center=" " --release=" " qemu-nbd.pod > $@, \
494
	  "  GEN   $@")
495 496 497 498 499 500

kvm_stat.1: scripts/kvm/kvm_stat.texi
	$(call quiet-command, \
	  perl -Ww -- $(SRC_PATH)/scripts/texi2pod.pl $< kvm_stat.pod && \
	  $(POD2MAN) --section=1 --center=" " --release=" " kvm_stat.pod > $@, \
	  "  GEN   $@")
B
bellard 已提交
501

502 503
dvi: qemu-doc.dvi qemu-tech.dvi
html: qemu-doc.html qemu-tech.html
504 505
info: qemu-doc.info qemu-tech.info
pdf: qemu-doc.pdf qemu-tech.pdf
506

507 508 509
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
510

511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565
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

566 567
# Add a dependency on the generated files, so that they are always
# rebuilt before other object files
568
ifneq ($(filter-out %clean,$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fail))
569
Makefile: $(GENERATED_HEADERS)
570
endif
571

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