1# 2# Define WERROR=0 to disable -Werror. 3# 4 5ifeq ($(strip $(V)),) 6 ifeq ($(findstring s,$(filter-out --%,$(firstword $(MAKEFLAGS)))),) 7 E = @echo 8 else 9 E = @\# 10 endif 11 Q = @ 12else 13 E = @\# 14 Q = 15endif 16export E Q 17 18include config/utilities.mak 19include config/feature-tests.mak 20-include $(OUTPUT)KVMTOOLS-VERSION-FILE 21 22CC := $(CROSS_COMPILE)gcc 23CFLAGS := 24LD := $(CROSS_COMPILE)ld 25LDFLAGS := 26OBJCOPY := $(CROSS_COMPILE)objcopy 27 28FIND := find 29CSCOPE := cscope 30TAGS := ctags 31INSTALL := install 32 33prefix = $(HOME) 34bindir_relative = bin 35bindir = $(prefix)/$(bindir_relative) 36 37DESTDIR_SQ = $(subst ','\'',$(DESTDIR)) 38bindir_SQ = $(subst ','\'',$(bindir)) 39 40PROGRAM := lkvm 41PROGRAM_ALIAS := vm 42 43OBJS += builtin-balloon.o 44OBJS += builtin-debug.o 45OBJS += builtin-help.o 46OBJS += builtin-list.o 47OBJS += builtin-stat.o 48OBJS += builtin-pause.o 49OBJS += builtin-resume.o 50OBJS += builtin-run.o 51OBJS += builtin-setup.o 52OBJS += builtin-stop.o 53OBJS += builtin-version.o 54OBJS += devices.o 55OBJS += disk/core.o 56OBJS += framebuffer.o 57OBJS += guest_compat.o 58OBJS += hw/rtc.o 59OBJS += irq.o 60OBJS += kvm-cpu.o 61OBJS += kvm.o 62OBJS += main.o 63OBJS += mmio.o 64OBJS += pci.o 65OBJS += term.o 66OBJS += vfio/core.o 67OBJS += vfio/pci.o 68OBJS += virtio/blk.o 69OBJS += virtio/scsi.o 70OBJS += virtio/console.o 71OBJS += virtio/core.o 72OBJS += virtio/net.o 73OBJS += virtio/rng.o 74OBJS += virtio/balloon.o 75OBJS += virtio/pci.o 76OBJS += virtio/vsock.o 77OBJS += virtio/pci-legacy.o 78OBJS += virtio/pci-modern.o 79OBJS += virtio/vhost.o 80OBJS += disk/blk.o 81OBJS += disk/qcow.o 82OBJS += disk/raw.o 83OBJS += epoll.o 84OBJS += ioeventfd.o 85OBJS += net/uip/core.o 86OBJS += net/uip/arp.o 87OBJS += net/uip/icmp.o 88OBJS += net/uip/ipv4.o 89OBJS += net/uip/tcp.o 90OBJS += net/uip/udp.o 91OBJS += net/uip/buf.o 92OBJS += net/uip/csum.o 93OBJS += net/uip/dhcp.o 94OBJS += kvm-cmd.o 95OBJS += util/bitmap.o 96OBJS += util/find.o 97OBJS += util/init.o 98OBJS += util/iovec.o 99OBJS += util/rbtree.o 100OBJS += util/threadpool.o 101OBJS += util/parse-options.o 102OBJS += util/rbtree-interval.o 103OBJS += util/strbuf.o 104OBJS += util/read-write.o 105OBJS += util/util.o 106OBJS += virtio/9p.o 107OBJS += virtio/9p-pdu.o 108OBJS += kvm-ipc.o 109OBJS += builtin-sandbox.o 110OBJS += virtio/mmio.o 111OBJS += virtio/mmio-legacy.o 112OBJS += virtio/mmio-modern.o 113 114# Translate uname -m into ARCH string 115ARCH ?= $(shell uname -m | sed -e s/i.86/i386/ -e s/ppc.*/powerpc/ \ 116 -e s/armv.*/arm/ -e s/aarch64.*/arm64/ -e s/mips64/mips/ \ 117 -e s/riscv64/riscv/ -e s/riscv32/riscv/) 118 119ifeq ($(ARCH),i386) 120 override ARCH = x86 121 DEFINES += -DCONFIG_X86_32 122endif 123ifeq ($(ARCH),x86_64) 124 override ARCH = x86 125 DEFINES += -DCONFIG_X86_64 126 ARCH_PRE_INIT = x86/init.S 127endif 128 129### Arch-specific stuff 130 131#x86 132ifeq ($(ARCH),x86) 133 DEFINES += -DCONFIG_X86 134 OBJS += hw/i8042.o 135 OBJS += hw/serial.o 136 OBJS += x86/boot.o 137 OBJS += x86/cpuid.o 138 OBJS += x86/interrupt.o 139 OBJS += x86/ioport.o 140 OBJS += x86/irq.o 141 OBJS += x86/kvm.o 142 OBJS += x86/kvm-cpu.o 143 OBJS += x86/mptable.o 144# Exclude BIOS object files from header dependencies. 145 OTHEROBJS += x86/bios.o 146 OTHEROBJS += x86/bios/bios-rom.o 147 ARCH_INCLUDE := x86/include 148 ARCH_HAS_FRAMEBUFFER := y 149endif 150# POWER/ppc: Actually only support ppc64 currently. 151ifeq ($(ARCH), powerpc) 152 DEFINES += -DCONFIG_PPC 153 OBJS += hw/serial.o 154 OBJS += powerpc/boot.o 155 OBJS += powerpc/ioport.o 156 OBJS += powerpc/kvm.o 157 OBJS += powerpc/cpu_info.o 158 OBJS += powerpc/kvm-cpu.o 159 OBJS += powerpc/spapr_hcall.o 160 OBJS += powerpc/spapr_rtas.o 161 OBJS += powerpc/spapr_hvcons.o 162 OBJS += powerpc/spapr_pci.o 163 OBJS += powerpc/xics.o 164 ARCH_INCLUDE := powerpc/include 165 166 ARCH_WANT_LIBFDT := y 167endif 168 169# ARM 170OBJS_ARM_COMMON := arm/fdt.o arm/gic.o arm/gicv2m.o arm/ioport.o \ 171 arm/kvm.o arm/kvm-cpu.o arm/pci.o arm/timer.o \ 172 hw/serial.o 173HDRS_ARM_COMMON := arm/include 174ifeq ($(ARCH), arm) 175 DEFINES += -DCONFIG_ARM 176 OBJS += $(OBJS_ARM_COMMON) 177 OBJS += arm/aarch32/arm-cpu.o 178 OBJS += arm/aarch32/kvm-cpu.o 179 OBJS += arm/aarch32/kvm.o 180 ARCH_INCLUDE := $(HDRS_ARM_COMMON) 181 ARCH_INCLUDE += -Iarm/aarch32/include 182 CFLAGS += -march=armv7-a 183 184 ARCH_WANT_LIBFDT := y 185 ARCH_HAS_FLASH_MEM := y 186endif 187 188# ARM64 189ifeq ($(ARCH), arm64) 190 DEFINES += -DCONFIG_ARM64 191 OBJS += $(OBJS_ARM_COMMON) 192 OBJS += arm/aarch64/arm-cpu.o 193 OBJS += arm/aarch64/kvm-cpu.o 194 OBJS += arm/aarch64/kvm.o 195 OBJS += arm/aarch64/pvtime.o 196 OBJS += arm/aarch64/pmu.o 197 ARCH_INCLUDE := $(HDRS_ARM_COMMON) 198 ARCH_INCLUDE += -Iarm/aarch64/include 199 200 ARCH_WANT_LIBFDT := y 201 ARCH_HAS_FLASH_MEM := y 202endif 203 204ifeq ($(ARCH),mips) 205 DEFINES += -DCONFIG_MIPS 206 ARCH_INCLUDE := mips/include 207 OBJS += mips/kvm.o 208 OBJS += mips/kvm-cpu.o 209endif 210 211# RISC-V (RV32 and RV64) 212ifeq ($(ARCH),riscv) 213 DEFINES += -DCONFIG_RISCV 214 ARCH_INCLUDE := riscv/include 215 OBJS += hw/serial.o 216 OBJS += riscv/fdt.o 217 OBJS += riscv/ioport.o 218 OBJS += riscv/irq.o 219 OBJS += riscv/kvm.o 220 OBJS += riscv/kvm-cpu.o 221 OBJS += riscv/pci.o 222 OBJS += riscv/plic.o 223 OBJS += riscv/aia.o 224 ifeq ($(RISCV_XLEN),32) 225 CFLAGS += -mabi=ilp32d -march=rv32gc 226 GUEST_INIT_FLAGS += -mabi=ilp32d -march=rv32gc 227 endif 228 ifeq ($(RISCV_XLEN),64) 229 CFLAGS += -mabi=lp64d -march=rv64gc 230 GUEST_INIT_FLAGS += -mabi=lp64d -march=rv64gc 231 endif 232 233 ARCH_WANT_LIBFDT := y 234endif 235### 236 237ifeq (,$(ARCH_INCLUDE)) 238 $(error This architecture ($(ARCH)) is not supported in kvmtool) 239endif 240 241### 242 243# Detect optional features. 244# On a given system, some libs may link statically, some may not; so, check 245# both and only build those that link! 246 247ifeq ($(call try-build,$(SOURCE_STRLCPY),$(CFLAGS),$(LDFLAGS)),y) 248 CFLAGS_DYNOPT += -DHAVE_STRLCPY 249 CFLAGS_STATOPT += -DHAVE_STRLCPY 250endif 251 252ifeq ($(call try-build,$(SOURCE_BFD),$(CFLAGS),$(LDFLAGS) -lbfd -static),y) 253 CFLAGS_STATOPT += -DCONFIG_HAS_BFD 254 OBJS_STATOPT += symbol.o 255 LIBS_STATOPT += -lbfd 256else 257 ifeq ($(call try-build,$(SOURCE_BFD),$(CFLAGS),$(LDFLAGS) -lbfd),y) 258 CFLAGS_DYNOPT += -DCONFIG_HAS_BFD 259 OBJS_DYNOPT += symbol.o 260 LIBS_DYNOPT += -lbfd 261 else 262 NOTFOUND += bfd 263 endif 264endif 265 266ifeq (y,$(ARCH_HAS_FRAMEBUFFER)) 267 OBJS += hw/vesa.o 268 269 CFLAGS_GTK3 := $(shell pkg-config --cflags gtk+-3.0 2>/dev/null) 270 LDFLAGS_GTK3 := $(shell pkg-config --libs gtk+-3.0 2>/dev/null) 271 ifeq ($(call try-build,$(SOURCE_GTK3),$(CFLAGS) $(CFLAGS_GTK3),$(LDFLAGS) $(LDFLAGS_GTK3)),y) 272 OBJS_DYNOPT += ui/gtk3.o 273 CFLAGS_DYNOPT += -DCONFIG_HAS_GTK3 $(CFLAGS_GTK3) 274 LIBS_DYNOPT += $(LDFLAGS_GTK3) 275 else 276 NOTFOUND += GTK3 277 endif 278 279 ifeq ($(call try-build,$(SOURCE_VNCSERVER),$(CFLAGS),$(LDFLAGS) -lvncserver),y) 280 OBJS_DYNOPT += ui/vnc.o 281 CFLAGS_DYNOPT += -DCONFIG_HAS_VNCSERVER 282 LIBS_DYNOPT += -lvncserver 283 else 284 NOTFOUND += vncserver 285 endif 286 ifeq ($(call try-build,$(SOURCE_VNCSERVER),$(CFLAGS),$(LDFLAGS) -lvncserver -static),y) 287 OBJS_STATOPT += ui/vnc.o 288 CFLAGS_STATOPT += -DCONFIG_HAS_VNCSERVER 289 LIBS_STATOPT += -lvncserver 290 endif 291 292 ifeq ($(call try-build,$(SOURCE_SDL),$(CFLAGS),$(LDFLAGS) -lSDL),y) 293 OBJS_DYNOPT += ui/sdl.o 294 CFLAGS_DYNOPT += -DCONFIG_HAS_SDL 295 LIBS_DYNOPT += -lSDL 296 else 297 NOTFOUND += SDL 298 endif 299 ifeq ($(call try-build,$(SOURCE_SDL),$(CFLAGS),$(LDFLAGS) -lSDL -static), y) 300 OBJS_STATOPT += ui/sdl.o 301 CFLAGS_STATOPT += -DCONFIG_HAS_SDL 302 LIBS_STATOPT += -lSDL 303 endif 304endif 305 306ifeq (y,$(ARCH_HAS_FLASH_MEM)) 307 OBJS += hw/cfi_flash.o 308endif 309 310ifeq ($(call try-build,$(SOURCE_ZLIB),$(CFLAGS),$(LDFLAGS) -lz),y) 311 CFLAGS_DYNOPT += -DCONFIG_HAS_ZLIB 312 LIBS_DYNOPT += -lz 313else 314 ifeq ($(call try-build,$(SOURCE_ZLIB),$(CFLAGS),$(LDFLAGS) -lz -static),y) 315 CFLAGS_STATOPT += -DCONFIG_HAS_ZLIB 316 LIBS_STATOPT += -lz 317 else 318 NOTFOUND += zlib 319 endif 320endif 321 322ifeq ($(call try-build,$(SOURCE_AIO),$(CFLAGS),$(LDFLAGS) -laio),y) 323 CFLAGS_DYNOPT += -DCONFIG_HAS_AIO 324 LIBS_DYNOPT += -laio 325 OBJS_DYNOPT += disk/aio.o 326else 327 ifeq ($(call try-build,$(SOURCE_AIO),$(CFLAGS),$(LDFLAGS) -laio -static),y) 328 CFLAGS_STATOPT += -DCONFIG_HAS_AIO 329 LIBS_STATOPT += -laio 330 OBJS_STATOPT += disk/aio.o 331 else 332 NOTFOUND += aio 333 endif 334endif 335 336ifeq ($(LTO),1) 337 FLAGS_LTO := -flto 338 ifeq ($(call try-build,$(SOURCE_HELLO),$(CFLAGS),$(LDFLAGS) $(FLAGS_LTO)),y) 339 CFLAGS += $(FLAGS_LTO) 340 endif 341endif 342 343ifeq ($(call try-build,$(SOURCE_STATIC),$(CFLAGS),$(LDFLAGS) -static),y) 344 CFLAGS += -DCONFIG_GUEST_INIT 345 GUEST_INIT := guest/init 346 GUEST_OBJS = guest/guest_init.o 347 ifeq ($(ARCH_PRE_INIT),) 348 GUEST_INIT_FLAGS += -static $(PIE_FLAGS) 349 else 350 CFLAGS += -DCONFIG_GUEST_PRE_INIT 351 GUEST_INIT_FLAGS += -DCONFIG_GUEST_PRE_INIT 352 GUEST_PRE_INIT := guest/pre_init 353 GUEST_OBJS += guest/guest_pre_init.o 354 endif 355else 356$(warning No static libc found. Skipping guest init) 357 NOTFOUND += static-libc 358endif 359 360ifeq (y,$(ARCH_WANT_LIBFDT)) 361 ifneq ($(LIBFDT_DIR),) 362 ifeq ($(wildcard $(LIBFDT_DIR)),) 363 $(error LIBFDT_DIR not found) 364 endif 365 366 LIBFDT_STATIC := $(LIBFDT_DIR)/libfdt.a 367 368 ifeq ($(wildcard $(LIBFDT_STATIC)),) 369 $(error libfdt.a not found) 370 endif 371 372 CFLAGS_DYNOPT += -DCONFIG_HAS_LIBFDT 373 CFLAGS_STATOPT += -DCONFIG_HAS_LIBFDT 374 CFLAGS += -I $(LIBFDT_DIR) 375 else ifeq ($(call try-build,$(SOURCE_LIBFDT),$(CFLAGS),-lfdt),y) 376 LIBFDT_STATIC := 377 CFLAGS_DYNOPT += -DCONFIG_HAS_LIBFDT 378 CFLAGS_STATOPT += -DCONFIG_HAS_LIBFDT 379 LIBS_DYNOPT += -lfdt 380 LIBS_STATOPT += -lfdt 381 else 382 $(error No libfdt found. Please install libfdt-dev package or set LIBFDT_DIR) 383 endif 384endif 385 386ifeq ($(call try-build,$(SOURCE_HELLO),$(CFLAGS),-no-pie),y) 387 PIE_FLAGS += -no-pie 388endif 389 390ifneq ($(NOTFOUND),) 391 $(warning Skipping optional libraries: $(NOTFOUND)) 392endif 393 394### 395 396LIBS += -lrt 397LIBS += -lpthread 398LIBS += -lutil 399 400 401comma = , 402 403# The dependency file for the current target 404depfile = $(subst $(comma),_,$(dir $@).$(notdir $@).d) 405 406DEPS := $(foreach obj,$(OBJS) $(OBJS_DYNOPT) $(OTHEROBJS) $(GUEST_OBJS),\ 407 $(subst $(comma),_,$(dir $(obj)).$(notdir $(obj)).d)) 408 409DEFINES += -D_FILE_OFFSET_BITS=64 410DEFINES += -D_GNU_SOURCE 411DEFINES += -DKVMTOOLS_VERSION='"$(KVMTOOLS_VERSION)"' 412DEFINES += -DBUILD_ARCH='"$(ARCH)"' 413 414KVM_INCLUDE := include 415CFLAGS += $(CPPFLAGS) $(DEFINES) -I$(KVM_INCLUDE) -I$(ARCH_INCLUDE) -O2 -fno-strict-aliasing -g 416 417WARNINGS += -Wall 418WARNINGS += -Wformat=2 419WARNINGS += -Winit-self 420WARNINGS += -Wmissing-declarations 421WARNINGS += -Wmissing-prototypes 422WARNINGS += -Wnested-externs 423WARNINGS += -Wno-system-headers 424WARNINGS += -Wold-style-definition 425WARNINGS += -Wredundant-decls 426WARNINGS += -Wsign-compare 427WARNINGS += -Wstrict-prototypes 428WARNINGS += -Wundef 429WARNINGS += -Wvolatile-register-var 430WARNINGS += -Wwrite-strings 431WARNINGS += -Wno-format-nonliteral 432 433CFLAGS += $(WARNINGS) 434 435ifneq ($(WERROR),0) 436 CFLAGS += -Werror 437endif 438 439all: $(PROGRAM) $(PROGRAM_ALIAS) 440 441# CFLAGS used when building objects 442# This is intentionally not assigned using := 443c_flags = -Wp,-MD,$(depfile) -Wp,-MT,$@ $(CFLAGS) 444 445# When building -static all objects are built with appropriate flags, which 446# may differ between static & dynamic .o. The objects are separated into 447# .o and .static.o. See the %.o: %.c rules below. 448# 449# $(OTHEROBJS) are things that do not get substituted like this. 450# 451STATIC_OBJS = $(patsubst %.o,%.static.o,$(OBJS) $(OBJS_STATOPT)) 452 453STATIC_DEPS := $(foreach obj,$(STATIC_OBJS),\ 454 $(subst $(comma),_,$(dir $(obj)).$(notdir $(obj)).d)) 455 456$(PROGRAM)-static: $(STATIC_OBJS) $(OTHEROBJS) $(GUEST_OBJS) $(LIBFDT_STATIC) 457 $(E) " LINK " $@ 458 $(Q) $(CC) -static $(CFLAGS) $(STATIC_OBJS) $(OTHEROBJS) $(GUEST_OBJS) $(LDFLAGS) $(LIBS) $(LIBS_STATOPT) $(LIBFDT_STATIC) -o $@ 459 460$(PROGRAM): $(OBJS) $(OBJS_DYNOPT) $(OTHEROBJS) $(GUEST_OBJS) $(LIBFDT_STATIC) 461 $(E) " LINK " $@ 462 $(Q) $(CC) $(CFLAGS) $(OBJS) $(OBJS_DYNOPT) $(OTHEROBJS) $(GUEST_OBJS) $(LDFLAGS) $(LIBS) $(LIBS_DYNOPT) $(LIBFDT_STATIC) -o $@ 463 464$(PROGRAM_ALIAS): $(PROGRAM) 465 $(E) " LN " $@ 466 $(Q) ln -f $(PROGRAM) $@ 467 468ifneq ($(ARCH_PRE_INIT),) 469$(GUEST_PRE_INIT): $(ARCH_PRE_INIT) 470 $(E) " COMPILE " $@ 471 $(Q) $(CC) -s $(PIE_FLAGS) -nostdlib $< -o $@ 472 473guest/guest_pre_init.c: $(GUEST_PRE_INIT) 474 $(E) " CONVERT " $@ 475 $(Q) $(call binary-to-C,$<,pre_init_binary,$@) 476endif 477 478$(GUEST_INIT): guest/init.c 479 $(E) " COMPILE " $@ 480 $(Q) $(CC) $(GUEST_INIT_FLAGS) $< -o $@ 481 482guest/guest_init.c: $(GUEST_INIT) 483 $(E) " CONVERT " $@ 484 $(Q) $(call binary-to-C,$<,init_binary,$@) 485 486%.s: %.c 487 $(Q) $(CC) -o $@ -S $(CFLAGS) -fverbose-asm $< 488 489$(OBJS): 490 491util/rbtree.static.o util/rbtree.o: util/rbtree.c 492ifeq ($(C),1) 493 $(E) " CHECK " $@ 494 $(Q) $(CHECK) -c $(CFLAGS) $< -o $@ 495endif 496 $(E) " CC " $@ 497 $(Q) $(CC) -c $(c_flags) $< -o $@ 498 499%.static.o: %.c 500ifeq ($(C),1) 501 $(E) " CHECK " $@ 502 $(Q) $(CHECK) -c $(CFLAGS) $(CFLAGS_STATOPT) $< -o $@ 503endif 504 $(E) " CC " $@ 505 $(Q) $(CC) -c $(c_flags) $(CFLAGS_STATOPT) $< -o $@ 506 507%.o: %.c 508ifeq ($(C),1) 509 $(E) " CHECK " $@ 510 $(Q) $(CHECK) -c $(CFLAGS) $(CFLAGS_DYNOPT) $< -o $@ 511endif 512 $(E) " CC " $@ 513 $(Q) $(CC) -c $(c_flags) $(CFLAGS_DYNOPT) $< -o $@ 514 515 516# 517# BIOS assembly weirdness 518# 519BIOS_CFLAGS += -m32 520BIOS_CFLAGS += -march=i386 521BIOS_CFLAGS += -mregparm=3 522 523BIOS_CFLAGS += -fno-stack-protector 524BIOS_CFLAGS += -fno-pic 525 526x86/bios.o: x86/bios/bios.bin x86/bios/bios-rom.h 527 528x86/bios/bios.bin.elf: x86/bios/entry.S x86/bios/e820.c x86/bios/int10.c x86/bios/int15.c x86/bios/rom.ld.S 529 $(E) " CC x86/bios/memcpy.o" 530 $(Q) $(CC) -include code16gcc.h $(CFLAGS) $(BIOS_CFLAGS) -c x86/bios/memcpy.c -o x86/bios/memcpy.o 531 $(E) " CC x86/bios/e820.o" 532 $(Q) $(CC) -include code16gcc.h $(CFLAGS) $(BIOS_CFLAGS) -c x86/bios/e820.c -o x86/bios/e820.o 533 $(E) " CC x86/bios/int10.o" 534 $(Q) $(CC) -include code16gcc.h $(CFLAGS) $(BIOS_CFLAGS) -c x86/bios/int10.c -o x86/bios/int10.o 535 $(E) " CC x86/bios/int15.o" 536 $(Q) $(CC) -include code16gcc.h $(CFLAGS) $(BIOS_CFLAGS) -c x86/bios/int15.c -o x86/bios/int15.o 537 $(E) " CC x86/bios/entry.o" 538 $(Q) $(CC) $(CFLAGS) $(BIOS_CFLAGS) -c x86/bios/entry.S -o x86/bios/entry.o 539 $(E) " LD " $@ 540 $(Q) $(LD) -T x86/bios/rom.ld.S -o x86/bios/bios.bin.elf x86/bios/memcpy.o x86/bios/entry.o x86/bios/e820.o x86/bios/int10.o x86/bios/int15.o 541 542x86/bios/bios.bin: x86/bios/bios.bin.elf 543 $(E) " OBJCOPY " $@ 544 $(Q) $(OBJCOPY) -O binary -j .text x86/bios/bios.bin.elf x86/bios/bios.bin 545 546x86/bios/bios-rom.o: x86/bios/bios-rom.S x86/bios/bios.bin x86/bios/bios-rom.h 547 $(E) " CC " $@ 548 $(Q) $(CC) -c $(CFLAGS) x86/bios/bios-rom.S -o x86/bios/bios-rom.o 549 550x86/bios/bios-rom.h: x86/bios/bios.bin.elf 551 $(E) " NM " $@ 552 $(Q) cd x86/bios && sh gen-offsets.sh > bios-rom.h && cd .. 553 554check: all 555 $(MAKE) -C tests 556 ./$(PROGRAM) run tests/pit/tick.bin 557 ./$(PROGRAM) run -d tests/boot/boot_test.iso -p "init=init" 558.PHONY: check 559 560install: all 561 $(E) " INSTALL" 562 $(Q) $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)' 563 $(Q) $(INSTALL) $(PROGRAM) '$(DESTDIR_SQ)$(bindir_SQ)' 564.PHONY: install 565 566clean: 567 $(E) " CLEAN" 568 $(Q) rm -f x86/bios/*.bin 569 $(Q) rm -f x86/bios/*.elf 570 $(Q) rm -f x86/bios/*.o 571 $(Q) rm -f x86/bios/bios-rom.h 572 $(Q) rm -f tests/boot/boot_test.iso 573 $(Q) rm -rf tests/boot/rootfs/ 574 $(Q) rm -f $(DEPS) $(STATIC_DEPS) $(OBJS) $(OTHEROBJS) $(OBJS_DYNOPT) $(STATIC_OBJS) $(PROGRAM) $(PROGRAM_ALIAS) $(PROGRAM)-static $(GUEST_INIT) $(GUEST_PRE_INIT) $(GUEST_OBJS) 575 $(Q) rm -f guest/guest_init.c guest/guest_pre_init.c 576 $(Q) rm -f cscope.* 577 $(Q) rm -f tags 578 $(Q) rm -f TAGS 579 $(Q) rm -f KVMTOOLS-VERSION-FILE 580.PHONY: clean 581 582KVM_DEV ?= /dev/kvm 583 584$(KVM_DEV): 585 $(E) " MKNOD " $@ 586 $(Q) mknod $@ char 10 232 587 588devices: $(KVM_DEV) 589.PHONY: devices 590 591TAGS: 592 $(E) " GEN" $@ 593 $(Q) $(RM) -f TAGS 594 $(Q) $(FIND) . -name '*.[hcS]' -print | xargs etags -a 595.PHONY: TAGS 596 597tags: 598 $(E) " GEN" $@ 599 $(Q) $(RM) -f tags 600 $(Q) $(FIND) . -name '*.[hcS]' -print | xargs ctags -a 601.PHONY: tags 602 603cscope: 604 $(E) " GEN" $@ 605 $(Q) $(FIND) . -name '*.[hcS]' -print > cscope.files 606 $(Q) $(CSCOPE) -bkqu 607.PHONY: cscope 608 609# 610# Escape redundant work on cleaning up 611ifneq ($(MAKECMDGOALS),clean) 612-include $(DEPS) 613-include $(STATIC_DEPS) 614 615KVMTOOLS-VERSION-FILE: 616 @$(SHELL_PATH) util/KVMTOOLS-VERSION-GEN $(OUTPUT) 617endif 618