Makefile 24.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

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 60 61
GENERATED_HEADERS += trace/generated-events.h
GENERATED_SOURCES += trace/generated-events.c

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

68 69
GENERATED_HEADERS += trace/generated-tcg-tracers.h

70
GENERATED_HEADERS += trace/generated-helpers-wrappers.h
71
GENERATED_HEADERS += trace/generated-helpers.h
72
GENERATED_SOURCES += trace/generated-helpers.c
73

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

79 80
GENERATED_HEADERS += module_block.h

81 82 83 84 85
# Don't try to regenerate Makefile or configure
# We don't generate any of them
Makefile: ;
configure: ;

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

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

J
Juan Quintela 已提交
91
LIBS+=-lz $(LIBS_TOOLS)
92

93 94
HELPERS-$(CONFIG_LINUX) = qemu-bridge-helper$(EXESUF)

95
ifdef BUILD_DOCS
M
Marc-André Lureau 已提交
96
DOCS=qemu-doc.html qemu-tech.html qemu.1 qemu-img.1 qemu-nbd.8 qemu-ga.8
97
ifdef CONFIG_VIRTFS
98
DOCS+=fsdev/virtfs-proxy-helper.1
99
endif
100 101 102
else
DOCS=
endif
B
bellard 已提交
103

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

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

P
Paul Brook 已提交
119 120
-include $(SUBDIR_DEVICES_MAK_DEP)

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

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

145 146
ifneq ($(wildcard config-host.mak),)
include $(SRC_PATH)/Makefile.objs
147 148 149 150 151 152
endif

dummy := $(call unnest-vars,, \
                stub-obj-y \
                util-obj-y \
                qga-obj-y \
153 154
                ivshmem-client-obj-y \
                ivshmem-server-obj-y \
155
                qga-vss-dll-obj-y \
156
                block-obj-y \
157
                block-obj-m \
158 159
                crypto-obj-y \
                crypto-aes-obj-y \
160
                qom-obj-y \
161
                io-obj-y \
162 163
                common-obj-y \
                common-obj-m)
164 165

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

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

171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188
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)
189
	$(call quiet-command, cmp -s $@ $@.tmp || mv $@.tmp $@)
190

191 192
config-host.h: config-host.h-timestamp
config-host.h-timestamp: config-host.mak
193
qemu-options.def: $(SRC_PATH)/qemu-options.hx $(SRC_PATH)/scripts/hxtool
B
Blue Swirl 已提交
194
	$(call quiet-command,sh $(SRC_PATH)/scripts/hxtool -h < $< > $@,"  GEN   $@")
195

196
SUBDIR_RULES=$(patsubst %,subdir-%, $(TARGET_DIRS))
197 198
SOFTMMU_SUBDIR_RULES=$(filter %-softmmu,$(SUBDIR_RULES))

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

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

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

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

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

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

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

dtc/%:
	mkdir -p $@

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

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

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

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

237
$(BUILD_DIR)/version.o: $(SRC_PATH)/version.rc config-host.h | $(BUILD_DIR)/version.lo
238
	$(call quiet-command,$(WINDRES) -I$(BUILD_DIR) -o $@ $<,"  RC    version.o")
239
$(BUILD_DIR)/version.lo: $(SRC_PATH)/version.rc config-host.h
240
	$(call quiet-command,$(WINDRES) -I$(BUILD_DIR) -o $@ $<,"  RC    version.lo")
241

P
Paolo Bonzini 已提交
242
Makefile: $(version-obj-y) $(version-lobj-y)
243 244

######################################################################
245
# Build libraries
246 247

libqemustub.a: $(stub-obj-y)
248
libqemuutil.a: $(util-obj-y)
249

A
Alon Levy 已提交
250
######################################################################
B
bellard 已提交
251

J
Juan Quintela 已提交
252
qemu-img.o: qemu-img-cmds.h
253

254 255 256
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
257

258
qemu-bridge-helper$(EXESUF): qemu-bridge-helper.o libqemuutil.a libqemustub.a
259

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

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

266
qemu-ga$(EXESUF): LIBS = $(LIBS_QGA)
267
qemu-ga$(EXESUF): QEMU_CFLAGS += -I qga/qapi-generated
268

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

271 272
qapi-py = $(SRC_PATH)/scripts/qapi.py $(SRC_PATH)/scripts/ordereddict.py

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

