Makefile 19.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 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
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 \
276
		$(gen-out-type) -o "." -i $<, \
W
Wenchao Xia 已提交
277
		"  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
	rm -f ui/shader/*-vert.h ui/shader/*-frag.h
300
	@# May not be present in GENERATED_HEADERS
301 302
	rm -f trace/generated-tracers-dtrace.dtrace*
	rm -f trace/generated-tracers-dtrace.h*
303 304
	rm -f $(foreach f,$(GENERATED_HEADERS),$(f) $(f)-timestamp)
	rm -f $(foreach f,$(GENERATED_SOURCES),$(f) $(f)-timestamp)
S
Stefan Weil 已提交
305
	rm -rf qapi-generated
306
	rm -rf qga/qapi-generated
307
	for d in $(ALL_SUBDIRS); do \
M
Magnus Damm 已提交
308
	if test -d $$d; then $(MAKE) -C $$d $@ || exit 1; fi; \
309
	rm -f $$d/qemu-options.def; \
B
bellard 已提交
310
        done
311

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

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

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

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

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

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

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

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

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

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

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

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

445 446 447 448 449 450 451 452 453 454 455 456 457
# opengl shader programs
ui/shader/%-vert.h: $(SRC_PATH)/ui/shader/%.vert $(SRC_PATH)/scripts/shaderinclude.pl
	@mkdir -p $(dir $@)
	$(call quiet-command,\
		perl $(SRC_PATH)/scripts/shaderinclude.pl $< > $@,\
		"  VERT  $@")

ui/shader/%-frag.h: $(SRC_PATH)/ui/shader/%.frag $(SRC_PATH)/scripts/shaderinclude.pl
	@mkdir -p $(dir $@)
	$(call quiet-command,\
		perl $(SRC_PATH)/scripts/shaderinclude.pl $< > $@,\
		"  FRAG  $@")

458 459 460
ui/console-gl.o: $(SRC_PATH)/ui/console-gl.c \
	ui/shader/texture-blit-vert.h ui/shader/texture-blit-frag.h

B
bellard 已提交
461
# documentation
462 463
MAKEINFO=makeinfo
MAKEINFOFLAGS=--no-headers --no-split --number-sections
464 465 466 467
TEXIFLAG=$(if $(V),,--quiet)
%.dvi: %.texi
	$(call quiet-command,texi2dvi $(TEXIFLAG) -I . $<,"  GEN   $@")

B
bellard 已提交
468
%.html: %.texi
469
	$(call quiet-command,LC_ALL=C $(MAKEINFO) $(MAKEINFOFLAGS) --html $< -o $@, \
470
	"  GEN   $@")
B
bellard 已提交
471

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

475 476
%.pdf: %.texi
	$(call quiet-command,texi2pdf $(TEXIFLAG) -I . $<,"  GEN   $@")
477 478

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

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

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

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

490
qemu.1: qemu-doc.texi qemu-options.texi qemu-monitor.texi
491
	$(call quiet-command, \
B
Blue Swirl 已提交
492
	  perl -Ww -- $(SRC_PATH)/scripts/texi2pod.pl $< qemu.pod && \
M
Michael Tokarev 已提交
493
	  $(POD2MAN) --section=1 --center=" " --release=" " qemu.pod > $@, \
494
	  "  GEN   $@")
495

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

502 503 504
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 已提交
505
	  $(POD2MAN) --section=1 --center=" " --release=" " fsdev/virtfs-proxy-helper.pod > $@, \
506 507
	  "  GEN   $@")

B
bellard 已提交
508
qemu-nbd.8: qemu-nbd.texi
509
	$(call quiet-command, \
B
Blue Swirl 已提交
510
	  perl -Ww -- $(SRC_PATH)/scripts/texi2pod.pl $< qemu-nbd.pod && \
M
Michael Tokarev 已提交
511
	  $(POD2MAN) --section=8 --center=" " --release=" " qemu-nbd.pod > $@, \
512
	  "  GEN   $@")
513 514 515 516 517 518

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

520 521
dvi: qemu-doc.dvi qemu-tech.dvi
html: qemu-doc.html qemu-tech.html
522 523
info: qemu-doc.info qemu-tech.info
pdf: qemu-doc.pdf qemu-tech.pdf
524

525 526 527
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
528

529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551
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 已提交
552
	$(MAKE) install prefix=${INSTDIR}
553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583
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

584 585
# Add a dependency on the generated files, so that they are always
# rebuilt before other object files
586
ifneq ($(filter-out %clean,$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fail))
587
Makefile: $(GENERATED_HEADERS)
588
endif
589

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