Makefile 18.9 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

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

65 66 67 68 69
# Don't try to regenerate Makefile or configure
# We don't generate any of them
Makefile: ;
configure: ;

70
.PHONY: all clean cscope distclean dvi html info install install-doc \
71
	pdf recurse-all speed test dist
72

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

J
Juan Quintela 已提交
75
LIBS+=-lz $(LIBS_TOOLS)
76

77 78
HELPERS-$(CONFIG_LINUX) = qemu-bridge-helper$(EXESUF)

79
ifdef BUILD_DOCS
80
DOCS=qemu-doc.html qemu-tech.html qemu.1 qemu-img.1 qemu-nbd.8 qmp-commands.txt
81
ifdef CONFIG_VIRTFS
82
DOCS+=fsdev/virtfs-proxy-helper.1
83
endif
84 85 86
else
DOCS=
endif
B
bellard 已提交
87

88
SUBDIR_MAKEFLAGS=$(if $(V),,--no-print-directory) BUILD_DIR=$(BUILD_DIR)
89
SUBDIR_DEVICES_MAK=$(patsubst %, %/config-devices.mak, $(TARGET_DIRS))
90
SUBDIR_DEVICES_MAK_DEP=$(patsubst %, %-config-devices.mak.d, $(TARGET_DIRS))
91

92 93 94 95
ifeq ($(SUBDIR_DEVICES_MAK),)
config-all-devices.mak:
	$(call quiet-command,echo '# no devices' > $@,"  GEN   $@")
else
96
config-all-devices.mak: $(SUBDIR_DEVICES_MAK)
97 98 99 100
	$(call quiet-command, sed -n \
             's|^\([^=]*\)=\(.*\)$$|\1:=$$(findstring y,$$(\1)\2)|p' \
             $(SUBDIR_DEVICES_MAK) | sort -u > $@, \
             "  GEN   $@")
101
endif
102

P
Paul Brook 已提交
103 104
-include $(SUBDIR_DEVICES_MAK_DEP)

105
%/config-devices.mak: default-configs/%.mak
B
Blue Swirl 已提交
106
	$(call quiet-command,$(SHELL) $(SRC_PATH)/scripts/make_device_config.sh $@ $<, "  GEN   $@")
107
	@if test -f $@; then \
108
	  if cmp -s $@.old $@; then \
P
Paul Brook 已提交
109 110
	    mv $@.tmp $@; \
	    cp -p $@ $@.old; \
111 112 113 114 115 116 117 118 119
	  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; \
120
	 else \
121 122
	  mv $@.tmp $@; \
	  cp -p $@ $@.old; \
123 124 125 126 127
	 fi

defconfig:
	rm -f config-all-devices.mak $(SUBDIR_DEVICES_MAK)

128 129
ifneq ($(wildcard config-host.mak),)
include $(SRC_PATH)/Makefile.objs
130 131 132 133 134 135
endif

dummy := $(call unnest-vars,, \
                stub-obj-y \
                util-obj-y \
                qga-obj-y \
136
                qga-vss-dll-obj-y \
137
                block-obj-y \
138 139 140
                block-obj-m \
                common-obj-y \
                common-obj-m)
141 142

ifneq ($(wildcard config-host.mak),)
143 144 145 146 147 148
include $(SRC_PATH)/tests/Makefile
endif
ifeq ($(CONFIG_SMARTCARD_NSS),y)
include $(SRC_PATH)/libcacard/Makefile
endif

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

151 152
config-host.h: config-host.h-timestamp
config-host.h-timestamp: config-host.mak
B
Blue Swirl 已提交
153
qemu-options.def: $(SRC_PATH)/qemu-options.hx
B
Blue Swirl 已提交
154
	$(call quiet-command,sh $(SRC_PATH)/scripts/hxtool -h < $< > $@,"  GEN   $@")
155

156
SUBDIR_RULES=$(patsubst %,subdir-%, $(TARGET_DIRS))
157 158
SOFTMMU_SUBDIR_RULES=$(filter %-softmmu,$(SUBDIR_RULES))

159
$(SOFTMMU_SUBDIR_RULES): $(block-obj-y)
160
$(SOFTMMU_SUBDIR_RULES): config-all-devices.mak
161

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

165 166 167 168
subdir-pixman: pixman/Makefile
	$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C pixman V="$(V)" all,)

