Makefile 20.6 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
91
DOCS=qemu-doc.html qemu-tech.html qemu.1 qemu-img.1 qemu-nbd.8 qmp-commands.txt
92 93 94
ifdef CONFIG_LINUX
DOCS+=kvm_stat.1
endif
95
ifdef CONFIG_VIRTFS
96
DOCS+=fsdev/virtfs-proxy-helper.1
97
endif
98 99 100
else
DOCS=
endif
B
bellard 已提交
101

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

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

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

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

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

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

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

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

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

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

171
SUBDIR_RULES=$(patsubst %,subdir-%, $(TARGET_DIRS))
172 173
SOFTMMU_SUBDIR_RULES=$(filter %-softmmu,$(SUBDIR_RULES))

174
$(SOFTMMU_SUBDIR_RULES): $(block-obj-y)
175
$(SOFTMMU_SUBDIR_RULES): config-all-devices.mak
176

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

180 181 182 183
subdir-pixman: pixman/Makefile
	$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C pixman V="$(V)" all,)

pixman/Makefile: $(SRC_PATH)/pixman/configure
184
	(cd pixman; CFLAGS="$(CFLAGS) -fPIC $(extra_cflags) $(extra_ldflags)" $(SRC_PATH)/pixman/configure $(AUTOCONF_HOST) --disable-gtk --disable-shared --enable-static)
185 186 187 188

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

189
DTC_MAKE_ARGS=-I$(SRC_PATH)/dtc VPATH=$(SRC_PATH)/dtc -C dtc V="$(V)" LIBFDT_srcdir=$(SRC_PATH)/dtc/libfdt
190 191
DTC_CFLAGS=$(CFLAGS) $(QEMU_CFLAGS)
DTC_CPPFLAGS=-I$(BUILD_DIR)/dtc -I$(SRC_PATH)/dtc -I$(SRC_PATH)/dtc/libfdt
192 193

subdir-dtc:dtc/libfdt dtc/tests
194
	$(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,)
195 196 197 198

dtc/%:
	mkdir -p $@

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

P
Paul Brook 已提交
201 202 203 204 205 206 207
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 已提交
208

209
$(BUILD_DIR)/version.o: $(SRC_PATH)/version.rc config-host.h | $(BUILD_DIR)/version.lo
210
	$(call quiet-command,$(WINDRES) -I$(BUILD_DIR) -o $@ $<,"  RC    version.o")
211
$(BUILD_DIR)/version.lo: $(SRC_PATH)/version.rc config-host.h
212
	$(call quiet-command,$(WINDRES) -I$(BUILD_DIR) -o $@ $<,"  RC    version.lo")
213

P
Paolo Bonzini 已提交
214
Makefile: $(version-obj-y) $(version-lobj-y)
215 216

######################################################################
217
# Build libraries
218 219

libqemustub.a: $(stub-obj-y)
220
libqemuutil.a: $(util-obj-y)
221

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

A
Alon Levy 已提交
225
######################################################################
B
bellard 已提交
226

J
Juan Quintela 已提交
227
qemu-img.o: qemu-img-cmds.h
228

229 230
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
231
qemu-io$(EXESUF): qemu-io.o $(block-obj-y) libqemuutil.a libqemustub.a
232

233 234
qemu-bridge-helper$(EXESUF): qemu-bridge-helper.o

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

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

241
qemu-ga$(EXESUF): LIBS = $(LIBS_QGA)
242
qemu-ga$(EXESUF): QEMU_CFLAGS += -I qga/qapi-generated
243

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

246 247
qapi-py = $(SRC_PATH)/scripts/qapi.py $(SRC_PATH)/scripts/ordereddict.py

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

264
qapi-modules = $(SRC_PATH)/qapi-schema.json $(SRC_PATH)/qapi/common.json \
265
               $(SRC_PATH)/qapi/block.json $(SRC_PATH)/qapi/block-core.json \
W
Wenchao Xia 已提交
266
               $(SRC_PATH)/qapi/event.json
267

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

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

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

295 296 297
ifdef QEMU_GA_MSI_ENABLED
QEMU_GA_MSI=qemu-ga-$(ARCH).msi

298
msi: $(QEMU_GA_MSI)
299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315

$(QEMU_GA_MSI): qemu-ga.exe

ifdef QEMU_GA_MSI_WITH_VSS
$(QEMU_GA_MSI): qga/vss-win32/qga-vss.dll
endif

$(QEMU_GA_MSI): config-host.mak

$(QEMU_GA_MSI):  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)" \
	wixl -o $@ $(QEMU_GA_MSI_ARCH) $(QEMU_GA_MSI_WITH_VSS) $(QEMU_GA_MSI_MINGW_DLL_PATH) $<, "  WIXL  $@")
