Makefile 20.5 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 9 10
# Before including a proper config-host.mak, assume we are in the source tree
SRC_PATH=.

UNCHECKED_GOALS := %clean TAGS cscope

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; \
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 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315
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

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

A
Alexandre Bique 已提交
457
.PHONY: TAGS
458
TAGS:
D
David Gibson 已提交
459 460
	rm -f $@
	find "$(SRC_PATH)" -name '*.[hc]' -exec etags --append {} +
461

B
bellard 已提交
462
cscope:
F
Fam Zheng 已提交
463 464 465
	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 已提交
466

467 468 469 470 471 472 473 474 475 476 477 478 479
# 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  $@")

480 481 482
ui/console-gl.o: $(SRC_PATH)/ui/console-gl.c \
	ui/shader/texture-blit-vert.h ui/shader/texture-blit-frag.h

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

B
bellard 已提交
490
%.html: %.texi
491
	$(call quiet-command,LC_ALL=C $(MAKEINFO) $(MAKEINFOFLAGS) --html $< -o $@, \
492
	"  GEN   $@")
B
bellard 已提交
493

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

497 498
%.pdf: %.texi
	$(call quiet-command,texi2pdf $(TEXIFLAG) -I . $<,"  GEN   $@")
499 500

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

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

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

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

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

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

524 525 526
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 已提交
527
	  $(POD2MAN) --section=1 --center=" " --release=" " fsdev/virtfs-proxy-helper.pod > $@, \
528 529
	  "  GEN   $@")

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

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

542 543
dvi: qemu-doc.dvi qemu-tech.dvi
html: qemu-doc.html qemu-tech.html
544 545
info: qemu-doc.info qemu-tech.info
pdf: qemu-doc.pdf qemu-tech.pdf
546

547 548 549
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
550

551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573
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 已提交
574
	$(MAKE) install prefix=${INSTDIR}
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 601 602 603 604 605
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

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

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