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

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

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 48 49 50
GENERATED_HEADERS = config-host.h qemu-options.def
GENERATED_HEADERS += qmp-commands.h qapi-types.h qapi-visit.h
GENERATED_SOURCES += qmp-marshal.c qapi-types.c qapi-visit.c

51 52 53
GENERATED_HEADERS += trace/generated-events.h
GENERATED_SOURCES += trace/generated-events.c

54
GENERATED_HEADERS += trace/generated-tracers.h
55
ifeq ($(TRACE_BACKEND),dtrace)
56
GENERATED_HEADERS += trace/generated-tracers-dtrace.h
57
endif
58
GENERATED_SOURCES += trace/generated-tracers.c
59

60 61 62 63 64
ifeq ($(TRACE_BACKEND),ust)
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 153
vl.o: QEMU_CFLAGS+=$(GPROF_CFLAGS)

vl.o: QEMU_CFLAGS+=$(SDL_CFLAGS)
P
pbrook 已提交
154

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

160
SUBDIR_RULES=$(patsubst %,subdir-%, $(TARGET_DIRS))
161 162
SOFTMMU_SUBDIR_RULES=$(filter %-softmmu,$(SUBDIR_RULES))

163
$(SOFTMMU_SUBDIR_RULES): $(block-obj-y)
164
$(SOFTMMU_SUBDIR_RULES): config-all-devices.mak
165

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

169 170 171 172
subdir-pixman: pixman/Makefile
	$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C pixman V="$(V)" all,)

pixman/Makefile: $(SRC_PATH)/pixman/configure
173
	(cd pixman; CFLAGS="$(CFLAGS) -fPIC $(extra_cflags) $(extra_ldflags)" $(SRC_PATH)/pixman/configure $(AUTOCONF_HOST) --disable-gtk --disable-shared --enable-static)
174 175 176 177

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

178
DTC_MAKE_ARGS=-I$(SRC_PATH)/dtc VPATH=$(SRC_PATH)/dtc -C dtc V="$(V)" LIBFDT_srcdir=$(SRC_PATH)/dtc/libfdt
179 180
DTC_CFLAGS=$(CFLAGS) $(QEMU_CFLAGS)
DTC_CPPFLAGS=-I$(BUILD_DIR)/dtc -I$(SRC_PATH)/dtc -I$(SRC_PATH)/dtc/libfdt
181 182

subdir-dtc:dtc/libfdt dtc/tests
183
	$(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,)
184 185 186 187

dtc/%:
	mkdir -p $@

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

P
Paul Brook 已提交
190 191 192 193 194 195 196
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 已提交
197

J
Juan Quintela 已提交
198
bt-host.o: QEMU_CFLAGS += $(BLUEZ_CFLAGS)
B
bellard 已提交
199

200
$(BUILD_DIR)/version.o: $(SRC_PATH)/version.rc $(BUILD_DIR)/config-host.h | $(BUILD_DIR)/version.lo
201
	$(call quiet-command,$(WINDRES) -I$(BUILD_DIR) -o $@ $<,"  RC    version.o")
202
$(BUILD_DIR)/version.lo: $(SRC_PATH)/version.rc $(BUILD_DIR)/config-host.h
203
	$(call quiet-command,$(WINDRES) -I$(BUILD_DIR) -o $@ $<,"  RC    version.lo")
204

P
Paolo Bonzini 已提交
205
Makefile: $(version-obj-y) $(version-lobj-y)
206 207

######################################################################
208
# Build libraries
209 210

libqemustub.a: $(stub-obj-y)
211
libqemuutil.a: $(util-obj-y) qapi-types.o qapi-visit.o
212

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

A
Alon Levy 已提交
216
######################################################################
B
bellard 已提交
217

J
Juan Quintela 已提交
218
qemu-img.o: qemu-img-cmds.h
219

220 221
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
222
qemu-io$(EXESUF): qemu-io.o $(block-obj-y) libqemuutil.a libqemustub.a
223

224 225
qemu-bridge-helper$(EXESUF): qemu-bridge-helper.o

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

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

232
qemu-ga$(EXESUF): LIBS = $(LIBS_QGA)
233
qemu-ga$(EXESUF): QEMU_CFLAGS += -I qga/qapi-generated
234

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

237 238
qapi-py = $(SRC_PATH)/scripts/qapi.py $(SRC_PATH)/scripts/ordereddict.py

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

249
qapi-types.c qapi-types.h :\
250
$(SRC_PATH)/qapi-schema.json $(SRC_PATH)/scripts/qapi-types.py $(qapi-py)
251
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-types.py $(gen-out-type) -o "." -b < $<, "  GEN   $@")
252
qapi-visit.c qapi-visit.h :\
253
$(SRC_PATH)/qapi-schema.json $(SRC_PATH)/scripts/qapi-visit.py $(qapi-py)
254
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-visit.py $(gen-out-type) -o "." -b < $<, "  GEN   $@")
255
qmp-commands.h qmp-marshal.c :\
256
$(SRC_PATH)/qapi-schema.json $(SRC_PATH)/scripts/qapi-commands.py $(qapi-py)
257
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-commands.py $(gen-out-type) -m -o "." < $<, "  GEN   $@")
258

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

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

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

