Makefile 20.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

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 msi
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 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310
ifdef QEMU_GA_MSI_ENABLED
QEMU_GA_MSI=qemu-ga-$(ARCH).msi

msi: ${QEMU_GA_MSI}

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

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

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

B
bellard 已提交
360 361
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 \
362
common  de-ch  es     fo  fr-ca  hu     ja  mk  nl-be      pt  sl     tr \
J
Jan Krupa 已提交
363
bepo    cz
B
bellard 已提交
364

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

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

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

407 408 409 410 411 412 413
install-localstatedir:
ifdef CONFIG_POSIX
ifneq (,$(findstring qemu-ga,$(TOOLS)))
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_localstatedir)"/run
endif
endif

414

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

B
bellard 已提交
448
# various test targets
B
bellard 已提交
449
test speed: all
A
Anthony Liguori 已提交
450
	$(MAKE) -C tests/tcg $@
451

A
Alexandre Bique 已提交
452
.PHONY: TAGS
453
TAGS:
D
David Gibson 已提交
454 455
	rm -f $@
	find "$(SRC_PATH)" -name '*.[hc]' -exec etags --append {} +
456

B
bellard 已提交
457 458
cscope:
	rm -f ./cscope.*
459
	find "$(SRC_PATH)" -name "*.[chsS]" -print | sed 's,^\./,,' > ./cscope.files
B
bellard 已提交
460 461
	cscope -b

462 463 464 465 466 467 468 469 470 471 472 473 474
# 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  $@")

475 476 477
ui/console-gl.o: $(SRC_PATH)/ui/console-gl.c \
	ui/shader/texture-blit-vert.h ui/shader/texture-blit-frag.h

B
bellard 已提交
478
# documentation
479 480
MAKEINFO=makeinfo
MAKEINFOFLAGS=--no-headers --no-split --number-sections
481 482 483 484
TEXIFLAG=$(if $(V),,--quiet)
%.dvi: %.texi
	$(call quiet-command,texi2dvi $(TEXIFLAG) -I . $<,"  GEN   $@")

B
bellard 已提交
485
%.html: %.texi
486
	$(call quiet-command,LC_ALL=C $(MAKEINFO) $(MAKEINFOFLAGS) --html $< -o $@, \
487
	"  GEN   $@")
B
bellard 已提交
488

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

492 493
%.pdf: %.texi
	$(call quiet-command,texi2pdf $(TEXIFLAG) -I . $<,"  GEN   $@")
494 495

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

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

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

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

507
qemu.1: qemu-doc.texi qemu-options.texi qemu-monitor.texi
508
	$(call quiet-command, \
B
Blue Swirl 已提交
509
	  perl -Ww -- $(SRC_PATH)/scripts/texi2pod.pl $< qemu.pod && \
M
Michael Tokarev 已提交
510
	  $(POD2MAN) --section=1 --center=" " --release=" " qemu.pod > $@, \
511
	  "  GEN   $@")
512

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

519 520 521
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 已提交
522
	  $(POD2MAN) --section=1 --center=" " --release=" " fsdev/virtfs-proxy-helper.pod > $@, \
523 524
	  "  GEN   $@")

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

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

537 538
dvi: qemu-doc.dvi qemu-tech.dvi
html: qemu-doc.html qemu-tech.html
539 540
info: qemu-doc.info qemu-tech.info
pdf: qemu-doc.pdf qemu-tech.pdf
541

542 543 544
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
545

546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568
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 已提交
569
	$(MAKE) install prefix=${INSTDIR}
570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600
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

601 602
# Add a dependency on the generated files, so that they are always
# rebuilt before other object files
603
ifneq ($(filter-out %clean,$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fail))
604
Makefile: $(GENERATED_HEADERS)
605
endif
606

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