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
qapi-modules = $(SRC_PATH)/qapi-schema.json $(SRC_PATH)/qapi/common.json \
250 251
               $(SRC_PATH)/qapi/block.json $(SRC_PATH)/qapi/block-core.json \
               $(SRC_PATH)/qapi-event.json
252

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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