Makefile 21.0 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 155 156
                block-obj-m \
                common-obj-y \
                common-obj-m)
157 158

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

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

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

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

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

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

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

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

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

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

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

dtc/%:
	mkdir -p $@

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

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

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

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

######################################################################
218
# Build libraries
219 220

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

299
msi: $(QEMU_GA_MSI)
300 301 302 303 304 305 306 307 308

$(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

309 310
$(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)" \
311 312 313 314 315 316
	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

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

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

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

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

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

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

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

423

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

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

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

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

B
bellard 已提交
471
cscope:
F
Fam Zheng 已提交
472 473 474
	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 已提交
475

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

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

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

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

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

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

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

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

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

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

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

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

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

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

M
Marc-André Lureau 已提交
545 546 547 548 549 550
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   $@")

551 552 553 554 555
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 已提交
556

557 558
dvi: qemu-doc.dvi qemu-tech.dvi
html: qemu-doc.html qemu-tech.html
559 560
info: qemu-doc.info qemu-tech.info
pdf: qemu-doc.pdf qemu-tech.pdf
561

562 563
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 已提交
564
	qemu-monitor.texi qemu-img-cmds.texi qemu-ga.texi
565

566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588
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 已提交
589
	$(MAKE) install prefix=${INSTDIR}
590 591 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
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

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

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