github.com/kata-containers/runtime@v0.0.0-20210505125100-04f29832a923/Makefile (about) 1 # 2 # Copyright (c) 2018-2019 Intel Corporation 3 # 4 # SPDX-License-Identifier: Apache-2.0 5 # 6 7 distro := $(shell \ 8 for file in /etc/os-release /usr/lib/os-release; do \ 9 if [ -e $$file ]; then \ 10 grep ^ID= $$file|cut -d= -f2-|tr -d '"'; \ 11 break; \ 12 fi \ 13 done) 14 15 SKIP_GO_VERSION_CHECK= 16 include golang.mk 17 18 #Get ARCH. 19 ifneq (,$(golang_version_raw)) 20 GOARCH=$(shell go env GOARCH) 21 ifeq ($(ARCH),) 22 ARCH = $(GOARCH) 23 endif 24 else 25 ARCH = $(shell uname -m) 26 ifeq ($(ARCH),x86_64) 27 ARCH = amd64 28 endif 29 ifeq ($(ARCH),aarch64) 30 ARCH = arm64 31 endif 32 endif 33 34 ARCH_DIR = arch 35 ARCH_FILE_SUFFIX = -options.mk 36 ARCH_FILE = $(ARCH_DIR)/$(ARCH)$(ARCH_FILE_SUFFIX) 37 ARCH_FILES = $(wildcard arch/*$(ARCH_FILE_SUFFIX)) 38 ALL_ARCHES = $(patsubst $(ARCH_DIR)/%$(ARCH_FILE_SUFFIX),%,$(ARCH_FILES)) 39 40 # Load architecture-dependent settings 41 include $(ARCH_FILE) 42 43 PROJECT_TYPE = kata 44 PROJECT_NAME = Kata Containers 45 PROJECT_TAG = kata-containers 46 PROJECT_ORG = $(PROJECT_TAG) 47 PROJECT_URL = https://github.com/$(PROJECT_ORG) 48 PROJECT_BUG_URL = $(PROJECT_URL)/kata-containers/issues/new 49 50 # list of scripts to install 51 SCRIPTS := 52 53 # list of binaries to install 54 BINLIST := 55 BINLIBEXECLIST := 56 57 BIN_PREFIX = $(PROJECT_TYPE) 58 PROJECT_DIR = $(PROJECT_TAG) 59 IMAGENAME = $(PROJECT_TAG).img 60 INITRDNAME = $(PROJECT_TAG)-initrd.img 61 62 TARGET = $(BIN_PREFIX)-runtime 63 TARGET_OUTPUT = $(CURDIR)/$(TARGET) 64 BINLIST += $(TARGET) 65 66 NETMON_DIR = netmon 67 NETMON_TARGET = $(PROJECT_TYPE)-netmon 68 NETMON_TARGET_OUTPUT = $(CURDIR)/$(NETMON_TARGET) 69 BINLIBEXECLIST += $(NETMON_TARGET) 70 71 DESTDIR := / 72 73 ifeq ($(PREFIX),) 74 PREFIX := /usr 75 EXEC_PREFIX := $(PREFIX)/local 76 else 77 EXEC_PREFIX := $(PREFIX) 78 endif 79 # Prefix where depedencies are installed 80 PREFIXDEPS := $(PREFIX) 81 BINDIR := $(EXEC_PREFIX)/bin 82 QEMUBINDIR := $(PREFIXDEPS)/bin 83 CLHBINDIR := $(PREFIXDEPS)/bin 84 FCBINDIR := $(PREFIXDEPS)/bin 85 ACRNBINDIR := $(PREFIXDEPS)/bin 86 VIRTIOFSDBINDIR := $(PREFIXDEPS)/bin 87 SYSCONFDIR := /etc 88 LOCALSTATEDIR := /var 89 90 LIBEXECDIR := $(PREFIXDEPS)/libexec 91 SHAREDIR := $(PREFIX)/share 92 DEFAULTSDIR := $(SHAREDIR)/defaults 93 94 COLLECT_SCRIPT = data/kata-collect-data.sh 95 COLLECT_SCRIPT_SRC = $(COLLECT_SCRIPT).in 96 97 # @RUNTIME_NAME@ should be replaced with the target in generated files 98 RUNTIME_NAME = $(TARGET) 99 100 GENERATED_FILES += $(COLLECT_SCRIPT) 101 SCRIPTS += $(COLLECT_SCRIPT) 102 SCRIPTS_DIR := $(BINDIR) 103 104 BASH_COMPLETIONS := data/completions/bash/kata-runtime 105 BASH_COMPLETIONSDIR := $(SHAREDIR)/bash-completion/completions 106 107 PKGDATADIR := $(PREFIXDEPS)/share/$(PROJECT_DIR) 108 PKGLIBDIR := $(LOCALSTATEDIR)/lib/$(PROJECT_DIR) 109 PKGRUNDIR := $(LOCALSTATEDIR)/run/$(PROJECT_DIR) 110 PKGLIBEXECDIR := $(LIBEXECDIR)/$(PROJECT_DIR) 111 112 KERNELDIR := $(PKGDATADIR) 113 114 INITRDPATH := $(PKGDATADIR)/$(INITRDNAME) 115 IMAGEPATH := $(PKGDATADIR)/$(IMAGENAME) 116 FIRMWAREPATH := 117 118 # Name of default configuration file the runtime will use. 119 CONFIG_FILE = configuration.toml 120 121 HYPERVISOR_ACRN = acrn 122 HYPERVISOR_FC = firecracker 123 JAILER_FC = jailer 124 HYPERVISOR_QEMU = qemu 125 HYPERVISOR_CLH = cloud-hypervisor 126 HYPERVISOR_QEMU_VIRTIOFS = qemu-virtiofs 127 128 # Determines which hypervisor is specified in $(CONFIG_FILE). 129 DEFAULT_HYPERVISOR ?= $(HYPERVISOR_QEMU) 130 131 # List of hypervisors this build system can generate configuration for. 132 HYPERVISORS := $(HYPERVISOR_ACRN) $(HYPERVISOR_FC) $(HYPERVISOR_QEMU) $(HYPERVISOR_QEMU_VIRTIOFS) $(HYPERVISOR_CLH) 133 134 QEMUPATH := $(QEMUBINDIR)/$(QEMUCMD) 135 QEMUVALIDHYPERVISORPATHS := [\"$(QEMUPATH)\"] 136 137 QEMUVIRTIOFSPATH := $(QEMUBINDIR)/$(QEMUVIRTIOFSCMD) 138 QEMUVALIDVIRTIOFSPATHS := [\"$(QEMUVIRTIOFSPATH)\"] 139 140 CLHPATH := $(CLHBINDIR)/$(CLHCMD) 141 CLHVALIDHYPERVISORPATHS := [\"$(CLHBINDIR)/$(CLHCMD)\"] 142 143 FCPATH = $(FCBINDIR)/$(FCCMD) 144 FCVALIDHYPERVISORPATHS = [\"$(FCPATH)\"] 145 FCJAILERPATH = $(FCBINDIR)/$(FCJAILERCMD) 146 FCVALIDJAILERPATHS = [\"$(FCJAILERPATH)\"] 147 148 ACRNPATH := $(ACRNBINDIR)/$(ACRNCMD) 149 ACRNVALIDHYPERVISORPATHS := [\"$(ACRNPATH)\"] 150 ACRNCTLPATH := $(ACRNBINDIR)/$(ACRNCTLCMD) 151 ACRNVALIDCTLPATHS := [\"$(ACRNCTLPATH)\"] 152 153 SHIMCMD := $(BIN_PREFIX)-shim 154 SHIMPATH := $(PKGLIBEXECDIR)/$(SHIMCMD) 155 156 PROXYCMD := $(BIN_PREFIX)-proxy 157 PROXYPATH := $(PKGLIBEXECDIR)/$(PROXYCMD) 158 159 NETMONCMD := $(BIN_PREFIX)-netmon 160 NETMONPATH := $(PKGLIBEXECDIR)/$(NETMONCMD) 161 162 # Default number of vCPUs 163 DEFVCPUS := 1 164 # Default maximum number of vCPUs 165 DEFMAXVCPUS := 0 166 # Default memory size in MiB 167 DEFMEMSZ := 2048 168 # Default memory slots 169 # Cases to consider : 170 # - nvdimm rootfs image 171 # - preallocated memory 172 # - vm template memory 173 # - hugepage memory 174 DEFMEMSLOTS := 10 175 #Default number of bridges 176 DEFBRIDGES := 1 177 DEFENABLEANNOTATIONS := [\".*\"] 178 DEFDISABLEGUESTSECCOMP := true 179 #Default experimental features enabled 180 DEFAULTEXPFEATURES := [] 181 182 #Default entropy source 183 DEFENTROPYSOURCE := /dev/urandom 184 185 DEFDISABLEBLOCK := false 186 DEFSHAREDFS := virtio-9p 187 DEFSHAREDFS_QEMU_VIRTIOFS := virtio-fs 188 DEFVIRTIOFSDAEMON := $(VIRTIOFSDBINDIR)/virtiofsd 189 DEFVALIDVIRTIOFSDAEMONPATHS := [\"$(DEFVIRTIOFSDAEMON)\"] 190 # Default DAX mapping cache size in MiB 191 #if value is 0, DAX is not enabled 192 DEFVIRTIOFSCACHESIZE := 0 193 DEFVIRTIOFSCACHE ?= auto 194 # Format example: 195 # [\"-o\", \"arg1=xxx,arg2\", \"-o\", \"hello world\", \"--arg3=yyy\"] 196 # 197 # see `virtiofsd -h` for possible options. 198 # Make sure you quote args. 199 DEFVIRTIOFSEXTRAARGS ?= [] 200 DEFENABLEIOTHREADS := false 201 DEFENABLEMEMPREALLOC := false 202 DEFENABLEHUGEPAGES := false 203 DEFENABLEVHOSTUSERSTORE := false 204 DEFVHOSTUSERSTOREPATH := $(PKGRUNDIR)/vhost-user 205 DEFVALIDVHOSTUSERSTOREPATHS := [\"$(DEFVHOSTUSERSTOREPATH)\"] 206 DEFFILEMEMBACKEND := "" 207 DEFVALIDFILEMEMBACKENDS := [\"$(DEFFILEMEMBACKEND)\"] 208 DEFENABLESWAP := false 209 DEFENABLEDEBUG := false 210 DEFDISABLENESTINGCHECKS := false 211 DEFMSIZE9P := 8192 212 DEFHOTPLUGVFIOONROOTBUS := false 213 DEFPCIEROOTPORT := 0 214 215 # Default cgroup model 216 DEFSANDBOXCGROUPONLY ?= false 217 218 # Features 219 FEATURE_SELINUX ?= check 220 221 SED = sed 222 223 CLI_DIR = cli 224 SHIMV2 = containerd-shim-kata-v2 225 SHIMV2_OUTPUT = $(CURDIR)/$(SHIMV2) 226 SHIMV2_DIR = $(CLI_DIR)/$(SHIMV2) 227 228 SOURCES := $(shell find . 2>&1 | grep -E '.*\.(c|h|go)$$') 229 VERSION := ${shell cat ./VERSION} 230 231 # List of configuration files to build and install 232 CONFIGS = 233 CONFIG_PATHS = 234 SYSCONFIG_PATHS = 235 236 # List of hypervisors known for the current architecture 237 KNOWN_HYPERVISORS = 238 239 ifneq (,$(QEMUCMD)) 240 KNOWN_HYPERVISORS += $(HYPERVISOR_QEMU) 241 242 CONFIG_FILE_QEMU = configuration-qemu.toml 243 CONFIG_QEMU = $(CLI_DIR)/config/$(CONFIG_FILE_QEMU) 244 CONFIG_QEMU_IN = $(CONFIG_QEMU).in 245 246 CONFIG_PATH_QEMU = $(abspath $(CONFDIR)/$(CONFIG_FILE_QEMU)) 247 CONFIG_PATHS += $(CONFIG_PATH_QEMU) 248 249 SYSCONFIG_QEMU = $(abspath $(SYSCONFDIR)/$(CONFIG_FILE_QEMU)) 250 SYSCONFIG_PATHS += $(SYSCONFIG_QEMU) 251 252 CONFIGS += $(CONFIG_QEMU) 253 254 # qemu-specific options (all should be suffixed by "_QEMU") 255 DEFBLOCKSTORAGEDRIVER_QEMU := virtio-scsi 256 DEFNETWORKMODEL_QEMU := tcfilter 257 KERNELNAME = $(call MAKE_KERNEL_NAME,$(KERNELTYPE)) 258 KERNELPATH = $(KERNELDIR)/$(KERNELNAME) 259 endif 260 261 ifneq (,$(QEMUVIRTIOFSCMD)) 262 KNOWN_HYPERVISORS += $(HYPERVISOR_QEMU_VIRTIOFS) 263 264 CONFIG_FILE_QEMU_VIRTIOFS = configuration-qemu-virtiofs.toml 265 CONFIG_QEMU_VIRTIOFS = $(CLI_DIR)/config/$(CONFIG_FILE_QEMU_VIRTIOFS) 266 CONFIG_QEMU_VIRTIOFS_IN = $(CONFIG_QEMU_VIRTIOFS).in 267 268 CONFIG_PATH_QEMU_VIRTIOFS = $(abspath $(CONFDIR)/$(CONFIG_FILE_QEMU_VIRTIOFS)) 269 CONFIG_PATHS += $(CONFIG_PATH_QEMU_VIRTIOFS) 270 271 SYSCONFIG_QEMU_VIRTIOFS = $(abspath $(SYSCONFDIR)/$(CONFIG_FILE_QEMU_VIRTIOFS)) 272 SYSCONFIG_PATHS += $(SYSCONFIG_QEMU_VIRTIOFS) 273 274 CONFIGS += $(CONFIG_QEMU_VIRTIOFS) 275 276 # qemu-specific options (all should be suffixed by "_QEMU") 277 DEFBLOCKSTORAGEDRIVER_QEMU_VIRTIOFS := virtio-fs 278 DEFNETWORKMODEL_QEMU := tcfilter 279 KERNELNAMEVIRTIOFS = $(call MAKE_KERNEL_NAME,$(KERNELTYPE)) 280 KERNELVIRTIOFSPATH = $(KERNELDIR)/$(KERNELNAMEVIRTIOFS) 281 endif 282 283 ifneq (,$(CLHCMD)) 284 KNOWN_HYPERVISORS += $(HYPERVISOR_CLH) 285 286 CONFIG_FILE_CLH = configuration-clh.toml 287 CONFIG_CLH = $(CLI_DIR)/config/$(CONFIG_FILE_CLH) 288 CONFIG_CLH_IN = $(CONFIG_CLH).in 289 290 CONFIG_PATH_CLH = $(abspath $(CONFDIR)/$(CONFIG_FILE_CLH)) 291 CONFIG_PATHS += $(CONFIG_PATH_CLH) 292 293 SYSCONFIG_CLH = $(abspath $(SYSCONFDIR)/$(CONFIG_FILE_CLH)) 294 SYSCONFIG_PATHS += $(SYSCONFIG_CLH) 295 296 CONFIGS += $(CONFIG_CLH) 297 298 # CLH-specific options (all should be suffixed by "_CLH") 299 # currently, huge pages are required for virtiofsd support 300 DEFENABLEHUGEPAGES_CLH := true 301 DEFNETWORKMODEL_CLH := tcfilter 302 KERNELTYPE_CLH = uncompressed 303 KERNEL_NAME_CLH = $(call MAKE_KERNEL_NAME,$(KERNELTYPE_CLH)) 304 KERNELPATH_CLH = $(KERNELDIR)/$(KERNEL_NAME_CLH) 305 endif 306 307 ifneq (,$(FCCMD)) 308 KNOWN_HYPERVISORS += $(HYPERVISOR_FC) 309 310 CONFIG_FILE_FC = configuration-fc.toml 311 CONFIG_FC = $(CLI_DIR)/config/$(CONFIG_FILE_FC) 312 CONFIG_FC_IN = $(CONFIG_FC).in 313 314 CONFIG_PATH_FC = $(abspath $(CONFDIR)/$(CONFIG_FILE_FC)) 315 CONFIG_PATHS += $(CONFIG_PATH_FC) 316 317 SYSCONFIG_FC = $(abspath $(SYSCONFDIR)/$(CONFIG_FILE_FC)) 318 SYSCONFIG_PATHS += $(SYSCONFIG_FC) 319 320 CONFIGS += $(CONFIG_FC) 321 322 # firecracker-specific options (all should be suffixed by "_FC") 323 DEFBLOCKSTORAGEDRIVER_FC := virtio-mmio 324 DEFNETWORKMODEL_FC := tcfilter 325 KERNELTYPE_FC = uncompressed 326 KERNEL_NAME_FC = $(call MAKE_KERNEL_NAME,$(KERNELTYPE_FC)) 327 KERNELPATH_FC = $(KERNELDIR)/$(KERNEL_NAME_FC) 328 endif 329 330 ifneq (,$(ACRNCMD)) 331 KNOWN_HYPERVISORS += $(HYPERVISOR_ACRN) 332 333 CONFIG_FILE_ACRN = configuration-acrn.toml 334 CONFIG_ACRN = $(CLI_DIR)/config/$(CONFIG_FILE_ACRN) 335 CONFIG_ACRN_IN = $(CONFIG_ACRN).in 336 337 CONFIG_PATH_ACRN = $(abspath $(CONFDIR)/$(CONFIG_FILE_ACRN)) 338 CONFIG_PATHS += $(CONFIG_PATH_ACRN) 339 340 SYSCONFIG_ACRN = $(abspath $(SYSCONFDIR)/$(CONFIG_FILE_ACRN)) 341 SYSCONFIG_PATHS += $(SYSCONFIG_ACRN) 342 343 CONFIGS += $(CONFIG_ACRN) 344 345 # acrn-specific options (all should be suffixed by "_ACRN") 346 DEFMAXVCPUS_ACRN := 1 347 DEFBLOCKSTORAGEDRIVER_ACRN := virtio-blk 348 DEFNETWORKMODEL_ACRN := macvtap 349 KERNEL_NAME_ACRN = $(call MAKE_KERNEL_NAME,$(KERNELTYPE)) 350 KERNELPATH_ACRN = $(KERNELDIR)/$(KERNEL_NAME_ACRN) 351 endif 352 353 ifeq (,$(KNOWN_HYPERVISORS)) 354 $(error "ERROR: No hypervisors known for architecture $(ARCH) (looked for: $(HYPERVISORS))") 355 endif 356 357 ifeq (,$(findstring $(DEFAULT_HYPERVISOR),$(HYPERVISORS))) 358 $(error "ERROR: Invalid default hypervisor: '$(DEFAULT_HYPERVISOR)'") 359 endif 360 361 ifeq (,$(findstring $(DEFAULT_HYPERVISOR),$(KNOWN_HYPERVISORS))) 362 $(error "ERROR: Default hypervisor '$(DEFAULT_HYPERVISOR)' not known for architecture $(ARCH)") 363 endif 364 365 ifeq ($(DEFAULT_HYPERVISOR),$(HYPERVISOR_QEMU)) 366 DEFAULT_HYPERVISOR_CONFIG = $(CONFIG_FILE_QEMU) 367 endif 368 369 ifeq ($(DEFAULT_HYPERVISOR),$(HYPERVISOR_QEMU_VIRTIOFS)) 370 DEFAULT_HYPERVISOR_CONFIG = $(CONFIG_FILE_QEMU_VIRTIOFS) 371 endif 372 373 ifeq ($(DEFAULT_HYPERVISOR),$(HYPERVISOR_FC)) 374 DEFAULT_HYPERVISOR_CONFIG = $(CONFIG_FILE_FC) 375 endif 376 377 ifeq ($(DEFAULT_HYPERVISOR),$(HYPERVISOR_ACRN)) 378 DEFAULT_HYPERVISOR_CONFIG = $(CONFIG_FILE_ACRN) 379 endif 380 381 ifeq ($(DEFAULT_HYPERVISOR),$(HYPERVISOR_CLH)) 382 DEFAULT_HYPERVISOR_CONFIG = $(CONFIG_FILE_CLH) 383 endif 384 385 CONFDIR := $(DEFAULTSDIR)/$(PROJECT_DIR) 386 SYSCONFDIR := $(SYSCONFDIR)/$(PROJECT_DIR) 387 388 # Main configuration file location for stateless systems 389 CONFIG_PATH := $(abspath $(CONFDIR)/$(CONFIG_FILE)) 390 391 # Secondary configuration file location. Note that this takes precedence 392 # over CONFIG_PATH. 393 SYSCONFIG := $(abspath $(SYSCONFDIR)/$(CONFIG_FILE)) 394 395 SHAREDIR := $(SHAREDIR) 396 397 # list of variables the user may wish to override 398 USER_VARS += ARCH 399 USER_VARS += BINDIR 400 USER_VARS += CONFIG_ACRN_IN 401 USER_VARS += CONFIG_CLH_IN 402 USER_VARS += CONFIG_FC_IN 403 USER_VARS += CONFIG_PATH 404 USER_VARS += CONFIG_QEMU_IN 405 USER_VARS += CONFIG_QEMU_VIRTIOFS_IN 406 USER_VARS += DESTDIR 407 USER_VARS += DEFAULT_HYPERVISOR 408 USER_VARS += DEFENABLEMSWAP 409 USER_VARS += ACRNCMD 410 USER_VARS += ACRNCTLCMD 411 USER_VARS += ACRNPATH 412 USER_VARS += ACRNVALIDHYPERVISORPATHS 413 USER_VARS += ACRNCTLPATH 414 USER_VARS += ACRNVALIDCTLPATHS 415 USER_VARS += CLHPATH 416 USER_VARS += CLHVALIDHYPERVISORPATHS 417 USER_VARS += FIRMWAREPATH_CLH 418 USER_VARS += FCCMD 419 USER_VARS += FCPATH 420 USER_VARS += FCVALIDHYPERVISORPATHS 421 USER_VARS += FCJAILERPATH 422 USER_VARS += FCVALIDJAILERPATHS 423 USER_VARS += SYSCONFIG 424 USER_VARS += IMAGENAME 425 USER_VARS += IMAGEPATH 426 USER_VARS += INITRDNAME 427 USER_VARS += INITRDPATH 428 USER_VARS += MACHINETYPE 429 USER_VARS += KERNELDIR 430 USER_VARS += KERNELTYPE 431 USER_VARS += KERNELTYPE_FC 432 USER_VARS += KERNELTYPE_ACRN 433 USER_VARS += KERNELTYPE_CLH 434 USER_VARS += KERNELPATH_ACRN 435 USER_VARS += KERNELPATH 436 USER_VARS += KERNELPATH_CLH 437 USER_VARS += KERNELPATH_FC 438 USER_VARS += KERNELVIRTIOFSPATH 439 USER_VARS += FIRMWAREPATH 440 USER_VARS += MACHINEACCELERATORS 441 USER_VARS += CPUFEATURES 442 USER_VARS += DEFMACHINETYPE_CLH 443 USER_VARS += KERNELPARAMS 444 USER_VARS += LIBEXECDIR 445 USER_VARS += LOCALSTATEDIR 446 USER_VARS += PKGDATADIR 447 USER_VARS += PKGLIBDIR 448 USER_VARS += PKGLIBEXECDIR 449 USER_VARS += PKGRUNDIR 450 USER_VARS += PREFIX 451 USER_VARS += PROJECT_BUG_URL 452 USER_VARS += PROJECT_NAME 453 USER_VARS += PROJECT_ORG 454 USER_VARS += PROJECT_PREFIX 455 USER_VARS += PROJECT_TAG 456 USER_VARS += PROJECT_TYPE 457 USER_VARS += PROJECT_URL 458 USER_VARS += PROXYPATH 459 USER_VARS += NETMONPATH 460 USER_VARS += QEMUBINDIR 461 USER_VARS += QEMUCMD 462 USER_VARS += QEMUPATH 463 USER_VARS += QEMUVALIDHYPERVISORPATHS 464 USER_VARS += QEMUVIRTIOFSCMD 465 USER_VARS += QEMUVIRTIOFSPATH 466 USER_VARS += QEMUVALIDVIRTIOFSPATHS 467 USER_VARS += RUNTIME_NAME 468 USER_VARS += SHAREDIR 469 USER_VARS += SHIMPATH 470 USER_VARS += SYSCONFDIR 471 USER_VARS += DEFVCPUS 472 USER_VARS += DEFMAXVCPUS 473 USER_VARS += DEFMAXVCPUS_ACRN 474 USER_VARS += DEFMEMSZ 475 USER_VARS += DEFMEMSLOTS 476 USER_VARS += DEFBRIDGES 477 USER_VARS += DEFNETWORKMODEL_ACRN 478 USER_VARS += DEFNETWORKMODEL_CLH 479 USER_VARS += DEFNETWORKMODEL_FC 480 USER_VARS += DEFNETWORKMODEL_QEMU 481 USER_VARS += DEFDISABLEGUESTSECCOMP 482 USER_VARS += DEFAULTEXPFEATURES 483 USER_VARS += DEFDISABLEBLOCK 484 USER_VARS += DEFBLOCKSTORAGEDRIVER_ACRN 485 USER_VARS += DEFBLOCKSTORAGEDRIVER_FC 486 USER_VARS += DEFBLOCKSTORAGEDRIVER_QEMU 487 USER_VARS += DEFBLOCKSTORAGEDRIVER_QEMU_VIRTIOFS 488 USER_VARS += DEFSHAREDFS 489 USER_VARS += DEFSHAREDFS_QEMU_VIRTIOFS 490 USER_VARS += DEFVIRTIOFSDAEMON 491 USER_VARS += DEFVALIDVIRTIOFSDAEMONPATHS 492 USER_VARS += DEFVIRTIOFSCACHESIZE 493 USER_VARS += DEFVIRTIOFSCACHE 494 USER_VARS += DEFVIRTIOFSEXTRAARGS 495 USER_VARS += DEFENABLEANNOTATIONS 496 USER_VARS += DEFENABLEIOTHREADS 497 USER_VARS += DEFENABLEMEMPREALLOC 498 USER_VARS += DEFENABLEHUGEPAGES 499 USER_VARS += DEFENABLEVHOSTUSERSTORE 500 USER_VARS += DEFVHOSTUSERSTOREPATH 501 USER_VARS += DEFVALIDVHOSTUSERSTOREPATHS 502 USER_VARS += DEFFILEMEMBACKEND 503 USER_VARS += DEFVALIDFILEMEMBACKENDS 504 USER_VARS += DEFENABLESWAP 505 USER_VARS += DEFENABLEDEBUG 506 USER_VARS += DEFDISABLENESTINGCHECKS 507 USER_VARS += DEFMSIZE9P 508 USER_VARS += DEFHOTPLUGVFIOONROOTBUS 509 USER_VARS += DEFPCIEROOTPORT 510 USER_VARS += DEFENTROPYSOURCE 511 USER_VARS += DEFSANDBOXCGROUPONLY 512 USER_VARS += FEATURE_SELINUX 513 USER_VARS += BUILDFLAGS 514 515 516 V = @ 517 Q = $(V:1=) 518 QUIET_BUILD = $(Q:@=@echo ' BUILD '$@;) 519 QUIET_CHECK = $(Q:@=@echo ' CHECK '$@;) 520 QUIET_CLEAN = $(Q:@=@echo ' CLEAN '$@;) 521 QUIET_GENERATE = $(Q:@=@echo ' GENERATE '$@;) 522 QUIET_INST = $(Q:@=@echo ' INSTALL '$@;) 523 QUIET_TEST = $(Q:@=@echo ' TEST '$@;) 524 525 BUILDTAGS := 526 527 ifneq ($(FEATURE_SELINUX),no) 528 SELINUXTAG := $(shell ./hack/selinux_tag.sh) 529 530 ifneq ($(SELINUXTAG),) 531 override FEATURE_SELINUX = yes 532 BUILDTAGS += --tags "$(SELINUXTAG)" 533 else 534 ifeq ($(FEATURE_SELINUX),yes) 535 $(error "ERROR: SELinux support requested, but libselinux is not available") 536 endif 537 538 override FEATURE_SELINUX = no 539 endif 540 endif 541 542 # go build common flags 543 BUILDFLAGS := -buildmode=pie ${BUILDTAGS} 544 545 # whether stipping the binary 546 ifeq ($(STRIP),yes) 547 KATA_LDFLAGS := -ldflags "-w -s" 548 endif 549 550 # Return non-empty string if specified directory exists 551 define DIR_EXISTS 552 $(shell test -d $(1) && echo "$(1)") 553 endef 554 555 # $1: name of architecture to display 556 define SHOW_ARCH 557 $(shell printf "\\t%s%s\\\n" "$(1)" $(if $(filter $(ARCH),$(1))," (default)","")) 558 endef 559 560 all: runtime containerd-shim-v2 netmon 561 562 # Targets that depend on .git-commit can use $(shell cat .git-commit) to get a 563 # git revision string. They will only be rebuilt if the revision string 564 # actually changes. 565 .PHONY: .git-commit.tmp 566 .git-commit: .git-commit.tmp 567 @cmp $< $@ >/dev/null 2>&1 || cp $< $@ 568 .git-commit.tmp: 569 @echo -n "$$(git rev-parse HEAD 2>/dev/null)" >$@ 570 @test -n "$$(git status --porcelain --untracked-files=no)" && echo -n "-dirty" >>$@ || true 571 572 containerd-shim-v2: $(SHIMV2_OUTPUT) 573 574 netmon: $(NETMON_TARGET_OUTPUT) 575 576 $(NETMON_TARGET_OUTPUT): $(SOURCES) VERSION 577 $(QUIET_BUILD)(cd $(NETMON_DIR) && go build $(BUILDFLAGS) -o $@ -ldflags "-X main.version=$(VERSION)" $(KATA_LDFLAGS)) 578 579 runtime: $(TARGET_OUTPUT) $(CONFIGS) 580 .DEFAULT: default 581 582 build: default 583 584 #Install an executable file 585 # params: 586 # $1 : file to install 587 # $2 : directory path where file will be installed 588 define INSTALL_EXEC 589 install -D $1 $(DESTDIR)$2/$(notdir $1); 590 endef 591 592 # Install a configuration file 593 # params: 594 # $1 : file to install 595 # $2 : directory path where file will be installed 596 define INSTALL_CONFIG 597 install --mode 0644 -D $1 $(DESTDIR)$2/$(notdir $1); 598 endef 599 600 # Returns the name of the kernel file to use based on the provided KERNELTYPE. 601 # $1 : KERNELTYPE (compressed or uncompressed) 602 define MAKE_KERNEL_NAME 603 $(if $(findstring uncompressed,$1),vmlinux.container,vmlinuz.container) 604 endef 605 606 define MAKE_KERNEL_VIRTIOFS_NAME 607 $(if $(findstring uncompressed,$1),vmlinux-virtiofs.container,vmlinuz-virtiofs.container) 608 endef 609 610 GENERATED_CONFIG = $(abspath $(CLI_DIR)/config-generated.go) 611 612 GENERATED_FILES += $(GENERATED_CONFIG) 613 GENERATED_FILES += pkg/katautils/config-settings.go 614 615 $(TARGET_OUTPUT): $(SOURCES) $(GENERATED_FILES) $(MAKEFILE_LIST) | show-summary 616 $(QUIET_BUILD)(cd $(CLI_DIR) && go build $(KATA_LDFLAGS) $(BUILDFLAGS) -o $@ .) 617 618 $(SHIMV2_OUTPUT): $(SOURCES) $(GENERATED_FILES) $(MAKEFILE_LIST) 619 $(QUIET_BUILD)(cd $(SHIMV2_DIR)/ && ln -fs $(GENERATED_CONFIG)) 620 $(QUIET_BUILD)(cd $(SHIMV2_DIR)/ && go build $(KATA_LDFLAGS) $(BUILDTAGS) -i -o $@ .) 621 622 .PHONY: \ 623 check \ 624 check-go-static \ 625 check-go-test \ 626 coverage \ 627 default \ 628 install \ 629 show-header \ 630 show-summary \ 631 show-variables 632 633 $(TARGET).coverage: $(SOURCES) $(GENERATED_FILES) $(MAKEFILE_LIST) 634 $(QUIET_TEST)go test -o $@ -covermode count 635 636 GENERATED_FILES += $(CONFIGS) 637 GENERATED_VARS = \ 638 VERSION \ 639 CONFIG_ACRN_IN \ 640 CONFIG_QEMU_IN \ 641 CONFIG_QEMU_VIRTIOFS_IN \ 642 CONFIG_CLH_IN \ 643 CONFIG_FC_IN \ 644 $(USER_VARS) 645 646 $(GENERATED_FILES): %: %.in $(MAKEFILE_LIST) VERSION .git-commit 647 $(QUIET_GENERATE)$(SED) \ 648 -e "s|@COMMIT@|$(shell cat .git-commit)|g" \ 649 $(foreach v,$(GENERATED_VARS),-e "s|@$v@|$($v)|g") \ 650 $< > $@ 651 652 generate-config: $(CONFIGS) 653 654 check: check-go-static 655 656 test: go-test 657 658 go-test: $(GENERATED_FILES) 659 $(QUIET_TEST).ci/go-test.sh 660 661 check-go-static: 662 $(QUIET_CHECK).ci/static-checks.sh 663 $(QUIET_CHECK).ci/go-no-os-exit.sh ./cli 664 $(QUIET_CHECK).ci/go-no-os-exit.sh ./virtcontainers 665 666 coverage: 667 $(QUIET_TEST).ci/go-test.sh html-coverage 668 669 install: default install-runtime install-containerd-shim-v2 install-netmon 670 671 install-bin: $(BINLIST) 672 $(QUIET_INST)$(foreach f,$(BINLIST),$(call INSTALL_EXEC,$f,$(BINDIR))) 673 674 install-runtime: runtime install-scripts install-completions install-configs install-bin 675 676 install-netmon: install-bin-libexec 677 678 install-containerd-shim-v2: $(SHIMV2) 679 $(QUIET_INST)$(call INSTALL_EXEC,$<,$(BINDIR)) 680 681 install-bin-libexec: $(BINLIBEXECLIST) 682 $(QUIET_INST)$(foreach f,$(BINLIBEXECLIST),$(call INSTALL_EXEC,$f,$(PKGLIBEXECDIR))) 683 684 install-configs: $(CONFIGS) 685 $(QUIET_INST)$(foreach f,$(CONFIGS),$(call INSTALL_CONFIG,$f,$(dir $(CONFIG_PATH)))) 686 $(QUIET_INST)ln -sf $(DEFAULT_HYPERVISOR_CONFIG) $(DESTDIR)/$(CONFIG_PATH) 687 688 install-scripts: $(SCRIPTS) 689 $(QUIET_INST)$(foreach f,$(SCRIPTS),$(call INSTALL_EXEC,$f,$(SCRIPTS_DIR))) 690 691 install-completions: 692 $(QUIET_INST)install --mode 0644 -D $(BASH_COMPLETIONS) $(DESTDIR)/$(BASH_COMPLETIONSDIR)/$(notdir $(BASH_COMPLETIONS)); 693 694 clean: 695 $(QUIET_CLEAN)rm -f \ 696 $(CONFIGS) \ 697 $(GENERATED_FILES) \ 698 $(NETMON_TARGET) \ 699 $(SHIMV2) \ 700 $(SHIMV2_DIR)/$(notdir $(GENERATED_CONFIG)) \ 701 $(TARGET) \ 702 .git-commit .git-commit.tmp 703 704 show-usage: show-header 705 @printf "• Overview:\n" 706 @printf "\n" 707 @printf "\tTo build $(TARGET), just run, \"make\".\n" 708 @printf "\n" 709 @printf "\tFor a verbose build, run \"make V=1\".\n" 710 @printf "\n" 711 @printf "• Additional targets:\n" 712 @printf "\n" 713 @printf "\tbuild : standard build (build everything).\n" 714 @printf "\tcheck : run tests.\n" 715 @printf "\tclean : remove built files.\n" 716 @printf "\tcontainerd-shim-v2 : only build containerd shim v2.\n" 717 @printf "\tcoverage : run coverage tests.\n" 718 @printf "\tdefault : same as 'make build' (or just 'make').\n" 719 @printf "\tgenerate-config : create configuration file.\n" 720 @printf "\tinstall : install everything.\n" 721 @printf "\tinstall-containerd-shim-v2 : only install containerd shim v2 files.\n" 722 @printf "\tinstall-netmon : only install netmon files.\n" 723 @printf "\tinstall-runtime : only install runtime files.\n" 724 @printf "\tnetmon : only build netmon.\n" 725 @printf "\truntime : only build runtime.\n" 726 @printf "\tshow-arches : show supported architectures (ARCH variable values).\n" 727 @printf "\tshow-summary : show install locations.\n" 728 @printf "\n" 729 730 handle_help: show-usage show-summary show-variables show-footer 731 732 usage: handle_help 733 help: handle_help 734 735 show-variables: 736 @printf "• Variables affecting the build:\n\n" 737 @printf \ 738 "$(foreach v,$(sort $(USER_VARS)),$(shell printf "\\t$(v)='$($(v))'\\\n"))" 739 @printf "\n" 740 741 show-header: .git-commit 742 @printf "%s - version %s (commit %s)\n\n" $(TARGET) $(VERSION) $(shell cat .git-commit) 743 744 show-arches: show-header 745 @printf "Supported architectures (possible values for ARCH variable):\n\n" 746 @printf \ 747 "$(foreach v,$(ALL_ARCHES),$(call SHOW_ARCH,$(v)))\n" 748 749 show-footer: 750 @printf "• Project:\n" 751 @printf "\tHome: $(PROJECT_URL)\n" 752 @printf "\tBugs: $(PROJECT_BUG_URL)\n\n" 753 754 show-summary: show-header 755 ifneq (,$(golang_version_raw)) 756 @printf "• architecture:\n" 757 @printf "\tHost: $(HOST_ARCH)\n" 758 @printf "\tgolang: $(GOARCH)\n" 759 @printf "\tBuild: $(ARCH)\n" 760 @printf "\n" 761 @printf "• golang:\n" 762 @printf "\t" 763 @go version 764 else 765 @printf "• No GO command or GOPATH not set:\n" 766 @printf "\tCan only install prebuilt binaries\n" 767 endif 768 @printf "\n" 769 @printf "• hypervisors:\n" 770 @printf "\tKnown: $(sort $(HYPERVISORS))\n" 771 @printf "\tAvailable for this architecture: $(sort $(KNOWN_HYPERVISORS))\n" 772 @printf "\n" 773 @printf "• Features:\n" 774 @printf "\tSELinux (FEATURE_SELINUX): $(FEATURE_SELINUX)\n" 775 @printf "\n" 776 @printf "• Summary:\n" 777 @printf "\n" 778 @printf "\tdestination install path (DESTDIR) : %s\n" $(abspath $(DESTDIR)) 779 @printf "\tbinary installation path (BINDIR) : %s\n" $(abspath $(BINDIR)) 780 @printf "\tbinaries to install :\n" 781 @printf \ 782 "$(foreach b,$(sort $(BINLIST)),$(shell printf "\\t - $(shell readlink -m $(DESTDIR)/$(BINDIR)/$(b))\\\n"))" 783 @printf \ 784 "$(foreach b,$(sort $(SHIMV2)),$(shell printf "\\t - $(shell readlink -m $(DESTDIR)/$(BINDIR)/$(b))\\\n"))" 785 @printf \ 786 "$(foreach b,$(sort $(BINLIBEXECLIST)),$(shell printf "\\t - $(shell readlink -m $(DESTDIR)/$(PKGLIBEXECDIR)/$(b))\\\n"))" 787 @printf \ 788 "$(foreach s,$(sort $(SCRIPTS)),$(shell printf "\\t - $(shell readlink -m $(DESTDIR)/$(BINDIR)/$(s))\\\n"))" 789 @printf "\tconfigs to install (CONFIGS) :\n" 790 @printf \ 791 "$(foreach c,$(sort $(CONFIGS)),$(shell printf "\\t - $(c)\\\n"))" 792 @printf "\tinstall paths (CONFIG_PATHS) :\n" 793 @printf \ 794 "$(foreach c,$(sort $(CONFIG_PATHS)),$(shell printf "\\t - $(c)\\\n"))" 795 @printf "\talternate config paths (SYSCONFIG_PATHS) : %s\n" 796 @printf \ 797 "$(foreach c,$(sort $(SYSCONFIG_PATHS)),$(shell printf "\\t - $(c)\\\n"))" 798 799 @printf "\tdefault install path for $(DEFAULT_HYPERVISOR) (CONFIG_PATH) : %s\n" $(abspath $(CONFIG_PATH)) 800 @printf "\tdefault alternate config path (SYSCONFIG) : %s\n" $(abspath $(SYSCONFIG)) 801 ifneq (,$(findstring $(HYPERVISOR_QEMU),$(KNOWN_HYPERVISORS))) 802 @printf "\t$(HYPERVISOR_QEMU) hypervisor path (QEMUPATH) : %s\n" $(abspath $(QEMUPATH)) 803 endif 804 ifneq (,$(findstring $(HYPERVISOR_QEMU_VIRTIOFS),$(KNOWN_HYPERVISORS))) 805 @printf "\t$(HYPERVISOR_QEMU_VIRTIOFS) hypervisor path (QEMUVIRTIOFSPATH) : %s\n" $(abspath $(QEMUVIRTIOFSPATH)) 806 endif 807 ifneq (,$(findstring $(HYPERVISOR_CLH),$(KNOWN_HYPERVISORS))) 808 @printf "\t$(HYPERVISOR_CLH) hypervisor path (CLHPATH) : %s\n" $(abspath $(CLHPATH)) 809 endif 810 ifneq (,$(findstring $(HYPERVISOR_FC),$(KNOWN_HYPERVISORS))) 811 @printf "\t$(HYPERVISOR_FC) hypervisor path (FCPATH) : %s\n" $(abspath $(FCPATH)) 812 endif 813 ifneq (,$(findstring $(HYPERVISOR_ACRN),$(KNOWN_HYPERVISORS))) 814 @printf "\t$(HYPERVISOR_ACRN) hypervisor path (ACRNPATH) : %s\n" $(abspath $(ACRNPATH)) 815 endif 816 @printf "\tassets path (PKGDATADIR) : %s\n" $(abspath $(PKGDATADIR)) 817 @printf "\tproxy+shim path (PKGLIBEXECDIR) : %s\n" $(abspath $(PKGLIBEXECDIR)) 818 @printf "\n"