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 81 82 83
# Don't try to regenerate Makefile or configure
# We don't generate any of them
Makefile: ;
configure: ;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

dtc/%:
	mkdir -p $@

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

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

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

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

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

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

######################################################################
244
# Build libraries
245 246

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

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

A
Alon Levy 已提交
252
######################################################################
B
bellard 已提交
253

J
Juan Quintela 已提交
254
qemu-img.o: qemu-img-cmds.h
255

256 257 258
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
259

260
qemu-bridge-helper$(EXESUF): qemu-bridge-helper.o libqemuutil.a libqemustub.a
261

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

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

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

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

273 274
qapi-py = $(SRC_PATH)/scripts/qapi.py $(SRC_PATH)/scripts/ordereddict.py

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

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

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

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

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

329 330 331
ifdef QEMU_GA_MSI_ENABLED
QEMU_GA_MSI=qemu-ga-$(ARCH).msi

332
msi: $(QEMU_GA_MSI)
333

334
$(QEMU_GA_MSI): qemu-ga.exe $(QGA_VSS_PROVIDER)
335 336 337

$(QEMU_GA_MSI): config-host.mak

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

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

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

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

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

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

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

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

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

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

463

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

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

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

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

B
bellard 已提交
511
cscope:
F
Fam Zheng 已提交
512 513 514
	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 已提交
515

516 517 518 519 520 521 522 523 524 525 526 527 528
# 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  $@")

529 530 531
ui/console-gl.o: $(SRC_PATH)/ui/console-gl.c \
	ui/shader/texture-blit-vert.h ui/shader/texture-blit-frag.h

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

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

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

546 547
%.pdf: %.texi
	$(call quiet-command,texi2pdf $(TEXIFLAG) -I . $<,"  GEN   $@")
548

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

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

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

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

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'