Makefile 23.8 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 docker docker-%
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

33
config-host.mak: $(SRC_PATH)/configure $(SRC_PATH)/pc-bios
34
	@echo $@ is out-of-date, running configure
35 36 37 38 39 40 41 42
	@# 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
43 44
else
config-host.mak:
F
Fam Zheng 已提交
45
ifneq ($(filter-out $(UNCHECKED_GOALS),$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fail))
46 47 48
	@echo "Please call configure before running make!"
	@exit 1
endif
49
endif
B
bellard 已提交
50

F
Fam Zheng 已提交
51 52
include $(SRC_PATH)/rules.mak

53
GENERATED_HEADERS = qemu-version.h config-host.h qemu-options.def
W
Wenchao Xia 已提交
54 55
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
56 57
GENERATED_HEADERS += qmp-introspect.h
GENERATED_SOURCES += qmp-introspect.c
58 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
GENERATED_HEADERS += module_block.h

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

83
.PHONY: all clean cscope distclean dvi html info install install-doc \
F
Fam Zheng 已提交
84
	pdf recurse-all speed test dist msi FORCE
85

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

J
Juan Quintela 已提交
88
LIBS+=-lz $(LIBS_TOOLS)
89

90 91
HELPERS-$(CONFIG_LINUX) = qemu-bridge-helper$(EXESUF)

92
ifdef BUILD_DOCS
93
DOCS=qemu-doc.html qemu.1 qemu-img.1 qemu-nbd.8 qemu-ga.8
94
ifdef CONFIG_VIRTFS
95
DOCS+=fsdev/virtfs-proxy-helper.1
96
endif
97 98 99
else
DOCS=
endif
B
bellard 已提交
100

101
SUBDIR_MAKEFLAGS=$(if $(V),,--no-print-directory) BUILD_DIR=$(BUILD_DIR)
102
SUBDIR_DEVICES_MAK=$(patsubst %, %/config-devices.mak, $(TARGET_DIRS))
103
SUBDIR_DEVICES_MAK_DEP=$(patsubst %, %-config-devices.mak.d, $(TARGET_DIRS))
104

105 106
ifeq ($(SUBDIR_DEVICES_MAK),)
config-all-devices.mak:
107
	$(call quiet-command,echo '# no devices' > $@,"GEN","$@")
108
else
109
config-all-devices.mak: $(SUBDIR_DEVICES_MAK)
110 111 112
	$(call quiet-command, sed -n \
             's|^\([^=]*\)=\(.*\)$$|\1:=$$(findstring y,$$(\1)\2)|p' \
             $(SUBDIR_DEVICES_MAK) | sort -u > $@, \
113
             "GEN","$@")
114
endif
115

P
Paul Brook 已提交
116 117
-include $(SUBDIR_DEVICES_MAK_DEP)

118
%/config-devices.mak: default-configs/%.mak $(SRC_PATH)/scripts/make_device_config.sh
119
	$(call quiet-command, \
120
            $(SHELL) $(SRC_PATH)/scripts/make_device_config.sh $< $*-config-devices.mak.d $@ > $@.tmp,"GEN","$@.tmp")
121
	$(call quiet-command, if test -f $@; then \
122
	  if cmp -s $@.old $@; then \
P
Paul Brook 已提交
123 124
	    mv $@.tmp $@; \
	    cp -p $@ $@.old; \
125 126 127 128 129 130 131 132 133
	  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; \
134
	 else \
135 136
	  mv $@.tmp $@; \
	  cp -p $@ $@.old; \
137
	 fi,"GEN","$@");
138 139 140 141

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

142 143
ifneq ($(wildcard config-host.mak),)
include $(SRC_PATH)/Makefile.objs
144 145 146 147 148 149
endif

dummy := $(call unnest-vars,, \
                stub-obj-y \
                util-obj-y \
                qga-obj-y \
150 151
                ivshmem-client-obj-y \
                ivshmem-server-obj-y \
M
Marc-André Lureau 已提交
152
                libvhost-user-obj-y \
153
                qga-vss-dll-obj-y \
154
                block-obj-y \
155
                block-obj-m \
156 157
                crypto-obj-y \
                crypto-aes-obj-y \
158
                qom-obj-y \
159
                io-obj-y \
160 161
                common-obj-y \
                common-obj-m)
162 163

