Makefile 21.6 KB
Newer Older
1 2
# Makefile for QEMU.

S
Stefan Weil 已提交
3 4
# Always point to the root of the build tree (needs GNU make).
BUILD_DIR=$(CURDIR)
5

F
Fam Zheng 已提交
6 7 8
# Before including a proper config-host.mak, assume we are in the source tree
SRC_PATH=.

F
Fam Zheng 已提交
9
UNCHECKED_GOALS := %clean TAGS cscope ctags
F
Fam Zheng 已提交
10

11
# All following code might depend on configuration variables
12
ifneq ($(wildcard config-host.mak),)
P
Paul Brook 已提交
13
# Put the all: rule here so that config-host.mak can contain dependencies.
S
Stefan Weil 已提交
14
all:
P
pbrook 已提交
15
include config-host.mak
16 17 18 19 20 21 22 23 24 25 26

# Check that we're not trying to do an out-of-tree build from
# a tree that's been used for an in-tree build.
ifneq ($(realpath $(SRC_PATH)),$(realpath .))
ifneq ($(wildcard $(SRC_PATH)/config-host.mak),)
$(error This is an out of tree build but your source tree ($(SRC_PATH)) \
seems to have been used for an in-tree build. You can fix this by running \
"make distclean && rm -rf *-linux-user *-softmmu" in your source tree)
endif
endif

27 28 29 30 31 32
CONFIG_SOFTMMU := $(if $(filter %-softmmu,$(TARGET_DIRS)),y)
CONFIG_USER_ONLY := $(if $(filter %-user,$(TARGET_DIRS)),y)
CONFIG_ALL=y
-include config-all-devices.mak
-include config-all-disas.mak

A
aliguori 已提交
33
include $(SRC_PATH)/rules.mak
34
config-host.mak: $(SRC_PATH)/configure
35
	@echo $@ is out-of-date, running configure
36 37 38 39 40 41 42 43
	@# TODO: The next lines include code which supports a smooth
	@# transition from old configurations without config.status.
	@# This code can be removed after QEMU 1.7.
	@if test -x config.status; then \
	    ./config.status; \
        else \
	    sed -n "/.*Configured with/s/[^:]*: //p" $@ | sh; \
	fi
44 45
else
config-host.mak:
F
Fam Zheng 已提交
46
ifneq ($(filter-out $(UNCHECKED_GOALS),$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fail))
47 48 49
	@echo "Please call configure before running make!"
	@exit 1
endif
50
endif
B
bellard 已提交
51

52
GENERATED_HEADERS = config-host.h qemu-options.def
W
Wenchao Xia 已提交
53 54
GENERATED_HEADERS += qmp-commands.h qapi-types.h qapi-visit.h qapi-event.h
GENERATED_SOURCES += qmp-marshal.c qapi-types.c qapi-visit.c qapi-event.c
55

56 57 58
GENERATED_HEADERS += trace/generated-events.h
GENERATED_SOURCES += trace/generated-events.c

59
GENERATED_HEADERS += trace/generated-tracers.h
L
Lluís Vilanova 已提交
60
ifeq ($(findstring dtrace,$(TRACE_BACKENDS)),dtrace)
61
GENERATED_HEADERS += trace/generated-tracers-dtrace.h
62
endif
63
GENERATED_SOURCES += trace/generated-tracers.c
64

65 66
GENERATED_HEADERS += trace/generated-tcg-tracers.h

67
GENERATED_HEADERS += trace/generated-helpers-wrappers.h
68
GENERATED_HEADERS += trace/generated-helpers.h
69
GENERATED_SOURCES += trace/generated-helpers.c
70

L
Lluís Vilanova 已提交
71
ifeq ($(findstring ust,$(TRACE_BACKENDS)),ust)
72 73 74 75
GENERATED_HEADERS += trace/generated-ust-provider.h
GENERATED_SOURCES += trace/generated-ust.c
endif

76 77 78 79 80
# Don't try to regenerate Makefile or configure
# We don't generate any of them
Makefile: ;
configure: ;

81
.PHONY: all clean cscope distclean dvi html info install install-doc \
82
	pdf recurse-all speed test dist msi
