Makefile 19.0 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
ifdef CONFIG_VIRTFS
88
DOCS+=fsdev/virtfs-proxy-helper.1
89
endif
90 91 92
else
DOCS=
endif
B
bellard 已提交
93

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

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

P
Paul Brook 已提交
109 110
-include $(SUBDIR_DEVICES_MAK_DEP)

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

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

134 135
ifneq ($(wildcard config-host.mak),)
include $(SRC_PATH)/Makefile.objs
136 137 138 139 140 141
endif

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

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

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

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

162
SUBDIR_RULES=$(patsubst %,subdir-%, $(TARGET_DIRS))
163 164
SOFTMMU_SUBDIR_RULES=$(filter %-softmmu,$(SUBDIR_RULES))

165
$(SOFTMMU_SUBDIR_RULES): $(block-obj-y)
166
$(SOFTMMU_SUBDIR_RULES): config-all-devices.mak
167

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

171 172 173 174
subdir-pixman: pixman/Makefile
	$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C pixman V="$(V)" all,)

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

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

180
DTC_MAKE_ARGS=-I$(SRC_PATH)/dtc VPATH=$(SRC_PATH)/dtc -C dtc V="$(V)" LIBFDT_srcdir=$(SRC_PATH)/dtc/libfdt
181 182
DTC_CFLAGS=$(CFLAGS) $(QEMU_CFLAGS)
DTC_CPPFLAGS=-I$(BUILD_DIR)/dtc -I$(SRC_PATH)/dtc -I$(SRC_PATH)/dtc/libfdt
183 184

subdir-dtc:dtc/libfdt dtc/tests
185
	$(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,)
186 187 188 189

dtc/%:
	mkdir -p $@

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

P
Paul Brook 已提交
192 193 194 195 196 197 198
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 已提交
199

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

P
Paolo Bonzini 已提交
205
Makefile: $(version-obj-y) $(version-lobj-y)
206 207

######################################################################
208
# Build libraries
209 210

libqemustub.a: $(stub-obj-y)
211
libqemuutil.a: $(util-obj-y)
212

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

A
Alon Levy 已提交
216
######################################################################
B
bellard 已提交
217

J
Juan Quintela 已提交
218
qemu-img.o: qemu-img-cmds.h
219

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

224 225
qemu-bridge-helper$(EXESUF): qemu-bridge-helper.o

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

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

232
qemu-ga$(EXESUF): LIBS = $(LIBS_QGA)
233
qemu-ga$(EXESUF): QEMU_CFLAGS += -I qga/qapi-generated
234

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

237 238
qapi-py = $(SRC_PATH)/scripts/qapi.py $(SRC_PATH)/scripts/ordereddict.py

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

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

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

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

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

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

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

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

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

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

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

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

387
install-confdir:
388
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_confdir)"
389 390

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

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

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

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

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

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

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

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

454 455
%.pdf: %.texi
	$(call quiet-command,texi2pdf $(TEXIFLAG) -I . $<,"  GEN   $@")
456 457

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

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

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

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

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

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

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

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

493 494
dvi: qemu-doc.dvi qemu-tech.dvi
html: qemu-doc.html qemu-tech.html
495 496
info: qemu-doc.info qemu-tech.info
pdf: qemu-doc.pdf qemu-tech.pdf
497

498 499 500
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
501

502 503 504 505 506 507 508 509 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
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

557 558
# Add a dependency on the generated files, so that they are always
# rebuilt before other object files
559
ifneq ($(filter-out %clean,$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fail))
560
Makefile: $(GENERATED_HEADERS)
561
endif
562

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