286 287 288 289 290 291 292
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 已提交
293
distclean: clean
M
Magnus Damm 已提交
294
	rm -f config-host.mak config-host.h* config-host.ld $(DOCS) qemu-options.texi qemu-img-cmds.texi qemu-monitor.texi
295
	rm -f config-all-devices.mak config-all-disas.mak
296
	rm -f po/*.mo
M
Magnus Damm 已提交
297
	rm -f roms/seabios/config.mak roms/vgabios/config.mak
B
Brad Hards 已提交
298 299 300 301
	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
302
	rm -f config.log
303
	rm -f linux-headers/asm
304
	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 已提交
305
	for d in $(TARGET_DIRS); do \
B
bellard 已提交
306
	rm -rf $$d || exit 1 ; \
B
updated  
bellard 已提交
307
        done
308
	rm -Rf .sdk
309
	if test -f pixman/config.log; then make -C pixman distclean; fi
310
	if test -f dtc/version_gen.h; then make $(DTC_MAKE_ARGS) clean; fi
B
bellard 已提交
311

B
bellard 已提交
312 313
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 \
314
common  de-ch  es     fo  fr-ca  hu     ja  mk  nl-be      pt  sl     tr \
J
Jan Krupa 已提交
315
bepo    cz
B
bellard 已提交
316

T
ths 已提交
317
ifdef INSTALL_BLOBS
318
BLOBS=bios.bin bios-256k.bin sgabios.bin vgabios.bin vgabios-cirrus.bin \
G
Gerd Hoffmann 已提交
319
vgabios-stdvga.bin vgabios-vmware.bin vgabios-qxl.bin \
320
acpi-dsdt.aml q35-acpi-dsdt.aml \
321
ppc_rom.bin openbios-sparc32 openbios-sparc64 openbios-ppc QEMU,tcx.bin QEMU,cgthree.bin \
322 323
pxe-e1000.rom pxe-eepro100.rom pxe-ne2k_pci.rom \
pxe-pcnet.rom pxe-rtl8139.rom pxe-virtio.rom \
324 325
efi-e1000.rom efi-eepro100.rom efi-ne2k_pci.rom \
efi-pcnet.rom efi-rtl8139.rom efi-virtio.rom \
A
Anthony Liguori 已提交
326
qemu-icon.bmp qemu_logo_no_text.svg \
327
bamboo.dtb petalogix-s3adsp1800.dtb petalogix-ml605.dtb \
J
Jan Kiszka 已提交
328
multiboot.bin linuxboot.bin kvmvapic.bin \
329
s390-zipl.rom \
330
s390-ccw.img \
331 332
spapr-rtas.bin slof.bin \
palcode-clipper
T
ths 已提交
333 334 335 336
else
BLOBS=
endif

337
install-doc: $(DOCS)
338 339
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_docdir)"
	$(INSTALL_DATA) qemu-doc.html  qemu-tech.html "$(DESTDIR)$(qemu_docdir)"
340
	$(INSTALL_DATA) qmp-commands.txt "$(DESTDIR)$(qemu_docdir)"
341
ifdef CONFIG_POSIX
342
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man1"
343 344 345
	$(INSTALL_DATA) qemu.1 "$(DESTDIR)$(mandir)/man1"
ifneq ($(TOOLS),)
	$(INSTALL_DATA) qemu-img.1 "$(DESTDIR)$(mandir)/man1"
346 347
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man8"
	$(INSTALL_DATA) qemu-nbd.8 "$(DESTDIR)$(mandir)/man8"
348
endif
349
endif
350 351 352 353
ifdef CONFIG_VIRTFS
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man1"
	$(INSTALL_DATA) fsdev/virtfs-proxy-helper.1 "$(DESTDIR)$(mandir)/man1"
endif
354 355 356 357

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

358 359 360 361 362 363 364
install-localstatedir:
ifdef CONFIG_POSIX
ifneq (,$(findstring qemu-ga,$(TOOLS)))
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_localstatedir)"/run
endif
endif

365
install-confdir:
366
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_confdir)"
367 368

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

371 372
install: all $(if $(BUILD_DOCS),install-doc) install-sysconfig \
install-datadir install-localstatedir
373
	$(INSTALL_DIR) "$(DESTDIR)$(bindir)"
374
ifneq ($(TOOLS),)
375 376 377 378
	$(INSTALL_PROG) $(TOOLS) "$(DESTDIR)$(bindir)"
ifneq ($(STRIP),)
	$(STRIP) $(TOOLS:%="$(DESTDIR)$(bindir)/%")
endif
379
endif
380 381
ifneq ($(CONFIG_MODULES),)
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_moddir)"
382 383 384 385
	for s in $(modules-m:.mo=$(DSOSUF)); do \
		t="$(DESTDIR)$(qemu_moddir)/$$(echo $$s | tr / -)"; \
		$(INSTALL_PROG) $$s "$$t"; \
		test -z "$(STRIP)" || $(STRIP) "$$t"; \
386 387
	done
endif
388 389
ifneq ($(HELPERS-y),)
	$(INSTALL_DIR) "$(DESTDIR)$(libexecdir)"
390 391 392 393
	$(INSTALL_PROG) $(HELPERS-y) "$(DESTDIR)$(libexecdir)"
ifneq ($(STRIP),)
	$(STRIP) $(HELPERS-y:%="$(DESTDIR)$(libexecdir)/%")
endif
394
endif
T
ths 已提交
395 396
ifneq ($(BLOBS),)
	set -e; for x in $(BLOBS); do \
397
		$(INSTALL_DATA) $(SRC_PATH)/pc-bios/$$x "$(DESTDIR)$(qemu_datadir)"; \
P
pbrook 已提交
398
	done
399 400 401
endif
ifeq ($(CONFIG_GTK),y)
	$(MAKE) -C po $@
T
ths 已提交
402
endif
403
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_datadir)/keymaps"
404
	set -e; for x in $(KEYMAPS); do \
405
		$(INSTALL_DATA) $(SRC_PATH)/pc-bios/keymaps/$$x "$(DESTDIR)$(qemu_datadir)/keymaps"; \
P
pbrook 已提交
406
	done
B
bellard 已提交
407
	for d in $(TARGET_DIRS); do \
408
	$(MAKE) $(SUBDIR_MAKEFLAGS) TARGET_DIR=$$d/ -C $$d $@ || exit 1 ; \
B
bellard 已提交
409
        done
B
bellard 已提交
410

B
bellard 已提交
411
# various test targets
B
bellard 已提交
412
test speed: all
A
Anthony Liguori 已提交
413
	$(MAKE) -C tests/tcg $@
414

A
Alexandre Bique 已提交
415
.PHONY: TAGS
416
TAGS:
D
David Gibson 已提交
417 418
	rm -f $@
	find "$(SRC_PATH)" -name '*.[hc]' -exec etags --append {} +
419

B
bellard 已提交
420 421
cscope:
	rm -f ./cscope.*
422
	find "$(SRC_PATH)" -name "*.[chsS]" -print | sed 's,^\./,,' > ./cscope.files
B
bellard 已提交
423 424
	cscope -b

B
bellard 已提交
425
# documentation
426 427
MAKEINFO=makeinfo
MAKEINFOFLAGS=--no-headers --no-split --number-sections
428 429 430 431
TEXIFLAG=$(if $(V),,--quiet)
%.dvi: %.texi
	$(call quiet-command,texi2dvi $(TEXIFLAG) -I . $<,"  GEN   $@")

B
bellard 已提交
432
%.html: %.texi
433
	$(call quiet-command,LC_ALL=C $(MAKEINFO) $(MAKEINFOFLAGS) --html $< -o $@, \
434
	"  GEN   $@")
B
bellard 已提交
435

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

439 440
%.pdf: %.texi
	$(call quiet-command,texi2pdf $(TEXIFLAG) -I . $<,"  GEN   $@")
441 442

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

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

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

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

454
qemu.1: qemu-doc.texi qemu-options.texi qemu-monitor.texi
455
	$(call quiet-command, \
B
Blue Swirl 已提交
456
	  perl -Ww -- $(SRC_PATH)/scripts/texi2pod.pl $< qemu.pod && \
M
Michael Tokarev 已提交
457
	  $(POD2MAN) --section=1 --center=" " --release=" " qemu.pod > $@, \
458
	  "  GEN   $@")
459

460
qemu-img.1: qemu-img.texi qemu-img-cmds.texi
461
	$(call quiet-command, \
B
Blue Swirl 已提交
462
	  perl -Ww -- $(SRC_PATH)/scripts/texi2pod.pl $< qemu-img.pod && \
M
Michael Tokarev 已提交
463
	  $(POD2MAN) --section=1 --center=" " --release=" " qemu-img.pod > $@, \
464
	  "  GEN   $@")
B
bellard 已提交
465

466 467 468
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 已提交
469
	  $(POD2MAN) --section=1 --center=" " --release=" " fsdev/virtfs-proxy-helper.pod > $@, \
470 471
	  "  GEN   $@")

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

478 479
dvi: qemu-doc.dvi qemu-tech.dvi
html: qemu-doc.html qemu-tech.html
480 481
info: qemu-doc.info qemu-tech.info
pdf: qemu-doc.pdf qemu-tech.pdf
482

483 484 485
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
486

487 488 489 490 491 492 493 494 495 496 497 498 499 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
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

542 543
# Add a dependency on the generated files, so that they are always
# rebuilt before other object files
544
ifneq ($(filter-out %clean,$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fail))
545
Makefile: $(GENERATED_HEADERS)
546
endif
547

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