else
msi:
	@echo MSI build not configured or dependency resolution failed (reconfigure with --enable-guest-agent-msi option)
endif

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

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

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

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

391
install-doc: $(DOCS)
392 393
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_docdir)"
	$(INSTALL_DATA) qemu-doc.html  qemu-tech.html "$(DESTDIR)$(qemu_docdir)"
394
	$(INSTALL_DATA) qmp-commands.txt "$(DESTDIR)$(qemu_docdir)"
395
ifdef CONFIG_POSIX
396
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man1"
397 398 399
	$(INSTALL_DATA) qemu.1 "$(DESTDIR)$(mandir)/man1"
ifneq ($(TOOLS),)
	$(INSTALL_DATA) qemu-img.1 "$(DESTDIR)$(mandir)/man1"
400 401
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man8"
	$(INSTALL_DATA) qemu-nbd.8 "$(DESTDIR)$(mandir)/man8"
402
endif
403
endif
404 405 406 407
ifdef CONFIG_VIRTFS
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man1"
	$(INSTALL_DATA) fsdev/virtfs-proxy-helper.1 "$(DESTDIR)$(mandir)/man1"
endif
408 409 410 411

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

412 413 414 415 416 417 418
install-localstatedir:
ifdef CONFIG_POSIX
ifneq (,$(findstring qemu-ga,$(TOOLS)))
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_localstatedir)"/run
endif
endif

419

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

B
bellard 已提交
453
# various test targets
B
bellard 已提交
454
test speed: all
A
Anthony Liguori 已提交
455
	$(MAKE) -C tests/tcg $@
456

F
Fam Zheng 已提交
457 458 459 460 461
.PHONY: ctags
ctags:
	rm -f $@
	find "$(SRC_PATH)" -name '*.[hc]' -exec ctags --append {} +

A
Alexandre Bique 已提交
462
.PHONY: TAGS
463
TAGS:
D
David Gibson 已提交
464 465
	rm -f $@
	find "$(SRC_PATH)" -name '*.[hc]' -exec etags --append {} +
466

B
bellard 已提交
467
cscope:
F
Fam Zheng 已提交
468 469 470
	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 已提交
471

472 473 474 475 476 477 478 479 480 481 482 483 484
# 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  $@")

485 486 487
ui/console-gl.o: $(SRC_PATH)/ui/console-gl.c \
	ui/shader/texture-blit-vert.h ui/shader/texture-blit-frag.h

B
bellard 已提交
488
# documentation
489 490
MAKEINFO=makeinfo
MAKEINFOFLAGS=--no-headers --no-split --number-sections
491 492 493 494
TEXIFLAG=$(if $(V),,--quiet)
%.dvi: %.texi
	$(call quiet-command,texi2dvi $(TEXIFLAG) -I . $<,"  GEN   $@")

B
bellard 已提交
495
%.html: %.texi
496
	$(call quiet-command,LC_ALL=C $(MAKEINFO) $(MAKEINFOFLAGS) --html $< -o $@, \
497
	"  GEN   $@")
B
bellard 已提交
498

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

502 503
%.pdf: %.texi
	$(call quiet-command,texi2pdf $(TEXIFLAG) -I . $<,"  GEN   $@")
504 505

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

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

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

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

517
qemu.1: qemu-doc.texi qemu-options.texi qemu-monitor.texi
518
	$(call quiet-command, \
B
Blue Swirl 已提交
519
	  perl -Ww -- $(SRC_PATH)/scripts/texi2pod.pl $< qemu.pod && \
M
Michael Tokarev 已提交
520
	  $(POD2MAN) --section=1 --center=" " --release=" " qemu.pod > $@, \
521
	  "  GEN   $@")
522

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

529 530 531
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 已提交
532
	  $(POD2MAN) --section=1 --center=" " --release=" " fsdev/virtfs-proxy-helper.pod > $@, \
533 534
	  "  GEN   $@")

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

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

547 548
dvi: qemu-doc.dvi qemu-tech.dvi
html: qemu-doc.html qemu-tech.html
549 550
info: qemu-doc.info qemu-tech.info
pdf: qemu-doc.pdf qemu-tech.pdf
551

552 553 554
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
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 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 已提交
579
	$(MAKE) install prefix=${INSTDIR}
580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610
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

611 612
# Add a dependency on the generated files, so that they are always
# rebuilt before other object files
F
Fam Zheng 已提交
613
ifneq ($(filter-out $(UNCHECKED_GOALS),$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fail))
614
Makefile: $(GENERATED_HEADERS)
615
endif
616

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