ifneq ($(wildcard config-host.mak),)
164
include $(SRC_PATH)/tests/Makefile.include
165 166
endif

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

169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186
qemu-version.h: FORCE
	$(call quiet-command, \
		(cd $(SRC_PATH); \
		printf '#define QEMU_PKGVERSION '; \
		if test -n "$(PKGVERSION)"; then \
			printf '"$(PKGVERSION)"\n'; \
		else \
			if test -d .git; then \
				printf '" ('; \
				git describe --match 'v*' 2>/dev/null | tr -d '\n'; \
				if ! git diff-index --quiet HEAD &>/dev/null; then \
					printf -- '-dirty'; \
				fi; \
				printf ')"\n'; \
			else \
				printf '""\n'; \
			fi; \
		fi) > $@.tmp)
187
	$(call quiet-command, cmp -s $@ $@.tmp || mv $@.tmp $@)
188

189 190
config-host.h: config-host.h-timestamp
config-host.h-timestamp: config-host.mak
191
qemu-options.def: $(SRC_PATH)/qemu-options.hx $(SRC_PATH)/scripts/hxtool
192
	$(call quiet-command,sh $(SRC_PATH)/scripts/hxtool -h < $< > $@,"GEN","$@")
193

194
SUBDIR_RULES=$(patsubst %,subdir-%, $(TARGET_DIRS))
195 196
SOFTMMU_SUBDIR_RULES=$(filter %-softmmu,$(SUBDIR_RULES))

197
$(SOFTMMU_SUBDIR_RULES): $(block-obj-y)
198
$(SOFTMMU_SUBDIR_RULES): $(crypto-obj-y)
199
$(SOFTMMU_SUBDIR_RULES): $(io-obj-y)
200
$(SOFTMMU_SUBDIR_RULES): config-all-devices.mak
201

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

205 206 207 208
subdir-pixman: pixman/Makefile
	$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C pixman V="$(V)" all,)

pixman/Makefile: $(SRC_PATH)/pixman/configure
209
	(cd pixman; CFLAGS="$(CFLAGS) -fPIC $(extra_cflags) $(extra_ldflags)" $(SRC_PATH)/pixman/configure $(AUTOCONF_HOST) --disable-gtk --disable-shared --enable-static)
210 211 212 213

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

214
DTC_MAKE_ARGS=-I$(SRC_PATH)/dtc VPATH=$(SRC_PATH)/dtc -C dtc V="$(V)" LIBFDT_srcdir=$(SRC_PATH)/dtc/libfdt
215 216
DTC_CFLAGS=$(CFLAGS) $(QEMU_CFLAGS)
DTC_CPPFLAGS=-I$(BUILD_DIR)/dtc -I$(SRC_PATH)/dtc -I$(SRC_PATH)/dtc/libfdt
217 218

subdir-dtc:dtc/libfdt dtc/tests
219
	$(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,)
220 221 222 223

dtc/%:
	mkdir -p $@

224
$(SUBDIR_RULES): libqemuutil.a libqemustub.a $(common-obj-y) $(qom-obj-y) $(crypto-aes-obj-$(CONFIG_USER_ONLY))
225

P
Paul Brook 已提交
226
ROMSUBDIR_RULES=$(patsubst %,romsubdir-%, $(ROMS))
227
# Only keep -O and -g cflags
P
Paul Brook 已提交
228
romsubdir-%:
229
	$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C pc-bios/$* V="$(V)" TARGET_DIR="$*/" CFLAGS="$(filter -O% -g%,$(CFLAGS))",)
P
Paul Brook 已提交
230 231 232 233

ALL_SUBDIRS=$(TARGET_DIRS) $(patsubst %,pc-bios/%, $(ROMS))

recurse-all: $(SUBDIR_RULES) $(ROMSUBDIR_RULES)
B
bellard 已提交
234

235
$(BUILD_DIR)/version.o: $(SRC_PATH)/version.rc config-host.h
236
	$(call quiet-command,$(WINDRES) -I$(BUILD_DIR) -o $@ $<,"RC","version.o")
237

238
Makefile: $(version-obj-y)
239 240

######################################################################
241
# Build libraries
242 243

libqemustub.a: $(stub-obj-y)
244
libqemuutil.a: $(util-obj-y)
245

A
Alon Levy 已提交
246
######################################################################
B
bellard 已提交
247

J
Juan Quintela 已提交
248
qemu-img.o: qemu-img-cmds.h
249

