Makefile 21.3 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

F
Fam Zheng 已提交
6 7 8
# Before including a proper config-host.mak, assume we are in the source tree
SRC_PATH=.

F
Fam Zheng 已提交
9
UNCHECKED_GOALS := %clean TAGS cscope ctags
F
Fam Zheng 已提交
10

11
# All following code might depend on configuration variables
12
ifneq ($(wildcard config-host.mak),)
P
Paul Brook 已提交
13
# Put the all: rule here so that config-host.mak can contain dependencies.
S
Stefan Weil 已提交
14
all:
P
pbrook 已提交
15
include config-host.mak
16 17 18 19 20 21 22 23 24 25 26

# 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

27 28 29 30 31 32
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 已提交
33
include $(SRC_PATH)/rules.mak
34
config-host.mak: $(SRC_PATH)/configure
35
	@echo $@ is out-of-date, running configure
36 37 38 39 40 41 42 43
	@# 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
44 45
else
config-host.mak:
F
Fam Zheng 已提交
46
ifneq ($(filter-out $(UNCHECKED_GOALS),$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fail))
47 48 49
	@echo "Please call configure before running make!"
	@exit 1
endif
50
endif
B
bellard 已提交
51

52
GENERATED_HEADERS = config-host.h qemu-options.def
W
Wenchao Xia 已提交
53 54
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
55

56 57 58
GENERATED_HEADERS += trace/generated-events.h
GENERATED_SOURCES += trace/generated-events.c

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

65 66
GENERATED_HEADERS += trace/generated-tcg-tracers.h

67
GENERATED_HEADERS += trace/generated-helpers-wrappers.h
68
GENERATED_HEADERS += trace/generated-helpers.h
69
GENERATED_SOURCES += trace/generated-helpers.c
70

L
Lluís Vilanova 已提交
71
ifeq ($(findstring ust,$(TRACE_BACKENDS)),ust)
72 73 74 75
GENERATED_HEADERS += trace/generated-ust-provider.h
GENERATED_SOURCES += trace/generated-ust.c
endif

76 77 78 79 80
# Don't try to regenerate Makefile or configure
# We don't generate any of them
Makefile: ;
configure: ;

81
.PHONY: all clean cscope distclean dvi html info install install-doc \
82
	pdf recurse-all speed test dist msi
83

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

J
Juan Quintela 已提交
86
LIBS+=-lz $(LIBS_TOOLS)
87

88 89
HELPERS-$(CONFIG_LINUX) = qemu-bridge-helper$(EXESUF)

90
ifdef BUILD_DOCS
M
Marc-André Lureau 已提交
91 92
DOCS=qemu-doc.html qemu-tech.html qemu.1 qemu-img.1 qemu-nbd.8 qemu-ga.8
DOCS+=qmp-commands.txt
93 94 95
ifdef CONFIG_LINUX
DOCS+=kvm_stat.1
endif
96
ifdef CONFIG_VIRTFS
97
DOCS+=fsdev/virtfs-proxy-helper.1
98
endif
99 100 101
else
DOCS=
endif
B
bellard 已提交
102

103
SUBDIR_MAKEFLAGS=$(if $(V),,--no-print-directory) BUILD_DIR=$(BUILD_DIR)
104
SUBDIR_DEVICES_MAK=$(patsubst %, %/config-devices.mak, $(TARGET_DIRS))
105
SUBDIR_DEVICES_MAK_DEP=$(patsubst %, %-config-devices.mak.d, $(TARGET_DIRS))
106

107 108 109 110
ifeq ($(SUBDIR_DEVICES_MAK),)
config-all-devices.mak:
	$(call quiet-command,echo '# no devices' > $@,"  GEN   $@")
else
111
config-all-devices.mak: $(SUBDIR_DEVICES_MAK)
112 113 114 115
	$(call quiet-command, sed -n \
             's|^\([^=]*\)=\(.*\)$$|\1:=$$(findstring y,$$(\1)\2)|p' \
             $(SUBDIR_DEVICES_MAK) | sort -u > $@, \
             "  GEN   $@")
116
endif
117

P
Paul Brook 已提交
118 119
-include $(SUBDIR_DEVICES_MAK_DEP)