pixman/Makefile: $(SRC_PATH)/pixman/configure
169
	(cd pixman; CFLAGS="$(CFLAGS) -fPIC $(extra_cflags) $(extra_ldflags)" $(SRC_PATH)/pixman/configure $(AUTOCONF_HOST) --disable-gtk --disable-shared --enable-static)
170 171 172 173

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

174
DTC_MAKE_ARGS=-I$(SRC_PATH)/dtc VPATH=$(SRC_PATH)/dtc -C dtc V="$(V)" LIBFDT_srcdir=$(SRC_PATH)/dtc/libfdt
175 176
DTC_CFLAGS=$(CFLAGS) $(QEMU_CFLAGS)
DTC_CPPFLAGS=-I$(BUILD_DIR)/dtc -I$(SRC_PATH)/dtc -I$(SRC_PATH)/dtc/libfdt
177 178

subdir-dtc:dtc/libfdt dtc/tests
179
	$(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,)
180 181 182 183

dtc/%:
	mkdir -p $@

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

P
Paul Brook 已提交
186 187 188 189 190 191 192
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 已提交
193

194
$(BUILD_DIR)/version.o: $(SRC_PATH)/version.rc $(BUILD_DIR)/config-host.h | $(BUILD_DIR)/version.lo
195
	$(call quiet-command,$(WINDRES) -I$(BUILD_DIR) -o $@ $<,"  RC    version.o")
196
$(BUILD_DIR)/version.lo: $(SRC_PATH)/version.rc $(BUILD_DIR)/config-host.h
197
	$(call quiet-command,$(WINDRES) -I$(BUILD_DIR) -o $@ $<,"  RC    version.lo")
198

P
Paolo Bonzini 已提交
199
Makefile: $(version-obj-y) $(version-lobj-y)
200 201

######################################################################
202
# Build libraries
203 204

libqemustub.a: $(stub-obj-y)
W
Wenchao Xia 已提交
205
libqemuutil.a: $(util-obj-y) qapi-types.o qapi-visit.o qapi-event.o
206

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

A
Alon Levy 已提交
210
######################################################################
B
bellard 已提交
211

J
Juan Quintela 已提交
212
qemu-img.o: qemu-img-cmds.h
213

214 215
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
216
qemu-io$(EXESUF): qemu-io.o $(block-obj-y) libqemuutil.a libqemustub.a
217

218 219
qemu-bridge-helper$(EXESUF): qemu-bridge-helper.o

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

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

226
qemu-ga$(EXESUF): LIBS = $(LIBS_QGA)
227
qemu-ga$(EXESUF): QEMU_CFLAGS += -I qga/qapi-generated
228

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

231 232
qapi-py = $(SRC_PATH)/scripts/qapi.py $(SRC_PATH)/scripts/ordereddict.py

233
qga/qapi-generated/qga-qapi-types.c qga/qapi-generated/qga-qapi-types.h :\
234
$(SRC_PATH)/qga/qapi-schema.json $(SRC_PATH)/scripts/qapi-types.py $(qapi-py)
235
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-types.py \
236
		$(gen-out-type) -o qga/qapi-generated -p "qga-" -i $<, \
237
		"  GEN   $@")
238
qga/qapi-generated/qga-qapi-visit.c qga/qapi-generated/qga-qapi-visit.h :\
239
$(SRC_PATH)/qga/qapi-schema.json $(SRC_PATH)/scripts/qapi-visit.py $(qapi-py)
240
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-visit.py \
241
		$(gen-out-type) -o qga/qapi-generated -p "qga-" -i $<, \
242
		"  GEN   $@")
243
qga/qapi-generated/qga-qmp-commands.h qga/qapi-generated/qga-qmp-marshal.c :\
244
$(SRC_PATH)/qga/qapi-schema.json $(SRC_PATH)/scripts/qapi-commands.py $(qapi-py)
245
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-commands.py \
246
		$(gen-out-type) -o qga/qapi-generated -p "qga-" -i $<, \
247
		"  GEN   $@")
248

249 250 251
qapi-modules = $(SRC_PATH)/qapi-schema.json $(SRC_PATH)/qapi/common.json \
               $(SRC_PATH)/qapi/block.json $(SRC_PATH)/qapi/block-core.json