250 251 252
qemu-img$(EXESUF): qemu-img.o $(block-obj-y) $(crypto-obj-y) $(io-obj-y) $(qom-obj-y) libqemuutil.a libqemustub.a
qemu-nbd$(EXESUF): qemu-nbd.o $(block-obj-y) $(crypto-obj-y) $(io-obj-y) $(qom-obj-y) libqemuutil.a libqemustub.a
qemu-io$(EXESUF): qemu-io.o $(block-obj-y) $(crypto-obj-y) $(io-obj-y) $(qom-obj-y) libqemuutil.a libqemustub.a
253

254
qemu-bridge-helper$(EXESUF): qemu-bridge-helper.o libqemuutil.a libqemustub.a
255

256
fsdev/virtfs-proxy-helper$(EXESUF): fsdev/virtfs-proxy-helper.o fsdev/9p-marshal.o fsdev/9p-iov-marshal.o libqemuutil.a libqemustub.a
257 258
fsdev/virtfs-proxy-helper$(EXESUF): LIBS += -lcap

259
qemu-img-cmds.h: $(SRC_PATH)/qemu-img-cmds.hx $(SRC_PATH)/scripts/hxtool
260
	$(call quiet-command,sh $(SRC_PATH)/scripts/hxtool -h < $< > $@,"GEN","$@")
261

262
qemu-ga$(EXESUF): LIBS = $(LIBS_QGA)
263
qemu-ga$(EXESUF): QEMU_CFLAGS += -I qga/qapi-generated
264

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

267 268
qapi-py = $(SRC_PATH)/scripts/qapi.py $(SRC_PATH)/scripts/ordereddict.py

269
qga/qapi-generated/qga-qapi-types.c qga/qapi-generated/qga-qapi-types.h :\
270
$(SRC_PATH)/qga/qapi-schema.json $(SRC_PATH)/scripts/qapi-types.py $(qapi-py)
271
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-types.py \
272
		$(gen-out-type) -o qga/qapi-generated -p "qga-" $<, \
273
		"GEN","$@")
274
qga/qapi-generated/qga-qapi-visit.c qga/qapi-generated/qga-qapi-visit.h :\
275
$(SRC_PATH)/qga/qapi-schema.json $(SRC_PATH)/scripts/qapi-visit.py $(qapi-py)
276
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-visit.py \
277
		$(gen-out-type) -o qga/qapi-generated -p "qga-" $<, \
278
		"GEN","$@")
279
qga/qapi-generated/qga-qmp-commands.h qga/qapi-generated/qga-qmp-marshal.c :\
280
$(SRC_PATH)/qga/qapi-schema.json $(SRC_PATH)/scripts/qapi-commands.py $(qapi-py)
281
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-commands.py \
282
		$(gen-out-type) -o qga/qapi-generated -p "qga-" $<, \
283
		"GEN","$@")
284

285
qapi-modules = $(SRC_PATH)/qapi-schema.json $(SRC_PATH)/qapi/common.json \
286
               $(SRC_PATH)/qapi/block.json $(SRC_PATH)/qapi/block-core.json \
287
               $(SRC_PATH)/qapi/event.json $(SRC_PATH)/qapi/introspect.json \
288 289
               $(SRC_PATH)/qapi/crypto.json $(SRC_PATH)/qapi/rocker.json \
               $(SRC_PATH)/qapi/trace.json
290

291
qapi-types.c qapi-types.h :\
292
$(qapi-modules) $(SRC_PATH)/scripts/qapi-types.py $(qapi-py)
293
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-types.py \
294
		$(gen-out-type) -o "." -b $<, \
295
		"GEN","$@")
296
qapi-visit.c qapi-visit.h :\
297
$(qapi-modules) $(SRC_PATH)/scripts/qapi-visit.py $(qapi-py)
298
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-visit.py \
299
		$(gen-out-type) -o "." -b $<, \
300
		"GEN","$@")
W
Wenchao Xia 已提交
301 302 303
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 \
304
		$(gen-out-type) -o "." $<, \
305
		"GEN","$@")
306
qmp-commands.h qmp-marshal.c :\
307
$(qapi-modules) $(SRC_PATH)/scripts/qapi-commands.py $(qapi-py)
308
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-commands.py \
309
		$(gen-out-type) -o "." $<, \
310
		"GEN","$@")
