Makefile 18.4 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
55
ifeq ($(TRACE_BACKEND),dtrace)
56
GENERATED_HEADERS += trace/generated-tracers-dtrace.h
57
endif
58
GENERATED_SOURCES += trace/generated-tracers.c
59

60 61 62 63 64
ifeq ($(TRACE_BACKEND),ust)
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 136
endif

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

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

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

150 151 152
vl.o: QEMU_CFLAGS+=$(GPROF_CFLAGS)

vl.o: QEMU_CFLAGS+=$(SDL_CFLAGS)
P
pbrook 已提交
153

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

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

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

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

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

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

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

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

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

dtc/%:
	mkdir -p $@

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

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

J
Juan Quintela 已提交
197
bt-host.o: QEMU_CFLAGS += $(BLUEZ_CFLAGS)
B
bellard 已提交
198

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

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

######################################################################
207
# Build libraries
208 209

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

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

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

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

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

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

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

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

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

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

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

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

248
qapi-types.c qapi-types.h :\
249
$(SRC_PATH)/qapi-schema.json $(SRC_PATH)/scripts/qapi-types.py $(qapi-py)
250
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-types.py $(gen-out-type) -o "." -b < $<, "  GEN   $@")
251
qapi-visit.c qapi-visit.h :\
252
$(SRC_PATH)/qapi-schema.json $(SRC_PATH)/scripts/qapi-visit.py $(qapi-py)
253
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-visit.py $(gen-out-type) -o "." -b < $<, "  GEN   $@")
254
qmp-commands.h qmp-marshal.c :\
255
$(SRC_PATH)/qapi-schema.json $(SRC_PATH)/scripts/qapi-commands.py $(qapi-py)
256
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-commands.py $(gen-out-type) -m -o "." < $<, "  GEN   $@")
257

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

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

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

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

B
bellard 已提交
314 315
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 \
316
common  de-ch  es     fo  fr-ca  hu     ja  mk  nl-be      pt  sl     tr \
J
Jan Krupa 已提交
317
bepo    cz
B
bellard 已提交
318

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

339
install-doc: $(DOCS)
340 341
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_docdir)"
	$(INSTALL_DATA) qemu-doc.html  qemu-tech.html "$(DESTDIR)$(qemu_docdir)"
342
	$(INSTALL_DATA) qmp-commands.txt "$(DESTDIR)$(qemu_docdir)"
343
ifdef CONFIG_POSIX
344
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man1"
345 346 347
	$(INSTALL_DATA) qemu.1 "$(DESTDIR)$(mandir)/man1"
ifneq ($(TOOLS),)
	$(INSTALL_DATA) qemu-img.1 "$(DESTDIR)$(mandir)/man1"
348 349
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man8"
	$(INSTALL_DATA) qemu-nbd.8 "$(DESTDIR)$(mandir)/man8"
350
endif
351
endif
352 353 354 355
ifdef CONFIG_VIRTFS
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man1"
	$(INSTALL_DATA) fsdev/virtfs-proxy-helper.1 "$(DESTDIR)$(mandir)/man1"
endif
356 357 358 359

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

360 361 362 363 364 365 366
install-localstatedir:
ifdef CONFIG_POSIX
ifneq (,$(findstring qemu-ga,$(TOOLS)))
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_localstatedir)"/run
endif
endif

367
install-confdir:
368
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_confdir)"
369 370

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

373 374
install: all $(if $(BUILD_DOCS),install-doc) install-sysconfig \
install-datadir install-localstatedir
375
	$(INSTALL_DIR) "$(DESTDIR)$(bindir)"
376
ifneq ($(TOOLS),)
377
	$(INSTALL_PROG) $(STRIP_OPT) $(TOOLS) "$(DESTDIR)$(bindir)"
378
endif
379 380 381 382 383 384
ifneq ($(CONFIG_MODULES),)
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_moddir)"
	for s in $(patsubst %.mo,%$(DSOSUF),$(modules-m)); do \
		$(INSTALL_PROG) $(STRIP_OPT) $$s "$(DESTDIR)$(qemu_moddir)/$${s//\//-}"; \
	done
endif
385 386 387 388
ifneq ($(HELPERS-y),)
	$(INSTALL_DIR) "$(DESTDIR)$(libexecdir)"
	$(INSTALL_PROG) $(STRIP_OPT) $(HELPERS-y) "$(DESTDIR)$(libexecdir)"
