Makefile 24.6 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

333
msi: $(QEMU_GA_MSI)
334

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

$(QEMU_GA_MSI): config-host.mak

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

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

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

357 358 359 360 361
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   $@")

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

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

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

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

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

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

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

469

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

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

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

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

B
bellard 已提交
517
cscope:
F
Fam Zheng 已提交
518 519 520
	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 已提交
521

522 523 524 525 526 527 528 529 530 531 532 533 534
# 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  $@")

535 536 537
ui/console-gl.o: $(SRC_PATH)/ui/console-gl.c \
	ui/shader/texture-blit-vert.h ui/shader/texture-blit-frag.h

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

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

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

552 553
%.pdf: %.texi
	$(call quiet-command,texi2pdf $(TEXIFLAG) -I . $<,"  GEN   $@")
554

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

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

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

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

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

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

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

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

M
Marc-André Lureau 已提交
592 593 594 595 596 597
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   $@")

598 599
dvi: qemu-doc.dvi qemu-tech.dvi
html: qemu-doc.html qemu-tech.html
600 601
info: qemu-doc.info qemu-tech.info
pdf: qemu-doc.pdf qemu-tech.pdf
602

603
qemu-doc.dvi qemu-doc.html qemu-doc.info qemu-doc.pdf: \
604
	qemu-img.texi qemu-nbd.texi qemu-options.texi qemu-option-trace.texi \
605 606
	qemu-monitor.texi qemu-img-cmds.texi qemu-ga.texi \
	qemu-monitor-info.texi
607

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

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

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

include $(SRC_PATH)/tests/docker/Makefile.include
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 709 710 711

.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'