83

P
Paolo Bonzini 已提交
84
$(call set-vpath, $(SRC_PATH))
P
pbrook 已提交
85

J
Juan Quintela 已提交
86
LIBS+=-lz $(LIBS_TOOLS)
87

88 89
HELPERS-$(CONFIG_LINUX) = qemu-bridge-helper$(EXESUF)

90
ifdef BUILD_DOCS
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
                block-obj-m \
155 156
                crypto-obj-y \
                crypto-aes-obj-y \
157
                qom-obj-y \
158 159
                common-obj-y \
                common-obj-m)
160 161

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

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

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

175
SUBDIR_RULES=$(patsubst %,subdir-%, $(TARGET_DIRS))
176 177
SOFTMMU_SUBDIR_RULES=$(filter %-softmmu,$(SUBDIR_RULES))

178
$(SOFTMMU_SUBDIR_RULES): $(block-obj-y)
179
$(SOFTMMU_SUBDIR_RULES): $(crypto-obj-y)
180
$(SOFTMMU_SUBDIR_RULES): $(qom-obj-y)
181
$(SOFTMMU_SUBDIR_RULES): config-all-devices.mak
182

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

186 187 188 189
subdir-pixman: pixman/Makefile
	$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C pixman V="$(V)" all,)

pixman/Makefile: $(SRC_PATH)/pixman/configure
190
	(cd pixman; CFLAGS="$(CFLAGS) -fPIC $(extra_cflags) $(extra_ldflags)" $(SRC_PATH)/pixman/configure $(AUTOCONF_HOST) --disable-gtk --disable-shared --enable-static)
191 192 193 194

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

195
DTC_MAKE_ARGS=-I$(SRC_PATH)/dtc VPATH=$(SRC_PATH)/dtc -C dtc V="$(V)" LIBFDT_srcdir=$(SRC_PATH)/dtc/libfdt
196 197
DTC_CFLAGS=$(CFLAGS) $(QEMU_CFLAGS)
DTC_CPPFLAGS=-I$(BUILD_DIR)/dtc -I$(SRC_PATH)/dtc -I$(SRC_PATH)/dtc/libfdt
198 199

subdir-dtc:dtc/libfdt dtc/tests
200
	$(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,)
201 202 203 204

dtc/%:
	mkdir -p $@

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

P
Paul Brook 已提交
207 208 209 210 211 212 213
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 已提交
214

215
$(BUILD_DIR)/version.o: $(SRC_PATH)/version.rc config-host.h | $(BUILD_DIR)/version.lo
216
	$(call quiet-command,$(WINDRES) -I$(BUILD_DIR) -o $@ $<,"  RC    version.o")
217
$(BUILD_DIR)/version.lo: $(SRC_PATH)/version.rc config-host.h
218
	$(call quiet-command,$(WINDRES) -I$(BUILD_DIR) -o $@ $<,"  RC    version.lo")
219

P
Paolo Bonzini 已提交
220
Makefile: $(version-obj-y) $(version-lobj-y)
221 222

######################################################################
223
# Build libraries
224 225

libqemustub.a: $(stub-obj-y)
226
libqemuutil.a: $(util-obj-y)
227

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

A
Alon Levy 已提交
231
######################################################################
B
bellard 已提交
232

J
Juan Quintela 已提交
233
qemu-img.o: qemu-img-cmds.h
234

235 236 237
qemu-img$(EXESUF): qemu-img.o $(block-obj-y) $(crypto-obj-y) $(qom-obj-y) libqemuutil.a libqemustub.a
qemu-nbd$(EXESUF): qemu-nbd.o $(block-obj-y) $(crypto-obj-y) $(qom-obj-y) libqemuutil.a libqemustub.a
qemu-io$(EXESUF): qemu-io.o $(block-obj-y) $(crypto-obj-y) $(qom-obj-y) libqemuutil.a libqemustub.a
238

239 240
qemu-bridge-helper$(EXESUF): qemu-bridge-helper.o

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

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

247
qemu-ga$(EXESUF): LIBS = $(LIBS_QGA)
248
qemu-ga$(EXESUF): QEMU_CFLAGS += -I qga/qapi-generated
249

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