252
qapi-types.c qapi-types.h :\
253
$(qapi-modules) $(SRC_PATH)/scripts/qapi-types.py $(qapi-py)
254
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-types.py \
255
		$(gen-out-type) -o "." -b -i $<, \
256
		"  GEN   $@")
257
qapi-visit.c qapi-visit.h :\
258
$(qapi-modules) $(SRC_PATH)/scripts/qapi-visit.py $(qapi-py)
259
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-visit.py \
260
		$(gen-out-type) -o "." -b -i $<, \
261
		"  GEN   $@")
W
Wenchao Xia 已提交
262 263 264 265 266
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 \
		$(gen-out-type) -o "." -b -i $<, \
		"  GEN   $@")
267
qmp-commands.h qmp-marshal.c :\
268
$(qapi-modules) $(SRC_PATH)/scripts/qapi-commands.py $(qapi-py)
269
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-commands.py \
270
		$(gen-out-type) -o "." -m -i $<, \
271
		"  GEN   $@")
272

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

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

279
clean:
280
# avoid old build problems by removing potentially incorrect old files
281
	rm -f config.mak op-i386.h opc-i386.h gen-op-i386.h op-arm.h opc-arm.h gen-op-arm.h
282
	rm -f qemu-options.def
F
Fam Zheng 已提交
283
	find . \( -name '*.l[oa]' -o -name '*.so' -o -name '*.dll' -o -name '*.mo' -o -name '*.[oda]' \) -type f -exec rm {} +
284
	rm -f $(filter-out %.tlb,$(TOOLS)) $(HELPERS-y) qemu-ga TAGS cscope.* *.pod *~ */*~
285 286
	rm -f fsdev/*.pod
	rm -rf .libs */.libs
B
Blue Swirl 已提交
287
	rm -f qemu-img-cmds.h
288
	@# May not be present in GENERATED_HEADERS
289 290
	rm -f trace/generated-tracers-dtrace.dtrace*
	rm -f trace/generated-tracers-dtrace.h*
291 292
	rm -f $(foreach f,$(GENERATED_HEADERS),$(f) $(f)-timestamp)
	rm -f $(foreach f,$(GENERATED_SOURCES),$(f) $(f)-timestamp)
S
Stefan Weil 已提交
293
	rm -rf qapi-generated
294
	rm -rf qga/qapi-generated
295
	for d in $(ALL_SUBDIRS); do \
M
Magnus Damm 已提交
296
	if test -d $$d; then $(MAKE) -C $$d $@ || exit 1; fi; \
297
	rm -f $$d/qemu-options.def; \
B
bellard 已提交
298
        done
299

300 301 302 303 304 305 306
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 已提交
307
distclean: clean
M
Magnus Damm 已提交
308
	rm -f config-host.mak config-host.h* config-host.ld $(DOCS) qemu-options.texi qemu-img-cmds.texi qemu-monitor.texi
309
	rm -f config-all-devices.mak config-all-disas.mak