120
%/config-devices.mak: default-configs/%.mak
121 122
	$(call quiet-command, \
            $(SHELL) $(SRC_PATH)/scripts/make_device_config.sh $< $*-config-devices.mak.d $@ > $@.tmp, "  GEN   $@.tmp")
123
	$(call quiet-command, if test -f $@; then \
124
	  if cmp -s $@.old $@; then \
P
Paul Brook 已提交
125 126
	    mv $@.tmp $@; \
	    cp -p $@ $@.old; \
127 128 129 130 131 132 133 134 135
	  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; \
136
	 else \
137 138
	  mv $@.tmp $@; \
	  cp -p $@ $@.old; \
S
Stefan Weil 已提交
139
	 fi, "  GEN   $@");
140 141 142 143

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

144 145
ifneq ($(wildcard config-host.mak),)
include $(SRC_PATH)/Makefile.objs
146 147 148 149 150 151
endif

dummy := $(call unnest-vars,, \
                stub-obj-y \
                util-obj-y \
                qga-obj-y \
152
                qga-vss-dll-obj-y \
153
                block-obj-y \
154
                block-obj-m \
155 156
                crypto-obj-y \
                crypto-aes-obj-y \
157 158
                common-obj-y \
                common-obj-m)
159 160

ifneq ($(wildcard config-host.mak),)
161 162 163 164 165 166
include $(SRC_PATH)/tests/Makefile
endif
ifeq ($(CONFIG_SMARTCARD_NSS),y)
include $(SRC_PATH)/libcacard/Makefile
endif

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

169 170
config-host.h: config-host.h-timestamp
config-host.h-timestamp: config-host.mak
B
Blue Swirl 已提交
171
qemu-options.def: $(SRC_PATH)/qemu-options.hx
B
Blue Swirl 已提交
172
	$(call quiet-command,sh $(SRC_PATH)/scripts/hxtool -h < $< > $@,"  GEN   $@")
173

174
SUBDIR_RULES=$(patsubst %,subdir-%, $(TARGET_DIRS))
175 176
SOFTMMU_SUBDIR_RULES=$(filter %-softmmu,$(SUBDIR_RULES))

177
$(SOFTMMU_SUBDIR_RULES): $(block-obj-y)
178
$(SOFTMMU_SUBDIR_RULES): $(crypto-obj-y)
179
$(SOFTMMU_SUBDIR_RULES): config-all-devices.mak
180

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

184 185 186 187
subdir-pixman: pixman/Makefile
	$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C pixman V="$(V)" all,)

pixman/Makefile: $(SRC_PATH)/pixman/configure
188
	(cd pixman; CFLAGS="$(CFLAGS) -fPIC $(extra_cflags) $(extra_ldflags)" $(SRC_PATH)/pixman/configure $(AUTOCONF_HOST) --disable-gtk --disable-shared --enable-static)
189 190 191 192

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

193
DTC_MAKE_ARGS=-I$(SRC_PATH)/dtc VPATH=$(SRC_PATH)/dtc -C dtc V="$(V)" LIBFDT_srcdir=$(SRC_PATH)/dtc/libfdt
194 195
DTC_CFLAGS=$(CFLAGS) $(QEMU_CFLAGS)
DTC_CPPFLAGS=-I$(BUILD_DIR)/dtc -I$(SRC_PATH)/dtc -I$(SRC_PATH)/dtc/libfdt
196 197

subdir-dtc:dtc/libfdt dtc/tests
198
	$(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,)
199 200 201 202

dtc/%:
	mkdir -p $@

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

P
Paul Brook 已提交
205 206 207 208 209 210 211
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 已提交
212

213
$(BUILD_DIR)/version.o: $(SRC_PATH)/version.rc config-host.h | $(BUILD_DIR)/version.lo
214
	$(call quiet-command,$(WINDRES) -I$(BUILD_DIR) -o $@ $<,"  RC    version.o")
215
$(BUILD_DIR)/version.lo: $(SRC_PATH)/version.rc config-host.h
216
	$(call quiet-command,$(WINDRES) -I$(BUILD_DIR) -o $@ $<,"  RC    version.lo")
217

P
Paolo Bonzini 已提交
218
Makefile: $(version-obj-y) $(version-lobj-y)
219 220

######################################################################
221
# Build libraries
222 223

libqemustub.a: $(stub-obj-y)
224
libqemuutil.a: $(util-obj-y)
225

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

