Makefile 19.7 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-" $<, \
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-" $<, \
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-" $<, \
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 $<, \
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 $<, \
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 "." $<, \
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 $<, \
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 \
345
vgabios-stdvga.bin vgabios-vmware.bin vgabios-qxl.bin vgabios-virtio.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

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

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

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

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

440 441 442 443 444 445 446 447 448 449 450 451 452
# 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  $@")

453 454 455
ui/console-gl.o: $(SRC_PATH)/ui/console-gl.c \
	ui/shader/texture-blit-vert.h ui/shader/texture-blit-frag.h

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

B
bellard 已提交
463
%.html: %.texi
464
	$(call quiet-command,LC_ALL=C $(MAKEINFO) $(MAKEINFOFLAGS) --html $< -o $@, \
465
	"  GEN   $@")
B
bellard 已提交
466

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

470 471
%.pdf: %.texi
	$(call quiet-command,texi2pdf $(TEXIFLAG) -I . $<,"  GEN   $@")
472 473

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

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

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

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

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

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

497 498 499
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 已提交
500
	  $(POD2MAN) --section=1 --center=" " --release=" " fsdev/virtfs-proxy-helper.pod > $@, \
501 502
	  "  GEN   $@")

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

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

515 516
dvi: qemu-doc.dvi qemu-tech.dvi
html: qemu-doc.html qemu-tech.html
517 518
info: qemu-doc.info qemu-tech.info
pdf: qemu-doc.pdf qemu-tech.pdf
519

520 521 522
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
523

524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546
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 已提交
547
	$(MAKE) install prefix=${INSTDIR}
548 549 550 551 552 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
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

579 580
# Add a dependency on the generated files, so that they are always
# rebuilt before other object files
581
ifneq ($(filter-out %clean,$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fail))
582
Makefile: $(GENERATED_HEADERS)
583
endif
584

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