Makefile 18.1 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
# Don't try to regenerate Makefile or configure
# We don't generate any of them
Makefile: ;
configure: ;

65
.PHONY: all clean cscope distclean dvi html info install install-doc \
66
	pdf recurse-all speed test dist
67

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

J
Juan Quintela 已提交
70
LIBS+=-lz $(LIBS_TOOLS)
71

72 73
HELPERS-$(CONFIG_LINUX) = qemu-bridge-helper$(EXESUF)

74
ifdef BUILD_DOCS
75
DOCS=qemu-doc.html qemu-tech.html qemu.1 qemu-img.1 qemu-nbd.8 qmp-commands.txt
76
ifdef CONFIG_VIRTFS
77
DOCS+=fsdev/virtfs-proxy-helper.1
78
endif
79 80 81
else
DOCS=
endif
B
bellard 已提交
82

83
SUBDIR_MAKEFLAGS=$(if $(V),,--no-print-directory) BUILD_DIR=$(BUILD_DIR)
84
SUBDIR_DEVICES_MAK=$(patsubst %, %/config-devices.mak, $(TARGET_DIRS))
85
SUBDIR_DEVICES_MAK_DEP=$(patsubst %, %-config-devices.mak.d, $(TARGET_DIRS))
86

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

P
Paul Brook 已提交
98 99
-include $(SUBDIR_DEVICES_MAK_DEP)

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

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

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

dummy := $(call unnest-vars,, \
                stub-obj-y \
                util-obj-y \
                qga-obj-y \
                block-obj-y \
                common-obj-y)

ifneq ($(wildcard config-host.mak),)
135 136 137 138 139 140
include $(SRC_PATH)/tests/Makefile
endif
ifeq ($(CONFIG_SMARTCARD_NSS),y)
include $(SRC_PATH)/libcacard/Makefile
endif

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

143 144 145 146
vl.o: QEMU_CFLAGS+=$(GPROF_CFLAGS)

vl.o: QEMU_CFLAGS+=$(SDL_CFLAGS)

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

152
SUBDIR_RULES=$(patsubst %,subdir-%, $(TARGET_DIRS))
153 154 155
SOFTMMU_SUBDIR_RULES=$(filter %-softmmu,$(SUBDIR_RULES))

$(SOFTMMU_SUBDIR_RULES): config-all-devices.mak
156

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

160 161 162 163
subdir-pixman: pixman/Makefile
	$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C pixman V="$(V)" all,)

pixman/Makefile: $(SRC_PATH)/pixman/configure
164
	(cd pixman; CFLAGS="$(CFLAGS) -fPIC $(extra_cflags) $(extra_ldflags)" $(SRC_PATH)/pixman/configure $(AUTOCONF_HOST) --disable-gtk --disable-shared --enable-static)
165 166 167 168

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

169
DTC_MAKE_ARGS=-I$(SRC_PATH)/dtc VPATH=$(SRC_PATH)/dtc -C dtc V="$(V)" LIBFDT_srcdir=$(SRC_PATH)/dtc/libfdt
170 171
DTC_CFLAGS=$(CFLAGS) $(QEMU_CFLAGS)
DTC_CPPFLAGS=-I$(BUILD_DIR)/dtc -I$(SRC_PATH)/dtc -I$(SRC_PATH)/dtc/libfdt
172 173

subdir-dtc:dtc/libfdt dtc/tests
174
	$(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,)
175 176 177 178

dtc/%:
	mkdir -p $@

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

P
Paul Brook 已提交
181 182 183 184 185 186 187
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 已提交
188

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

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

P
Paolo Bonzini 已提交
196
Makefile: $(version-obj-y) $(version-lobj-y)
197 198

######################################################################
199
# Build libraries
200 201

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

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

A
Alon Levy 已提交
207
######################################################################
B
bellard 已提交
208

J
Juan Quintela 已提交
209
qemu-img.o: qemu-img-cmds.h
210

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

215 216
qemu-bridge-helper$(EXESUF): qemu-bridge-helper.o

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

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

223
qemu-ga$(EXESUF): LIBS = $(LIBS_QGA)
224
qemu-ga$(EXESUF): QEMU_CFLAGS += -I qga/qapi-generated
225

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

228 229
qapi-py = $(SRC_PATH)/scripts/qapi.py $(SRC_PATH)/scripts/ordereddict.py

230
qga/qapi-generated/qga-qapi-types.c qga/qapi-generated/qga-qapi-types.h :\
231
$(SRC_PATH)/qga/qapi-schema.json $(SRC_PATH)/scripts/qapi-types.py $(qapi-py)
232 233
	$(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 :\
234
$(SRC_PATH)/qga/qapi-schema.json $(SRC_PATH)/scripts/qapi-visit.py $(qapi-py)
235 236
	$(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 :\
237
$(SRC_PATH)/qga/qapi-schema.json $(SRC_PATH)/scripts/qapi-commands.py $(qapi-py)
238
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-commands.py $(gen-out-type) -o qga/qapi-generated -p "qga-" < $<, "  GEN   $@")
239

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

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

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

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

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

B
bellard 已提交
306 307
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 \
308
common  de-ch  es     fo  fr-ca  hu     ja  mk  nl-be      pt  sl     tr \
J
Jan Krupa 已提交
309
bepo    cz
B
bellard 已提交
310

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

331
install-doc: $(DOCS)
332 333
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_docdir)"
	$(INSTALL_DATA) qemu-doc.html  qemu-tech.html "$(DESTDIR)$(qemu_docdir)"
334
	$(INSTALL_DATA) qmp-commands.txt "$(DESTDIR)$(qemu_docdir)"
335
ifdef CONFIG_POSIX
336
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man1"
337 338 339
	$(INSTALL_DATA) qemu.1 "$(DESTDIR)$(mandir)/man1"