A
Alon Levy 已提交
229
######################################################################
B
bellard 已提交
230

J
Juan Quintela 已提交
231
qemu-img.o: qemu-img-cmds.h
232

233 234 235
qemu-img$(EXESUF): qemu-img.o $(block-obj-y) $(crypto-obj-y) libqemuutil.a libqemustub.a
qemu-nbd$(EXESUF): qemu-nbd.o $(block-obj-y) $(crypto-obj-y) libqemuutil.a libqemustub.a
qemu-io$(EXESUF): qemu-io.o $(block-obj-y) $(crypto-obj-y) libqemuutil.a libqemustub.a
236

237 238
qemu-bridge-helper$(EXESUF): qemu-bridge-helper.o

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

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

245
qemu-ga$(EXESUF): LIBS = $(LIBS_QGA)
246
qemu-ga$(EXESUF): QEMU_CFLAGS += -I qga/qapi-generated
247

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

250 251
qapi-py = $(SRC_PATH)/scripts/qapi.py $(SRC_PATH)/scripts/ordereddict.py

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

268
qapi-modules = $(SRC_PATH)/qapi-schema.json $(SRC_PATH)/qapi/common.json \
269
               $(SRC_PATH)/qapi/block.json $(SRC_PATH)/qapi/block-core.json \
W
Wenchao Xia 已提交
270
               $(SRC_PATH)/qapi/event.json
271

272
qapi-types.c qapi-types.h :\
273
$(qapi-modules) $(SRC_PATH)/scripts/qapi-types.py $(qapi-py)
274
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-types.py \
275
		$(gen-out-type) -o "." -b $<, \
276
		"  GEN   $@")
277
qapi-visit.c qapi-visit.h :\
278
$(qapi-modules) $(SRC_PATH)/scripts/qapi-visit.py $(qapi-py)
279
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-visit.py \
280
		$(gen-out-type) -o "." -b $<, \
281
		"  GEN   $@")
W
Wenchao Xia 已提交
282 283 284
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 \
285
		$(gen-out-type) -o "." $<, \
W
Wenchao Xia 已提交
286
		"  GEN   $@")
287
qmp-commands.h qmp-marshal.c :\
288
$(qapi-modules) $(SRC_PATH)/scripts/qapi-commands.py $(qapi-py)
289
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-commands.py \
290
		$(gen-out-type) -o "." -m $<, \
291
		"  GEN   $@")
292

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

296 297 298 299 300
# we require QGA_VSS_PROVIDER files to be built alongside qemu-ga
# executable since they are shipped together, but we don't want to actually
# link against them
qemu-ga$(EXESUF): $(qga-obj-y) libqemuutil.a libqemustub.a $(QGA_VSS_PROVIDER)
	$(call LINK, $(filter-out $(QGA_VSS_PROVIDER), $^))
M
Michael Roth 已提交
301

302 303 304
ifdef QEMU_GA_MSI_ENABLED
QEMU_GA_MSI=qemu-ga-$(ARCH).msi

305
msi: $(QEMU_GA_MSI)
306 307 308 309 310

$(QEMU_GA_MSI): qemu-ga.exe

$(QEMU_GA_MSI): config-host.mak

311 312
$(QEMU_GA_MSI):  $(SRC_PATH)/qga/installer/qemu-ga.wxs
	$(call quiet-command,QEMU_GA_VERSION="$(QEMU_GA_VERSION)" QEMU_GA_MANUFACTURER="$(QEMU_GA_MANUFACTURER)" QEMU_GA_DISTRO="$(QEMU_GA_DISTRO)" BUILD_DIR="$(BUILD_DIR)" \
313 314 315
	wixl -o $@ $(QEMU_GA_MSI_ARCH) $(QEMU_GA_MSI_WITH_VSS) $(QEMU_GA_MSI_MINGW_DLL_PATH) $<, "  WIXL  $@")
else
msi:
316
	@echo "MSI build not configured or dependency resolution failed (reconfigure with --enable-guest-agent-msi option)"
317 318
endif

319
clean:
320
# avoid old build problems by removing potentially incorrect old files
321
	rm -f config.mak op-i386.h opc-i386.h gen-op-i386.h op-arm.h opc-arm.h gen-op-arm.h
