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 $< $*-config-devices.mak.d $@ > $@.tmp, "  GEN   $@.tmp")
117
	$(call quiet-command, if test -f $@; then \
118
	  if cmp -s $@.old $@; then \
P
Paul Brook 已提交
119 120
	    mv $@.tmp $@; \
	    cp -p $@ $@.old; \
121 122 123 124 125 126 127 128 129
	  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; \
130
	 else \
131 132
	  mv $@.tmp $@; \
	  cp -p $@ $@.old; \
133
	 fi, "  GEN  $@");
134 135 136 137

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

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

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

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

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

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

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

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

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

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

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

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

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

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

dtc/%:
	mkdir -p $@

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

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

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

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

######################################################################
212
# Build libraries
213 214

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 已提交
502

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

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

512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534
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
E
Ed Maste 已提交
535
	$(MAKE) install prefix=${INSTDIR}
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 566
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

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

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