ifneq ($(TOOLS),)
	$(INSTALL_DATA) qemu-img.1 "$(DESTDIR)$(mandir)/man1"
340 341
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man8"
	$(INSTALL_DATA) qemu-nbd.8 "$(DESTDIR)$(mandir)/man8"
342
endif
343
endif
344 345 346 347
ifdef CONFIG_VIRTFS
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man1"
	$(INSTALL_DATA) fsdev/virtfs-proxy-helper.1 "$(DESTDIR)$(mandir)/man1"
endif
348 349 350 351

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

352 353 354 355 356 357 358
install-localstatedir:
ifdef CONFIG_POSIX
ifneq (,$(findstring qemu-ga,$(TOOLS)))
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_localstatedir)"/run
endif
endif

359
install-confdir:
360
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_confdir)"
361 362

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

365 366
install: all $(if $(BUILD_DOCS),install-doc) install-sysconfig \
install-datadir install-localstatedir
367
	$(INSTALL_DIR) "$(DESTDIR)$(bindir)"
368
ifneq ($(TOOLS),)
369
	$(INSTALL_PROG) $(STRIP_OPT) $(TOOLS) "$(DESTDIR)$(bindir)"
370
endif
371 372 373 374 375 376
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
377 378 379 380
ifneq ($(HELPERS-y),)
	$(INSTALL_DIR) "$(DESTDIR)$(libexecdir)"
	$(INSTALL_PROG) $(STRIP_OPT) $(HELPERS-y) "$(DESTDIR)$(libexecdir)"
endif
T
ths 已提交
381 382
ifneq ($(BLOBS),)
	set -e; for x in $(BLOBS); do \
383
		$(INSTALL_DATA) $(SRC_PATH)/pc-bios/$$x "$(DESTDIR)$(qemu_datadir)"; \
P
pbrook 已提交
384
	done
385 386 387
endif
ifeq ($(CONFIG_GTK),y)
	$(MAKE) -C po $@
T
ths 已提交
388
endif
389
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_datadir)/keymaps"
390
	set -e; for x in $(KEYMAPS); do \
391
		$(INSTALL_DATA) $(SRC_PATH)/pc-bios/keymaps/$$x "$(DESTDIR)$(qemu_datadir)/keymaps"; \
P
pbrook 已提交
392
	done
B
bellard 已提交
393
	for d in $(TARGET_DIRS); do \
B
bellard 已提交
394
	$(MAKE) -C $$d $@ || exit 1 ; \
B
bellard 已提交
395
        done
B
bellard 已提交
396

B
bellard 已提交
397
# various test targets
B
bellard 已提交
398
test speed: all
A
Anthony Liguori 已提交
399
	$(MAKE) -C tests/tcg $@
400

A
Alexandre Bique 已提交
401
.PHONY: TAGS
402
TAGS:
D
David Gibson 已提交
403 404
	rm -f $@
	find "$(SRC_PATH)" -name '*.[hc]' -exec etags --append {} +
405

B
bellard 已提交
406 407
cscope:
	rm -f ./cscope.*
408
	find "$(SRC_PATH)" -name "*.[chsS]" -print | sed 's,^\./,,' > ./cscope.files
B
bellard 已提交
409 410
	cscope -b

B
bellard 已提交
411
# documentation
412 413
MAKEINFO=makeinfo
MAKEINFOFLAGS=--no-headers --no-split --number-sections
414 415 416 417
TEXIFLAG=$(if $(V),,--quiet)
%.dvi: %.texi
	$(call quiet-command,texi2dvi $(TEXIFLAG) -I . $<,"  GEN   $@")

B
bellard 已提交
418
%.html: %.texi
419
	$(call quiet-command,LC_ALL=C $(MAKEINFO) $(MAKEINFOFLAGS) --html $< -o $@, \
420
	"  GEN   $@")
B
bellard 已提交
421

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

425 426
%.pdf: %.texi
	$(call quiet-command,texi2pdf $(TEXIFLAG) -I . $<,"  GEN   $@")
427 428

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

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

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

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

440
qemu.1: qemu-doc.texi qemu-options.texi qemu-monitor.texi
441
	$(call quiet-command, \
B
Blue Swirl 已提交
442
	  perl -Ww -- $(SRC_PATH)/scripts/texi2pod.pl $< qemu.pod && \
M
Michael Tokarev 已提交
443
	  $(POD2MAN) --section=1 --center=" " --release=" " qemu.pod > $@, \
444
	  "  GEN   $@")
445

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

452 453 454
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 已提交
455
	  $(POD2MAN) --section=1 --center=" " --release=" " fsdev/virtfs-proxy-helper.pod > $@, \
456 457
	  "  GEN   $@")

B
bellard 已提交
458
qemu-nbd.8: qemu-nbd.texi
459
	$(call quiet-command, \
B
Blue Swirl 已提交
460
	  perl -Ww -- $(SRC_PATH)/scripts/texi2pod.pl $< qemu-nbd.pod && \
M
Michael Tokarev 已提交
461
	  $(POD2MAN) --section=8 --center=" " --release=" " qemu-nbd.pod > $@, \
462
	  "  GEN   $@")
B
bellard 已提交
463

464 465
dvi: qemu-doc.dvi qemu-tech.dvi
html: qemu-doc.html qemu-tech.html
466 467
info: qemu-doc.info qemu-tech.info
pdf: qemu-doc.pdf qemu-tech.pdf
468

469 470 471
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
472

473 474 475 476 477 478 479 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
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

528 529
# Add a dependency on the generated files, so that they are always
# rebuilt before other object files
530
ifneq ($(filter-out %clean,$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fail))
531
Makefile: $(GENERATED_HEADERS)
532
endif
533

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