Makefile 18.6 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 48 49 50
GENERATED_HEADERS = config-host.h qemu-options.def
GENERATED_HEADERS += qmp-commands.h qapi-types.h qapi-visit.h
GENERATED_SOURCES += qmp-marshal.c qapi-types.c qapi-visit.c

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

54
GENERATED_HEADERS += trace/generated-tracers.h
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

L
Lluís Vilanova 已提交
60
ifeq ($(findstring ust,$(TRACE_BACKENDS)),ust)
61 62 63 64
GENERATED_HEADERS += trace/generated-ust-provider.h
GENERATED_SOURCES += trace/generated-ust.c
endif

65 66 67 68 69
# Don't try to regenerate Makefile or configure
# We don't generate any of them
Makefile: ;
configure: ;

70
.PHONY: all clean cscope distclean dvi html info install install-doc \
71
	pdf recurse-all speed test dist
72

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

J
Juan Quintela 已提交
75
LIBS+=-lz $(LIBS_TOOLS)
76

77 78
HELPERS-$(CONFIG_LINUX) = qemu-bridge-helper$(EXESUF)

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

88
SUBDIR_MAKEFLAGS=$(if $(V),,--no-print-directory) BUILD_DIR=$(BUILD_DIR)
89
SUBDIR_DEVICES_MAK=$(patsubst %, %/config-devices.mak, $(TARGET_DIRS))
90
SUBDIR_DEVICES_MAK_DEP=$(patsubst %, %-config-devices.mak.d, $(TARGET_DIRS))
91

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

P
Paul Brook 已提交
103 104
-include $(SUBDIR_DEVICES_MAK_DEP)

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

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

128 129
ifneq ($(wildcard config-host.mak),)
include $(SRC_PATH)/Makefile.objs
130 131 132 133 134 135
endif

dummy := $(call unnest-vars,, \
                stub-obj-y \
                util-obj-y \
                qga-obj-y \
136
                qga-vss-dll-obj-y \
137
                block-obj-y \
138 139 140
                block-obj-m \
                common-obj-y \
                common-obj-m)
141 142

ifneq ($(wildcard config-host.mak),)
143 144 145 146 147 148
include $(SRC_PATH)/tests/Makefile
endif
ifeq ($(CONFIG_SMARTCARD_NSS),y)
include $(SRC_PATH)/libcacard/Makefile
endif

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

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

156
SUBDIR_RULES=$(patsubst %,subdir-%, $(TARGET_DIRS))
157 158
SOFTMMU_SUBDIR_RULES=$(filter %-softmmu,$(SUBDIR_RULES))

159
$(SOFTMMU_SUBDIR_RULES): $(block-obj-y)
160
$(SOFTMMU_SUBDIR_RULES): config-all-devices.mak
161

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

165 166 167 168
subdir-pixman: pixman/Makefile
	$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C pixman V="$(V)" all,)

pixman/Makefile: $(SRC_PATH)/pixman/configure
169
	(cd pixman; CFLAGS="$(CFLAGS) -fPIC $(extra_cflags) $(extra_ldflags)" $(SRC_PATH)/pixman/configure $(AUTOCONF_HOST) --disable-gtk --disable-shared --enable-static)
170 171 172 173

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

174
DTC_MAKE_ARGS=-I$(SRC_PATH)/dtc VPATH=$(SRC_PATH)/dtc -C dtc V="$(V)" LIBFDT_srcdir=$(SRC_PATH)/dtc/libfdt
175 176
DTC_CFLAGS=$(CFLAGS) $(QEMU_CFLAGS)
DTC_CPPFLAGS=-I$(BUILD_DIR)/dtc -I$(SRC_PATH)/dtc -I$(SRC_PATH)/dtc/libfdt
177 178

subdir-dtc:dtc/libfdt dtc/tests
179
	$(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,)
180 181 182 183

dtc/%:
	mkdir -p $@

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

P
Paul Brook 已提交
186 187 188 189 190 191 192
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 已提交
193

194
$(BUILD_DIR)/version.o: $(SRC_PATH)/version.rc $(BUILD_DIR)/config-host.h | $(BUILD_DIR)/version.lo
195
	$(call quiet-command,$(WINDRES) -I$(BUILD_DIR) -o $@ $<,"  RC    version.o")
196
$(BUILD_DIR)/version.lo: $(SRC_PATH)/version.rc $(BUILD_DIR)/config-host.h
197
	$(call quiet-command,$(WINDRES) -I$(BUILD_DIR) -o $@ $<,"  RC    version.lo")
198

P
Paolo Bonzini 已提交
199
Makefile: $(version-obj-y) $(version-lobj-y)
200 201

######################################################################
202
# Build libraries
203 204

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

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

A
Alon Levy 已提交
210
######################################################################
B
bellard 已提交
211

J
Juan Quintela 已提交
212
qemu-img.o: qemu-img-cmds.h
213

214 215
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
216
qemu-io$(EXESUF): qemu-io.o $(block-obj-y) libqemuutil.a libqemustub.a
217