289
qapi-modules = $(SRC_PATH)/qapi-schema.json $(SRC_PATH)/qapi/common.json \
290
               $(SRC_PATH)/qapi/block.json $(SRC_PATH)/qapi/block-core.json \
291
               $(SRC_PATH)/qapi/event.json $(SRC_PATH)/qapi/introspect.json \
292 293
               $(SRC_PATH)/qapi/crypto.json $(SRC_PATH)/qapi/rocker.json \
               $(SRC_PATH)/qapi/trace.json
294

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

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

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

327 328 329
ifdef QEMU_GA_MSI_ENABLED
QEMU_GA_MSI=qemu-ga-$(ARCH).msi

330
msi: $(QEMU_GA_MSI)
331

332
$(QEMU_GA_MSI): qemu-ga.exe $(QGA_VSS_PROVIDER)
333 334 335

$(QEMU_GA_MSI): config-host.mak

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

344 345 346 347 348
ifneq ($(EXESUF),)
.PHONY: qemu-ga
qemu-ga: qemu-ga$(EXESUF) $(QGA_VSS_PROVIDER) $(QEMU_GA_MSI)
endif

349
ivshmem-client$(EXESUF): $(ivshmem-client-obj-y) libqemuutil.a libqemustub.a
350 351 352 353
	$(call LINK, $^)
ivshmem-server$(EXESUF): $(ivshmem-server-obj-y) libqemuutil.a libqemustub.a
	$(call LINK, $^)

354 355 356 357 358
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))), \
	"  GEN   $@")

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

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

B
bellard 已提交
409 410
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 \
411
common  de-ch  es     fo  fr-ca  hu     ja  mk  nl-be      pt  sl     tr \
J
Jan Krupa 已提交
412
bepo    cz
B
bellard 已提交
413

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

435
install-doc: $(DOCS)
436 437
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_docdir)"
	$(INSTALL_DATA) qemu-doc.html  qemu-tech.html "$(DESTDIR)$(qemu_docdir)"
438
	$(INSTALL_DATA) $(SRC_PATH)/docs/qmp-commands.txt "$(DESTDIR)$(qemu_docdir)"
439
ifdef CONFIG_POSIX
440
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man1"
441 442 443
	$(INSTALL_DATA) qemu.1 "$(DESTDIR)$(mandir)/man1"
ifneq ($(TOOLS),)
	$(INSTALL_DATA) qemu-img.1 "$(DESTDIR)$(mandir)/man1"
444 445
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man8"
	$(INSTALL_DATA) qemu-nbd.8 "$(DESTDIR)$(mandir)/man8"
446
endif
M
Marc-André Lureau 已提交
447 448 449
ifneq (,$(findstring qemu-ga,$(TOOLS)))
	$(INSTALL_DATA) qemu-ga.8 "$(DESTDIR)$(mandir)/man8"
endif
450
endif
451 452 453 454
ifdef CONFIG_VIRTFS
	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man1"
	$(INSTALL_DATA) fsdev/virtfs-proxy-helper.1 "$(DESTDIR)$(mandir)/man1"
endif
455 456 457 458

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

459 460 461 462 463 464 465
install-localstatedir:
ifdef CONFIG_POSIX
ifneq (,$(findstring qemu-ga,$(TOOLS)))
	$(INSTALL_DIR) "$(DESTDIR)$(qemu_localstatedir)"/run
endif
endif

466

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

B
bellard 已提交
500
# various test targets
B
bellard 已提交
501
test speed: all
A
Anthony Liguori 已提交
502
	$(MAKE) -C tests/tcg $@
503

F
Fam Zheng 已提交
504 505
.PHONY: ctags
ctags:
506
	rm -f tags
F
Fam Zheng 已提交
507 508
	find "$(SRC_PATH)" -name '*.[hc]' -exec ctags --append {} +

A
Alexandre Bique 已提交
509
.PHONY: TAGS
510
TAGS:
511
	rm -f TAGS
D
David Gibson 已提交
512
	find "$(SRC_PATH)" -name '*.[hc]' -exec etags --append {} +
513

B
bellard 已提交
514
cscope:
F
Fam Zheng 已提交
515 516 517
	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 已提交
518

519 520 521 522 523 524 525 526 527 528 529 530 531
# opengl shader programs
ui/shader/%-vert.h: $(SRC_PATH)/ui/shader/%.vert $(SRC_PATH)/scripts/shaderinclude.pl
	@mkdir -p $(dir $@)
	$(call quiet-command,\
		perl $(SRC_PATH)/scripts/shaderinclude.pl $< > $@,\
		"  VERT  $@")

