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