311 312 313 314
qmp-introspect.h qmp-introspect.c :\
$(qapi-modules) $(SRC_PATH)/scripts/qapi-introspect.py $(qapi-py)
	$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-introspect.py \
		$(gen-out-type) -o "." $<, \
315
		"GEN","$@")
316

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

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

323 324 325
ifdef QEMU_GA_MSI_ENABLED
QEMU_GA_MSI=qemu-ga-$(ARCH).msi

326
msi: $(QEMU_GA_MSI)
327

328
$(QEMU_GA_MSI): qemu-ga.exe $(QGA_VSS_PROVIDER)
329 330 331

$(QEMU_GA_MSI): config-host.mak

332 333
$(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)" \
334
	wixl -o $@ $(QEMU_GA_MSI_ARCH) $(QEMU_GA_MSI_WITH_VSS) $(QEMU_GA_MSI_MINGW_DLL_PATH) $<,"WIXL","$@")
335 336
else
msi:
337
	@echo "MSI build not configured or dependency resolution failed (reconfigure with --enable-guest-agent-msi option)"
338 339
endif

340 341 342 343 344
ifneq ($(EXESUF),)
.PHONY: qemu-ga
qemu-ga: qemu-ga$(EXESUF) $(QGA_VSS_PROVIDER) $(QEMU_GA_MSI)
endif

345
ivshmem-client$(EXESUF): $(ivshmem-client-obj-y) libqemuutil.a libqemustub.a
346 347 348 349
	$(call LINK, $^)
ivshmem-server$(EXESUF): $(ivshmem-server-obj-y) libqemuutil.a libqemustub.a
	$(call LINK, $^)

350 351 352
module_block.h: $(SRC_PATH)/scripts/modules/module_block.py config-host.mak
	$(call quiet-command,$(PYTHON) $< $@ \
	$(addprefix $(SRC_PATH)/,$(patsubst %.mo,%.c,$(block-obj-m))), \
353
	"GEN","$@")
354

355
clean:
356
# avoid old build problems by removing potentially incorrect old files
357
	rm -f config.mak op-i386.h opc-i386.h gen-op-i386.h op-arm.h opc-arm.h gen-op-arm.h
358
	rm -f qemu-options.def
359
	rm -f *.msi
360
	find . \( -name '*.so' -o -name '*.dll' -o -name '*.mo' -o -name '*.[oda]' \) -type f -exec rm {} +