ui/shader/%-frag.h: $(SRC_PATH)/ui/shader/%.frag $(SRC_PATH)/scripts/shaderinclude.pl
	@mkdir -p $(dir $@)
	$(call quiet-command,\
		perl $(SRC_PATH)/scripts/shaderinclude.pl $< > $@,\
		"  FRAG  $@")

532 533 534
ui/console-gl.o: $(SRC_PATH)/ui/console-gl.c \
	ui/shader/texture-blit-vert.h ui/shader/texture-blit-frag.h

B
bellard 已提交
535
# documentation
536 537
MAKEINFO=makeinfo
MAKEINFOFLAGS=--no-headers --no-split --number-sections
538 539 540 541
TEXIFLAG=$(if $(V),,--quiet)
%.dvi: %.texi
	$(call quiet-command,texi2dvi $(TEXIFLAG) -I . $<,"  GEN   $@")

B
bellard 已提交
542
%.html: %.texi
543
	$(call quiet-command,LC_ALL=C $(MAKEINFO) $(MAKEINFOFLAGS) --html $< -o $@, \
544
	"  GEN   $@")
B
bellard 已提交
545

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

549 550
%.pdf: %.texi
	$(call quiet-command,texi2pdf $(TEXIFLAG) -I . $<,"  GEN   $@")
551

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

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

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

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

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

571
qemu-img.1: qemu-img.texi qemu-option-trace.texi qemu-img-cmds.texi
572
	$(call quiet-command, \
B
Blue Swirl 已提交
573
	  perl -Ww -- $(SRC_PATH)/scripts/texi2pod.pl $< qemu-img.pod && \
M
Michael Tokarev 已提交
574
	  $(POD2MAN) --section=1 --center=" " --release=" " qemu-img.pod > $@, \
575
	  "  GEN   $@")
B
bellard 已提交
576

577 578 579
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 已提交
580
	  $(POD2MAN) --section=1 --center=" " --release=" " fsdev/virtfs-proxy-helper.pod > $@, \
581 582
	  "  GEN   $@")

583
qemu-nbd.8: qemu-nbd.texi qemu-option-trace.texi
584
	$(call quiet-command, \
B
Blue Swirl 已提交
585
	  perl -Ww -- $(SRC_PATH)/scripts/texi2pod.pl $< qemu-nbd.pod && \
M
Michael Tokarev 已提交
586
	  $(POD2MAN) --section=8 --center=" " --release=" " qemu-nbd.pod > $@, \
587
	  "  GEN   $@")
588

M
Marc-André Lureau 已提交
589 590 591 592 593 594
qemu-ga.8: qemu-ga.texi
	$(call quiet-command, \
	  perl -Ww -- $(SRC_PATH)/scripts/texi2pod.pl $< qemu-ga.pod && \
	  $(POD2MAN) --section=8 --center=" " --release=" " qemu-ga.pod > $@, \
	  "  GEN   $@")

595 596
dvi: qemu-doc.dvi qemu-tech.dvi
html: qemu-doc.html qemu-tech.html
597 598
info: qemu-doc.info qemu-tech.info
pdf: qemu-doc.pdf qemu-tech.pdf
599

600
qemu-doc.dvi qemu-doc.html qemu-doc.info qemu-doc.pdf: \
601
	qemu-img.texi qemu-nbd.texi qemu-options.texi qemu-option-trace.texi \
602 603
	qemu-monitor.texi qemu-img-cmds.texi qemu-ga.texi \
	qemu-monitor-info.texi
604

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

661 662
# Add a dependency on the generated files, so that they are always
# rebuilt before other object files
F
Fam Zheng 已提交
663
ifneq ($(filter-out $(UNCHECKED_GOALS),$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fail))
664
Makefile: $(GENERATED_HEADERS)
665
endif
666

B
bellard 已提交
667
# Include automatically generated dependency files
668 669
# Dependencies in Makefile.objs files come from our recursive subdir rules
-include $(wildcard *.d tests/*.d)
F
Fam Zheng 已提交
670 671

include $(SRC_PATH)/tests/docker/Makefile.include
672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708

.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:'
	@echo  '  installer       - Build NSIS-based installer for qemu-ga'
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'