252 253
qapi-py = $(SRC_PATH)/scripts/qapi.py $(SRC_PATH)/scripts/ordereddict.py

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

270
qapi-modules = $(SRC_PATH)/qapi-schema.json $(SRC_PATH)/qapi/common.json \
271
               $(SRC_PATH)/qapi/block.json $(SRC_PATH)/qapi/block-core.json \
W
Wenchao Xia 已提交
272
               $(SRC_PATH)/qapi/event.json
273

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

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

298 299 300 301 302
# 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 已提交
303

304 305 306
ifdef QEMU_GA_MSI_ENABLED
QEMU_GA_MSI=qemu-ga-$(ARCH).msi

307
msi: $(QEMU_GA_MSI)
308 309 310 311 312

$(QEMU_GA_MSI): qemu-ga.exe

$(QEMU_GA_MSI): config-host.mak

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

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

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

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

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

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

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

420 421 422 423 424 425 426
install-localstatedir:
ifdef CONFIG_POSIX
ifneq (,$(findstring qemu-ga,$(TOOLS)))
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_localstatedir)"/run
endif
endif

427

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

B
bellard 已提交
461
# various test targets
B
bellard 已提交
462
test speed: all
A
Anthony Liguori 已提交
463
	$(MAKE) -C tests/tcg $@
464

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

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

B
bellard 已提交
475
cscope:
F
Fam Zheng 已提交
476 477 478
	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 已提交
479

480 481 482 483 484 485 486 487 488 489 490 491 492
# 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  $@")

493 494 495
ui/console-gl.o: $(SRC_PATH)/ui/console-gl.c \
	ui/shader/texture-blit-vert.h ui/shader/texture-blit-frag.h

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

B
bellard 已提交
503
%.html: %.texi
504
	$(call quiet-command,LC_ALL=C $(MAKEINFO) $(MAKEINFOFLAGS) --html $< -o $@, \
505
	"  GEN   $@")
B
bellard 已提交
506

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

510 511
%.pdf: %.texi
	$(call quiet-command,texi2pdf $(TEXIFLAG) -I . $<,"  GEN   $@")
512 513

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

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

519 520 521
qemu-monitor-info.texi: $(SRC_PATH)/hmp-commands-info.hx
	$(call quiet-command,sh $(SRC_PATH)/scripts/hxtool -t < $< > $@,"  GEN   $@")

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

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

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

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

540 541 542
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 已提交
543
	  $(POD2MAN) --section=1 --center=" " --release=" " fsdev/virtfs-proxy-helper.pod > $@, \
544 545
	  "  GEN   $@")

B
bellard 已提交
546
qemu-nbd.8: qemu-nbd.texi
547
	$(call quiet-command, \
B
Blue Swirl 已提交
548
	  perl -Ww -- $(SRC_PATH)/scripts/texi2pod.pl $< qemu-nbd.pod && \
M
Michael Tokarev 已提交
549
	  $(POD2MAN) --section=8 --center=" " --release=" " qemu-nbd.pod > $@, \
550
	  "  GEN   $@")
551

M
Marc-André Lureau 已提交
552 553 554 555 556 557
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   $@")

558 559 560 561 562
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 已提交
563

564 565
dvi: qemu-doc.dvi qemu-tech.dvi
html: qemu-doc.html qemu-tech.html
566 567
info: qemu-doc.info qemu-tech.info
pdf: qemu-doc.pdf qemu-tech.pdf
568

569 570
qemu-doc.dvi qemu-doc.html qemu-doc.info qemu-doc.pdf: \
	qemu-img.texi qemu-nbd.texi qemu-options.texi \
571 572
	qemu-monitor.texi qemu-img-cmds.texi qemu-ga.texi \
	qemu-monitor-info.texi
573

574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596
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 已提交
597
	$(MAKE) install prefix=${INSTDIR}
598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628
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

629 630
# Add a dependency on the generated files, so that they are always
# rebuilt before other object files
F
Fam Zheng 已提交
631
ifneq ($(filter-out $(UNCHECKED_GOALS),$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fail))
632
Makefile: $(GENERATED_HEADERS)
633
endif
634

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