361
	rm -f $(filter-out %.tlb,$(TOOLS)) $(HELPERS-y) qemu-ga TAGS cscope.* *.pod *~ */*~
362
	rm -f fsdev/*.pod
B
Blue Swirl 已提交
363
	rm -f qemu-img-cmds.h
364
	rm -f ui/shader/*-vert.h ui/shader/*-frag.h
365
	@# May not be present in GENERATED_HEADERS
366 367
	rm -f trace/generated-tracers-dtrace.dtrace*
	rm -f trace/generated-tracers-dtrace.h*
368 369
	rm -f $(foreach f,$(GENERATED_HEADERS),$(f) $(f)-timestamp)
	rm -f $(foreach f,$(GENERATED_SOURCES),$(f) $(f)-timestamp)
S
Stefan Weil 已提交
370
	rm -rf qapi-generated
371
	rm -rf qga/qapi-generated
372
	for d in $(ALL_SUBDIRS); do \
M
Magnus Damm 已提交
373
	if test -d $$d; then $(MAKE) -C $$d $@ || exit 1; fi; \
374
	rm -f $$d/qemu-options.def; \
B
bellard 已提交
375
        done
376
	rm -f $(SUBDIR_DEVICES_MAK) config-all-devices.mak
377

378 379 380 381 382 383 384
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 已提交
385
distclean: clean
386
	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
387 388
	rm -f config-all-devices.mak config-all-disas.mak config.status
	rm -f po/*.mo tests/qemu-iotests/common.env
M
Magnus Damm 已提交
389
	rm -f roms/seabios/config.mak roms/vgabios/config.mak
B
Brad Hards 已提交
390 391 392 393
	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
394
	rm -f config.log
395
	rm -f linux-headers/asm
P
Paolo Bonzini 已提交
396
	for d in $(TARGET_DIRS); do \
B
bellard 已提交
397
	rm -rf $$d || exit 1 ; \
B
updated  
bellard 已提交
398
        done
399
	rm -Rf .sdk
E
Ed Maste 已提交
400 401
	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 已提交
402

B
bellard 已提交
403 404
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 \
405
common  de-ch  es     fo  fr-ca  hu     ja  mk  nl-be      pt  sl     tr \
J
Jan Krupa 已提交
406
bepo    cz
B
bellard 已提交
407

T
ths 已提交
408
ifdef INSTALL_BLOBS
409
BLOBS=bios.bin bios-256k.bin sgabios.bin vgabios.bin vgabios-cirrus.bin \
410
vgabios-stdvga.bin vgabios-vmware.bin vgabios-qxl.bin vgabios-virtio.bin \
411
acpi-dsdt.aml \
412
ppc_rom.bin openbios-sparc32 openbios-sparc64 openbios-ppc QEMU,tcx.bin QEMU,cgthree.bin \
413 414
pxe-e1000.rom pxe-eepro100.rom pxe-ne2k_pci.rom \
pxe-pcnet.rom pxe-rtl8139.rom pxe-virtio.rom \
415 416
efi-e1000.rom efi-eepro100.rom efi-ne2k_pci.rom \
efi-pcnet.rom efi-rtl8139.rom efi-virtio.rom \
G
Gerd Hoffmann 已提交
417
efi-e1000e.rom efi-vmxnet3.rom \
A
Anthony Liguori 已提交
418
qemu-icon.bmp qemu_logo_no_text.svg \
419
bamboo.dtb petalogix-s3adsp1800.dtb petalogix-ml605.dtb \
420
multiboot.bin linuxboot.bin linuxboot_dma.bin kvmvapic.bin \
421
s390-ccw.img \
422
spapr-rtas.bin slof.bin skiboot.lid \
423 424
palcode-clipper \
u-boot.e500
T
ths 已提交
425 426 427 428
else
BLOBS=
endif

429
install-doc: $(DOCS)
430
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_docdir)"
431
	$(INSTALL_DATA) qemu-doc.html "$(DESTDIR)$(qemu_docdir)"
432
ifdef CONFIG_POSIX
433
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man1"
434 435 436
	$(INSTALL_DATA) qemu.1 "$(DESTDIR)$(mandir)/man1"
ifneq ($(TOOLS),)
	$(INSTALL_DATA) qemu-img.1 "$(DESTDIR)$(mandir)/man1"
437 438
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man8"
	$(INSTALL_DATA) qemu-nbd.8 "$(DESTDIR)$(mandir)/man8"
439
endif
M
Marc-André Lureau 已提交
440 441 442
ifneq (,$(findstring qemu-ga,$(TOOLS)))
	$(INSTALL_DATA) qemu-ga.8 "$(DESTDIR)$(mandir)/man8"
endif
443
endif
444 445 446 447
ifdef CONFIG_VIRTFS
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man1"
	$(INSTALL_DATA) fsdev/virtfs-proxy-helper.1 "$(DESTDIR)$(mandir)/man1"
endif
448 449 450 451

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

452 453 454 455 456 457 458
install-localstatedir:
ifdef CONFIG_POSIX
ifneq (,$(findstring qemu-ga,$(TOOLS)))
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_localstatedir)"/run
endif
endif

459

460
install: all $(if $(BUILD_DOCS),install-doc) \
461
install-datadir install-localstatedir
462
ifneq ($(TOOLS),)
463
	$(call install-prog,$(subst qemu-ga,qemu-ga$(EXESUF),$(TOOLS)),$(DESTDIR)$(bindir))
464
endif
465 466
ifneq ($(CONFIG_MODULES),)
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_moddir)"
467 468
	for s in $(modules-m:.mo=$(DSOSUF)); do \
		t="$(DESTDIR)$(qemu_moddir)/$$(echo $$s | tr / -)"; \
469
		$(INSTALL_LIB) $$s "$$t"; \
470
		test -z "$(STRIP)" || $(STRIP) "$$t"; \
471 472
	done
endif
473
ifneq ($(HELPERS-y),)
474
	$(call install-prog,$(HELPERS-y),$(DESTDIR)$(libexecdir))
475
endif
T
ths 已提交
476 477
ifneq ($(BLOBS),)
	set -e; for x in $(BLOBS); do \
478
		$(INSTALL_DATA) $(SRC_PATH)/pc-bios/$$x "$(DESTDIR)$(qemu_datadir)"; \
P
pbrook 已提交
479
	done
480 481 482
endif
ifeq ($(CONFIG_GTK),y)
	$(MAKE) -C po $@
T
ths 已提交
483
endif
484
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_datadir)/keymaps"
485
	set -e; for x in $(KEYMAPS); do \
486
		$(INSTALL_DATA) $(SRC_PATH)/pc-bios/keymaps/$$x "$(DESTDIR)$(qemu_datadir)/keymaps"; \
P
pbrook 已提交
487
	done
488
	$(INSTALL_DATA) $(BUILD_DIR)/trace-events-all "$(DESTDIR)$(qemu_datadir)/trace-events-all"
B
bellard 已提交
489
	for d in $(TARGET_DIRS); do \
490
	$(MAKE) $(SUBDIR_MAKEFLAGS) TARGET_DIR=$$d/ -C $$d $@ || exit 1 ; \
B
bellard 已提交
491
        done
B
bellard 已提交
492

B
bellard 已提交
493
# various test targets
B
bellard 已提交
494
test speed: all
A
Anthony Liguori 已提交
495
	$(MAKE) -C tests/tcg $@
496

F
Fam Zheng 已提交
497 498
.PHONY: ctags
ctags:
499
	rm -f tags
F
Fam Zheng 已提交
500 501
	find "$(SRC_PATH)" -name '*.[hc]' -exec ctags --append {} +

A
Alexandre Bique 已提交
502
.PHONY: TAGS
503
TAGS:
504
	rm -f TAGS
D
David Gibson 已提交
505
	find "$(SRC_PATH)" -name '*.[hc]' -exec etags --append {} +
506

B
bellard 已提交
507
cscope:
F
Fam Zheng 已提交
508 509 510
	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 已提交
511

512 513 514 515 516
# 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 $< > $@,\
517
		"VERT","$@")
518 519 520 521 522

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 $< > $@,\
523
		"FRAG","$@")
524

525 526 527
ui/console-gl.o: $(SRC_PATH)/ui/console-gl.c \
	ui/shader/texture-blit-vert.h ui/shader/texture-blit-frag.h

B
bellard 已提交
528
# documentation
529
MAKEINFO=makeinfo
530
MAKEINFOFLAGS=--no-split --number-sections
531 532
TEXIFLAG=$(if $(V),,--quiet)
%.dvi: %.texi
533
	$(call quiet-command,texi2dvi $(TEXIFLAG) -I . $<,"GEN","$@")
534

B
bellard 已提交
535
%.html: %.texi
536 537
	$(call quiet-command,LC_ALL=C $(MAKEINFO) $(MAKEINFOFLAGS) --no-headers \
	--html $< -o $@,"GEN","$@")
B
bellard 已提交
538

B
bellard 已提交
539
%.info: %.texi
540
	$(call quiet-command,$(MAKEINFO) $(MAKEINFOFLAGS) $< -o $@,"GEN","$@")
B
bellard 已提交
541

542
%.pdf: %.texi
543
	$(call quiet-command,texi2pdf $(TEXIFLAG) -I . $<,"GEN","$@")
544

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

548
qemu-monitor.texi: $(SRC_PATH)/hmp-commands.hx $(SRC_PATH)/scripts/hxtool
549
	$(call quiet-command,sh $(SRC_PATH)/scripts/hxtool -t < $< > $@,"GEN","$@")
550

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

554
qemu-img-cmds.texi: $(SRC_PATH)/qemu-img-cmds.hx $(SRC_PATH)/scripts/hxtool
555
	$(call quiet-command,sh $(SRC_PATH)/scripts/hxtool -t < $< > $@,"GEN","$@")
556

557
qemu.1: qemu-doc.texi qemu-options.texi qemu-monitor.texi qemu-monitor-info.texi
558
	$(call quiet-command, \
B
Blue Swirl 已提交
559
	  perl -Ww -- $(SRC_PATH)/scripts/texi2pod.pl $< qemu.pod && \
M
Michael Tokarev 已提交
560
	  $(POD2MAN) --section=1 --center=" " --release=" " qemu.pod > $@, \
561
	  "GEN","$@")
562
qemu.1: qemu-option-trace.texi
563

564
qemu-img.1: qemu-img.texi qemu-option-trace.texi qemu-img-cmds.texi
565
	$(call quiet-command, \
B
Blue Swirl 已提交
566
	  perl -Ww -- $(SRC_PATH)/scripts/texi2pod.pl $< qemu-img.pod && \
M
Michael Tokarev 已提交
567
	  $(POD2MAN) --section=1 --center=" " --release=" " qemu-img.pod > $@, \
568
	  "GEN","$@")
B
bellard 已提交
569

570 571 572
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 已提交
573
	  $(POD2MAN) --section=1 --center=" " --release=" " fsdev/virtfs-proxy-helper.pod > $@, \
574
	  "GEN","$@")
575

576
qemu-nbd.8: qemu-nbd.texi qemu-option-trace.texi
577
	$(call quiet-command, \
B
Blue Swirl 已提交
578
	  perl -Ww -- $(SRC_PATH)/scripts/texi2pod.pl $< qemu-nbd.pod && \
M
Michael Tokarev 已提交
579
	  $(POD2MAN) --section=8 --center=" " --release=" " qemu-nbd.pod > $@, \
580
	  "GEN","$@")
581

M
Marc-André Lureau 已提交
582 583 584 585
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 > $@, \
586
	  "GEN","$@")
M
Marc-André Lureau 已提交
587

588 589 590 591
dvi: qemu-doc.dvi
html: qemu-doc.html
info: qemu-doc.info
pdf: qemu-doc.pdf
592

593
qemu-doc.dvi qemu-doc.html qemu-doc.info qemu-doc.pdf: \
594
	qemu-img.texi qemu-nbd.texi qemu-options.texi qemu-option-trace.texi \
595 596
	qemu-monitor.texi qemu-img-cmds.texi qemu-ga.texi \
	qemu-monitor-info.texi
597

598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620
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 已提交
621
	$(MAKE) install prefix=${INSTDIR}
622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645
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)" \
646
                -DDISPLAYVERSION="$(VERSION)" \
647 648 649 650 651 652 653
                $(SRC_PATH)/qemu.nsi
	rm -r ${INSTDIR}
ifdef SIGNCODE
	$(SIGNCODE) $(INSTALLER)
endif # SIGNCODE
endif # CONFIG_WIN

654 655
# Add a dependency on the generated files, so that they are always
# rebuilt before other object files
F
Fam Zheng 已提交
656
ifneq ($(filter-out $(UNCHECKED_GOALS),$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fail))
657
Makefile: $(GENERATED_HEADERS)
658
endif
659

B
bellard 已提交
660
# Include automatically generated dependency files
661 662
# Dependencies in Makefile.objs files come from our recursive subdir rules
-include $(wildcard *.d tests/*.d)
F
Fam Zheng 已提交
663 664

include $(SRC_PATH)/tests/docker/Makefile.include
665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694

.PHONY: help
help:
	@echo  'Generic targets:'
	@echo  '  all             - Build all'
	@echo  '  dir/file.o      - Build specified target only'
	@echo  '  install         - Install QEMU, documentation and tools'
	@echo  '  ctags/TAGS      - Generate tags file for editors'
	@echo  '  cscope          - Generate cscope index'
	@echo  ''
	@$(if $(TARGET_DIRS), \
		echo 'Architecture specific targets:'; \
		$(foreach t, $(TARGET_DIRS), \
		printf "  %-30s - Build for %s\\n" $(patsubst %,subdir-%,$(t)) $(t);) \
		echo '')
	@echo  'Cleaning targets:'
	@echo  '  clean           - Remove most generated files but keep the config'
	@echo  '  distclean       - Remove all generated files'
	@echo  '  dist            - Build a distributable tarball'
	@echo  ''
	@echo  'Test targets:'
	@echo  '  check           - Run all tests (check-help for details)'
	@echo  '  docker          - Help about targets running tests inside Docker containers'
	@echo  ''
	@echo  'Documentation targets:'
	@echo  '  dvi html info pdf'
	@echo  '                  - Build documentation in specified format'
	@echo  ''
ifdef CONFIG_WIN32
	@echo  'Windows targets:'
695
	@echo  '  installer       - Build NSIS-based installer for QEMU'
696 697 698 699 700 701
ifdef QEMU_GA_MSI_ENABLED
	@echo  '  msi             - Build MSI-based installer for qemu-ga'
endif
	@echo  ''
endif
	@echo  '  make V=0|1 [targets] 0 => quiet build (default), 1 => verbose build'