Makefile 21.1 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 294 295 296 297
# we require QGA_VSS_PROVIDER files to be built alongside qemu-ga
# executable since they are shipped together, but we don't want to actually
# link against them
qemu-ga$(EXESUF): $(qga-obj-y) libqemuutil.a libqemustub.a $(QGA_VSS_PROVIDER)
	$(call LINK, $(filter-out $(QGA_VSS_PROVIDER), $^))
M
Michael Roth 已提交
298

299 300 301
ifdef QEMU_GA_MSI_ENABLED
QEMU_GA_MSI=qemu-ga-$(ARCH).msi

302
msi: $(QEMU_GA_MSI)
303 304 305 306 307

$(QEMU_GA_MSI): qemu-ga.exe

$(QEMU_GA_MSI): config-host.mak

308 309
$(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)" \
310 311 312
	wixl -o $@ $(QEMU_GA_MSI_ARCH) $(QEMU_GA_MSI_WITH_VSS) $(QEMU_GA_MSI_MINGW_DLL_PATH) $<, "  WIXL  $@")
else
msi:
313
	@echo "MSI build not configured or dependency resolution failed (reconfigure with --enable-guest-agent-msi option)"
314 315
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
M
Marc-André Lureau 已提交
403 404 405
ifneq (,$(findstring qemu-ga,$(TOOLS)))
	$(INSTALL_DATA) qemu-ga.8 "$(DESTDIR)$(mandir)/man8"
endif
406
endif
407 408 409 410
ifdef CONFIG_VIRTFS
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man1"
	$(INSTALL_DATA) fsdev/virtfs-proxy-helper.1 "$(DESTDIR)$(mandir)/man1"
endif
411 412 413 414

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

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

422

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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