Makefile 18.9 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
GENERATED_HEADERS += trace/generated-helpers-wrappers.h
61
GENERATED_HEADERS += trace/generated-helpers.h
62
GENERATED_SOURCES += trace/generated-helpers.c
63

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

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

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

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

J
Juan Quintela 已提交
79
LIBS+=-lz $(LIBS_TOOLS)
80

81 82
HELPERS-$(CONFIG_LINUX) = qemu-bridge-helper$(EXESUF)

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

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

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

P
Paul Brook 已提交
107 108
-include $(SUBDIR_DEVICES_MAK_DEP)

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

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

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

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

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

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

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

160
SUBDIR_RULES=$(patsubst %,subdir-%, $(TARGET_DIRS))
161 162
SOFTMMU_SUBDIR_RULES=$(filter %-softmmu,$(SUBDIR_RULES))

163
$(SOFTMMU_SUBDIR_RULES): $(block-obj-y)
164
$(SOFTMMU_SUBDIR_RULES): config-all-devices.mak
165

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

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

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

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

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

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

dtc/%:
	mkdir -p $@

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

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

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

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

######################################################################
206
# Build libraries
207 208

libqemustub.a: $(stub-obj-y)
W
Wenchao Xia 已提交
209
libqemuutil.a: $(util-obj-y) qapi-types.o qapi-visit.o qapi-event.o
210

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

A
Alon Levy 已提交
214
######################################################################
B
bellard 已提交
215

J
Juan Quintela 已提交
216
qemu-img.o: qemu-img-cmds.h
217

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

222 223
qemu-bridge-helper$(EXESUF): qemu-bridge-helper.o

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

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

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

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

235 236
qapi-py = $(SRC_PATH)/scripts/qapi.py $(SRC_PATH)/scripts/ordereddict.py

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

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

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

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

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

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

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

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

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

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

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

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

385
install-confdir:
386
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_confdir)"
387 388

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

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

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

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

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

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

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

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

451 452
%.pdf: %.texi
	$(call quiet-command,texi2pdf $(TEXIFLAG) -I . $<,"  GEN   $@")
453 454

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

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

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

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

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

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

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

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

490 491
dvi: qemu-doc.dvi qemu-tech.dvi
html: qemu-doc.html qemu-tech.html
492 493
info: qemu-doc.info qemu-tech.info
pdf: qemu-doc.pdf qemu-tech.pdf
494

495 496 497
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
498

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

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

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