218 219
qemu-bridge-helper$(EXESUF): qemu-bridge-helper.o

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

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

226
qemu-ga$(EXESUF): LIBS = $(LIBS_QGA)
227
qemu-ga$(EXESUF): QEMU_CFLAGS += -I qga/qapi-generated
228

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

231 232
qapi-py = $(SRC_PATH)/scripts/qapi.py $(SRC_PATH)/scripts/ordereddict.py

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

249 250 251
qapi-modules = $(SRC_PATH)/qapi-schema.json $(SRC_PATH)/qapi/common.json \
               $(SRC_PATH)/qapi/block.json $(SRC_PATH)/qapi/block-core.json

252
qapi-types.c qapi-types.h :\
253
$(qapi-modules) $(SRC_PATH)/scripts/qapi-types.py $(qapi-py)
254
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-types.py \
255
		$(gen-out-type) -o "." -b -i $<, \
256
		"  GEN   $@")
257
qapi-visit.c qapi-visit.h :\
258
$(qapi-modules) $(SRC_PATH)/scripts/qapi-visit.py $(qapi-py)
259
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-visit.py \
260
		$(gen-out-type) -o "." -b -i $<, \
261
		"  GEN   $@")
262
qmp-commands.h qmp-marshal.c :\
263
$(qapi-modules) $(SRC_PATH)/scripts/qapi-commands.py $(qapi-py)
264
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-commands.py \
265
		$(gen-out-type) -o "." -m -i $<, \
266
		"  GEN   $@")
267

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

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

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

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

B
bellard 已提交
321 322
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 \
323
common  de-ch  es     fo  fr-ca  hu     ja  mk  nl-be      pt  sl     tr \
J
Jan Krupa 已提交
324
bepo    cz
B
bellard 已提交
325

T
ths 已提交
326
ifdef INSTALL_BLOBS
327
BLOBS=bios.bin bios-256k.bin sgabios.bin vgabios.bin vgabios-cirrus.bin \
G
Gerd Hoffmann 已提交
328
vgabios-stdvga.bin vgabios-vmware.bin vgabios-qxl.bin \
329
acpi-dsdt.aml q35-acpi-dsdt.aml \
330
ppc_rom.bin openbios-sparc32 openbios-sparc64 openbios-ppc QEMU,tcx.bin QEMU,cgthree.bin \
331 332
pxe-e1000.rom pxe-eepro100.rom pxe-ne2k_pci.rom \
pxe-pcnet.rom pxe-rtl8139.rom pxe-virtio.rom \
333 334
efi-e1000.rom efi-eepro100.rom efi-ne2k_pci.rom \
efi-pcnet.rom efi-rtl8139.rom efi-virtio.rom \
A
Anthony Liguori 已提交
335
qemu-icon.bmp qemu_logo_no_text.svg \
336
bamboo.dtb petalogix-s3adsp1800.dtb petalogix-ml605.dtb \
J
Jan Kiszka 已提交
337
multiboot.bin linuxboot.bin kvmvapic.bin \
338
s390-zipl.rom \
339
s390-ccw.img \
340 341
spapr-rtas.bin slof.bin \
palcode-clipper
T
ths 已提交
342 343 344 345
else
BLOBS=
endif

346
install-doc: $(DOCS)
347 348
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_docdir)"
	$(INSTALL_DATA) qemu-doc.html  qemu-tech.html "$(DESTDIR)$(qemu_docdir)"
349
	$(INSTALL_DATA) qmp-commands.txt "$(DESTDIR)$(qemu_docdir)"
350
ifdef CONFIG_POSIX
351
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man1"
352 353 354
	$(INSTALL_DATA) qemu.1 "$(DESTDIR)$(mandir)/man1"
ifneq ($(TOOLS),)
	$(INSTALL_DATA) qemu-img.1 "$(DESTDIR)$(mandir)/man1"
355 356
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man8"
	$(INSTALL_DATA) qemu-nbd.8 "$(DESTDIR)$(mandir)/man8"
357
endif
358
endif
359 360 361 362
ifdef CONFIG_VIRTFS
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man1"
	$(INSTALL_DATA) fsdev/virtfs-proxy-helper.1 "$(DESTDIR)$(mandir)/man1"
endif
363 364 365 366

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

367 368 369 370 371 372 373
install-localstatedir:
ifdef CONFIG_POSIX
ifneq (,$(findstring qemu-ga,$(TOOLS)))
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_localstatedir)"/run
endif
endif

374
install-confdir:
375
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_confdir)"
376 377

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

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

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

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

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

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

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

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

448 449
%.pdf: %.texi
	$(call quiet-command,texi2pdf $(TEXIFLAG) -I . $<,"  GEN   $@")
450 451

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

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

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

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

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

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

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

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

487 488
dvi: qemu-doc.dvi qemu-tech.dvi
html: qemu-doc.html qemu-tech.html
489 490
info: qemu-doc.info qemu-tech.info
pdf: qemu-doc.pdf qemu-tech.pdf
491

492 493 494
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
495

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

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

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