310
	rm -f po/*.mo
M
Magnus Damm 已提交
311
	rm -f roms/seabios/config.mak roms/vgabios/config.mak
B
Brad Hards 已提交
312 313 314 315
	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
316
	rm -f config.log
317
	rm -f linux-headers/asm
318
	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 已提交
319
	for d in $(TARGET_DIRS); do \
B
bellard 已提交
320
	rm -rf $$d || exit 1 ; \
B
updated  
bellard 已提交
321
        done
322
	rm -Rf .sdk
323
	if test -f pixman/config.log; then make -C pixman distclean; fi
324
	if test -f dtc/version_gen.h; then make $(DTC_MAKE_ARGS) clean; fi
B
bellard 已提交
325

B
bellard 已提交
326 327
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 \
328
common  de-ch  es     fo  fr-ca  hu     ja  mk  nl-be      pt  sl     tr \
J
Jan Krupa 已提交
329
bepo    cz
B
bellard 已提交
330

T
ths 已提交
331
ifdef INSTALL_BLOBS
332
BLOBS=bios.bin bios-256k.bin sgabios.bin vgabios.bin vgabios-cirrus.bin \
G
Gerd Hoffmann 已提交
333
vgabios-stdvga.bin vgabios-vmware.bin vgabios-qxl.bin \
334
acpi-dsdt.aml q35-acpi-dsdt.aml \
335
ppc_rom.bin openbios-sparc32 openbios-sparc64 openbios-ppc QEMU,tcx.bin QEMU,cgthree.bin \
336 337
pxe-e1000.rom pxe-eepro100.rom pxe-ne2k_pci.rom \
pxe-pcnet.rom pxe-rtl8139.rom pxe-virtio.rom \
338 339
efi-e1000.rom efi-eepro100.rom efi-ne2k_pci.rom \
efi-pcnet.rom efi-rtl8139.rom efi-virtio.rom \
A
Anthony Liguori 已提交
340
qemu-icon.bmp qemu_logo_no_text.svg \
341
bamboo.dtb petalogix-s3adsp1800.dtb petalogix-ml605.dtb \
J
Jan Kiszka 已提交
342
multiboot.bin linuxboot.bin kvmvapic.bin \
343
s390-zipl.rom \
344
s390-ccw.img \
345 346
spapr-rtas.bin slof.bin \
palcode-clipper
T
ths 已提交
347 348 349 350
else
BLOBS=
endif

351
install-doc: $(DOCS)
352 353
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_docdir)"
	$(INSTALL_DATA) qemu-doc.html  qemu-tech.html "$(DESTDIR)$(qemu_docdir)"
354
	$(INSTALL_DATA) qmp-commands.txt "$(DESTDIR)$(qemu_docdir)"
355
ifdef CONFIG_POSIX
356
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man1"
357 358 359
	$(INSTALL_DATA) qemu.1 "$(DESTDIR)$(mandir)/man1"
ifneq ($(TOOLS),)
	$(INSTALL_DATA) qemu-img.1 "$(DESTDIR)$(mandir)/man1"
360 361
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man8"
	$(INSTALL_DATA) qemu-nbd.8 "$(DESTDIR)$(mandir)/man8"
362
endif
363
endif
364 365 366 367
ifdef CONFIG_VIRTFS
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man1"
	$(INSTALL_DATA) fsdev/virtfs-proxy-helper.1 "$(DESTDIR)$(mandir)/man1"
endif
368 369 370 371

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

372 373 374 375 376 377 378
install-localstatedir:
ifdef CONFIG_POSIX
ifneq (,$(findstring qemu-ga,$(TOOLS)))
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_localstatedir)"/run
endif
endif

379
install-confdir:
380
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_confdir)"
381 382

install-sysconfig: install-datadir install-confdir
383
	$(INSTALL_DATA) $(SRC_PATH)/sysconfigs/target/target-x86_64.conf "$(DESTDIR)$(qemu_confdir)"
384

385 386
install: all $(if $(BUILD_DOCS),install-doc) install-sysconfig \
install-datadir install-localstatedir
387
	$(INSTALL_DIR) "$(DESTDIR)$(bindir)"
388
ifneq ($(TOOLS),)
389 390 391 392
	$(INSTALL_PROG) $(TOOLS) "$(DESTDIR)$(bindir)"
ifneq ($(STRIP),)
	$(STRIP) $(TOOLS:%="$(DESTDIR)$(bindir)/%")
endif
393
endif
394 395
ifneq ($(CONFIG_MODULES),)
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_moddir)"
396 397
	for s in $(modules-m:.mo=$(DSOSUF)); do \
		t="$(DESTDIR)$(qemu_moddir)/$$(echo $$s | tr / -)"; \
398
		$(INSTALL_LIB) $$s "$$t"; \
399
		test -z "$(STRIP)" || $(STRIP) "$$t"; \
400 401
	done
endif
402 403
ifneq ($(HELPERS-y),)
	$(INSTALL_DIR) "$(DESTDIR)$(libexecdir)"
404 405 406 407
	$(INSTALL_PROG) $(HELPERS-y) "$(DESTDIR)$(libexecdir)"
ifneq ($(STRIP),)
	$(STRIP) $(HELPERS-y:%="$(DESTDIR)$(libexecdir)/%")
endif
408
endif
T
ths 已提交
409 410
ifneq ($(BLOBS),)
	set -e; for x in $(BLOBS); do \
411
		$(INSTALL_DATA) $(SRC_PATH)/pc-bios/$$x "$(DESTDIR)$(qemu_datadir)"; \
P
pbrook 已提交
412
	done
413 414 415
endif
ifeq ($(CONFIG_GTK),y)
	$(MAKE) -C po $@
T
ths 已提交
416
endif
417
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_datadir)/keymaps"
418
	set -e; for x in $(KEYMAPS); do \
419
		$(INSTALL_DATA) $(SRC_PATH)/pc-bios/keymaps/$$x "$(DESTDIR)$(qemu_datadir)/keymaps"; \
P
pbrook 已提交
420
	done
B
bellard 已提交
421
	for d in $(TARGET_DIRS); do \
422
	$(MAKE) $(SUBDIR_MAKEFLAGS) TARGET_DIR=$$d/ -C $$d $@ || exit 1 ; \
B
bellard 已提交
423
        done
B
bellard 已提交
424

B
bellard 已提交
425
# various test targets
B
bellard 已提交
426
test speed: all
A
Anthony Liguori 已提交
427
	$(MAKE) -C tests/tcg $@
428

A
Alexandre Bique 已提交
429
.PHONY: TAGS
430
TAGS:
D
David Gibson 已提交
431 432
	rm -f $@
	find "$(SRC_PATH)" -name '*.[hc]' -exec etags --append {} +
433

B
bellard 已提交
434 435
cscope:
	rm -f ./cscope.*
436
	find "$(SRC_PATH)" -name "*.[chsS]" -print | sed 's,^\./,,' > ./cscope.files
B
bellard 已提交
437 438
	cscope -b

B
bellard 已提交
439
# documentation
440 441
MAKEINFO=makeinfo
MAKEINFOFLAGS=--no-headers --no-split --number-sections
442 443 444 445
TEXIFLAG=$(if $(V),,--quiet)
%.dvi: %.texi
	$(call quiet-command,texi2dvi $(TEXIFLAG) -I . $<,"  GEN   $@")

B
bellard 已提交
446
%.html: %.texi
447
	$(call quiet-command,LC_ALL=C $(MAKEINFO) $(MAKEINFOFLAGS) --html $< -o $@, \
448
	"  GEN   $@")
B
bellard 已提交
449

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

453 454
%.pdf: %.texi
	$(call quiet-command,texi2pdf $(TEXIFLAG) -I . $<,"  GEN   $@")
455 456

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

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

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

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

468
qemu.1: qemu-doc.texi qemu-options.texi qemu-monitor.texi
469
	$(call quiet-command, \
B
Blue Swirl 已提交
470
	  perl -Ww -- $(SRC_PATH)/scripts/texi2pod.pl $< qemu.pod && \
M
Michael Tokarev 已提交
471
	  $(POD2MAN) --section=1 --center=" " --release=" " qemu.pod > $@, \
472
	  "  GEN   $@")
473

474
qemu-img.1: qemu-img.texi qemu-img-cmds.texi
475
	$(call quiet-command, \
B
Blue Swirl 已提交
476
	  perl -Ww -- $(SRC_PATH)/scripts/texi2pod.pl $< qemu-img.pod && \
M
Michael Tokarev 已提交
477
	  $(POD2MAN) --section=1 --center=" " --release=" " qemu-img.pod > $@, \
478
	  "  GEN   $@")
B
bellard 已提交
479

480 481 482
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 已提交
483
	  $(POD2MAN) --section=1 --center=" " --release=" " fsdev/virtfs-proxy-helper.pod > $@, \
484 485
	  "  GEN   $@")

B
bellard 已提交
486
qemu-nbd.8: qemu-nbd.texi
487
	$(call quiet-command, \
B
Blue Swirl 已提交
488
	  perl -Ww -- $(SRC_PATH)/scripts/texi2pod.pl $< qemu-nbd.pod && \
M
Michael Tokarev 已提交
489
	  $(POD2MAN) --section=8 --center=" " --release=" " qemu-nbd.pod > $@, \
490
	  "  GEN   $@")
B
bellard 已提交
491

492 493
dvi: qemu-doc.dvi qemu-tech.dvi
html: qemu-doc.html qemu-tech.html
494 495
info: qemu-doc.info qemu-tech.info
pdf: qemu-doc.pdf qemu-tech.pdf
496

497 498 499
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
500

501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555
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
	make install prefix=${INSTDIR}
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

556 557
# Add a dependency on the generated files, so that they are always
# rebuilt before other object files
558
ifneq ($(filter-out %clean,$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fail))
559
Makefile: $(GENERATED_HEADERS)
560
endif
561

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