endif
T
ths 已提交
389 390
ifneq ($(BLOBS),)
	set -e; for x in $(BLOBS); do \
391
		$(INSTALL_DATA) $(SRC_PATH)/pc-bios/$$x "$(DESTDIR)$(qemu_datadir)"; \
P
pbrook 已提交
392
	done
393 394 395
endif
ifeq ($(CONFIG_GTK),y)
	$(MAKE) -C po $@
T
ths 已提交
396
endif
397
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_datadir)/keymaps"
398
	set -e; for x in $(KEYMAPS); do \
399
		$(INSTALL_DATA) $(SRC_PATH)/pc-bios/keymaps/$$x "$(DESTDIR)$(qemu_datadir)/keymaps"; \
P
pbrook 已提交
400
	done
B
bellard 已提交
401
	for d in $(TARGET_DIRS); do \
402
	$(MAKE) $(SUBDIR_MAKEFLAGS) TARGET_DIR=$$d/ -C $$d $@ || exit 1 ; \
B
bellard 已提交
403
        done
B
bellard 已提交
404

B
bellard 已提交
405
# various test targets
B
bellard 已提交
406
test speed: all
A
Anthony Liguori 已提交
407
	$(MAKE) -C tests/tcg $@
408

A
Alexandre Bique 已提交
409
.PHONY: TAGS
410
TAGS:
D
David Gibson 已提交
411 412
	rm -f $@
	find "$(SRC_PATH)" -name '*.[hc]' -exec etags --append {} +
413

B
bellard 已提交
414 415
cscope:
	rm -f ./cscope.*
416
	find "$(SRC_PATH)" -name "*.[chsS]" -print | sed 's,^\./,,' > ./cscope.files
B
bellard 已提交
417 418
	cscope -b

B
bellard 已提交
419
# documentation
420 421
MAKEINFO=makeinfo
MAKEINFOFLAGS=--no-headers --no-split --number-sections
422 423 424 425
TEXIFLAG=$(if $(V),,--quiet)
%.dvi: %.texi
	$(call quiet-command,texi2dvi $(TEXIFLAG) -I . $<,"  GEN   $@")

B
bellard 已提交
426
%.html: %.texi
427
	$(call quiet-command,LC_ALL=C $(MAKEINFO) $(MAKEINFOFLAGS) --html $< -o $@, \
428
	"  GEN   $@")
B
bellard 已提交
429

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

433 434
%.pdf: %.texi
	$(call quiet-command,texi2pdf $(TEXIFLAG) -I . $<,"  GEN   $@")
435 436

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

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

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

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

448
qemu.1: qemu-doc.texi qemu-options.texi qemu-monitor.texi
449
	$(call quiet-command, \
B
Blue Swirl 已提交
450
	  perl -Ww -- $(SRC_PATH)/scripts/texi2pod.pl $< qemu.pod && \
M
Michael Tokarev 已提交
451
	  $(POD2MAN) --section=1 --center=" " --release=" " qemu.pod > $@, \
452
	  "  GEN   $@")
453

454
qemu-img.1: qemu-img.texi qemu-img-cmds.texi
455
	$(call quiet-command, \
B
Blue Swirl 已提交
456
	  perl -Ww -- $(SRC_PATH)/scripts/texi2pod.pl $< qemu-img.pod && \
M
Michael Tokarev 已提交
457
	  $(POD2MAN) --section=1 --center=" " --release=" " qemu-img.pod > $@, \
458
	  "  GEN   $@")
B
bellard 已提交
459

460 461 462
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 已提交
463
	  $(POD2MAN) --section=1 --center=" " --release=" " fsdev/virtfs-proxy-helper.pod > $@, \
464 465
	  "  GEN   $@")

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

472 473
dvi: qemu-doc.dvi qemu-tech.dvi
html: qemu-doc.html qemu-tech.html
474 475
info: qemu-doc.info qemu-tech.info
pdf: qemu-doc.pdf qemu-tech.pdf
476

477 478 479
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
480

481 482 483 484 485 486 487 488 489 490 491 492 493 494 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
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

536 537
# Add a dependency on the generated files, so that they are always
# rebuilt before other object files
538
ifneq ($(filter-out %clean,$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fail))
539
Makefile: $(GENERATED_HEADERS)
540
endif
541

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