322
	rm -f qemu-options.def
323
	rm -f *.msi
F
Fam Zheng 已提交
324
	find . \( -name '*.l[oa]' -o -name '*.so' -o -name '*.dll' -o -name '*.mo' -o -name '*.[oda]' \) -type f -exec rm {} +
325
	rm -f $(filter-out %.tlb,$(TOOLS)) $(HELPERS-y) qemu-ga TAGS cscope.* *.pod *~ */*~
326 327
	rm -f fsdev/*.pod
	rm -rf .libs */.libs
B
Blue Swirl 已提交
328
	rm -f qemu-img-cmds.h
329
	rm -f ui/shader/*-vert.h ui/shader/*-frag.h
330
	@# May not be present in GENERATED_HEADERS
331 332
	rm -f trace/generated-tracers-dtrace.dtrace*
	rm -f trace/generated-tracers-dtrace.h*
333 334
	rm -f $(foreach f,$(GENERATED_HEADERS),$(f) $(f)-timestamp)
	rm -f $(foreach f,$(GENERATED_SOURCES),$(f) $(f)-timestamp)
S
Stefan Weil 已提交
335
	rm -rf qapi-generated
336
	rm -rf qga/qapi-generated
337
	for d in $(ALL_SUBDIRS); do \
M
Magnus Damm 已提交
338
	if test -d $$d; then $(MAKE) -C $$d $@ || exit 1; fi; \
339
	rm -f $$d/qemu-options.def; \
B
bellard 已提交
340
        done
341

342 343 344 345 346 347 348
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 已提交
349
distclean: clean
M
Magnus Damm 已提交
350
	rm -f config-host.mak config-host.h* config-host.ld $(DOCS) qemu-options.texi qemu-img-cmds.texi qemu-monitor.texi
351 352
	rm -f config-all-devices.mak config-all-disas.mak config.status
	rm -f po/*.mo tests/qemu-iotests/common.env
M
Magnus Damm 已提交
353
	rm -f roms/seabios/config.mak roms/vgabios/config.mak
B
Brad Hards 已提交
354 355 356 357
	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
358
	rm -f config.log
359
	rm -f linux-headers/asm
360
	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 已提交
361
	for d in $(TARGET_DIRS); do \
B
bellard 已提交
362
	rm -rf $$d || exit 1 ; \
B
updated  
bellard 已提交
363
        done
364
	rm -Rf .sdk
E
Ed Maste 已提交
365 366
	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 已提交
367

B
bellard 已提交
368 369
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 \
370
common  de-ch  es     fo  fr-ca  hu     ja  mk  nl-be      pt  sl     tr \
J
Jan Krupa 已提交
371
bepo    cz
B
bellard 已提交
372

T
ths 已提交
373
ifdef INSTALL_BLOBS
374
BLOBS=bios.bin bios-256k.bin sgabios.bin vgabios.bin vgabios-cirrus.bin \
375
vgabios-stdvga.bin vgabios-vmware.bin vgabios-qxl.bin vgabios-virtio.bin \
376
acpi-dsdt.aml q35-acpi-dsdt.aml \
377
ppc_rom.bin openbios-sparc32 openbios-sparc64 openbios-ppc QEMU,tcx.bin QEMU,cgthree.bin \
378 379
pxe-e1000.rom pxe-eepro100.rom pxe-ne2k_pci.rom \
pxe-pcnet.rom pxe-rtl8139.rom pxe-virtio.rom \
380 381
efi-e1000.rom efi-eepro100.rom efi-ne2k_pci.rom \
efi-pcnet.rom efi-rtl8139.rom efi-virtio.rom \
A
Anthony Liguori 已提交
382
qemu-icon.bmp qemu_logo_no_text.svg \
383
bamboo.dtb petalogix-s3adsp1800.dtb petalogix-ml605.dtb \
J
Jan Kiszka 已提交
384
multiboot.bin linuxboot.bin kvmvapic.bin \
385
s390-zipl.rom \
386
s390-ccw.img \
387
spapr-rtas.bin slof.bin \
388 389
palcode-clipper \
u-boot.e500
T
ths 已提交
390 391 392 393
else
BLOBS=
endif

394
install-doc: $(DOCS)
395 396
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_docdir)"
	$(INSTALL_DATA) qemu-doc.html  qemu-tech.html "$(DESTDIR)$(qemu_docdir)"
397
	$(INSTALL_DATA) qmp-commands.txt "$(DESTDIR)$(qemu_docdir)"
398
ifdef CONFIG_POSIX
399
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man1"
400 401 402
	$(INSTALL_DATA) qemu.1 "$(DESTDIR)$(mandir)/man1"
ifneq ($(TOOLS),)
	$(INSTALL_DATA) qemu-img.1 "$(DESTDIR)$(mandir)/man1"
403 404
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man8"
	$(INSTALL_DATA) qemu-nbd.8 "$(DESTDIR)$(mandir)/man8"
405
endif
M
Marc-André Lureau 已提交
406 407 408
ifneq (,$(findstring qemu-ga,$(TOOLS)))
	$(INSTALL_DATA) qemu-ga.8 "$(DESTDIR)$(mandir)/man8"
endif
409
endif
410 411 412 413
ifdef CONFIG_VIRTFS
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man1"
	$(INSTALL_DATA) fsdev/virtfs-proxy-helper.1 "$(DESTDIR)$(mandir)/man1"
endif
414 415 416 417

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

418 419 420 421 422 423 424
install-localstatedir:
ifdef CONFIG_POSIX
ifneq (,$(findstring qemu-ga,$(TOOLS)))
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_localstatedir)"/run
endif
endif

425

426
install: all $(if $(BUILD_DOCS),install-doc) \
427
install-datadir install-localstatedir
428
ifneq ($(TOOLS),)
429
	$(call install-prog,$(TOOLS),$(DESTDIR)$(bindir))
430
endif
431 432
ifneq ($(CONFIG_MODULES),)
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_moddir)"
433 434
	for s in $(modules-m:.mo=$(DSOSUF)); do \
		t="$(DESTDIR)$(qemu_moddir)/$$(echo $$s | tr / -)"; \
435
		$(INSTALL_LIB) $$s "$$t"; \
436
		test -z "$(STRIP)" || $(STRIP) "$$t"; \
437 438
	done
endif
439
ifneq ($(HELPERS-y),)
440
	$(call install-prog,$(HELPERS-y),$(DESTDIR)$(libexecdir))
441
endif
T
ths 已提交
442 443
ifneq ($(BLOBS),)
	set -e; for x in $(BLOBS); do \
444
		$(INSTALL_DATA) $(SRC_PATH)/pc-bios/$$x "$(DESTDIR)$(qemu_datadir)"; \
P
pbrook 已提交
445
	done
446 447 448
endif
ifeq ($(CONFIG_GTK),y)
	$(MAKE) -C po $@
T
ths 已提交
449
endif
450
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_datadir)/keymaps"
451
	set -e; for x in $(KEYMAPS); do \
452
		$(INSTALL_DATA) $(SRC_PATH)/pc-bios/keymaps/$$x "$(DESTDIR)$(qemu_datadir)/keymaps"; \
P
pbrook 已提交
453
	done
454
	$(INSTALL_DATA) $(SRC_PATH)/trace-events "$(DESTDIR)$(qemu_datadir)/trace-events"
B
bellard 已提交
455
	for d in $(TARGET_DIRS); do \
456
	$(MAKE) $(SUBDIR_MAKEFLAGS) TARGET_DIR=$$d/ -C $$d $@ || exit 1 ; \
B
bellard 已提交
457
        done
B
bellard 已提交
458

B
bellard 已提交
459
# various test targets
B
bellard 已提交
460
test speed: all
A
Anthony Liguori 已提交
461
	$(MAKE) -C tests/tcg $@
462

F
Fam Zheng 已提交
463 464 465 466 467
.PHONY: ctags
ctags:
	rm -f $@
	find "$(SRC_PATH)" -name '*.[hc]' -exec ctags --append {} +

A
Alexandre Bique 已提交
468
.PHONY: TAGS
469
TAGS:
D
David Gibson 已提交
470 471
	rm -f $@
	find "$(SRC_PATH)" -name '*.[hc]' -exec etags --append {} +
472

B
bellard 已提交
473
cscope:
F
Fam Zheng 已提交
474 475 476
	rm -f "$(SRC_PATH)"/cscope.*
	find "$(SRC_PATH)/" -name "*.[chsS]" -print | sed 's,^\./,,' > "$(SRC_PATH)/cscope.files"
	cscope -b -i"$(SRC_PATH)/cscope.files"
B
bellard 已提交
477

478 479 480 481 482 483 484 485 486 487 488 489 490
# 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  $@")

491 492 493
ui/console-gl.o: $(SRC_PATH)/ui/console-gl.c \
	ui/shader/texture-blit-vert.h ui/shader/texture-blit-frag.h

B
bellard 已提交
494
# documentation
495 496
MAKEINFO=makeinfo
MAKEINFOFLAGS=--no-headers --no-split --number-sections
497 498 499 500
TEXIFLAG=$(if $(V),,--quiet)
%.dvi: %.texi
	$(call quiet-command,texi2dvi $(TEXIFLAG) -I . $<,"  GEN   $@")

B
bellard 已提交
501
%.html: %.texi
502
	$(call quiet-command,LC_ALL=C $(MAKEINFO) $(MAKEINFOFLAGS) --html $< -o $@, \
503
	"  GEN   $@")
B
bellard 已提交
504

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

508 509
%.pdf: %.texi
	$(call quiet-command,texi2pdf $(TEXIFLAG) -I . $<,"  GEN   $@")
510 511

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

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

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

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

523
qemu.1: qemu-doc.texi qemu-options.texi qemu-monitor.texi
524
	$(call quiet-command, \
B
Blue Swirl 已提交
525
	  perl -Ww -- $(SRC_PATH)/scripts/texi2pod.pl $< qemu.pod && \
M
Michael Tokarev 已提交
526
	  $(POD2MAN) --section=1 --center=" " --release=" " qemu.pod > $@, \
527
	  "  GEN   $@")
528

529
qemu-img.1: qemu-img.texi qemu-img-cmds.texi
530
	$(call quiet-command, \
B
Blue Swirl 已提交
531
	  perl -Ww -- $(SRC_PATH)/scripts/texi2pod.pl $< qemu-img.pod && \
M
Michael Tokarev 已提交
532
	  $(POD2MAN) --section=1 --center=" " --release=" " qemu-img.pod > $@, \
533
	  "  GEN   $@")
B
bellard 已提交
534

535 536 537
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 已提交
538
	  $(POD2MAN) --section=1 --center=" " --release=" " fsdev/virtfs-proxy-helper.pod > $@, \
539 540
	  "  GEN   $@")

B
bellard 已提交
541
qemu-nbd.8: qemu-nbd.texi
542
	$(call quiet-command, \
B
Blue Swirl 已提交
543
	  perl -Ww -- $(SRC_PATH)/scripts/texi2pod.pl $< qemu-nbd.pod && \
M
Michael Tokarev 已提交
544
	  $(POD2MAN) --section=8 --center=" " --release=" " qemu-nbd.pod > $@, \
545
	  "  GEN   $@")
546

M
Marc-André Lureau 已提交
547 548 549 550 551 552
qemu-ga.8: qemu-ga.texi
	$(call quiet-command, \
	  perl -Ww -- $(SRC_PATH)/scripts/texi2pod.pl $< qemu-ga.pod && \
	  $(POD2MAN) --section=8 --center=" " --release=" " qemu-ga.pod > $@, \
	  "  GEN   $@")

553 554 555 556 557
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 已提交
558

559 560
dvi: qemu-doc.dvi qemu-tech.dvi
html: qemu-doc.html qemu-tech.html
561 562
info: qemu-doc.info qemu-tech.info
pdf: qemu-doc.pdf qemu-tech.pdf
563

564 565
qemu-doc.dvi qemu-doc.html qemu-doc.info qemu-doc.pdf: \
	qemu-img.texi qemu-nbd.texi qemu-options.texi \
M
Marc-André Lureau 已提交
566
	qemu-monitor.texi qemu-img-cmds.texi qemu-ga.texi
567

568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590
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 已提交
591
	$(MAKE) install prefix=${INSTDIR}
592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622
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

623 624
# Add a dependency on the generated files, so that they are always
# rebuilt before other object files
F
Fam Zheng 已提交
625
ifneq ($(filter-out $(UNCHECKED_GOALS),$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fail))
626
Makefile: $(GENERATED_HEADERS)
627
endif
628

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